BigW Consortium Gitlab

6_validations_spec.rb 3.27 KB
Newer Older
1
require 'spec_helper'
2
require_relative '../../config/initializers/6_validations.rb'
3 4

describe '6_validations', lib: true do
5 6 7 8 9 10 11 12 13 14
  before :all do
    FileUtils.mkdir_p('tmp/tests/paths/a/b/c/d')
    FileUtils.mkdir_p('tmp/tests/paths/a/b/c2')
    FileUtils.mkdir_p('tmp/tests/paths/a/b/d')
  end

  after :all do
    FileUtils.rm_rf('tmp/tests/paths')
  end

15 16 17 18 19
  describe 'validate_storages_config' do
    context 'with correct settings' do
      before do
        mock_storages('foo' => { 'path' => 'tmp/tests/paths/a/b/c' }, 'bar' => { 'path' => 'tmp/tests/paths/a/b/d' })
      end
20

21 22 23
      it 'passes through' do
        expect { validate_storages_config }.not_to raise_error
      end
24 25
    end

26 27 28 29
    context 'with invalid storage names' do
      before do
        mock_storages('name with spaces' => { 'path' => 'tmp/tests/paths/a/b/c' })
      end
30

31 32 33
      it 'throws an error' do
        expect { validate_storages_config }.to raise_error('"name with spaces" is not a valid storage name. Please fix this in your gitlab.yml before starting GitLab.')
      end
34 35
    end

36 37 38 39
    context 'with incomplete settings' do
      before do
        mock_storages('foo' => {})
      end
40

41 42 43
      it 'throws an error suggesting the user to update its settings' do
        expect { validate_storages_config }.to raise_error('foo is not a valid storage, because it has no `path` key. Refer to gitlab.yml.example for an updated example. Please fix this in your gitlab.yml before starting GitLab.')
      end
44 45
    end

46 47 48 49
    context 'with deprecated settings structure' do
      before do
        mock_storages('foo' => 'tmp/tests/paths/a/b/c')
      end
50

51 52 53
      it 'throws an error suggesting the user to update its settings' do
        expect { validate_storages_config }.to raise_error("foo is not a valid storage, because it has no `path` key. It may be configured as:\n\nfoo:\n  path: tmp/tests/paths/a/b/c\n\nFor source installations, update your config/gitlab.yml Refer to gitlab.yml.example for an updated example.\n\nIf you're using the Gitlab Development Kit, you can update your configuration running `gdk reconfigure`.\n")
      end
54 55 56
    end
  end

57 58 59 60 61
  describe 'validate_storages_paths' do
    context 'with correct settings' do
      before do
        mock_storages('foo' => { 'path' => 'tmp/tests/paths/a/b/c' }, 'bar' => { 'path' => 'tmp/tests/paths/a/b/d' })
      end
62

63 64 65
      it 'passes through' do
        expect { validate_storages_paths }.not_to raise_error
      end
66 67
    end

68 69 70 71 72 73 74 75
    context 'with nested storage paths' do
      before do
        mock_storages('foo' => { 'path' => 'tmp/tests/paths/a/b/c' }, 'bar' => { 'path' => 'tmp/tests/paths/a/b/c/d' })
      end

      it 'throws an error' do
        expect { validate_storages_paths }.to raise_error('bar is a nested path of foo. Nested paths are not supported for repository storages. Please fix this in your gitlab.yml before starting GitLab.')
      end
76 77
    end

78 79 80 81 82 83 84 85
    context 'with similar but un-nested storage paths' do
      before do
        mock_storages('foo' => { 'path' => 'tmp/tests/paths/a/b/c' }, 'bar' => { 'path' => 'tmp/tests/paths/a/b/c2' })
      end

      it 'passes through' do
        expect { validate_storages_paths }.not_to raise_error
      end
86 87 88
    end
  end

89 90 91 92
  def mock_storages(storages)
    allow(Gitlab.config.repositories).to receive(:storages).and_return(storages)
  end
end