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,62 @@
1
+ require 'gorgon/configuration'
2
+
3
+ module Gorgon
4
+ describe Configuration do
5
+ describe ".load_configuration_from_file" do
6
+ let(:config_filename) { "config.json" }
7
+ let(:secret_filename) { "secret.json" }
8
+ let(:file_loader) { double }
9
+
10
+ example do
11
+ expect(file_loader).to receive(:parse).with(config_filename).and_return({ config: { key: "value" } })
12
+
13
+ configuration = load_file(config_filename, file_loader: file_loader)
14
+
15
+ expect(configuration).to eq({
16
+ config: {
17
+ key: "value"
18
+ }
19
+ })
20
+ end
21
+
22
+ it "merges the values from another file" do
23
+ expect(file_loader).to receive(:parse).with(config_filename).and_return({ config: { key: "value" } })
24
+ expect(file_loader).to receive(:exists?).with(secret_filename).and_return(true)
25
+ expect(file_loader).to receive(:parse).with(secret_filename).and_return({ config: { password: "password01" } })
26
+
27
+ configuration = load_file(config_filename, merge: secret_filename, file_loader: file_loader)
28
+
29
+ expect(configuration).to eq({
30
+ config: {
31
+ key: "value",
32
+ password: "password01"
33
+ }
34
+ })
35
+ end
36
+
37
+ it "raises when config file cannot be parsed" do
38
+ expect(file_loader).to receive(:parse).with(config_filename).and_raise("cannot be parsed")
39
+ expect(file_loader).to receive(:exists?).with(secret_filename).and_return(false)
40
+
41
+ expect { load_file(config_filename, merge: secret_filename, file_loader: file_loader) }.to raise_error("cannot be parsed")
42
+ end
43
+
44
+ it "ignores the second filename if does not exist" do
45
+ expect(file_loader).to receive(:parse).with(config_filename).and_return({ config: { key: "value" } })
46
+ expect(file_loader).to receive(:exists?).with(secret_filename).and_return(false)
47
+
48
+ configuration = load_file(config_filename, merge: secret_filename, file_loader: file_loader)
49
+
50
+ expect(configuration).to eq({
51
+ config: {
52
+ key: "value"
53
+ }
54
+ })
55
+ end
56
+
57
+ def load_file(*args)
58
+ Configuration.load_configuration_from_file(*args)
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,11 @@
1
+ require "gorgon/core_ext/hash/deep_merge"
2
+
3
+ describe "#deep_merge" do
4
+ example do
5
+ hash_1 = { a: "a", b: "b", c: { c1: "c1", c2: "c2", c3: { d1: "d1" } } }
6
+ hash_2 = { a: 1, c: { c1: 2, c3: { d2: "d2" } } }
7
+ expected = { a: 1, b: "b", c: { c1: 2, c2: "c2", c3: { d1: "d1", d2: "d2" } } }
8
+
9
+ expect(hash_1.deep_merge(hash_2)).to eq(expected)
10
+ end
11
+ end
@@ -1,6 +1,6 @@
1
1
  require 'gorgon/crash_reporter'
2
2
 
3
- describe "CrashReporter" do
3
+ describe Gorgon::CrashReporter do
4
4
  let(:exchange) { double("GorgonBunny Exchange", :publish => nil) }
5
5
  let(:info) { {
6
6
  :out_file => "stdout_file", :err_file => "stderr_file", :footer_text => "Text"
@@ -8,30 +8,30 @@ describe "CrashReporter" do
8
8
 
9
9
  let(:container_class) do
10
10
  Class.new do
11
- extend(CrashReporter)
11
+ extend(Gorgon::CrashReporter)
12
12
  end
13
13
  end
14
14
 
15
15
  describe "#report_crash" do
16
16
  it "tails output file to get last few lines and cat err file to get all lines" do
17
- container_class.should_receive(:'`').once.
17
+ expect(container_class).to receive(:'`').once.
18
18
  with(/tail.*stdout_file/).and_return ""
19
- container_class.should_receive(:'`').once.
19
+ expect(container_class).to receive(:'`').once.
20
20
  with(/cat.*stderr_file/).and_return ""
21
21
  container_class.report_crash exchange, info
22
22
  end
23
23
 
24
24
  it "calls send_crash_message" do
25
- container_class.stub(:'`').and_return "stdout text", "stderr text "
26
- container_class.should_receive(:send_crash_message).with(exchange, "stdout text", "stderr text Text")
25
+ allow(container_class).to receive(:'`').and_return "stdout text", "stderr text "
26
+ expect(container_class).to receive(:send_crash_message).with(exchange, "stdout text", "stderr text Text")
27
27
  container_class.report_crash exchange, info
28
28
  end
29
29
 
30
30
  it "returns last lines of output from stderr message and footer text" do
31
- container_class.stub(:'`').and_return "stdout text", "stderr text "
32
- container_class.stub(:send_crash_message)
31
+ allow(container_class).to receive(:'`').and_return "stdout text", "stderr text "
32
+ allow(container_class).to receive(:send_crash_message)
33
33
  result = container_class.report_crash exchange, info
34
- result.should == "stdout text\nstderr text Text"
34
+ expect(result).to eq("stdout text\nstderr text Text")
35
35
  end
36
36
  end
37
37
 
@@ -39,7 +39,7 @@ describe "CrashReporter" do
39
39
  it "sends message with output and errors from syncer using reply_exchange " do
40
40
  reply = {:type => :crash, :hostname => Socket.gethostname, :stdout => "some output",
41
41
  :stderr => "some errors"}
42
- exchange.should_receive(:publish).with(Yajl::Encoder.encode(reply))
42
+ expect(exchange).to receive(:publish).with(Yajl::Encoder.encode(reply))
43
43
  container_class.send_crash_message exchange, "some output", "some errors"
44
44
  end
45
45
  end
@@ -0,0 +1,3 @@
1
+ *.log
2
+ log/test_result.out
3
+ /.idea/
@@ -0,0 +1,11 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'minitest-reporters'
4
+ gem 'minitest', '5.10.3'
5
+ gem 'test-unit', :require => false
6
+ gem 'rspec', '>= 3.4.0', '< 3.6.0'
7
+ gem 'pry-byebug'
8
+
9
+ unless ENV["CI"]
10
+ gem 'gorgon', :path => "~/src/Gorgon"
11
+ end
@@ -0,0 +1,76 @@
1
+ PATH
2
+ remote: ../..
3
+ specs:
4
+ gorgon (0.11.1)
5
+ amq-protocol (~> 1.9.2)
6
+ amqp (~> 1.1.0)
7
+ awesome_print
8
+ colorize (~> 0.5.8)
9
+ eventmachine (~> 1.0.7)
10
+ open4 (~> 1.3.0)
11
+ ruby-progressbar (~> 1.7.5)
12
+ uuidtools (= 2.1.3)
13
+ yajl-ruby (= 1.3.1)
14
+
15
+ GEM
16
+ remote: https://rubygems.org/
17
+ specs:
18
+ amq-protocol (1.9.2)
19
+ amqp (1.1.8)
20
+ amq-protocol (>= 1.9.2)
21
+ eventmachine
22
+ ansi (1.5.0)
23
+ awesome_print (1.8.0)
24
+ builder (3.2.3)
25
+ byebug (9.0.3)
26
+ coderay (1.1.1)
27
+ colorize (0.5.8)
28
+ diff-lcs (1.2.5)
29
+ eventmachine (1.0.9.1)
30
+ method_source (0.8.2)
31
+ minitest (5.10.3)
32
+ minitest-reporters (1.1.19)
33
+ ansi
34
+ builder
35
+ minitest (>= 5.0)
36
+ ruby-progressbar
37
+ open4 (1.3.4)
38
+ pry (0.10.3)
39
+ coderay (~> 1.1.0)
40
+ method_source (~> 0.8.1)
41
+ slop (~> 3.4)
42
+ pry-byebug (3.4.0)
43
+ byebug (~> 9.0)
44
+ pry (~> 0.10)
45
+ rspec (3.4.0)
46
+ rspec-core (~> 3.4.0)
47
+ rspec-expectations (~> 3.4.0)
48
+ rspec-mocks (~> 3.4.0)
49
+ rspec-core (3.4.4)
50
+ rspec-support (~> 3.4.0)
51
+ rspec-expectations (3.4.0)
52
+ diff-lcs (>= 1.2.0, < 2.0)
53
+ rspec-support (~> 3.4.0)
54
+ rspec-mocks (3.4.1)
55
+ diff-lcs (>= 1.2.0, < 2.0)
56
+ rspec-support (~> 3.4.0)
57
+ rspec-support (3.4.1)
58
+ ruby-progressbar (1.7.5)
59
+ slop (3.6.0)
60
+ test-unit (2.5.2)
61
+ uuidtools (2.1.3)
62
+ yajl-ruby (1.3.1)
63
+
64
+ PLATFORMS
65
+ ruby
66
+
67
+ DEPENDENCIES
68
+ gorgon!
69
+ minitest (= 5.10.3)
70
+ minitest-reporters
71
+ pry-byebug
72
+ rspec (>= 3.4.0, < 3.6.0)
73
+ test-unit
74
+
75
+ BUNDLED WITH
76
+ 1.16.0
@@ -0,0 +1,23 @@
1
+ This app is used to test [Gorgon](https://github.com/nulogy/Gorgon).
2
+
3
+ * Run `./run_test.sh` for running tests and comparing output with correct_test_result.out
4
+ * Run `./update_correct_test_result.sh` for updating correct_test_result.out with current output
5
+
6
+ ## Set up for localhost testing
7
+ 1. Clone gorgon into a directory. We will assume `~/src/gorgon` for the purpose of these instructions. If you use a different directory, then you will need to modify the path in `Gemfile` accordingly.
8
+ 1. Run `rabbitmq-server` in the background
9
+ 1. `cp gorgon_listener.json.example gorgon_listener.json`
10
+ 1. `cp gorgon.json.example gorgon.json`
11
+ 1. `bundle install`
12
+ 1. `gorgon listen`
13
+ 1. In a new tab/window, execute `gorgon`.
14
+
15
+ ### Installation Troubleshooting
16
+
17
+ * If you have trouble installing the *eventmachine* gem on Mac OS X because of an issue with building with openssl, then try using Homebrew's version of `openssl`:
18
+ * `brew install openssl`
19
+ * `brew link openssl --force`
20
+
21
+ ## Debugging Tools
22
+
23
+ * Use `rspec_runner.rb` to debug Gorgon's RspecRunner. You can use `binding.pry`. To use it, run: `bundle exec ruby rspec_runner.rb`
@@ -0,0 +1,30 @@
1
+ {
2
+ "connection": {
3
+ "host": "rabbitmq"
4
+ },
5
+ "file_server": {
6
+ "host": "file_server"
7
+ },
8
+ "job": {
9
+ "sync": {
10
+ "exclude": [
11
+ ".git",
12
+ ".rvmrc",
13
+ "tmp",
14
+ "log",
15
+ "doc"
16
+ ],
17
+
18
+ "rsync_transport": "ssh" // or "anonymous"
19
+ },
20
+
21
+ "callbacks": {
22
+ "callbacks_class_file": "gorgon_callbacks.rb"
23
+ }
24
+ },
25
+ "files": [
26
+ "test/**/*_test.rb",
27
+ "spec/**/*_spec.rb"
28
+ ],
29
+ "originator_log_file": "log/gorgon-originator.log"
30
+ }
@@ -0,0 +1,68 @@
1
+ class MyCallbacks < Gorgon::DefaultCallbacks
2
+ def before_originate
3
+ puts "before job starts was called"
4
+ nil
5
+ end
6
+
7
+ BUNDLE_LOG_FILE||="/tmp/gorgon-bundle-install.log "
8
+ def after_sync
9
+ require 'bundler'
10
+ require 'open4'
11
+
12
+ # raise "BOOOOOOOOOOOM"
13
+ Bundler.with_clean_env do
14
+
15
+ pid, stdin, stdout, stderr = Open4::popen4 "bundle install > #{BUNDLE_LOG_FILE} 2>&1 "
16
+
17
+ ignore, status = Process.waitpid2 pid
18
+
19
+ if status.exitstatus != 0
20
+ raise "There was an error when running 'bundle install'\n#{stderr.read}"
21
+ end
22
+ end
23
+ end
24
+
25
+ def before_creating_workers
26
+ #sleep 0.5
27
+ puts "BEFORE CREATING WORKERS"
28
+
29
+ # generate a lot of output to test if it blocks on write because pipe or stdout is full
30
+ 10000.times do
31
+ puts "filling stdout"
32
+ $stderr.puts "filling stderr"
33
+ end
34
+
35
+ require 'test/unit'
36
+ require 'minitest/unit'
37
+
38
+ require File.expand_path('../spec/spec_helper.rb', __FILE__)
39
+
40
+ # to test that Listener reports to Originator crashes in WorkerManager
41
+ # raise "BOOM"
42
+ end
43
+
44
+ def before_start
45
+ puts "BEFORE START CALLBACK WAS CALLED"
46
+
47
+ # generate a lot of output to test if it blocks on write because pipe or stdout is full
48
+ 10000.times do
49
+ puts "filling stdout"
50
+ $stderr.puts "filling stderr"
51
+ end
52
+
53
+ # to test that WorkerManager reports to Originator crashes in Workers
54
+ # raise "BOOM"
55
+ end
56
+
57
+ def after_complete
58
+ # sleep 5
59
+ # system("touch /tmp/w#{$$}-#{UUIDTools::UUID.timestamp_create.to_s}")
60
+ puts "AFTER COMPLETE CALLBACK"
61
+ end
62
+
63
+ def after_job_finishes
64
+ puts "running after_job_finishes"
65
+ end
66
+ end
67
+
68
+ Gorgon.callbacks = MyCallbacks.new
@@ -0,0 +1,8 @@
1
+ {
2
+ "connection": {
3
+ "host": "rabbitmq"
4
+ },
5
+
6
+ "worker_slots": 1,
7
+ "log_file": "/tmp/gorgon-remote.log"
8
+ }
@@ -0,0 +1,51 @@
1
+ require "open4"
2
+
3
+ def wait_until_program_is_ready(command_stdout_read, ready_message)
4
+ while true
5
+ line = command_stdout_read.readline
6
+ puts line
7
+ if line =~ ready_message
8
+ return
9
+ end
10
+ end
11
+ end
12
+
13
+ def run_in_background(command:, ready_message:)
14
+ command_stdout_read, command_stdout_write = IO.pipe
15
+ command_pid = fork do
16
+ Open4::spawn(command, stdout: command_stdout_write, stderr: $stderr)
17
+ end
18
+ command_stdout_write.close
19
+
20
+ wait_until_program_is_ready(command_stdout_read, ready_message)
21
+ command_pid
22
+ end
23
+
24
+ describe "Gorgon integration spec" do
25
+
26
+ around(:all) do |example|
27
+ begin
28
+ rabbit_pid = run_in_background(
29
+ command: "rabbitmq-server", ready_message: /Starting broker... completed/
30
+ )
31
+
32
+ listener_pid = run_in_background(
33
+ command: "gorgon listen", ready_message: /Welcome to Gorgon/
34
+ )
35
+
36
+ example.call
37
+
38
+ ensure
39
+ puts "stopping Rabbit"
40
+ puts "stopping Listener"
41
+ Process.kill('INT', rabbit_pid)
42
+ Process.kill('INT', listener_pid)
43
+ Process.wait2 listener_pid
44
+ Process.wait2 rabbit_pid
45
+ end
46
+ end
47
+
48
+ it "passes once" do
49
+ expect(true).to eq(true)
50
+ end
51
+ end
@@ -0,0 +1,8 @@
1
+ load('~/src/gorgon/lib/gorgon/rspec_runner.rb')
2
+ load('~/src/gorgon/lib/gorgon/gorgon_rspec_formatter.rb')
3
+
4
+ require File.expand_path('../spec/spec_helper.rb', __FILE__)
5
+
6
+ result1 = RspecRunner.run_file('~/src/gorgon-test/spec/using_shared_example_spec.rb')
7
+ puts "############ result1 ##########"
8
+ p result1
@@ -0,0 +1 @@
1
+ using invalid ruby
@@ -0,0 +1,5 @@
1
+ describe "Exception spec" do
2
+ it "raises" do
3
+ raise "BOOOOM from spec!"
4
+ end
5
+ end
@@ -0,0 +1,11 @@
1
+ describe "Failing spec" do
2
+ it "passes once" do
3
+ expect(true).to eq(true)
4
+ end
5
+
6
+ it "fails" do
7
+ expect(true).to eq(false), 'failed'
8
+ end
9
+
10
+ it "has pending tests"
11
+ end