spec/gitlab/qa/component/selenoid_spec.rb (89 lines of code) (raw):
# frozen_string_literal: true
module Gitlab
module QA
describe Component::Selenoid do
describe '#start' do
subject(:selenoid) { described_class.new }
let(:docker_engine) { spy('docker engine') }
let(:docker_command) { spy('docker command') }
let(:selenoid_browser_version) { '111.0' }
let(:browser) { 'chrome' }
let(:video_recorder_image) { 'custom-recorder-image' }
let(:video_recorder_version) { 'recorder-version' }
let(:selenoid_browser_image) { 'browser-image' }
let(:mobile_layout) { false }
let(:record_video) { true }
let(:selenoid_dir) { 'selenoid/dir' }
let(:fixtures_dir) { File.expand_path('../../../../lib/gitlab/qa/component', __dir__) }
before do
stub_const('Gitlab::QA::Docker::Engine', docker_engine)
stub_const('Gitlab::QA::Docker::Command', docker_command)
selenoid.network = Runtime::Env.docker_network
allow(Gitlab::QA::Runtime::Env).to receive_messages(
video_recorder_image: video_recorder_image,
video_recorder_version: video_recorder_version,
selenoid_browser_image: selenoid_browser_image,
selenoid_browser_version: selenoid_browser_version,
browser: browser, mobile_layout?: mobile_layout,
record_video: record_video,
selenoid_directory: selenoid_dir
)
allow(selenoid).to receive(:grid_healthy?).and_return(true)
allow(docker_engine).to receive(:run).and_yield(docker_command)
end
it 'pulls selenoid video-recorder image' do
selenoid.start
expect(docker_engine).to have_received(:pull).with(image: video_recorder_image, tag: video_recorder_version)
end
it 'pulls selenoid browser image' do
selenoid.start
expect(docker_engine).to have_received(:pull).with(
image: selenoid_browser_image, tag: selenoid_browser_version)
end
it 'runs selenoid container' do
selenoid.start
expect(docker_engine).to have_received(:run).with({ args:
["-video-recorder-image",
video_recorder_image,
"-container-network",
selenoid.network,
"-timeout",
"10m0s"], image: "aerokube/selenoid", tag: "latest-release" })
end
it 'sets name' do
selenoid.start
expect(docker_command).to have_received(:<<).with("--name #{selenoid.name}")
end
it 'sets network' do
selenoid.start
expect(docker_command).to have_received(:<<).with("--net #{selenoid.network}")
end
it 'sets hostname' do
selenoid.start
expect(docker_command).to have_received(:<<).with("--hostname #{selenoid.hostname}")
end
it 'publishes port' do
selenoid.start
expect(docker_command).to have_received(:<<).with("--publish 4444:4444")
end
it 'overrides video directory' do
selenoid.start
expect(docker_command).to have_received(:<<)
.with("-e OVERRIDE_VIDEO_OUTPUT_DIR=#{Runtime::Env.selenoid_directory}/video")
end
it 'sets volume' do
selenoid.start
expect(docker_command).to have_received(:volume).with('/var/run/docker.sock', '/var/run/docker.sock')
end
it 'sets browsers.json volume' do
selenoid.start
expect(docker_command).to have_received(:volume).with("#{fixtures_dir}/../../../../fixtures/selenoid",
"/etc/selenoid")
end
it 'sets video volume' do
selenoid.start
expect(docker_command).to have_received(:volume).with("#{selenoid_dir}/video", '/opt/selenoid/video')
end
end
end
end
end