gorgon 0.6.5 → 0.7.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NDNlYzEyMzQ2ZjEyMTE1MjJjNGEyZTRmYjVlMWZhYWYxZjgwOWQwMA==
4
+ NmUzM2U0MzQ5NjczNjczMjU4YjJjMWIxYmVkOTYxZDJjZTk0NjIzNQ==
5
5
  data.tar.gz: !binary |-
6
- N2I4YWRkOTFiOWIyNTY3NjI4NTAxYmRiZTg3MzY1OGE3ODZmOTk0Ng==
6
+ MGRiOWM5ZTU0MjVmZGZlYmI5MDhhOGRmNTVkYTg0MzMxZGE0MGEwZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZDI2MWE1MGEyNDk3ZjM0ZTEzNTYwZTE5ODFkYTM4ZjQ5NzM3N2MwNzA1ZWIz
10
- OWFmYjgxYzRiMTM1MzlhZWJmNTNmZTk3YWU1ZTYwOGIxNGRlNTljNTVkZjcx
11
- ZGU4NmM4MTRiODkxNGQzMmJjZDQ5MmVkYmY0M2Q1ODg1MjM2Mjg=
9
+ NjFjMWFlMzFkYWM3OTBhYjA1ZDVmY2MwODViZTEzNWQzMjFlNmZlMWNmYTNm
10
+ OTZiNzc4ZWNjYWIxODYzMjczNzQ4NDcyOTM5MmEzYzIyMzY3YTVhYzUxYTA5
11
+ M2YwZjZjMGFiOGJlYjI0MTBiN2NkNTUxYmIwYTMyZDIyMTI5YTE=
12
12
  data.tar.gz: !binary |-
13
- ZTM2ZjgxYjBlNGM0ZmIzMzA1ODAwZGM5ZTAxNjQ0MjcwMmI0MDQ5M2QwYmEy
14
- NmQyYTYyZmY5MDQwOWI3MWZlYTFhYWRhNGUwNzQxYjg1MmJlOWJiZmM3Njgx
15
- NzNiMmRlZTE3ZTE1ZjRiMTVjOTA5NWQzYTc5MjI1YjlmYTlmZjI=
13
+ YTUyM2JhM2Q0YjlkNjJlZmRkZWI0MTE1M2NjNDBmNDI1ZDZjNzRkZDBkZTFk
14
+ ZjdiMzJjNWE0ODIzMDNjYzY2MGMxNDg5YzAzZjNiOGJiYzhmODQ0MWNkZmM3
15
+ ZjU0ZDQ0Y2VkZTYzOGNmYjAzMzg2NDM2MjIxYTA2NWExYWU0ODA=
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gorgon (0.6.5)
4
+ gorgon (0.7.0.rc1)
5
5
  amqp (~> 1.1.0)
6
6
  awesome_print
7
7
  colorize (~> 0.5.8)
data/README.md CHANGED
@@ -11,7 +11,6 @@ Gorgon provides a method for distributing the workload of running ruby test suit
11
11
  Installing Gorgon
12
12
  -----------------
13
13
  1. `sudo apt-get install rabbitmq-server`
14
- 1. When you run gorgon, every listener will use rsync to pull the directory tree from origin; therefore, you need passwordless ssh login from every listener to origin (even if origin and listener are on the same host). Follow [these steps](http://linuxconfig.org/Passwordless_ssh).
15
14
  1. cd to your project
16
15
  1. `gem install gorgon`
17
16
  1. if using rails, `gorgon init rails` will create initial files for a typical rails project. Otherwise, you can use `gorgon init`
data/bin/gorgon CHANGED
@@ -1,6 +1,7 @@
1
1
  require "rubygems"
2
2
  require 'gorgon/originator'
3
3
  require 'gorgon/listener'
4
+ require 'gorgon/rsync_daemon'
4
5
  require 'gorgon/worker_manager'
5
6
  require 'gorgon/ping_service'
6
7
  require 'gorgon/gem_service'
@@ -20,6 +21,18 @@ def listen
20
21
  l.listen
21
22
  end
22
23
 
24
+ def start_rsync_daemon
25
+ puts "Starting rsync daemon..."
26
+ exit 1 unless RsyncDaemon.start ARGV[1]
27
+ puts "Rsync Daemon is running. Use 'gorgon stop_rsync' to kill it."
28
+ end
29
+
30
+ def stop_rsync_daemon
31
+ puts "Stopping rsync daemon..."
32
+ exit 1 unless RsyncDaemon.stop
33
+ puts "Done"
34
+ end
35
+
23
36
  def manage_workers
24
37
  config_path = ENV["GORGON_CONFIG_PATH"]
25
38
 
@@ -53,6 +66,8 @@ def usage
53
66
  puts "\tping - pings listeners and shows hosts and gorgon's version they are running"
54
67
  puts "\tinit [rails] - create initial files for current project"
55
68
  puts "\tinstall_listener - runs gorgon listener as a daemon process"
69
+ puts "\tstart_rsync <directory> - start rsync daemon. Run this command in File Server"
70
+ puts "\tstop_rsync - stop rsync daemon."
56
71
  puts "\tgem command [options...] - execute the gem command on every listener and shutdown listener. e.g. 'gorgon gem install --version 1.0.0'"
57
72
  end
58
73
 
@@ -65,6 +80,10 @@ when "start"
65
80
  start
66
81
  when "listen"
67
82
  listen
83
+ when "start_rsync"
84
+ start_rsync_daemon
85
+ when "stop_rsync"
86
+ stop_rsync_daemon
68
87
  when "manage_workers"
69
88
  manage_workers
70
89
  when "ping"
@@ -4,7 +4,7 @@ require 'gorgon/job_state'
4
4
  require 'gorgon/progress_bar_view'
5
5
  require 'gorgon/originator_logger'
6
6
  require 'gorgon/failures_printer'
7
- require 'gorgon/rsync_daemon'
7
+ require 'gorgon/source_tree_syncer'
8
8
  require 'gorgon/shutdown_manager.rb'
9
9
 
10
10
  require 'awesome_print'
@@ -16,7 +16,6 @@ class Originator
16
16
 
17
17
  def initialize
18
18
  @configuration = nil
19
- @rsync_daemon = RsyncDaemon.new
20
19
  end
21
20
 
22
21
  def originate
@@ -39,8 +38,7 @@ class Originator
39
38
 
40
39
  def cancel_job
41
40
  ShutdownManager.new(protocol: @protocol,
42
- job_state: @job_state,
43
- rsync_daemon: @rsync_daemon).cancel_job
41
+ job_state: @job_state).cancel_job
44
42
  end
45
43
 
46
44
  def ctrl_c
@@ -56,10 +54,7 @@ class Originator
56
54
  exit 2
57
55
  end
58
56
 
59
- if !@rsync_daemon.start
60
- @logger.log_error "rsync daemon didn't start!"
61
- exit 1
62
- end
57
+ push_source_code
63
58
 
64
59
  @protocol = OriginatorProtocol.new @logger
65
60
 
@@ -81,11 +76,24 @@ class Originator
81
76
  end
82
77
  end
83
78
 
79
+ def push_source_code
80
+ syncer = SourceTreeSyncer.new(source_tree_path)
81
+ syncer.exclude = configuration[:sync_exclude]
82
+ syncer.push
83
+ if syncer.success?
84
+ @logger.log "Command '#{syncer.sys_command}' completed successfully."
85
+ else
86
+ $stderr.puts "Command '#{syncer.sys_command}' failed!"
87
+ $stderr.puts "Stdout:\n#{syncer.output}"
88
+ $stderr.puts "Stderr:\n#{syncer.errors}"
89
+ exit 1
90
+ end
91
+ end
92
+
84
93
  def cleanup_if_job_complete
85
94
  if @job_state.is_job_complete?
86
95
  @logger.log "Job is done"
87
96
  @protocol.disconnect
88
- @rsync_daemon.stop
89
97
  end
90
98
  end
91
99
 
@@ -137,22 +145,24 @@ class Originator
137
145
  def job_definition
138
146
  job_config = configuration[:job]
139
147
  if !job_config.has_key?(:source_tree_path)
140
- job_config[:source_tree_path] = "rsync://#{local_ip_addr}:43434/src"
148
+ job_config[:source_tree_path] = source_tree_path
141
149
  end
142
150
  JobDefinition.new(configuration[:job])
143
151
  end
144
152
 
145
153
  private
146
154
 
147
- def local_ip_addr
148
- orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true # turn off reverse DNS resolution temporarily
155
+ def source_tree_path
156
+ hostname = Socket.gethostname
157
+ source_code_root = File.basename(Dir.pwd)
149
158
 
150
- UDPSocket.open do |s|
151
- s.connect '64.59.144.16', 1
152
- s.addr.last
153
- end
154
- ensure
155
- Socket.do_not_reverse_lookup = orig
159
+ "rsync://#{file_server_host}:43434/src/#{hostname}_#{source_code_root}"
160
+ end
161
+
162
+ def file_server_host
163
+ file_server = configuration[:file_server]
164
+ raise 'Please, provide file_server configuration.' if file_server.nil?
165
+ configuration[:file_server][:host]
156
166
  end
157
167
 
158
168
  def configuration
@@ -6,37 +6,33 @@ class RsyncDaemon
6
6
  RSYNC_PORT = 43434
7
7
  PID_FILE = 'rsync.pid'
8
8
 
9
- def initialize
10
- @project_directory = Dir.pwd
11
- @started = false
12
- end
13
-
14
- def start
15
- return if @started
9
+ def self.start(directory_bucket)
10
+ if directory_bucket.nil? || !File.directory?(directory_bucket)
11
+ $stderr.puts "Please, expecify a valid directory."
12
+ return false
13
+ end
16
14
 
17
15
  if !port_available?
18
16
  puts port_busy_msg
19
17
  return false
20
18
  end
21
-
19
+
22
20
  Dir.mkdir(RSYNC_DIR_NAME)
23
- success = nil
21
+ success = false
24
22
  Dir.chdir(RSYNC_DIR_NAME) do
25
- File.write("rsyncd.conf", rsyncd_config_string(@project_directory))
23
+ File.write("rsyncd.conf", rsyncd_config_string(directory_bucket))
26
24
 
27
25
  success = Kernel.system("rsync --daemon --config rsyncd.conf")
28
26
  end
29
27
 
30
- if success
31
- @started = true
32
- return true
33
- else
34
- return false
35
- end
28
+ success
36
29
  end
37
30
 
38
- def stop
39
- return unless @started
31
+ def self.stop
32
+ if !File.directory?(RSYNC_DIR_NAME)
33
+ puts "ERROR: Directory '#{RSYNC_DIR_NAME}' doesn't exists. Maybe rsync daemon is not running!"
34
+ return false
35
+ end
40
36
 
41
37
  success = nil
42
38
  Dir.chdir(RSYNC_DIR_NAME) do
@@ -45,7 +41,6 @@ class RsyncDaemon
45
41
  end
46
42
 
47
43
  if success
48
- @started = false
49
44
  FileUtils::remove_entry_secure(RSYNC_DIR_NAME)
50
45
  return true
51
46
  else
@@ -55,19 +50,19 @@ class RsyncDaemon
55
50
 
56
51
  private
57
52
 
58
- def rsyncd_config_string(shared_dir)
53
+ def self.rsyncd_config_string(directory_bucket)
59
54
  return <<-EOF
60
55
  port = #{RSYNC_PORT}
61
56
  pid file = #{PID_FILE}
62
57
 
63
58
  [src]
64
- path = #{@project_directory}
65
- read only = true
59
+ path = #{directory_bucket}
60
+ read only = false
66
61
  use chroot = false
67
62
  EOF
68
63
  end
69
64
 
70
- def port_available?
65
+ def self.port_available?
71
66
  begin
72
67
  s = TCPServer.new('localhost', RSYNC_PORT)
73
68
  s.close
@@ -77,7 +72,7 @@ EOF
77
72
  end
78
73
  end
79
74
 
80
- def port_busy_msg
75
+ def self.port_busy_msg
81
76
  <<-MSG
82
77
  ERROR: port #{RSYNC_PORT} is being used. Maybe another rsync daemon is running.
83
78
  Kill pid in #{RSYNC_DIR_NAME}/#{PID_FILE} or check no other process is using that port."
@@ -21,9 +21,7 @@ module Settings
21
21
  {name: :after_creating_workers, file_name: "after_creating_workers.rb",
22
22
  content: after_creating_workers_content},
23
23
  {name: :before_start, file_name: "before_start.rb",
24
- content: before_start_content},
25
- {name: :after_complete, file_name: "after_complete.rb",
26
- content: after_complete_content}]
24
+ content: before_start_content}]
27
25
  end
28
26
 
29
27
  def get_app_subdir
@@ -39,26 +37,26 @@ module Settings
39
37
  end
40
38
 
41
39
  def after_sync_content
42
- <<-CONTENT
40
+ <<-'CONTENT'
43
41
  require 'bundler'
44
42
  require 'open4'
45
43
 
46
44
  Bundler.with_clean_env do
47
45
  BUNDLE_LOG_FILE||="/tmp/gorgon-bundle-install.log "
48
46
 
49
- pid, stdin, stdout, stderr = Open4::popen4 "bundle install > \#\{BUNDLE_LOG_FILE\} 2>&1 "
47
+ pid, stdin, stdout, stderr = Open4::popen4 "bundle install > #{BUNDLE_LOG_FILE} 2>&1 "
50
48
 
51
49
  ignore, status = Process.waitpid2 pid
52
50
 
53
51
  if status.exitstatus != 0
54
- raise "ERROR: 'bundle install' failed.\n\#\{stderr.read\}"
52
+ raise "ERROR: 'bundle install' failed.\n#{stderr.read}"
55
53
  end
56
54
  end
57
55
  CONTENT
58
56
  end
59
57
 
60
58
  def before_creating_workers_content
61
- <<-CONTENT
59
+ <<-'CONTENT'
62
60
  ENV["TEST_ENV_NUMBER"] = Process.pid.to_s
63
61
  ENV["RAILS_ENV"] = 'remote_test'
64
62
 
@@ -69,16 +67,31 @@ if status.exitstatus != 0
69
67
  raise "ERROR: 'rake db:setup' failed.\n#{stderr.read}\n#{stdout.read}"
70
68
  end
71
69
 
72
- require File.expand_path('../../test_helper', __FILE__)
70
+ spec_helper_file = File.expand_path('../../spec_helper', __FILE__)
71
+ test_helper_file = File.expand_path('../../test_helper', __FILE__)
72
+
73
+ require spec_helper_file if File.exist?(spec_helper_file)
74
+ require test_helper_file if File.exist?(test_helper_file)
73
75
  CONTENT
74
76
  end
75
77
 
76
78
  def after_creating_workers_content
77
- after_complete_content
79
+ <<-'CONTENT'
80
+ require 'rake'
81
+ load './Rakefile'
82
+
83
+ begin
84
+ if Rails.env = 'remote_test'
85
+ Rake::Task['db:drop'].execute
86
+ end
87
+ rescue Exception => ex
88
+ puts "Error dropping test database:\n #{ex}"
89
+ end
90
+ CONTENT
78
91
  end
79
92
 
80
93
  def before_start_content
81
- <<-CONTENT
94
+ <<-'CONTENT'
82
95
  require 'rake'
83
96
  load './Rakefile'
84
97
 
@@ -89,21 +102,6 @@ begin
89
102
  Rake::Task['db:reset'].invoke
90
103
  end
91
104
 
92
- CONTENT
93
- end
94
-
95
- def after_complete_content
96
- <<-CONTENT
97
- require 'rake'
98
- load './Rakefile'
99
-
100
- begin
101
- if Rails.env = 'remote_test'
102
- Rake::Task['db:drop'].execute
103
- end
104
- rescue Exception => ex
105
- puts "Error dropping test database:\n \#\{ex\}"
106
- end
107
105
  CONTENT
108
106
  end
109
107
  end
@@ -3,7 +3,6 @@ class ShutdownManager
3
3
  def initialize(args)
4
4
  @protocol = args.fetch(:protocol)
5
5
  @job_state = args.fetch(:job_state)
6
- @rsync_daemon = args.fetch(:rsync_daemon)
7
6
  end
8
7
 
9
8
  def cancel_job
@@ -22,11 +21,5 @@ class ShutdownManager
22
21
 
23
22
  def disconnect_protocol
24
23
  @protocol.disconnect if @protocol
25
- ensure
26
- stop_rsync_daemon
27
- end
28
-
29
- def stop_rsync_daemon
30
- @rsync_daemon.stop if @rsync_daemon
31
24
  end
32
25
  end
@@ -5,7 +5,7 @@ class SourceTreeSyncer
5
5
  attr_reader :sys_command, :output, :errors
6
6
 
7
7
  SYS_COMMAND = 'rsync'
8
- OPTS = "-azr --timeout=5"
8
+ OPTS = "-azr --timeout=5 --delete"
9
9
  EXCLUDE_OPT = "--exclude"
10
10
 
11
11
  def initialize source_tree_path
@@ -19,17 +19,17 @@ class SourceTreeSyncer
19
19
  @tempdir = Dir.mktmpdir("gorgon")
20
20
  Dir.chdir(@tempdir)
21
21
 
22
- exclude_opt = build_exclude_opt
23
- @sys_command = "#{SYS_COMMAND} #{OPTS} #{exclude_opt} #{@source_tree_path}/ ."
22
+ @sys_command = "#{SYS_COMMAND} #{OPTS} #{build_exclude_opt} #{@source_tree_path}/ ."
24
23
 
25
- pid, stdin, stdout, stderr = Open4::popen4 @sys_command
26
- stdin.close
24
+ execute_command
25
+ end
27
26
 
28
- ignore, status = Process.waitpid2 pid
27
+ def push
28
+ return if blank_source_tree_path?
29
29
 
30
- @output, @errors = [stdout, stderr].map { |p| begin p.read ensure p.close end }
30
+ @sys_command = "#{SYS_COMMAND} #{OPTS} #{build_exclude_opt} . #{@source_tree_path}"
31
31
 
32
- @exitstatus = status.exitstatus
32
+ execute_command
33
33
  end
34
34
 
35
35
  def success?
@@ -42,6 +42,17 @@ class SourceTreeSyncer
42
42
 
43
43
  private
44
44
 
45
+ def execute_command
46
+ pid, stdin, stdout, stderr = Open4::popen4 @sys_command
47
+ stdin.close
48
+
49
+ ignore, status = Process.waitpid2 pid
50
+
51
+ @output, @errors = [stdout, stderr].map { |p| begin p.read ensure p.close end }
52
+
53
+ @exitstatus = status.exitstatus
54
+ end
55
+
45
56
  def blank_source_tree_path?
46
57
  if @source_tree_path.nil?
47
58
  @errors = "Source tree path cannot be nil. Check your gorgon.json file."
@@ -1,3 +1,3 @@
1
1
  module Gorgon
2
- VERSION = "0.6.5"
2
+ VERSION = "0.7.0.rc1"
3
3
  end
@@ -5,16 +5,17 @@ describe Originator do
5
5
  :publish_job => nil, :receive_payloads => nil, :cancel_job => nil,
6
6
  :disconnect => nil)}
7
7
 
8
- let(:configuration){ {:job => {}, :files => ["some/file"]}}
8
+ let(:configuration){ {:job => {}, :files => ["some/file"], :file_server => {:host => 'host-name'}}}
9
9
  let(:job_state){ stub("JobState", :is_job_complete? => false, :file_finished => nil,
10
10
  :add_observer => nil)}
11
11
  let(:progress_bar_view){ stub("Progress Bar View", :show => nil)}
12
12
  let(:originator_logger){ stub("Originator Logger", :log => nil, :log_message => nil)}
13
- let(:rsync_daemon) { stub("Rsync Daemon", :start => true, :stop => true)}
13
+ let(:source_tree_syncer) { stub("Source Tree Syncer", :push => nil, :exclude= => nil, :success? => true,
14
+ :sys_command => 'command')}
14
15
 
15
16
  before do
16
17
  OriginatorLogger.stub(:new).and_return originator_logger
17
- RsyncDaemon.stub(:new).and_return rsync_daemon
18
+ SourceTreeSyncer.stub(:new).and_return source_tree_syncer
18
19
  Dir.stub(:[]).and_return(["file"])
19
20
  @originator = Originator.new
20
21
  end
@@ -38,8 +39,9 @@ describe Originator do
38
39
  @originator.publish
39
40
  end
40
41
 
41
- it "starts the rsync daemon" do
42
- rsync_daemon.should_receive(:start)
42
+ it "pushes source code" do
43
+ source_tree_syncer.should_receive(:push)
44
+ source_tree_syncer.should_receive(:success?).and_return true
43
45
 
44
46
  @originator.publish
45
47
  end
@@ -49,7 +51,7 @@ describe Originator do
49
51
 
50
52
  $stderr.should_receive(:puts)
51
53
  OriginatorProtocol.should_not_receive(:new)
52
- rsync_daemon.should_not_receive(:start)
54
+ source_tree_syncer.should_not_receive(:push)
53
55
 
54
56
  expect { @originator.publish }.to raise_error(SystemExit)
55
57
  end
@@ -65,7 +67,7 @@ describe Originator do
65
67
  JobState.stub!(:new).and_return job_state
66
68
 
67
69
  ShutdownManager.should_receive(:new).
68
- with(hash_including(protocol: protocol, job_state: job_state, rsync_daemon: rsync_daemon)).
70
+ with(hash_including(protocol: protocol, job_state: job_state)).
69
71
  and_return(shutdown_manager)
70
72
  shutdown_manager.should_receive(:cancel_job)
71
73
 
@@ -91,13 +93,6 @@ describe Originator do
91
93
  protocol.should_receive(:disconnect)
92
94
  @originator.cleanup_if_job_complete
93
95
  end
94
-
95
- it "stops the rsync daemon" do
96
- job_state.stub!(:is_job_complete?).and_return true
97
- rsync_daemon.should_receive(:stop)
98
-
99
- @originator.cleanup_if_job_complete
100
- end
101
96
  end
102
97
 
103
98
  describe "#handle_reply" do
@@ -134,10 +129,6 @@ describe Originator do
134
129
  end
135
130
 
136
131
  describe "#job_definition" do
137
- before do
138
- UDPSocket.any_instance.stub(:connect)
139
- end
140
-
141
132
  it "returns a JobDefinition object" do
142
133
  @originator.stub!(:configuration).and_return configuration
143
134
  job_definition = JobDefinition.new
@@ -146,9 +137,11 @@ describe Originator do
146
137
  end
147
138
 
148
139
  it "builds source_tree_path if it was not specified in the configuration" do
149
- @originator.stub!(:configuration).and_return({:job => {}})
150
- UDPSocket.any_instance.stub(:addr).and_return(["1.1.1.1"])
151
- @originator.job_definition.source_tree_path.should == "rsync://1.1.1.1:43434/src"
140
+ @originator.stub!(:configuration).and_return(configuration.merge(:file_server => {:host => 'host-name'}))
141
+ Socket.stub(:gethostname => 'my-host')
142
+ Dir.stub(:pwd => 'dir')
143
+
144
+ @originator.job_definition.source_tree_path.should == "rsync://host-name:43434/src/my-host_dir"
152
145
  end
153
146
 
154
147
  it "returns source_tree_path specified in configuration if it is present" do
@@ -1,26 +1,29 @@
1
1
  require 'gorgon/rsync_daemon'
2
2
 
3
3
  describe RsyncDaemon do
4
+ let(:directory) {'/lol/hax'}
5
+
4
6
  before(:each) do
5
7
  Kernel.stub(:system => true)
6
- Dir.stub(:mkdir => nil, :pwd => "/lol/hax")
8
+ Dir.stub(:mkdir => nil)
7
9
  Dir.stub(:chdir).and_yield
8
- File.stub(:write => 100, :read => "12345")
10
+ File.stub(:write => 100, :read => "12345", :directory? => true)
9
11
  FileUtils.stub(:remove_entry_secure => nil)
10
- @r = RsyncDaemon.new
12
+ TCPServer.stub(:new => double('TCPServer', :close => nil))
13
+ @r = RsyncDaemon
11
14
  end
12
15
 
13
16
  it "starts the rsync daemon" do
14
17
  Kernel.should_receive(:system).with("rsync --daemon --config rsyncd.conf")
15
18
 
16
- @r.start
19
+ @r.start(directory)
17
20
  end
18
21
 
19
22
  it "creates a directory in temporary dir for the configuration and pid files" do
20
23
  Dir.should_receive(:mkdir).with(RsyncDaemon::RSYNC_DIR_NAME)
21
24
  Dir.should_receive(:chdir).with(RsyncDaemon::RSYNC_DIR_NAME)
22
25
 
23
- @r.start
26
+ @r.start(directory)
24
27
  end
25
28
 
26
29
  it "writes the config file" do
@@ -30,47 +33,26 @@ pid file = rsync.pid
30
33
 
31
34
  [src]
32
35
  path = /lol/hax
33
- read only = true
36
+ read only = false
34
37
  use chroot = false
35
38
  EOF
36
39
  File.should_receive(:write).with("rsyncd.conf", valid_config)
37
40
 
38
- @r.start
41
+ @r.start(directory)
39
42
  end
40
43
 
41
44
  it "reports when an error has prevented startup" do
42
45
  Kernel.should_receive(:system).and_return(false)
43
46
 
44
- @r.start.should == false
45
- end
46
-
47
- it "only starts once" do
48
- Kernel.should_receive(:system).once
49
-
50
- @r.start
51
- @r.start
47
+ @r.start(directory).should == false
52
48
  end
53
49
 
54
50
  it "stops the rsync daemon" do
55
- @r.start
51
+ @r.start(directory)
56
52
 
57
53
  File.should_receive(:read).with("rsync.pid").and_return("12345")
58
54
  Kernel.should_receive(:system).with("kill 12345")
59
55
 
60
56
  @r.stop
61
57
  end
62
-
63
- it "only tries to stop if the daemon is started" do
64
- Kernel.should_not_receive(:system)
65
-
66
- @r.stop
67
- end
68
-
69
- it "can be restarted" do
70
- Kernel.should_receive(:system).exactly(3).times
71
-
72
- @r.start
73
- @r.stop
74
- @r.start
75
- end
76
58
  end
@@ -4,7 +4,6 @@ describe ShutdownManager do
4
4
  let(:protocol){ stub("Originator Protocol", :cancel_job => nil, :disconnect => nil)}
5
5
 
6
6
  let(:job_state){ stub("JobState", cancel: nil)}
7
- let(:rsync_daemon) { stub("Rsync Daemon", :stop => true)}
8
7
 
9
8
  describe '#cancel_job' do
10
9
  it "call JobState#cancel" do
@@ -20,20 +19,13 @@ describe ShutdownManager do
20
19
  shutdown_manager(protocol: protocol).cancel_job
21
20
  end
22
21
 
23
- it "stops the rsync daemon" do
24
- rsync_daemon.should_receive(:stop)
25
-
26
- shutdown_manager(rsync_daemon: rsync_daemon).cancel_job
27
- end
28
-
29
22
  it 'finishes cancelling job even when some cancelling steps fail' do
30
23
  protocol.should_receive(:cancel_job).and_raise StandardError
31
24
  job_state.should_receive(:cancel).and_raise StandardError
32
25
  protocol.should_receive(:disconnect).and_raise StandardError
33
- rsync_daemon.should_receive(:stop).and_raise StandardError
34
26
 
35
27
  expect {
36
- shutdown_manager(protocol: protocol, job_state: job_state, rsync_daemon: rsync_daemon).cancel_job
28
+ shutdown_manager(protocol: protocol, job_state: job_state).cancel_job
37
29
  }.to raise_error StandardError
38
30
  end
39
31
  end
@@ -41,8 +33,7 @@ describe ShutdownManager do
41
33
  def shutdown_manager(args)
42
34
  defaults = {
43
35
  protocol: protocol,
44
- job_state: job_state,
45
- rsync_daemon: rsync_daemon
36
+ job_state: job_state
46
37
  }
47
38
  ShutdownManager.new(defaults.merge(args))
48
39
  end
@@ -3,6 +3,7 @@ require 'gorgon/source_tree_syncer'
3
3
  describe SourceTreeSyncer.new("") do
4
4
  it { should respond_to :exclude= }
5
5
  it { should respond_to :sync }
6
+ it { should respond_to :push }
6
7
  it { should respond_to :sys_command }
7
8
  it { should respond_to :remove_temp_dir }
8
9
  it { should respond_to :success? }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gorgon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 0.7.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Fitzsimmons
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2014-04-04 00:00:00.000000000 Z
15
+ date: 2014-05-02 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rake
@@ -360,9 +360,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
360
360
  version: '0'
361
361
  required_rubygems_version: !ruby/object:Gem::Requirement
362
362
  requirements:
363
- - - ! '>='
363
+ - - ! '>'
364
364
  - !ruby/object:Gem::Version
365
- version: '0'
365
+ version: 1.3.1
366
366
  requirements: []
367
367
  rubyforge_project: gorgon
368
368
  rubygems_version: 2.1.11