gorgon 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +5 -9
- data/gorgon.gemspec +1 -1
- data/lib/gorgon/originator.rb +12 -2
- data/lib/gorgon/progress_bar_view.rb +2 -5
- data/lib/gorgon/rsync_daemon.rb +34 -7
- data/lib/gorgon/version.rb +1 -1
- data/spec/originator_spec.rb +11 -0
- data/spec/rsync_daemon_spec.rb +6 -5
- metadata +6 -6
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
gorgon (0.6.
|
5
|
-
amqp (~>
|
4
|
+
gorgon (0.6.2)
|
5
|
+
amqp (~> 1.1.0)
|
6
6
|
awesome_print
|
7
7
|
colorize (~> 0.5.8)
|
8
8
|
open4 (~> 1.3.0)
|
@@ -13,13 +13,9 @@ PATH
|
|
13
13
|
GEM
|
14
14
|
remote: http://rubygems.org/
|
15
15
|
specs:
|
16
|
-
amq-
|
17
|
-
|
18
|
-
|
19
|
-
amq-protocol (1.2.0)
|
20
|
-
amqp (0.9.10)
|
21
|
-
amq-client (~> 0.9.12)
|
22
|
-
amq-protocol (~> 1.2.0)
|
16
|
+
amq-protocol (1.8.0)
|
17
|
+
amqp (1.1.0)
|
18
|
+
amq-protocol (>= 1.8.0)
|
23
19
|
eventmachine
|
24
20
|
awesome_print (1.2.0)
|
25
21
|
colorize (0.5.8)
|
data/gorgon.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_development_dependency "test-unit"
|
23
23
|
s.add_development_dependency "rspec", '~>2.11.0'
|
24
24
|
|
25
|
-
s.add_runtime_dependency "amqp", '~>
|
25
|
+
s.add_runtime_dependency "amqp", '~> 1.1.0'
|
26
26
|
s.add_runtime_dependency "awesome_print"
|
27
27
|
s.add_runtime_dependency "open4", '~>1.3.0'
|
28
28
|
s.add_runtime_dependency "ruby-progressbar", '~>1.0.1'
|
data/lib/gorgon/originator.rb
CHANGED
@@ -25,7 +25,7 @@ class Originator
|
|
25
25
|
|
26
26
|
publish
|
27
27
|
@logger.log "Originator finished successfully"
|
28
|
-
rescue
|
28
|
+
rescue StandardError
|
29
29
|
puts "Unhandled exception in originator:"
|
30
30
|
puts $!.message
|
31
31
|
puts $!.backtrace.join("\n")
|
@@ -51,8 +51,18 @@ class Originator
|
|
51
51
|
|
52
52
|
def publish
|
53
53
|
@logger = OriginatorLogger.new configuration[:originator_log_file]
|
54
|
+
|
55
|
+
if files.empty?
|
56
|
+
$stderr.puts "There are no files to test! Quitting."
|
57
|
+
exit 2
|
58
|
+
end
|
59
|
+
|
60
|
+
if !@rsync_daemon.start
|
61
|
+
@logger.log_error "rsync daemon didn't start!"
|
62
|
+
exit 1
|
63
|
+
end
|
64
|
+
|
54
65
|
@protocol = OriginatorProtocol.new @logger
|
55
|
-
@rsync_daemon.start
|
56
66
|
|
57
67
|
EventMachine.run do
|
58
68
|
@logger.log "Connecting..."
|
@@ -97,7 +97,7 @@ private
|
|
97
97
|
@job_state.each_failed_test do |test|
|
98
98
|
puts "\n" + ('*' * 80).magenta #light_red
|
99
99
|
puts("File '#{test[:filename].colorize(Colors::FILENAME)}' failed/crashed at " \
|
100
|
-
+ "'#{test[:hostname].colorize(Colors::HOST)}'\n")
|
100
|
+
+ "'#{test[:hostname].colorize(Colors::HOST)}:#{test[:worker_id]}'\n")
|
101
101
|
msg = build_fail_message test[:failures]
|
102
102
|
puts "#{msg}\n"
|
103
103
|
end
|
@@ -137,10 +137,7 @@ private
|
|
137
137
|
result = "#{'Test name'.light_yellow}: #{failure[:test_name]}"
|
138
138
|
result << "\n#{failure[:class].red}" if failure[:class]
|
139
139
|
result << "\n#{'Message:'.light_yellow} \n\t#{failure[:message]}" if failure[:message]
|
140
|
-
|
141
|
-
result << "\n#{'In:'.light_yellow} \n\t"
|
142
|
-
result << failure[:location].join("\n\t")
|
143
|
-
end
|
140
|
+
result << "\n"
|
144
141
|
result
|
145
142
|
end
|
146
143
|
end
|
data/lib/gorgon/rsync_daemon.rb
CHANGED
@@ -2,6 +2,9 @@ require "tmpdir"
|
|
2
2
|
|
3
3
|
class RsyncDaemon
|
4
4
|
#for now, creates a readonly rsync daemon for the current directory on the mountpath "src"
|
5
|
+
RSYNC_DIR_NAME = "#{Dir.tmpdir}/gorgon_rsync_daemon"
|
6
|
+
RSYNC_PORT = 43434
|
7
|
+
PID_FILE = 'rsync.pid'
|
5
8
|
|
6
9
|
def initialize
|
7
10
|
@project_directory = Dir.pwd
|
@@ -10,9 +13,15 @@ class RsyncDaemon
|
|
10
13
|
|
11
14
|
def start
|
12
15
|
return if @started
|
13
|
-
|
16
|
+
|
17
|
+
if !port_available?
|
18
|
+
puts port_busy_msg
|
19
|
+
return false
|
20
|
+
end
|
21
|
+
|
22
|
+
Dir.mkdir(RSYNC_DIR_NAME)
|
14
23
|
success = nil
|
15
|
-
Dir.chdir(
|
24
|
+
Dir.chdir(RSYNC_DIR_NAME) do
|
16
25
|
File.write("rsyncd.conf", rsyncd_config_string(@project_directory))
|
17
26
|
|
18
27
|
success = Kernel.system("rsync --daemon --config rsyncd.conf")
|
@@ -30,13 +39,14 @@ class RsyncDaemon
|
|
30
39
|
return unless @started
|
31
40
|
|
32
41
|
success = nil
|
33
|
-
Dir.chdir(
|
34
|
-
pid = File.read(
|
42
|
+
Dir.chdir(RSYNC_DIR_NAME) do
|
43
|
+
pid = File.read(PID_FILE)
|
35
44
|
success = Kernel.system("kill #{pid}")
|
36
45
|
end
|
37
46
|
|
38
47
|
if success
|
39
48
|
@started = false
|
49
|
+
FileUtils::remove_entry_secure(RSYNC_DIR_NAME)
|
40
50
|
return true
|
41
51
|
else
|
42
52
|
return false
|
@@ -47,8 +57,8 @@ class RsyncDaemon
|
|
47
57
|
|
48
58
|
def rsyncd_config_string(shared_dir)
|
49
59
|
return <<-EOF
|
50
|
-
port =
|
51
|
-
pid file =
|
60
|
+
port = #{RSYNC_PORT}
|
61
|
+
pid file = #{PID_FILE}
|
52
62
|
|
53
63
|
[src]
|
54
64
|
path = #{@project_directory}
|
@@ -56,4 +66,21 @@ pid file = rsync.pid
|
|
56
66
|
use chroot = false
|
57
67
|
EOF
|
58
68
|
end
|
59
|
-
|
69
|
+
|
70
|
+
def port_available?
|
71
|
+
begin
|
72
|
+
s = TCPServer.new('localhost', RSYNC_PORT)
|
73
|
+
s.close
|
74
|
+
return true
|
75
|
+
rescue Errno::EADDRINUSE => _
|
76
|
+
return false
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def port_busy_msg
|
81
|
+
<<-MSG
|
82
|
+
ERROR: port #{RSYNC_PORT} is being used. Maybe another rsync daemon is running.
|
83
|
+
Kill pid in #{RSYNC_DIR_NAME}/#{PID_FILE} or check no other process is using that port."
|
84
|
+
MSG
|
85
|
+
end
|
86
|
+
end
|
data/lib/gorgon/version.rb
CHANGED
data/spec/originator_spec.rb
CHANGED
@@ -15,6 +15,7 @@ describe Originator do
|
|
15
15
|
before do
|
16
16
|
OriginatorLogger.stub(:new).and_return originator_logger
|
17
17
|
RsyncDaemon.stub(:new).and_return rsync_daemon
|
18
|
+
Dir.stub(:[]).and_return(["file"])
|
18
19
|
@originator = Originator.new
|
19
20
|
end
|
20
21
|
|
@@ -42,6 +43,16 @@ describe Originator do
|
|
42
43
|
|
43
44
|
@originator.publish
|
44
45
|
end
|
46
|
+
|
47
|
+
it "errors and halts when there are no test files" do
|
48
|
+
Dir.stub(:[] => [])
|
49
|
+
|
50
|
+
$stderr.should_receive(:puts)
|
51
|
+
OriginatorProtocol.should_not_receive(:new)
|
52
|
+
rsync_daemon.should_not_receive(:start)
|
53
|
+
|
54
|
+
expect { @originator.publish }.to raise_error(SystemExit)
|
55
|
+
end
|
45
56
|
end
|
46
57
|
|
47
58
|
describe "#cancel_job" do
|
data/spec/rsync_daemon_spec.rb
CHANGED
@@ -3,9 +3,10 @@ require 'gorgon/rsync_daemon'
|
|
3
3
|
describe RsyncDaemon do
|
4
4
|
before(:each) do
|
5
5
|
Kernel.stub(:system => true)
|
6
|
-
Dir.stub(:
|
6
|
+
Dir.stub(:mkdir => nil, :pwd => "/lol/hax")
|
7
7
|
Dir.stub(:chdir).and_yield
|
8
8
|
File.stub(:write => 100, :read => "12345")
|
9
|
+
FileUtils.stub(:remove_entry_secure => nil)
|
9
10
|
@r = RsyncDaemon.new
|
10
11
|
end
|
11
12
|
|
@@ -15,9 +16,9 @@ describe RsyncDaemon do
|
|
15
16
|
@r.start
|
16
17
|
end
|
17
18
|
|
18
|
-
it "creates a temporary
|
19
|
-
Dir.should_receive(:
|
20
|
-
Dir.should_receive(:chdir).with(
|
19
|
+
it "creates a directory in temporary dir for the configuration and pid files" do
|
20
|
+
Dir.should_receive(:mkdir).with(RsyncDaemon::RSYNC_DIR_NAME)
|
21
|
+
Dir.should_receive(:chdir).with(RsyncDaemon::RSYNC_DIR_NAME)
|
21
22
|
|
22
23
|
@r.start
|
23
24
|
end
|
@@ -72,4 +73,4 @@ EOF
|
|
72
73
|
@r.stop
|
73
74
|
@r.start
|
74
75
|
end
|
75
|
-
end
|
76
|
+
end
|
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.
|
4
|
+
version: 0.6.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2013-
|
16
|
+
date: 2013-11-01 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: rake
|
@@ -70,7 +70,7 @@ dependencies:
|
|
70
70
|
requirements:
|
71
71
|
- - ~>
|
72
72
|
- !ruby/object:Gem::Version
|
73
|
-
version:
|
73
|
+
version: 1.1.0
|
74
74
|
type: :runtime
|
75
75
|
prerelease: false
|
76
76
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -78,7 +78,7 @@ dependencies:
|
|
78
78
|
requirements:
|
79
79
|
- - ~>
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
81
|
+
version: 1.1.0
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: awesome_print
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
@@ -324,7 +324,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
324
324
|
version: '0'
|
325
325
|
segments:
|
326
326
|
- 0
|
327
|
-
hash:
|
327
|
+
hash: 3410208500792599810
|
328
328
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
329
329
|
none: false
|
330
330
|
requirements:
|
@@ -333,7 +333,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
333
333
|
version: '0'
|
334
334
|
segments:
|
335
335
|
- 0
|
336
|
-
hash:
|
336
|
+
hash: 3410208500792599810
|
337
337
|
requirements: []
|
338
338
|
rubyforge_project: gorgon
|
339
339
|
rubygems_version: 1.8.25
|