gorgon 0.11.0 → 0.11.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +0 -2
  3. data/.rspec +2 -0
  4. data/.travis.yml +10 -0
  5. data/Dockerfile +25 -0
  6. data/Gemfile.lock +20 -15
  7. data/README.md +33 -6
  8. data/Rakefile +5 -0
  9. data/architecture.md +2 -2
  10. data/bin/gorgon +2 -114
  11. data/daemon_with_upstart_and_rvm.md +1 -1
  12. data/docker-compose.yml +28 -0
  13. data/file_server/Dockerfile +8 -0
  14. data/file_server/test_gorgon.pem.pub +1 -0
  15. data/gorgon.gemspec +2 -2
  16. data/gorgon_secret.json.sample +5 -0
  17. data/lib/gorgon/amqp_service.rb +28 -26
  18. data/lib/gorgon/callback_handler.rb +28 -26
  19. data/lib/gorgon/colors.rb +6 -4
  20. data/lib/gorgon/command.rb +145 -0
  21. data/lib/gorgon/configuration.rb +45 -5
  22. data/lib/gorgon/core_ext/hash/deep_merge.rb +21 -0
  23. data/lib/gorgon/crash_reporter.rb +15 -13
  24. data/lib/gorgon/failures_printer.rb +27 -26
  25. data/lib/gorgon/g_logger.rb +19 -17
  26. data/lib/gorgon/gem_command_handler.rb +41 -39
  27. data/lib/gorgon/gem_service.rb +60 -57
  28. data/lib/gorgon/host_state.rb +23 -21
  29. data/lib/gorgon/job.rb +19 -17
  30. data/lib/gorgon/job_definition.rb +23 -21
  31. data/lib/gorgon/job_state.rb +93 -90
  32. data/lib/gorgon/listener.rb +137 -146
  33. data/lib/gorgon/listener_installer.rb +98 -96
  34. data/lib/gorgon/originator.rb +170 -167
  35. data/lib/gorgon/originator_logger.rb +30 -28
  36. data/lib/gorgon/originator_protocol.rb +85 -83
  37. data/lib/gorgon/ping_service.rb +44 -42
  38. data/lib/gorgon/pipe_forker.rb +17 -15
  39. data/lib/gorgon/progress_bar_view.rb +109 -107
  40. data/lib/gorgon/rsync_daemon.rb +56 -54
  41. data/lib/gorgon/runtime_file_reader.rb +28 -27
  42. data/lib/gorgon/runtime_recorder.rb +27 -26
  43. data/lib/gorgon/settings/files_content.rb +27 -25
  44. data/lib/gorgon/settings/initial_files_creator.rb +58 -56
  45. data/lib/gorgon/settings/rails_project_files_content.rb +33 -31
  46. data/lib/gorgon/settings/simple_project_files_content.rb +11 -9
  47. data/lib/gorgon/shutdown_manager.rb +20 -18
  48. data/lib/gorgon/source_tree_syncer.rb +108 -69
  49. data/lib/gorgon/version.rb +1 -1
  50. data/lib/gorgon/worker.rb +130 -128
  51. data/lib/gorgon/worker_manager.rb +139 -137
  52. data/lib/gorgon_amq-protocol/.rspec +3 -0
  53. data/run_dev_environment.sh +3 -0
  54. data/run_gorgon.sh +3 -0
  55. data/run_listener.sh +3 -0
  56. data/run_test.sh +3 -0
  57. data/spec/callback_handler_spec.rb +10 -10
  58. data/spec/command_spec.rb +172 -0
  59. data/spec/configuration_spec.rb +62 -0
  60. data/spec/core_ext/hash/deep_merge_spec.rb +11 -0
  61. data/spec/crash_reporter_spec.rb +10 -10
  62. data/spec/dummy/.gitignore +3 -0
  63. data/spec/dummy/Gemfile +11 -0
  64. data/spec/dummy/Gemfile.lock +76 -0
  65. data/spec/dummy/README.md +23 -0
  66. data/spec/dummy/gorgon.json +30 -0
  67. data/spec/dummy/gorgon_callbacks.rb +68 -0
  68. data/spec/dummy/gorgon_listener.json +8 -0
  69. data/spec/dummy/integration_spec.rb +51 -0
  70. data/spec/{support/mock_app/app/mailers → dummy/log}/.gitkeep +0 -0
  71. data/spec/dummy/rspec_runner.rb +8 -0
  72. data/spec/dummy/spec/1_syntax_error_spec.rb +1 -0
  73. data/spec/dummy/spec/exception_spec.rb +5 -0
  74. data/spec/dummy/spec/failing_spec.rb +11 -0
  75. data/spec/dummy/spec/keeping_rspec_config_spec.rb +5 -0
  76. data/spec/dummy/spec/spec_helper.rb +13 -0
  77. data/spec/dummy/spec/successful_spec.rb +9 -0
  78. data/spec/dummy/spec/using_shared_example_spec.rb +3 -0
  79. data/spec/dummy/test/.rb +15 -0
  80. data/spec/dummy/test/minitest/mini1_test.rb +11 -0
  81. data/spec/dummy/test/minitest/mini2_test.rb +25 -0
  82. data/spec/dummy/test/unit/1_syntax_error_test.rb +9 -0
  83. data/spec/dummy/test/unit/exception_test.rb +14 -0
  84. data/spec/dummy/test/unit/failing_test.rb +17 -0
  85. data/spec/dummy/test/unit/successful_test.rb +9 -0
  86. data/spec/dummy/test_gorgon.pem +27 -0
  87. data/spec/end_to_end_spec.rb +142 -0
  88. data/spec/failures_printer_spec.rb +20 -20
  89. data/spec/gem_command_handler_spec.rb +24 -24
  90. data/spec/gem_service_spec.rb +18 -18
  91. data/spec/gorgon_rspec_formatter_spec.rb +12 -12
  92. data/spec/host_state_spec.rb +8 -8
  93. data/spec/job_definition_spec.rb +3 -3
  94. data/spec/job_state_spec.rb +46 -46
  95. data/spec/listener_spec.rb +67 -73
  96. data/spec/mini_test_runner_spec.rb +7 -7
  97. data/spec/originator_logger_spec.rb +6 -6
  98. data/spec/originator_protocol_spec.rb +38 -38
  99. data/spec/originator_spec.rb +78 -69
  100. data/spec/ping_service_spec.rb +14 -14
  101. data/spec/pipe_forker_spec.rb +13 -13
  102. data/spec/progress_bar_view_spec.rb +32 -32
  103. data/spec/rspec_runner_spec.rb +12 -12
  104. data/spec/rsync_daemon_spec.rb +18 -16
  105. data/spec/runtime_file_reader_spec.rb +12 -12
  106. data/spec/runtime_recorder_spec.rb +19 -19
  107. data/spec/shutdown_manager_spec.rb +9 -9
  108. data/spec/source_tree_syncer_spec.rb +148 -61
  109. data/spec/spec_helper.rb +3 -0
  110. data/spec/support/end_to_end_helpers.rb +16 -0
  111. data/spec/support/stream_helpers.rb +23 -0
  112. data/spec/unknown_runner_spec.rb +1 -1
  113. data/spec/worker_manager_spec.rb +23 -23
  114. data/spec/worker_spec.rb +70 -70
  115. metadata +84 -113
  116. data/spec/acceptance_spec_helper.rb +0 -7
  117. data/spec/support/mock_app/.gitignore +0 -15
  118. data/spec/support/mock_app/Gemfile +0 -39
  119. data/spec/support/mock_app/Gemfile.lock +0 -135
  120. data/spec/support/mock_app/README.rdoc +0 -261
  121. data/spec/support/mock_app/Rakefile +0 -7
  122. data/spec/support/mock_app/app/assets/images/rails.png +0 -0
  123. data/spec/support/mock_app/app/assets/javascripts/application.js +0 -15
  124. data/spec/support/mock_app/app/assets/stylesheets/application.css +0 -13
  125. data/spec/support/mock_app/app/controllers/application_controller.rb +0 -3
  126. data/spec/support/mock_app/app/helpers/application_helper.rb +0 -2
  127. data/spec/support/mock_app/app/models/.gitkeep +0 -0
  128. data/spec/support/mock_app/app/views/layouts/application.html.erb +0 -14
  129. data/spec/support/mock_app/config.ru +0 -4
  130. data/spec/support/mock_app/config/application.rb +0 -62
  131. data/spec/support/mock_app/config/boot.rb +0 -6
  132. data/spec/support/mock_app/config/database.yml +0 -25
  133. data/spec/support/mock_app/config/environment.rb +0 -5
  134. data/spec/support/mock_app/config/environments/development.rb +0 -37
  135. data/spec/support/mock_app/config/environments/production.rb +0 -67
  136. data/spec/support/mock_app/config/environments/test.rb +0 -37
  137. data/spec/support/mock_app/config/initializers/backtrace_silencers.rb +0 -7
  138. data/spec/support/mock_app/config/initializers/inflections.rb +0 -15
  139. data/spec/support/mock_app/config/initializers/mime_types.rb +0 -5
  140. data/spec/support/mock_app/config/initializers/secret_token.rb +0 -7
  141. data/spec/support/mock_app/config/initializers/session_store.rb +0 -8
  142. data/spec/support/mock_app/config/initializers/wrap_parameters.rb +0 -14
  143. data/spec/support/mock_app/config/locales/en.yml +0 -5
  144. data/spec/support/mock_app/config/routes.rb +0 -58
  145. data/spec/support/mock_app/db/seeds.rb +0 -7
  146. data/spec/support/mock_app/doc/README_FOR_APP +0 -2
  147. data/spec/support/mock_app/lib/assets/.gitkeep +0 -0
  148. data/spec/support/mock_app/lib/tasks/.gitkeep +0 -0
  149. data/spec/support/mock_app/log/.gitkeep +0 -0
  150. data/spec/support/mock_app/public/404.html +0 -26
  151. data/spec/support/mock_app/public/422.html +0 -26
  152. data/spec/support/mock_app/public/500.html +0 -25
  153. data/spec/support/mock_app/public/favicon.ico +0 -0
  154. data/spec/support/mock_app/public/index.html +0 -241
  155. data/spec/support/mock_app/public/robots.txt +0 -5
  156. data/spec/support/mock_app/script/rails +0 -6
  157. data/spec/support/mock_app/test/fixtures/.gitkeep +0 -0
  158. data/spec/support/mock_app/test/functional/.gitkeep +0 -0
  159. data/spec/support/mock_app/test/integration/.gitkeep +0 -0
  160. data/spec/support/mock_app/test/performance/browsing_test.rb +0 -12
  161. data/spec/support/mock_app/test/test_helper.rb +0 -13
  162. data/spec/support/mock_app/test/unit/.gitkeep +0 -0
  163. data/spec/support/mock_app/test/unit/passing_test.rb +0 -7
  164. data/spec/support/mock_app/vendor/assets/javascripts/.gitkeep +0 -0
  165. data/spec/support/mock_app/vendor/assets/stylesheets/.gitkeep +0 -0
  166. data/spec/support/mock_app/vendor/plugins/.gitkeep +0 -0
  167. data/spec/support/originator_handler.rb +0 -8
@@ -0,0 +1,3 @@
1
+ RSpec.configure do |config|
2
+ config.exclude_pattern = "spec/dummy/**/*"
3
+ end
@@ -0,0 +1,16 @@
1
+ module Gorgon
2
+ module EndToEndHelpers
3
+ COLOR_REGEX = /\e\[(\d+)(;\d+)*m/
4
+ PATH_REGEX = /^\/.+\n/
5
+ AFTER_RUNNING_REGEX = /running after_job_finishes/
6
+
7
+ def extract_hunk(outputs, hunkregex, strip_backtrace: false)
8
+ hunk = outputs.grep(hunkregex)[0]
9
+ expect(hunk).not_to be_nil
10
+ hunk.gsub!(COLOR_REGEX, "")
11
+ hunk.gsub!(AFTER_RUNNING_REGEX, "")
12
+ hunk.gsub!(PATH_REGEX, "") if strip_backtrace
13
+ hunk
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ module Gorgon
2
+ module StreamHelpers
3
+ # Taken from http://stackoverflow.com/a/8959520/100466
4
+ def silence_streams(*streams)
5
+ original_streams = streams.map { |stream| stream.dup }
6
+ streams.each do |stream|
7
+ stream.reopen(dev_null)
8
+ stream.sync = true
9
+ end
10
+ yield
11
+ ensure
12
+ streams.each_with_index do |stream, idx|
13
+ stream.reopen(original_streams[idx])
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def dev_null
20
+ @dev_null ||= (RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
21
+ end
22
+ end
23
+ end
@@ -14,7 +14,7 @@ describe UnknownRunner do
14
14
 
15
15
  describe "#runner" do
16
16
  it "returns :unknown_framework" do
17
- UnknownRunner.runner.should == :unknown_framework
17
+ expect(UnknownRunner.runner).to eq(:unknown_framework)
18
18
  end
19
19
  end
20
20
  end
@@ -1,52 +1,52 @@
1
1
  require 'gorgon/worker_manager'
2
2
 
3
- describe WorkerManager do
3
+ describe Gorgon::WorkerManager do
4
4
  let(:exchange) { double("GorgonBunny Exchange", :publish => nil) }
5
5
  let(:queue) { double("Queue", :bind => nil, :subscribe => nil, :delete => nil,
6
6
  :pop => {:payload => :queue_empty}) }
7
7
  let(:bunny) { double("GorgonBunny", :start => nil, :exchange => exchange,
8
8
  :queue => queue, :stop => nil) }
9
9
  before do
10
- STDIN.stub(:read).and_return "{}"
11
- STDOUT.stub(:reopen)
12
- STDERR.stub(:reopen)
13
- STDOUT.stub(:sync)
14
- STDERR.stub(:sync)
15
- GorgonBunny.stub(:new).and_return(bunny)
16
- Configuration.stub(:load_configuration_from_file).and_return({})
17
- EventMachine.stub(:run).and_yield
10
+ allow(STDIN).to receive(:read).and_return "{}"
11
+ allow(STDOUT).to receive(:reopen)
12
+ allow(STDERR).to receive(:reopen)
13
+ allow(STDOUT).to receive(:sync)
14
+ allow(STDERR).to receive(:sync)
15
+ allow(GorgonBunny).to receive(:new).and_return(bunny)
16
+ allow(Gorgon::Configuration).to receive(:load_configuration_from_file).and_return({})
17
+ allow(EventMachine).to receive(:run).and_yield
18
18
  end
19
19
 
20
20
  describe ".build" do
21
21
  it "should load_configuration_from_file" do
22
- STDIN.should_receive(:read).and_return '{"source_tree_path":"path/to/source",
22
+ expect(STDIN).to receive(:read).and_return '{"source_tree_path":"path/to/source",
23
23
  "sync":{"exclude":["log"]}}'
24
24
 
25
- Configuration.should_receive(:load_configuration_from_file).with("file.json").and_return({})
25
+ expect(Gorgon::Configuration).to receive(:load_configuration_from_file).with("file.json").and_return({})
26
26
 
27
- WorkerManager.build "file.json"
27
+ Gorgon::WorkerManager.build "file.json"
28
28
  end
29
29
 
30
30
  it "redirect output to a file since writing to a pipe may block when pipe is full" do
31
- File.should_receive(:open).with(WorkerManager::STDOUT_FILE, 'w').and_return(:file1)
32
- STDOUT.should_receive(:reopen).with(:file1)
33
- File.should_receive(:open).with(WorkerManager::STDERR_FILE, 'w').and_return(:file2)
34
- STDERR.should_receive(:reopen).with(:file2)
35
- WorkerManager.build ""
31
+ expect(File).to receive(:open).with(Gorgon::WorkerManager::STDOUT_FILE, 'w').and_return(:file1)
32
+ expect(STDOUT).to receive(:reopen).with(:file1)
33
+ expect(File).to receive(:open).with(Gorgon::WorkerManager::STDERR_FILE, 'w').and_return(:file2)
34
+ expect(STDERR).to receive(:reopen).with(:file2)
35
+ Gorgon::WorkerManager.build ""
36
36
  end
37
37
 
38
38
  it "use STDOUT#sync to flush output immediately so if an exception happens, we can grab the last\
39
39
  few lines of output and send it to originator. Order matters" do
40
- STDOUT.should_receive(:reopen).once.ordered
41
- STDOUT.should_receive(:sync=).with(true).once.ordered
42
- WorkerManager.build ""
40
+ expect(STDOUT).to receive(:reopen).once.ordered
41
+ expect(STDOUT).to receive(:sync=).with(true).once.ordered
42
+ Gorgon::WorkerManager.build ""
43
43
  end
44
44
 
45
45
  it "use STDERR#sync to flush output immediately so if an exception happens, we can grab the last\
46
46
  few lines of output and send it to originator. Order matters" do
47
- STDERR.should_receive(:reopen).once.ordered
48
- STDERR.should_receive(:sync=).with(true).once.ordered
49
- WorkerManager.build ""
47
+ expect(STDERR).to receive(:reopen).once.ordered
48
+ expect(STDERR).to receive(:sync=).with(true).once.ordered
49
+ Gorgon::WorkerManager.build ""
50
50
  end
51
51
  end
52
52
  end
@@ -11,7 +11,7 @@ class FakeAmqp
11
11
  end
12
12
  end
13
13
 
14
- describe Worker do
14
+ describe Gorgon::Worker do
15
15
  WORKER_ID = 1
16
16
  let(:file_queue) { double("Queue") }
17
17
  let(:reply_exchange) { double("Exchange", :publish => nil) }
@@ -36,43 +36,43 @@ describe Worker do
36
36
  let(:config) { {:connection => "", :log_file => "path/to/log_file"} }
37
37
  before do
38
38
  stub_streams
39
- AmqpService.stub(:new).and_return fake_amqp
40
- CallbackHandler.stub(:new).and_return callback_handler
41
- Worker.stub(:new)
39
+ allow(Gorgon::AmqpService).to receive(:new).and_return fake_amqp
40
+ allow(Gorgon::CallbackHandler).to receive(:new).and_return callback_handler
41
+ allow(Gorgon::Worker).to receive(:new)
42
42
  end
43
43
 
44
44
  it "redirects output to a file since writing to a pipe may block when pipe is full" do
45
- File.should_receive(:open).with(Worker.output_file(1, :out), 'w').and_return(:file1)
46
- STDOUT.should_receive(:reopen).with(:file1)
47
- File.should_receive(:open).with(Worker.output_file(1, :err), 'w').and_return(:file2)
48
- STDERR.should_receive(:reopen).with(:file2)
49
- Worker.build 1, config
45
+ expect(File).to receive(:open).with(Gorgon::Worker.output_file(1, :out), 'w').and_return(:file1)
46
+ expect(STDOUT).to receive(:reopen).with(:file1)
47
+ expect(File).to receive(:open).with(Gorgon::Worker.output_file(1, :err), 'w').and_return(:file2)
48
+ expect(STDERR).to receive(:reopen).with(:file2)
49
+ Gorgon::Worker.build 1, config
50
50
  end
51
51
 
52
52
  it "use STDOUT#sync to flush output immediately so if an exception happens, we can grab the last\
53
53
  few lines of output and send it to originator. Order matters" do
54
- STDOUT.should_receive(:reopen).once.ordered
55
- STDOUT.should_receive(:sync=).with(true).once.ordered
56
- Worker.build 1, config
54
+ expect(STDOUT).to receive(:reopen).once.ordered
55
+ expect(STDOUT).to receive(:sync=).with(true).once.ordered
56
+ Gorgon::Worker.build 1, config
57
57
  end
58
58
 
59
59
  it "use STDERR#sync to flush output immediately so if an exception happens, we can grab the last\
60
60
  few lines of output and send it to originator. Order matters" do
61
- STDERR.should_receive(:reopen).once.ordered
62
- STDERR.should_receive(:sync=).with(true).once.ordered
63
- Worker.build 1, config
61
+ expect(STDERR).to receive(:reopen).once.ordered
62
+ expect(STDERR).to receive(:sync=).with(true).once.ordered
63
+ Gorgon::Worker.build 1, config
64
64
  end
65
65
 
66
66
  it "creates a JobDefinition using a payload written to stdin" do
67
- STDIN.should_receive(:read).and_return '{ "key": "value" }'
68
- JobDefinition.should_receive(:new).with({:key => "value"}).and_return job_definition
69
- Worker.build 1, config
67
+ expect(STDIN).to receive(:read).and_return '{ "key": "value" }'
68
+ expect(Gorgon::JobDefinition).to receive(:new).with({:key => "value"}).and_return job_definition
69
+ Gorgon::Worker.build 1, config
70
70
  end
71
71
 
72
72
  it "creates a new worker" do
73
- JobDefinition.stub(:new).and_return job_definition
74
- Worker.should_receive(:new).with(params)
75
- Worker.build 1, config
73
+ allow(Gorgon::JobDefinition).to receive(:new).and_return job_definition
74
+ expect(Gorgon::Worker).to receive(:new).with(params)
75
+ Gorgon::Worker.build 1, config
76
76
  end
77
77
  end
78
78
 
@@ -80,42 +80,42 @@ few lines of output and send it to originator. Order matters" do
80
80
  before do
81
81
  stub_const("MiniTestRunner", :mini_test_runner)
82
82
  stub_const("MiniTest", :test)
83
- Worker.any_instance.stub(:initialize_logger)
84
- @worker = Worker.new params
85
- @worker.stub(:require_relative)
83
+ allow_any_instance_of(Gorgon::Worker).to receive(:initialize_logger)
84
+ @worker = Gorgon::Worker.new params
85
+ allow(@worker).to receive(:require_relative)
86
86
  end
87
87
 
88
88
  it 'should do nothing if the file queue is empty' do
89
- file_queue.should_receive(:pop).and_return(nil)
89
+ expect(file_queue).to receive(:pop).and_return(nil)
90
90
 
91
91
  @worker.work
92
92
  end
93
93
 
94
94
  it "should send start message when file queue is not empty" do
95
- file_queue.should_receive(:pop).and_return("testfile1", nil)
95
+ expect(file_queue).to receive(:pop).and_return("testfile1", nil)
96
96
 
97
- reply_exchange.should_receive(:publish) do |msg|
98
- msg[:action].should == :start
99
- msg[:filename].should == 'testfile1'
97
+ expect(reply_exchange).to receive(:publish) do |msg|
98
+ expect(msg[:action]).to eq(:start)
99
+ expect(msg[:filename]).to eq('testfile1')
100
100
  end
101
- reply_exchange.should_receive(:publish).with(any_args())
101
+ expect(reply_exchange).to receive(:publish).with(any_args())
102
102
 
103
- TestRunner.stub(:run_file).and_return({:type => :pass, :time => 0})
103
+ allow(Gorgon::TestRunner).to receive(:run_file).and_return({:type => :pass, :time => 0})
104
104
 
105
105
  @worker.work
106
106
  end
107
107
 
108
108
  it "should send finish message when test run is successful" do
109
- file_queue.should_receive(:pop).and_return("testfile1", nil)
109
+ expect(file_queue).to receive(:pop).and_return("testfile1", nil)
110
110
 
111
- reply_exchange.should_receive(:publish).once
112
- reply_exchange.should_receive(:publish) do |msg|
113
- msg[:action].should == :finish
114
- msg[:type].should == :pass
115
- msg[:filename].should == 'testfile1'
111
+ expect(reply_exchange).to receive(:publish).once
112
+ expect(reply_exchange).to receive(:publish) do |msg|
113
+ expect(msg[:action]).to eq(:finish)
114
+ expect(msg[:type]).to eq(:pass)
115
+ expect(msg[:filename]).to eq('testfile1')
116
116
  end
117
117
 
118
- TestRunner.stub(:run_file).and_return({:type => :pass, :time => 0})
118
+ allow(Gorgon::TestRunner).to receive(:run_file).and_return({:type => :pass, :time => 0})
119
119
 
120
120
  @worker.work
121
121
  end
@@ -123,31 +123,31 @@ few lines of output and send it to originator. Order matters" do
123
123
  it "should send finish message when test run has failures" do
124
124
  failures = double
125
125
 
126
- file_queue.should_receive(:pop).and_return("testfile1", nil)
126
+ expect(file_queue).to receive(:pop).and_return("testfile1", nil)
127
127
 
128
- reply_exchange.should_receive(:publish).once
129
- reply_exchange.should_receive(:publish) do |msg|
130
- msg[:action].should == :finish
131
- msg[:type].should == :fail
132
- msg[:filename].should == 'testfile1'
133
- msg[:failures].should == failures
128
+ expect(reply_exchange).to receive(:publish).once
129
+ expect(reply_exchange).to receive(:publish) do |msg|
130
+ expect(msg[:action]).to eq(:finish)
131
+ expect(msg[:type]).to eq(:fail)
132
+ expect(msg[:filename]).to eq('testfile1')
133
+ expect(msg[:failures]).to eq(failures)
134
134
  end
135
135
 
136
- TestRunner.stub(:run_file).and_return({:type => :fail, :time => 0, :failures => failures})
136
+ expect(Gorgon::TestRunner).to receive(:run_file).and_return({:type => :fail, :time => 0, :failures => failures})
137
137
 
138
138
  @worker.work
139
139
  end
140
140
 
141
141
  it "should notify the callback framework that it has started" do
142
- file_queue.stub(:pop => nil)
143
- callback_handler.should_receive(:before_start)
142
+ allow(file_queue).to receive(:pop).and_return(nil)
143
+ expect(callback_handler).to receive(:before_start)
144
144
 
145
145
  @worker.work
146
146
  end
147
147
 
148
148
  it "should notify the callback framework when it finishes" do
149
- file_queue.stub(:pop => nil)
150
- callback_handler.should_receive(:after_complete)
149
+ allow(file_queue).to receive(:pop).and_return(nil)
150
+ expect(callback_handler).to receive(:after_complete)
151
151
 
152
152
  @worker.work
153
153
  end
@@ -165,24 +165,24 @@ few lines of output and send it to originator. Order matters" do
165
165
 
166
166
  # ruby 1.9 defines MiniTest by default, so let's remove it for these test cases
167
167
  Object.send(:remove_const, :MiniTest)
168
- file_queue.stub(:pop).and_return("file_test.rb", nil)
169
- File.stub(:read).and_return("")
168
+ allow(file_queue).to receive(:pop).and_return("file_test.rb", nil)
169
+ allow(File).to receive(:read).and_return("")
170
170
  end
171
171
 
172
172
  it "runs file using TestUnitRunner when file doesn't end in _spec and Test is defined" do
173
173
  stub_const("Test", :test_unit)
174
174
 
175
- @worker.should_receive(:require_relative).with "test_unit_runner"
176
- TestRunner.should_receive(:run_file).with("file_test.rb", TestUnitRunner).and_return({})
175
+ expect(@worker).to receive(:require_relative).with "test_unit_runner"
176
+ expect(Gorgon::TestRunner).to receive(:run_file).with("file_test.rb", TestUnitRunner).and_return({})
177
177
 
178
178
  @worker.work
179
179
  end
180
180
 
181
181
  it "runs file using RspecRunner when file finishes in _spec.rb and Rspec is defined" do
182
- file_queue.stub(:pop).and_return("file_spec.rb", nil)
182
+ allow(file_queue).to receive(:pop).and_return("file_spec.rb", nil)
183
183
 
184
- @worker.should_receive(:require_relative).with "rspec_runner"
185
- TestRunner.should_receive(:run_file).with("file_spec.rb", RspecRunner).and_return({})
184
+ expect(@worker).to receive(:require_relative).with "rspec_runner"
185
+ expect(Gorgon::TestRunner).to receive(:run_file).with("file_spec.rb", RspecRunner).and_return({})
186
186
 
187
187
  @worker.work
188
188
  end
@@ -190,28 +190,28 @@ few lines of output and send it to originator. Order matters" do
190
190
  it "runs file using MiniTest when file name doesn't end in _spec.rb and MiniTest is defined" do
191
191
  MiniTest = Temp
192
192
 
193
- @worker.should_receive(:require_relative).with "mini_test_runner"
194
- TestRunner.should_receive(:run_file).with("file_test.rb", MiniTestRunner).and_return({})
193
+ expect(@worker).to receive(:require_relative).with "mini_test_runner"
194
+ expect(Gorgon::TestRunner).to receive(:run_file).with("file_test.rb", MiniTestRunner).and_return({})
195
195
  @worker.work
196
196
  end
197
197
 
198
198
  it "runs file using TestUnitRunner when file doesn't end in _spec.rb, MiniTest is defined but project is using test-unit gem" do
199
199
  MiniTest = Temp
200
- File.stub(:read).and_return("test-unit")
200
+ allow(File).to receive(:read).and_return("test-unit")
201
201
  stub_const("Test", :test_unit)
202
202
 
203
- @worker.should_receive(:require_relative).with "test_unit_runner"
204
- TestRunner.should_receive(:run_file).with("file_test.rb", TestUnitRunner).and_return({})
203
+ expect(@worker).to receive(:require_relative).with "test_unit_runner"
204
+ expect(Gorgon::TestRunner).to receive(:run_file).with("file_test.rb", TestUnitRunner).and_return({})
205
205
 
206
206
  @worker.work
207
207
  end
208
208
 
209
209
  it "uses UnknownRunner if the framework is unknown" do
210
210
  stub_const("UnknownRunner", :unknown_runner)
211
- file_queue.stub(:pop).and_return("file.rb", nil)
211
+ allow(file_queue).to receive(:pop).and_return("file.rb", nil)
212
212
 
213
- @worker.should_receive(:require_relative).with "unknown_runner"
214
- TestRunner.should_receive(:run_file).with("file.rb", UnknownRunner).and_return({})
213
+ expect(@worker).to receive(:require_relative).with "unknown_runner"
214
+ expect(Gorgon::TestRunner).to receive(:run_file).with("file.rb", UnknownRunner).and_return({})
215
215
 
216
216
  @worker.work
217
217
  end
@@ -226,10 +226,10 @@ few lines of output and send it to originator. Order matters" do
226
226
  private
227
227
 
228
228
  def stub_streams
229
- STDIN.stub(:read).and_return "{}"
230
- STDOUT.stub(:reopen)
231
- STDERR.stub(:reopen)
232
- STDOUT.stub(:sync)
233
- STDERR.stub(:sync)
229
+ allow(STDIN).to receive(:read).and_return "{}"
230
+ allow(STDOUT).to receive(:reopen)
231
+ allow(STDERR).to receive(:reopen)
232
+ allow(STDOUT).to receive(:sync)
233
+ allow(STDERR).to receive(:sync)
234
234
  end
235
235
  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.11.0
4
+ version: 0.11.1
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: 2016-10-28 00:00:00.000000000 Z
15
+ date: 2017-12-28 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rake
@@ -48,14 +48,14 @@ dependencies:
48
48
  requirements:
49
49
  - - "~>"
50
50
  - !ruby/object:Gem::Version
51
- version: 2.11.0
51
+ version: 3.5.0
52
52
  type: :development
53
53
  prerelease: false
54
54
  version_requirements: !ruby/object:Gem::Requirement
55
55
  requirements:
56
56
  - - "~>"
57
57
  - !ruby/object:Gem::Version
58
- version: 2.11.0
58
+ version: 3.5.0
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: amqp
61
61
  requirement: !ruby/object:Gem::Requirement
@@ -160,14 +160,14 @@ dependencies:
160
160
  requirements:
161
161
  - - '='
162
162
  - !ruby/object:Gem::Version
163
- version: 1.1.0
163
+ version: 1.3.1
164
164
  type: :runtime
165
165
  prerelease: false
166
166
  version_requirements: !ruby/object:Gem::Requirement
167
167
  requirements:
168
168
  - - '='
169
169
  - !ruby/object:Gem::Version
170
- version: 1.1.0
170
+ version: 1.3.1
171
171
  - !ruby/object:Gem::Dependency
172
172
  name: uuidtools
173
173
  requirement: !ruby/object:Gem::Requirement
@@ -193,7 +193,10 @@ extensions: []
193
193
  extra_rdoc_files: []
194
194
  files:
195
195
  - ".gitignore"
196
+ - ".rspec"
196
197
  - ".ruby-version"
198
+ - ".travis.yml"
199
+ - Dockerfile
197
200
  - Gemfile
198
201
  - Gemfile.lock
199
202
  - README.md
@@ -201,15 +204,21 @@ files:
201
204
  - architecture.md
202
205
  - bin/gorgon
203
206
  - daemon_with_upstart_and_rvm.md
207
+ - docker-compose.yml
208
+ - file_server/Dockerfile
209
+ - file_server/test_gorgon.pem.pub
204
210
  - gorgon-done-screenshot.png
205
211
  - gorgon.gemspec
206
212
  - gorgon.json.sample
207
213
  - gorgon_listener.json.sample
214
+ - gorgon_secret.json.sample
208
215
  - lib/gorgon.rb
209
216
  - lib/gorgon/amqp_service.rb
210
217
  - lib/gorgon/callback_handler.rb
211
218
  - lib/gorgon/colors.rb
219
+ - lib/gorgon/command.rb
212
220
  - lib/gorgon/configuration.rb
221
+ - lib/gorgon/core_ext/hash/deep_merge.rb
213
222
  - lib/gorgon/crash_reporter.rb
214
223
  - lib/gorgon/default_callbacks.rb
215
224
  - lib/gorgon/failures_printer.rb
@@ -301,9 +310,41 @@ files:
301
310
  - lib/gorgon_bunny/lib/gorgon_bunny/version.rb
302
311
  - lib/gorgon_bunny/lib/gorgon_bunny/versioned_delivery_tag.rb
303
312
  - rsync_transport.md
304
- - spec/acceptance_spec_helper.rb
313
+ - run_dev_environment.sh
314
+ - run_gorgon.sh
315
+ - run_listener.sh
316
+ - run_test.sh
305
317
  - spec/callback_handler_spec.rb
318
+ - spec/command_spec.rb
319
+ - spec/configuration_spec.rb
320
+ - spec/core_ext/hash/deep_merge_spec.rb
306
321
  - spec/crash_reporter_spec.rb
322
+ - spec/dummy/.gitignore
323
+ - spec/dummy/Gemfile
324
+ - spec/dummy/Gemfile.lock
325
+ - spec/dummy/README.md
326
+ - spec/dummy/gorgon.json
327
+ - spec/dummy/gorgon_callbacks.rb
328
+ - spec/dummy/gorgon_listener.json
329
+ - spec/dummy/integration_spec.rb
330
+ - spec/dummy/log/.gitkeep
331
+ - spec/dummy/rspec_runner.rb
332
+ - spec/dummy/spec/1_syntax_error_spec.rb
333
+ - spec/dummy/spec/exception_spec.rb
334
+ - spec/dummy/spec/failing_spec.rb
335
+ - spec/dummy/spec/keeping_rspec_config_spec.rb
336
+ - spec/dummy/spec/spec_helper.rb
337
+ - spec/dummy/spec/successful_spec.rb
338
+ - spec/dummy/spec/using_shared_example_spec.rb
339
+ - spec/dummy/test/.rb
340
+ - spec/dummy/test/minitest/mini1_test.rb
341
+ - spec/dummy/test/minitest/mini2_test.rb
342
+ - spec/dummy/test/unit/1_syntax_error_test.rb
343
+ - spec/dummy/test/unit/exception_test.rb
344
+ - spec/dummy/test/unit/failing_test.rb
345
+ - spec/dummy/test/unit/successful_test.rb
346
+ - spec/dummy/test_gorgon.pem
347
+ - spec/end_to_end_spec.rb
307
348
  - spec/failures_printer_spec.rb
308
349
  - spec/gem_command_handler_spec.rb
309
350
  - spec/gem_service_spec.rb
@@ -325,58 +366,9 @@ files:
325
366
  - spec/runtime_recorder_spec.rb
326
367
  - spec/shutdown_manager_spec.rb
327
368
  - spec/source_tree_syncer_spec.rb
328
- - spec/support/mock_app/.gitignore
329
- - spec/support/mock_app/Gemfile
330
- - spec/support/mock_app/Gemfile.lock
331
- - spec/support/mock_app/README.rdoc
332
- - spec/support/mock_app/Rakefile
333
- - spec/support/mock_app/app/assets/images/rails.png
334
- - spec/support/mock_app/app/assets/javascripts/application.js
335
- - spec/support/mock_app/app/assets/stylesheets/application.css
336
- - spec/support/mock_app/app/controllers/application_controller.rb
337
- - spec/support/mock_app/app/helpers/application_helper.rb
338
- - spec/support/mock_app/app/mailers/.gitkeep
339
- - spec/support/mock_app/app/models/.gitkeep
340
- - spec/support/mock_app/app/views/layouts/application.html.erb
341
- - spec/support/mock_app/config.ru
342
- - spec/support/mock_app/config/application.rb
343
- - spec/support/mock_app/config/boot.rb
344
- - spec/support/mock_app/config/database.yml
345
- - spec/support/mock_app/config/environment.rb
346
- - spec/support/mock_app/config/environments/development.rb
347
- - spec/support/mock_app/config/environments/production.rb
348
- - spec/support/mock_app/config/environments/test.rb
349
- - spec/support/mock_app/config/initializers/backtrace_silencers.rb
350
- - spec/support/mock_app/config/initializers/inflections.rb
351
- - spec/support/mock_app/config/initializers/mime_types.rb
352
- - spec/support/mock_app/config/initializers/secret_token.rb
353
- - spec/support/mock_app/config/initializers/session_store.rb
354
- - spec/support/mock_app/config/initializers/wrap_parameters.rb
355
- - spec/support/mock_app/config/locales/en.yml
356
- - spec/support/mock_app/config/routes.rb
357
- - spec/support/mock_app/db/seeds.rb
358
- - spec/support/mock_app/doc/README_FOR_APP
359
- - spec/support/mock_app/lib/assets/.gitkeep
360
- - spec/support/mock_app/lib/tasks/.gitkeep
361
- - spec/support/mock_app/log/.gitkeep
362
- - spec/support/mock_app/public/404.html
363
- - spec/support/mock_app/public/422.html
364
- - spec/support/mock_app/public/500.html
365
- - spec/support/mock_app/public/favicon.ico
366
- - spec/support/mock_app/public/index.html
367
- - spec/support/mock_app/public/robots.txt
368
- - spec/support/mock_app/script/rails
369
- - spec/support/mock_app/test/fixtures/.gitkeep
370
- - spec/support/mock_app/test/functional/.gitkeep
371
- - spec/support/mock_app/test/integration/.gitkeep
372
- - spec/support/mock_app/test/performance/browsing_test.rb
373
- - spec/support/mock_app/test/test_helper.rb
374
- - spec/support/mock_app/test/unit/.gitkeep
375
- - spec/support/mock_app/test/unit/passing_test.rb
376
- - spec/support/mock_app/vendor/assets/javascripts/.gitkeep
377
- - spec/support/mock_app/vendor/assets/stylesheets/.gitkeep
378
- - spec/support/mock_app/vendor/plugins/.gitkeep
379
- - spec/support/originator_handler.rb
369
+ - spec/spec_helper.rb
370
+ - spec/support/end_to_end_helpers.rb
371
+ - spec/support/stream_helpers.rb
380
372
  - spec/unknown_runner_spec.rb
381
373
  - spec/worker_manager_spec.rb
382
374
  - spec/worker_spec.rb
@@ -400,14 +392,42 @@ required_rubygems_version: !ruby/object:Gem::Requirement
400
392
  version: '0'
401
393
  requirements: []
402
394
  rubyforge_project: gorgon
403
- rubygems_version: 2.6.7
395
+ rubygems_version: 2.7.3
404
396
  signing_key:
405
397
  specification_version: 4
406
398
  summary: Distributed testing for ruby with centralized management
407
399
  test_files:
408
- - spec/acceptance_spec_helper.rb
409
400
  - spec/callback_handler_spec.rb
401
+ - spec/command_spec.rb
402
+ - spec/configuration_spec.rb
403
+ - spec/core_ext/hash/deep_merge_spec.rb
410
404
  - spec/crash_reporter_spec.rb
405
+ - spec/dummy/.gitignore
406
+ - spec/dummy/Gemfile
407
+ - spec/dummy/Gemfile.lock
408
+ - spec/dummy/README.md
409
+ - spec/dummy/gorgon.json
410
+ - spec/dummy/gorgon_callbacks.rb
411
+ - spec/dummy/gorgon_listener.json
412
+ - spec/dummy/integration_spec.rb
413
+ - spec/dummy/log/.gitkeep
414
+ - spec/dummy/rspec_runner.rb
415
+ - spec/dummy/spec/1_syntax_error_spec.rb
416
+ - spec/dummy/spec/exception_spec.rb
417
+ - spec/dummy/spec/failing_spec.rb
418
+ - spec/dummy/spec/keeping_rspec_config_spec.rb
419
+ - spec/dummy/spec/spec_helper.rb
420
+ - spec/dummy/spec/successful_spec.rb
421
+ - spec/dummy/spec/using_shared_example_spec.rb
422
+ - spec/dummy/test/.rb
423
+ - spec/dummy/test/minitest/mini1_test.rb
424
+ - spec/dummy/test/minitest/mini2_test.rb
425
+ - spec/dummy/test/unit/1_syntax_error_test.rb
426
+ - spec/dummy/test/unit/exception_test.rb
427
+ - spec/dummy/test/unit/failing_test.rb
428
+ - spec/dummy/test/unit/successful_test.rb
429
+ - spec/dummy/test_gorgon.pem
430
+ - spec/end_to_end_spec.rb
411
431
  - spec/failures_printer_spec.rb
412
432
  - spec/gem_command_handler_spec.rb
413
433
  - spec/gem_service_spec.rb
@@ -429,58 +449,9 @@ test_files:
429
449
  - spec/runtime_recorder_spec.rb
430
450
  - spec/shutdown_manager_spec.rb
431
451
  - spec/source_tree_syncer_spec.rb
432
- - spec/support/mock_app/.gitignore
433
- - spec/support/mock_app/Gemfile
434
- - spec/support/mock_app/Gemfile.lock
435
- - spec/support/mock_app/README.rdoc
436
- - spec/support/mock_app/Rakefile
437
- - spec/support/mock_app/app/assets/images/rails.png
438
- - spec/support/mock_app/app/assets/javascripts/application.js
439
- - spec/support/mock_app/app/assets/stylesheets/application.css
440
- - spec/support/mock_app/app/controllers/application_controller.rb
441
- - spec/support/mock_app/app/helpers/application_helper.rb
442
- - spec/support/mock_app/app/mailers/.gitkeep
443
- - spec/support/mock_app/app/models/.gitkeep
444
- - spec/support/mock_app/app/views/layouts/application.html.erb
445
- - spec/support/mock_app/config.ru
446
- - spec/support/mock_app/config/application.rb
447
- - spec/support/mock_app/config/boot.rb
448
- - spec/support/mock_app/config/database.yml
449
- - spec/support/mock_app/config/environment.rb
450
- - spec/support/mock_app/config/environments/development.rb
451
- - spec/support/mock_app/config/environments/production.rb
452
- - spec/support/mock_app/config/environments/test.rb
453
- - spec/support/mock_app/config/initializers/backtrace_silencers.rb
454
- - spec/support/mock_app/config/initializers/inflections.rb
455
- - spec/support/mock_app/config/initializers/mime_types.rb
456
- - spec/support/mock_app/config/initializers/secret_token.rb
457
- - spec/support/mock_app/config/initializers/session_store.rb
458
- - spec/support/mock_app/config/initializers/wrap_parameters.rb
459
- - spec/support/mock_app/config/locales/en.yml
460
- - spec/support/mock_app/config/routes.rb
461
- - spec/support/mock_app/db/seeds.rb
462
- - spec/support/mock_app/doc/README_FOR_APP
463
- - spec/support/mock_app/lib/assets/.gitkeep
464
- - spec/support/mock_app/lib/tasks/.gitkeep
465
- - spec/support/mock_app/log/.gitkeep
466
- - spec/support/mock_app/public/404.html
467
- - spec/support/mock_app/public/422.html
468
- - spec/support/mock_app/public/500.html
469
- - spec/support/mock_app/public/favicon.ico
470
- - spec/support/mock_app/public/index.html
471
- - spec/support/mock_app/public/robots.txt
472
- - spec/support/mock_app/script/rails
473
- - spec/support/mock_app/test/fixtures/.gitkeep
474
- - spec/support/mock_app/test/functional/.gitkeep
475
- - spec/support/mock_app/test/integration/.gitkeep
476
- - spec/support/mock_app/test/performance/browsing_test.rb
477
- - spec/support/mock_app/test/test_helper.rb
478
- - spec/support/mock_app/test/unit/.gitkeep
479
- - spec/support/mock_app/test/unit/passing_test.rb
480
- - spec/support/mock_app/vendor/assets/javascripts/.gitkeep
481
- - spec/support/mock_app/vendor/assets/stylesheets/.gitkeep
482
- - spec/support/mock_app/vendor/plugins/.gitkeep
483
- - spec/support/originator_handler.rb
452
+ - spec/spec_helper.rb
453
+ - spec/support/end_to_end_helpers.rb
454
+ - spec/support/stream_helpers.rb
484
455
  - spec/unknown_runner_spec.rb
485
456
  - spec/worker_manager_spec.rb
486
457
  - spec/worker_spec.rb