gorgon 0.0.1

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.
Files changed (43) hide show
  1. data/.gitignore +8 -0
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +52 -0
  4. data/README.md +53 -0
  5. data/Rakefile +1 -0
  6. data/bin/gorgon +41 -0
  7. data/gorgon.gemspec +33 -0
  8. data/lib/gorgon.rb +6 -0
  9. data/lib/gorgon/amqp_service.rb +39 -0
  10. data/lib/gorgon/callback_handler.rb +21 -0
  11. data/lib/gorgon/configuration.rb +9 -0
  12. data/lib/gorgon/failures_printer.rb +37 -0
  13. data/lib/gorgon/g_logger.rb +22 -0
  14. data/lib/gorgon/host_state.rb +31 -0
  15. data/lib/gorgon/job.rb +26 -0
  16. data/lib/gorgon/job_definition.rb +24 -0
  17. data/lib/gorgon/job_state.rb +119 -0
  18. data/lib/gorgon/listener.rb +147 -0
  19. data/lib/gorgon/originator.rb +120 -0
  20. data/lib/gorgon/originator_logger.rb +36 -0
  21. data/lib/gorgon/originator_protocol.rb +65 -0
  22. data/lib/gorgon/pipe_manager.rb +55 -0
  23. data/lib/gorgon/progress_bar_view.rb +121 -0
  24. data/lib/gorgon/source_tree_syncer.rb +37 -0
  25. data/lib/gorgon/testunit_runner.rb +50 -0
  26. data/lib/gorgon/version.rb +3 -0
  27. data/lib/gorgon/worker.rb +103 -0
  28. data/lib/gorgon/worker_manager.rb +148 -0
  29. data/lib/gorgon/worker_watcher.rb +22 -0
  30. data/spec/callback_handler_spec.rb +77 -0
  31. data/spec/failures_printer_spec.rb +66 -0
  32. data/spec/host_state_spec.rb +65 -0
  33. data/spec/job_definition_spec.rb +20 -0
  34. data/spec/job_state_spec.rb +231 -0
  35. data/spec/listener_spec.rb +194 -0
  36. data/spec/originator_logger_spec.rb +40 -0
  37. data/spec/originator_protocol_spec.rb +134 -0
  38. data/spec/originator_spec.rb +134 -0
  39. data/spec/progress_bar_view_spec.rb +98 -0
  40. data/spec/source_tree_syncer_spec.rb +65 -0
  41. data/spec/worker_manager_spec.rb +23 -0
  42. data/spec/worker_spec.rb +114 -0
  43. metadata +270 -0
@@ -0,0 +1,23 @@
1
+ require 'gorgon/worker_manager'
2
+
3
+ describe WorkerManager do
4
+ let(:exchange) { stub("Bunny Exchange", :publish => nil) }
5
+ let(:queue) { stub("Queue", :bind => nil, :subscribe => nil, :delete => nil,
6
+ :pop => {:payload => :queue_empty}) }
7
+ let(:bunny) { stub("Bunny", :start => nil, :exchange => exchange,
8
+ :queue => queue, :stop => nil) }
9
+ before do
10
+ Bunny.stub(:new).and_return(bunny)
11
+ STDIN.should_receive(:read).and_return '{"source_tree_path":"path/to/source",
12
+ "sync_exclude":["log"]}'
13
+ end
14
+
15
+ describe ".build" do
16
+ it "should load_configuration_from_file" do
17
+ Configuration.stub!(:load_configuration_from_file).and_return({})
18
+ Configuration.should_receive(:load_configuration_from_file).with("file.json")
19
+
20
+ WorkerManager.build "file.json"
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,114 @@
1
+ require 'gorgon/worker'
2
+
3
+ class FakeAmqp
4
+ def initialize mock_queue, mock_exchange
5
+ @mock_queue = mock_queue
6
+ @mock_exchange = mock_exchange
7
+ end
8
+
9
+ def start_worker queue_name, exchange_name
10
+ yield @mock_queue, @mock_exchange
11
+ end
12
+ end
13
+
14
+ describe Worker do
15
+ WORKER_ID = 1
16
+ let(:file_queue) { double("Queue") }
17
+ let(:reply_exchange) { double("Exchange") }
18
+ let(:fake_amqp) { fake_amqp = FakeAmqp.new file_queue, reply_exchange }
19
+ let(:test_runner) { double("Test Runner") }
20
+ let(:callback_handler) { stub("Callback Handler", :before_start => nil, :after_complete => nil) }
21
+
22
+ let(:params) {
23
+ {
24
+ :amqp => fake_amqp,
25
+ :file_queue_name => "queue",
26
+ :reply_exchange_name => "exchange",
27
+ :worker_id => WORKER_ID,
28
+ :test_runner => test_runner,
29
+ :callback_handler => callback_handler
30
+ }
31
+ }
32
+
33
+ describe '#work' do
34
+ it 'should do nothing if the file queue is empty' do
35
+ file_queue.should_receive(:pop).and_return(nil)
36
+
37
+ worker = Worker.new params
38
+ worker.work
39
+ end
40
+
41
+ it "should send start message when file queue is not empty" do
42
+ file_queue.should_receive(:pop).and_return("testfile1", nil)
43
+
44
+ reply_exchange.should_receive(:publish) do |msg|
45
+ msg[:action].should == :start
46
+ msg[:filename].should == 'testfile1'
47
+ end
48
+ reply_exchange.should_receive(:publish).with(any_args())
49
+
50
+ test_runner.should_receive(:run_file).with("testfile1").and_return({:type => :pass, :time => 0})
51
+
52
+ worker = Worker.new params
53
+
54
+ worker.work
55
+ end
56
+
57
+ it "should send finish message when test run is successful" do
58
+ file_queue.should_receive(:pop).and_return("testfile1", nil)
59
+
60
+ reply_exchange.should_receive(:publish).once
61
+ reply_exchange.should_receive(:publish) do |msg|
62
+ msg[:action].should == :finish
63
+ msg[:type].should == :pass
64
+ msg[:filename].should == 'testfile1'
65
+ end
66
+
67
+ test_runner.should_receive(:run_file).with('testfile1').and_return({:type => :pass, :time => 0})
68
+
69
+ worker = Worker.new params
70
+
71
+ worker.work
72
+ end
73
+
74
+ it "should send finish message when test run has failures" do
75
+ failures = stub
76
+
77
+ file_queue.should_receive(:pop).and_return("testfile1", nil)
78
+
79
+ reply_exchange.should_receive(:publish).once
80
+ reply_exchange.should_receive(:publish) do |msg|
81
+ msg[:action].should == :finish
82
+ msg[:type].should == :fail
83
+ msg[:filename].should == 'testfile1'
84
+ msg[:failures].should == failures
85
+ end
86
+
87
+ test_runner.should_receive(:run_file).and_return({:type => :fail, :time => 0, :failures => failures})
88
+
89
+ worker = Worker.new params
90
+
91
+ worker.work
92
+ end
93
+
94
+ it "should notify the callback framework that it has started" do
95
+ file_queue.stub(:pop => nil)
96
+ callback_handler.should_receive(:before_start)
97
+
98
+ worker = Worker.new params
99
+
100
+ worker.work
101
+ end
102
+
103
+ it "should notify the callback framework when it finishes" do
104
+ file_queue.stub(:pop => nil)
105
+ callback_handler.should_receive(:after_complete)
106
+
107
+ worker = Worker.new params
108
+
109
+ worker.work
110
+ end
111
+
112
+ end
113
+
114
+ end
metadata ADDED
@@ -0,0 +1,270 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gorgon
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Justin Fitzsimmons
9
+ - Sean Kirby
10
+ - Victor Savkin
11
+ - Clemens Park
12
+ - Arturo Pie
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+ date: 2012-09-18 00:00:00.000000000 Z
17
+ dependencies:
18
+ - !ruby/object:Gem::Dependency
19
+ name: rspec
20
+ requirement: !ruby/object:Gem::Requirement
21
+ none: false
22
+ requirements:
23
+ - - ! '>='
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ type: :development
27
+ prerelease: false
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ - !ruby/object:Gem::Dependency
35
+ name: rake
36
+ requirement: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ type: :development
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ - !ruby/object:Gem::Dependency
51
+ name: amqp
52
+ requirement: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: 0.9.7
58
+ type: :runtime
59
+ prerelease: false
60
+ version_requirements: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 0.9.7
66
+ - !ruby/object:Gem::Dependency
67
+ name: awesome_print
68
+ requirement: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ type: :runtime
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: open4
84
+ requirement: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 1.3.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ~>
96
+ - !ruby/object:Gem::Version
97
+ version: 1.3.0
98
+ - !ruby/object:Gem::Dependency
99
+ name: yajl-ruby
100
+ requirement: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ~>
104
+ - !ruby/object:Gem::Version
105
+ version: 1.1.0
106
+ type: :runtime
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ~>
112
+ - !ruby/object:Gem::Version
113
+ version: 1.1.0
114
+ - !ruby/object:Gem::Dependency
115
+ name: uuidtools
116
+ requirement: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ~>
120
+ - !ruby/object:Gem::Version
121
+ version: 2.1.3
122
+ type: :runtime
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ~>
128
+ - !ruby/object:Gem::Version
129
+ version: 2.1.3
130
+ - !ruby/object:Gem::Dependency
131
+ name: test-unit
132
+ requirement: !ruby/object:Gem::Requirement
133
+ none: false
134
+ requirements:
135
+ - - ! '>='
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :runtime
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ! '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ - !ruby/object:Gem::Dependency
147
+ name: bunny
148
+ requirement: !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ~>
152
+ - !ruby/object:Gem::Version
153
+ version: 0.8.0
154
+ type: :runtime
155
+ prerelease: false
156
+ version_requirements: !ruby/object:Gem::Requirement
157
+ none: false
158
+ requirements:
159
+ - - ~>
160
+ - !ruby/object:Gem::Version
161
+ version: 0.8.0
162
+ - !ruby/object:Gem::Dependency
163
+ name: ruby-progressbar
164
+ requirement: !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ~>
168
+ - !ruby/object:Gem::Version
169
+ version: 1.0.1
170
+ type: :runtime
171
+ prerelease: false
172
+ version_requirements: !ruby/object:Gem::Requirement
173
+ none: false
174
+ requirements:
175
+ - - ~>
176
+ - !ruby/object:Gem::Version
177
+ version: 1.0.1
178
+ - !ruby/object:Gem::Dependency
179
+ name: colorize
180
+ requirement: !ruby/object:Gem::Requirement
181
+ none: false
182
+ requirements:
183
+ - - ~>
184
+ - !ruby/object:Gem::Version
185
+ version: 0.5.8
186
+ type: :runtime
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ none: false
190
+ requirements:
191
+ - - ~>
192
+ - !ruby/object:Gem::Version
193
+ version: 0.5.8
194
+ description: Gorgon provides a method for distributing the workload of running a ruby
195
+ test suites. It relies on amqp for message passing, and rsync for the synchronization
196
+ of source code.
197
+ email:
198
+ - justin@fitzsimmons.ca
199
+ executables:
200
+ - gorgon
201
+ extensions: []
202
+ extra_rdoc_files: []
203
+ files:
204
+ - .gitignore
205
+ - Gemfile
206
+ - Gemfile.lock
207
+ - README.md
208
+ - Rakefile
209
+ - bin/gorgon
210
+ - gorgon.gemspec
211
+ - lib/gorgon.rb
212
+ - lib/gorgon/amqp_service.rb
213
+ - lib/gorgon/callback_handler.rb
214
+ - lib/gorgon/configuration.rb
215
+ - lib/gorgon/failures_printer.rb
216
+ - lib/gorgon/g_logger.rb
217
+ - lib/gorgon/host_state.rb
218
+ - lib/gorgon/job.rb
219
+ - lib/gorgon/job_definition.rb
220
+ - lib/gorgon/job_state.rb
221
+ - lib/gorgon/listener.rb
222
+ - lib/gorgon/originator.rb
223
+ - lib/gorgon/originator_logger.rb
224
+ - lib/gorgon/originator_protocol.rb
225
+ - lib/gorgon/pipe_manager.rb
226
+ - lib/gorgon/progress_bar_view.rb
227
+ - lib/gorgon/source_tree_syncer.rb
228
+ - lib/gorgon/testunit_runner.rb
229
+ - lib/gorgon/version.rb
230
+ - lib/gorgon/worker.rb
231
+ - lib/gorgon/worker_manager.rb
232
+ - lib/gorgon/worker_watcher.rb
233
+ - spec/callback_handler_spec.rb
234
+ - spec/failures_printer_spec.rb
235
+ - spec/host_state_spec.rb
236
+ - spec/job_definition_spec.rb
237
+ - spec/job_state_spec.rb
238
+ - spec/listener_spec.rb
239
+ - spec/originator_logger_spec.rb
240
+ - spec/originator_protocol_spec.rb
241
+ - spec/originator_spec.rb
242
+ - spec/progress_bar_view_spec.rb
243
+ - spec/source_tree_syncer_spec.rb
244
+ - spec/worker_manager_spec.rb
245
+ - spec/worker_spec.rb
246
+ homepage: ''
247
+ licenses: []
248
+ post_install_message:
249
+ rdoc_options: []
250
+ require_paths:
251
+ - lib
252
+ required_ruby_version: !ruby/object:Gem::Requirement
253
+ none: false
254
+ requirements:
255
+ - - ! '>='
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ required_rubygems_version: !ruby/object:Gem::Requirement
259
+ none: false
260
+ requirements:
261
+ - - ! '>='
262
+ - !ruby/object:Gem::Version
263
+ version: '0'
264
+ requirements: []
265
+ rubyforge_project: gorgon
266
+ rubygems_version: 1.8.24
267
+ signing_key:
268
+ specification_version: 3
269
+ summary: Distributed testing for ruby with centralized management
270
+ test_files: []