Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/gitlab/satellite/action_spec.rb')
-rw-r--r--spec/lib/gitlab/satellite/action_spec.rb131
1 files changed, 131 insertions, 0 deletions
diff --git a/spec/lib/gitlab/satellite/action_spec.rb b/spec/lib/gitlab/satellite/action_spec.rb
new file mode 100644
index 00000000000..3a2dd0bf6d3
--- /dev/null
+++ b/spec/lib/gitlab/satellite/action_spec.rb
@@ -0,0 +1,131 @@
+require 'spec_helper'
+
+describe 'Gitlab::Satellite::Action' do
+
+
+ let(:project) { create(:project_with_code) }
+ let(:user) { create(:user) }
+
+
+ describe '#prepare_satellite!' do
+
+ 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
+ starting_remote_count.should >= 1
+ #kind of hookey way to add a second remote
+ origin_uri = repo.git.remote({v: true}).split(" ")[1]
+ begin
+ repo.git.remote({raise: true}, 'add', 'another-remote', origin_uri)
+ repo.git.branch({raise: true}, 'a-new-branch')
+
+ repo.heads.size.should > (starting_remote_count)
+ repo.git.remote().split(" ").size.should > (starting_remote_count)
+ rescue
+ end
+
+ repo.git.config({}, "user.name", "#{user.name} -- foo")
+ repo.git.config({}, "user.email", "#{user.email} -- foo")
+ repo.config['user.name'].should =="#{user.name} -- foo"
+ repo.config['user.email'].should =="#{user.email} -- foo"
+
+
+ #These must happen in the context of the satellite directory...
+ satellite_action = Gitlab::Satellite::Action.new(user, project)
+ project.satellite.lock {
+ #Now clean it up, use send to get around prepare_satellite! being protected
+ satellite_action.send(:prepare_satellite!, repo)
+ }
+
+ #verify it's clean
+ heads = repo.heads.map(&:name)
+ heads.size.should == 1
+ heads.include?(Gitlab::Satellite::Satellite::PARKING_BRANCH).should == true
+ remotes = repo.git.remote().split(' ')
+ remotes.size.should == 1
+ remotes.include?('origin').should == true
+ repo.config['user.name'].should ==user.name
+ repo.config['user.email'].should ==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
+ File.rm(project.satellite.lock_file) unless !File.exists? project.satellite.lock_file
+
+ File.exists?(project.satellite.lock_file).should be_false
+
+ satellite_action = Gitlab::Satellite::Action.new(user, project)
+ satellite_action.send(:in_locked_and_timed_satellite) do |sat_repo|
+ repo.should == sat_repo
+ (File.exists? project.satellite.lock_file).should be_true
+ called = true
+ end
+
+ called.should be_true
+
+ end
+
+ it 'should be able to use the satellite after locking' do
+ pending "can't test this, doesn't seem to be a way to the the flock status on a file, throwing piles of processes at it seems lousy too"
+ repo = project.satellite.repo
+ first_call = false
+
+ (File.exists? project.satellite.lock_file).should be_false
+
+ test_file = ->(called) {
+ File.exists?(project.satellite.lock_file).should be_true
+ called.should be_true
+ File.readlines.should == "some test code"
+ File.truncate(project.satellite.lock, 0)
+ File.readlines.should == ""
+ }
+
+ write_file = ->(called, checker) {
+ if (File.exists?(project.satellite.lock_file))
+ file = File.open(project.satellite.lock, '+w')
+ file.write("some test code")
+ file.close
+ checker.call(called)
+ end
+ }
+
+
+ satellite_action = Gitlab::Satellite::Action.new(user, project)
+ satellite_action.send(:in_locked_and_timed_satellite) do |sat_repo|
+ write_file.call(first_call, test_file)
+ first_call = true
+ repo.should == sat_repo
+ (File.exists? project.satellite.lock_file).should be_true
+
+ end
+
+ first_call.should be_true
+ puts File.stat(project.satellite.lock_file).inspect
+
+ second_call = false
+ satellite_action.send(:in_locked_and_timed_satellite) do |sat_repo|
+ write_file.call(second_call, test_file)
+ second_call = true
+ repo.should == sat_repo
+ (File.exists? project.satellite.lock_file).should be_true
+ end
+
+ second_call.should be_true
+ (File.exists? project.satellite.lock_file).should be_true
+ end
+
+ end
+end
+