BigW Consortium Gitlab

shell_spec.rb 2.9 KB
Newer Older
1
require 'spec_helper'
2
require 'stringio'
3

Douwe Maan committed
4
describe Gitlab::Shell, lib: true do
Dmitriy Zaporozhets committed
5
  let(:project) { double('Project', id: 7, path: 'diaspora') }
6
  let(:gitlab_shell) { Gitlab::Shell.new }
7 8

  before do
9
    allow(Project).to receive(:find).and_return(project)
10 11
  end

12 13 14 15 16
  it { is_expected.to respond_to :add_key }
  it { is_expected.to respond_to :remove_key }
  it { is_expected.to respond_to :add_repository }
  it { is_expected.to respond_to :remove_repository }
  it { is_expected.to respond_to :fork_repository }
17 18 19 20 21
  it { is_expected.to respond_to :gc }
  it { is_expected.to respond_to :add_namespace }
  it { is_expected.to respond_to :rm_namespace }
  it { is_expected.to respond_to :mv_namespace }
  it { is_expected.to respond_to :exists? }
22

23
  it { expect(gitlab_shell.url_to_repo('diaspora')).to eq(Gitlab.config.gitlab_shell.ssh_path_prefix + "diaspora.git") }
24

25
  describe 'memoized secret_token' do
26 27 28 29 30
    let(:secret_file) { 'tmp/tests/.secret_shell_test' }
    let(:link_file) { 'tmp/tests/shell-secret-test/.gitlab_shell_secret' }

    before do
      allow(Gitlab.config.gitlab_shell).to receive(:secret_file).and_return(secret_file)
31
      allow(Gitlab.config.gitlab_shell).to receive(:path).and_return('tmp/tests/shell-secret-test')
32
      FileUtils.mkdir('tmp/tests/shell-secret-test')
33
      Gitlab::Shell.ensure_secret_token!
34 35 36 37 38 39 40 41
    end

    after do
      FileUtils.rm_rf('tmp/tests/shell-secret-test')
      FileUtils.rm_rf(secret_file)
    end

    it 'creates and links the secret token file' do
42 43
      secret_token = Gitlab::Shell.secret_token

44
      expect(File.exist?(secret_file)).to be(true)
45
      expect(File.read(secret_file).chomp).to eq(secret_token)
46 47 48 49 50
      expect(File.symlink?(link_file)).to be(true)
      expect(File.readlink(link_file)).to eq(secret_file)
    end
  end

51 52 53 54 55 56 57 58 59 60 61
  describe '#add_key' do
    it 'removes trailing garbage' do
      allow(gitlab_shell).to receive(:gitlab_shell_keys_path).and_return(:gitlab_shell_keys_path)
      expect(Gitlab::Utils).to receive(:system_silent).with(
        [:gitlab_shell_keys_path, 'add-key', 'key-123', 'ssh-rsa foobar']
      )

      gitlab_shell.add_key('key-123', 'ssh-rsa foobar trailing garbage')
    end
  end

Douwe Maan committed
62
  describe Gitlab::Shell::KeyAdder, lib: true do
63
    describe '#add_key' do
64 65
      it 'removes trailing garbage' do
        io = spy(:io)
66 67
        adder = described_class.new(io)

68 69 70 71 72 73 74 75 76 77
        adder.add_key('key-42', "ssh-rsa foo bar\tbaz")

        expect(io).to have_received(:puts).with("key-42\tssh-rsa foo")
      end

      it 'raises an exception if the key contains a tab' do
        expect do
          described_class.new(StringIO.new).add_key('key-42', "ssh-rsa\tfoobar")
        end.to raise_error(Gitlab::Shell::Error)
      end
78

79 80 81 82
      it 'raises an exception if the key contains a newline' do
        expect do
          described_class.new(StringIO.new).add_key('key-42', "ssh-rsa foobar\nssh-rsa pawned")
        end.to raise_error(Gitlab::Shell::Error)
83 84 85
      end
    end
  end
86
end