gorgon 0.6.1 → 0.6.2
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.
- 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
|