spec/lib/gitlab/docker_operations_spec.rb (83 lines of code) (raw):

require 'spec_helper' require 'gitlab/docker_operations' RSpec.describe DockerOperations do describe '.set_timeout' do context 'when ENV["DOCKER_TIMEOUT"] is not set' do it 'uses a default timeout value' do expect(Docker).to receive(:options=).with({ read_timeout: 1200, write_timeout: 1200 }) described_class.set_timeout end end context 'when ENV["DOCKER_TIMEOUT"] is not set' do before do expect(ENV).to receive(:[]).with('DOCKER_TIMEOUT').and_return("42") end it 'uses the given timeout value' do expect(Docker).to receive(:options=).with({ read_timeout: "42", write_timeout: "42" }) described_class.set_timeout end end end describe '.build' do let(:location) { '/tmp/foo' } let(:image) { 'gitlab-ce' } let(:tag) { 'latest' } it 'uses a default timeout value' do expect(described_class).to receive(:set_timeout) expect(Docker::Image).to receive(:build_from_dir).with(location, { t: "#{image}:#{tag}", pull: true }).and_yield(JSON.dump(stream: 'Hello!')) expect(described_class).to receive(:puts).with('Hello!') described_class.build(location.to_sym, image, tag) end end describe '.authenticate' do context 'with no arguments' do it 'calls Docker.authenticate!' do expect(ENV).to receive(:[]).with('DOCKERHUB_USERNAME').and_return('user') expect(ENV).to receive(:[]).with('DOCKERHUB_PASSWORD').and_return('pass') expect(Docker).to receive(:authenticate!).with(username: 'user', password: 'pass', serveraddress: '') described_class.authenticate end end context 'with arguments' do it 'uses a default timeout value' do expect(Docker).to receive(:authenticate!).with(username: 'john', password: 'secret', serveraddress: 'registry.com') described_class.authenticate('john', 'secret', 'registry.com') end end end describe '.get' do it 'calls Docker::Image.get' do expect(described_class).to receive(:set_timeout) expect(Docker::Image).to receive(:get).with('namespace:tag') described_class.get('namespace', 'tag') end end describe '.push' do it 'calls Docker::Image.push' do image = double creds = double expect(described_class).to receive(:set_timeout) expect(described_class).to receive(:get).with('namespace', 'tag').and_return(image) expect(Docker).to receive(:creds).and_return(creds) expect(image).to receive(:push).with(creds, repo_tag: 'namespace:tag').and_yield('Hello!') expect(described_class).to receive(:puts).and_return('Hello!') described_class.push('namespace', 'tag') end end describe '.tag' do it 'calls Docker::Image.tag' do image = double expect(described_class).to receive(:set_timeout) expect(described_class).to receive(:get).with('namespace1', 'tag1').and_return(image) expect(image).to receive(:tag).with(repo: 'namespace2', tag: 'tag2', force: true) described_class.tag('namespace1', 'namespace2', 'tag1', 'tag2') end end describe '.tag_and_push' do it 'delegates to tag_and_push' do expect(described_class).to receive(:tag).with('namespace1', 'namespace2', 'tag1', 'tag2') expect(described_class).to receive(:push).with('namespace2', 'tag2') described_class.tag_and_push('namespace1', 'namespace2', 'tag1', 'tag2') end end end