diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-08-11 11:28:42 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-08-11 11:28:42 +0300 |
commit | 9f10943c1a76576ac40d96189a28a4d6123a75d8 (patch) | |
tree | 88955d92ebc98a4165d66a36cb8a2cf92709981a /spec/lib/gitlab | |
parent | 84727fba96c6794874e1f94d581408b70e1842a7 (diff) |
Revert "Merge branch 'drop-satellites'"
This reverts commit 957e849f41d96fa9778fcdd06792d2f0274b29ab, reversing
changes made to 6b9dbe9f5a175a8162abf296367f561bab3eea1a.
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'spec/lib/gitlab')
-rw-r--r-- | spec/lib/gitlab/reference_extractor_spec.rb | 8 | ||||
-rw-r--r-- | spec/lib/gitlab/satellite/action_spec.rb | 116 | ||||
-rw-r--r-- | spec/lib/gitlab/satellite/merge_action_spec.rb | 104 |
3 files changed, 224 insertions, 4 deletions
diff --git a/spec/lib/gitlab/reference_extractor_spec.rb b/spec/lib/gitlab/reference_extractor_spec.rb index 088e34f050c..f921dd9cc09 100644 --- a/spec/lib/gitlab/reference_extractor_spec.rb +++ b/spec/lib/gitlab/reference_extractor_spec.rb @@ -25,7 +25,7 @@ describe Gitlab::ReferenceExtractor do project.team << [@u_bar, :guest] subject.analyze(%Q{ - Inline code: `@foo` + Inline code: `@foo` Code block: @@ -33,7 +33,7 @@ describe Gitlab::ReferenceExtractor do @bar ``` - Quote: + Quote: > @offteam }) @@ -49,8 +49,8 @@ describe Gitlab::ReferenceExtractor do end it 'accesses valid merge requests' do - @m0 = create(:merge_request, source_project: project, target_project: project, source_branch: 'markdown') - @m1 = create(:merge_request, source_project: project, target_project: project, source_branch: 'feature_conflict') + @m0 = create(:merge_request, source_project: project, target_project: project, source_branch: 'aaa') + @m1 = create(:merge_request, source_project: project, target_project: project, source_branch: 'bbb') subject.analyze("!999, !#{@m1.iid}, and !#{@m0.iid}.") expect(subject.merge_requests).to eq([@m1, @m0]) diff --git a/spec/lib/gitlab/satellite/action_spec.rb b/spec/lib/gitlab/satellite/action_spec.rb new file mode 100644 index 00000000000..0a93676edc3 --- /dev/null +++ b/spec/lib/gitlab/satellite/action_spec.rb @@ -0,0 +1,116 @@ +require 'spec_helper' + +describe 'Gitlab::Satellite::Action' do + let(:project) { create(:project) } + let(:user) { create(:user) } + + describe '#prepare_satellite!' do + it 'should be able to fetch timeout from conf' do + expect(Gitlab::Satellite::Action::DEFAULT_OPTIONS[:git_timeout]).to eq(30.seconds) + end + + it 'create a repository with a parking branch and one remote: origin' do + repo = project.satellite.repo + + #now lets dirty it up + + starting_remote_count = repo.git.list_remotes.size + expect(starting_remote_count).to be >= 1 + #kind of hookey way to add a second remote + origin_uri = repo.git.remote({ v: true }).split(" ")[1] + + repo.git.remote({ raise: true }, 'add', 'another-remote', origin_uri) + repo.git.branch({ raise: true }, 'a-new-branch') + + expect(repo.heads.size).to be > (starting_remote_count) + expect(repo.git.remote().split(" ").size).to be > (starting_remote_count) + + repo.git.config({}, "user.name", "#{user.name} -- foo") + repo.git.config({}, "user.email", "#{user.email} -- foo") + expect(repo.config['user.name']).to eq("#{user.name} -- foo") + expect(repo.config['user.email']).to eq("#{user.email} -- foo") + + + #These must happen in the context of the satellite directory... + satellite_action = Gitlab::Satellite::Action.new(user, project) + project.satellite.lock do + #Now clean it up, use send to get around prepare_satellite! being protected + satellite_action.send(:prepare_satellite!, repo) + end + + #verify it's clean + heads = repo.heads.map(&:name) + expect(heads.size).to eq(1) + expect(heads.include?(Gitlab::Satellite::Satellite::PARKING_BRANCH)).to eq(true) + remotes = repo.git.remote().split(' ') + expect(remotes.size).to eq(1) + expect(remotes.include?('origin')).to eq(true) + expect(repo.config['user.name']).to eq(user.name) + expect(repo.config['user.email']).to eq(user.email) + end + end + + describe '#in_locked_and_timed_satellite' do + + it 'should make use of a lockfile' do + repo = project.satellite.repo + called = false + + #set assumptions + FileUtils.rm_f(project.satellite.lock_file) + + expect(File.exists?(project.satellite.lock_file)).to be_falsey + + satellite_action = Gitlab::Satellite::Action.new(user, project) + satellite_action.send(:in_locked_and_timed_satellite) do |sat_repo| + expect(repo).to eq(sat_repo) + expect(File.exists? project.satellite.lock_file).to be_truthy + called = true + end + + expect(called).to be_truthy + + end + + it 'should be able to use the satellite after locking' do + repo = project.satellite.repo + called = false + + # Set base assumptions + if File.exists? project.satellite.lock_file + expect(FileLockStatusChecker.new(project.satellite.lock_file).flocked?).to be_falsey + end + + satellite_action = Gitlab::Satellite::Action.new(user, project) + satellite_action.send(:in_locked_and_timed_satellite) do |sat_repo| + called = true + expect(repo).to eq(sat_repo) + expect(File.exists? project.satellite.lock_file).to be_truthy + expect(FileLockStatusChecker.new(project.satellite.lock_file).flocked?).to be_truthy + end + + expect(called).to be_truthy + expect(FileLockStatusChecker.new(project.satellite.lock_file).flocked?).to be_falsey + + end + + class FileLockStatusChecker < File + def flocked?(&block) + status = flock LOCK_EX|LOCK_NB + case status + when false + return true + when 0 + begin + block ? block.call : false + ensure + flock LOCK_UN + end + else + raise SystemCallError, status + end + end + end + + end +end diff --git a/spec/lib/gitlab/satellite/merge_action_spec.rb b/spec/lib/gitlab/satellite/merge_action_spec.rb new file mode 100644 index 00000000000..9b1c9a34e29 --- /dev/null +++ b/spec/lib/gitlab/satellite/merge_action_spec.rb @@ -0,0 +1,104 @@ +require 'spec_helper' + +describe 'Gitlab::Satellite::MergeAction' do + include RepoHelpers + + let(:project) { create(:project, namespace: create(:group)) } + let(:fork_project) { create(:project, namespace: create(:group), forked_from_project: project) } + let(:merge_request) { create(:merge_request, source_project: project, target_project: project) } + let(:merge_request_fork) { create(:merge_request, source_project: fork_project, target_project: project) } + + let(:merge_request_with_conflict) { create(:merge_request, :conflict, source_project: project, target_project: project) } + let(:merge_request_fork_with_conflict) { create(:merge_request, :conflict, source_project: project, target_project: project) } + + describe '#commits_between' do + def verify_commits(commits, first_commit_sha, last_commit_sha) + commits.each { |commit| expect(commit.class).to eq(Gitlab::Git::Commit) } + expect(commits.first.id).to eq(first_commit_sha) + expect(commits.last.id).to eq(last_commit_sha) + end + + context 'on fork' do + it 'should get proper commits between' do + commits = Gitlab::Satellite::MergeAction.new(merge_request_fork.author, merge_request_fork).commits_between + verify_commits(commits, sample_compare.commits.first, sample_compare.commits.last) + end + end + + context 'between branches' do + it 'should raise exception -- not expected to be used by non forks' do + expect { Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request).commits_between }.to raise_error(RuntimeError) + end + end + end + + describe '#format_patch' do + def verify_content(patch) + sample_compare.commits.each do |commit| + expect(patch.include?(commit)).to be_truthy + end + end + + context 'on fork' do + it 'should build a format patch' do + patch = Gitlab::Satellite::MergeAction.new(merge_request_fork.author, merge_request_fork).format_patch + verify_content(patch) + end + end + + context 'between branches' do + it 'should build a format patch' do + patch = Gitlab::Satellite::MergeAction.new(merge_request_fork.author, merge_request).format_patch + verify_content(patch) + end + end + end + + describe '#diffs_between_satellite tested against diff_in_satellite' do + def is_a_matching_diff(diff, diffs) + diff_count = diff.scan('diff --git').size + expect(diff_count).to be >= 1 + expect(diffs.size).to eq(diff_count) + diffs.each do |a_diff| + expect(a_diff.class).to eq(Gitlab::Git::Diff) + expect(diff.include? a_diff.diff).to be_truthy + end + end + + context 'on fork' do + it 'should get proper diffs' do + diffs = Gitlab::Satellite::MergeAction.new(merge_request_fork.author, merge_request_fork).diffs_between_satellite + diff = Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request_fork).diff_in_satellite + is_a_matching_diff(diff, diffs) + end + end + + context 'between branches' do + it 'should get proper diffs' do + expect{ Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request).diffs_between_satellite }.to raise_error(RuntimeError) + end + end + end + + describe '#can_be_merged?' do + context 'on fork' do + it do + expect(Gitlab::Satellite::MergeAction.new(merge_request_fork.author, merge_request_fork).can_be_merged?).to be_truthy + end + + it do + expect(Gitlab::Satellite::MergeAction.new(merge_request_fork_with_conflict.author, merge_request_fork_with_conflict).can_be_merged?).to be_falsey + end + end + + context 'between branches' do + it do + expect(Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request).can_be_merged?).to be_truthy + end + + it do + expect(Gitlab::Satellite::MergeAction.new(merge_request_with_conflict.author, merge_request_with_conflict).can_be_merged?).to be_falsey + end + end + end +end |