gorgon 0.11.0 → 0.11.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +0 -2
- data/.rspec +2 -0
- data/.travis.yml +10 -0
- data/Dockerfile +25 -0
- data/Gemfile.lock +20 -15
- data/README.md +33 -6
- data/Rakefile +5 -0
- data/architecture.md +2 -2
- data/bin/gorgon +2 -114
- data/daemon_with_upstart_and_rvm.md +1 -1
- data/docker-compose.yml +28 -0
- data/file_server/Dockerfile +8 -0
- data/file_server/test_gorgon.pem.pub +1 -0
- data/gorgon.gemspec +2 -2
- data/gorgon_secret.json.sample +5 -0
- data/lib/gorgon/amqp_service.rb +28 -26
- data/lib/gorgon/callback_handler.rb +28 -26
- data/lib/gorgon/colors.rb +6 -4
- data/lib/gorgon/command.rb +145 -0
- data/lib/gorgon/configuration.rb +45 -5
- data/lib/gorgon/core_ext/hash/deep_merge.rb +21 -0
- data/lib/gorgon/crash_reporter.rb +15 -13
- data/lib/gorgon/failures_printer.rb +27 -26
- data/lib/gorgon/g_logger.rb +19 -17
- data/lib/gorgon/gem_command_handler.rb +41 -39
- data/lib/gorgon/gem_service.rb +60 -57
- data/lib/gorgon/host_state.rb +23 -21
- data/lib/gorgon/job.rb +19 -17
- data/lib/gorgon/job_definition.rb +23 -21
- data/lib/gorgon/job_state.rb +93 -90
- data/lib/gorgon/listener.rb +137 -146
- data/lib/gorgon/listener_installer.rb +98 -96
- data/lib/gorgon/originator.rb +170 -167
- data/lib/gorgon/originator_logger.rb +30 -28
- data/lib/gorgon/originator_protocol.rb +85 -83
- data/lib/gorgon/ping_service.rb +44 -42
- data/lib/gorgon/pipe_forker.rb +17 -15
- data/lib/gorgon/progress_bar_view.rb +109 -107
- data/lib/gorgon/rsync_daemon.rb +56 -54
- data/lib/gorgon/runtime_file_reader.rb +28 -27
- data/lib/gorgon/runtime_recorder.rb +27 -26
- data/lib/gorgon/settings/files_content.rb +27 -25
- data/lib/gorgon/settings/initial_files_creator.rb +58 -56
- data/lib/gorgon/settings/rails_project_files_content.rb +33 -31
- data/lib/gorgon/settings/simple_project_files_content.rb +11 -9
- data/lib/gorgon/shutdown_manager.rb +20 -18
- data/lib/gorgon/source_tree_syncer.rb +108 -69
- data/lib/gorgon/version.rb +1 -1
- data/lib/gorgon/worker.rb +130 -128
- data/lib/gorgon/worker_manager.rb +139 -137
- data/lib/gorgon_amq-protocol/.rspec +3 -0
- data/run_dev_environment.sh +3 -0
- data/run_gorgon.sh +3 -0
- data/run_listener.sh +3 -0
- data/run_test.sh +3 -0
- data/spec/callback_handler_spec.rb +10 -10
- data/spec/command_spec.rb +172 -0
- data/spec/configuration_spec.rb +62 -0
- data/spec/core_ext/hash/deep_merge_spec.rb +11 -0
- data/spec/crash_reporter_spec.rb +10 -10
- data/spec/dummy/.gitignore +3 -0
- data/spec/dummy/Gemfile +11 -0
- data/spec/dummy/Gemfile.lock +76 -0
- data/spec/dummy/README.md +23 -0
- data/spec/dummy/gorgon.json +30 -0
- data/spec/dummy/gorgon_callbacks.rb +68 -0
- data/spec/dummy/gorgon_listener.json +8 -0
- data/spec/dummy/integration_spec.rb +51 -0
- data/spec/{support/mock_app/app/mailers → dummy/log}/.gitkeep +0 -0
- data/spec/dummy/rspec_runner.rb +8 -0
- data/spec/dummy/spec/1_syntax_error_spec.rb +1 -0
- data/spec/dummy/spec/exception_spec.rb +5 -0
- data/spec/dummy/spec/failing_spec.rb +11 -0
- data/spec/dummy/spec/keeping_rspec_config_spec.rb +5 -0
- data/spec/dummy/spec/spec_helper.rb +13 -0
- data/spec/dummy/spec/successful_spec.rb +9 -0
- data/spec/dummy/spec/using_shared_example_spec.rb +3 -0
- data/spec/dummy/test/.rb +15 -0
- data/spec/dummy/test/minitest/mini1_test.rb +11 -0
- data/spec/dummy/test/minitest/mini2_test.rb +25 -0
- data/spec/dummy/test/unit/1_syntax_error_test.rb +9 -0
- data/spec/dummy/test/unit/exception_test.rb +14 -0
- data/spec/dummy/test/unit/failing_test.rb +17 -0
- data/spec/dummy/test/unit/successful_test.rb +9 -0
- data/spec/dummy/test_gorgon.pem +27 -0
- data/spec/end_to_end_spec.rb +142 -0
- data/spec/failures_printer_spec.rb +20 -20
- data/spec/gem_command_handler_spec.rb +24 -24
- data/spec/gem_service_spec.rb +18 -18
- data/spec/gorgon_rspec_formatter_spec.rb +12 -12
- data/spec/host_state_spec.rb +8 -8
- data/spec/job_definition_spec.rb +3 -3
- data/spec/job_state_spec.rb +46 -46
- data/spec/listener_spec.rb +67 -73
- data/spec/mini_test_runner_spec.rb +7 -7
- data/spec/originator_logger_spec.rb +6 -6
- data/spec/originator_protocol_spec.rb +38 -38
- data/spec/originator_spec.rb +78 -69
- data/spec/ping_service_spec.rb +14 -14
- data/spec/pipe_forker_spec.rb +13 -13
- data/spec/progress_bar_view_spec.rb +32 -32
- data/spec/rspec_runner_spec.rb +12 -12
- data/spec/rsync_daemon_spec.rb +18 -16
- data/spec/runtime_file_reader_spec.rb +12 -12
- data/spec/runtime_recorder_spec.rb +19 -19
- data/spec/shutdown_manager_spec.rb +9 -9
- data/spec/source_tree_syncer_spec.rb +148 -61
- data/spec/spec_helper.rb +3 -0
- data/spec/support/end_to_end_helpers.rb +16 -0
- data/spec/support/stream_helpers.rb +23 -0
- data/spec/unknown_runner_spec.rb +1 -1
- data/spec/worker_manager_spec.rb +23 -23
- data/spec/worker_spec.rb +70 -70
- metadata +84 -113
- data/spec/acceptance_spec_helper.rb +0 -7
- data/spec/support/mock_app/.gitignore +0 -15
- data/spec/support/mock_app/Gemfile +0 -39
- data/spec/support/mock_app/Gemfile.lock +0 -135
- data/spec/support/mock_app/README.rdoc +0 -261
- data/spec/support/mock_app/Rakefile +0 -7
- data/spec/support/mock_app/app/assets/images/rails.png +0 -0
- data/spec/support/mock_app/app/assets/javascripts/application.js +0 -15
- data/spec/support/mock_app/app/assets/stylesheets/application.css +0 -13
- data/spec/support/mock_app/app/controllers/application_controller.rb +0 -3
- data/spec/support/mock_app/app/helpers/application_helper.rb +0 -2
- data/spec/support/mock_app/app/models/.gitkeep +0 -0
- data/spec/support/mock_app/app/views/layouts/application.html.erb +0 -14
- data/spec/support/mock_app/config.ru +0 -4
- data/spec/support/mock_app/config/application.rb +0 -62
- data/spec/support/mock_app/config/boot.rb +0 -6
- data/spec/support/mock_app/config/database.yml +0 -25
- data/spec/support/mock_app/config/environment.rb +0 -5
- data/spec/support/mock_app/config/environments/development.rb +0 -37
- data/spec/support/mock_app/config/environments/production.rb +0 -67
- data/spec/support/mock_app/config/environments/test.rb +0 -37
- data/spec/support/mock_app/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/support/mock_app/config/initializers/inflections.rb +0 -15
- data/spec/support/mock_app/config/initializers/mime_types.rb +0 -5
- data/spec/support/mock_app/config/initializers/secret_token.rb +0 -7
- data/spec/support/mock_app/config/initializers/session_store.rb +0 -8
- data/spec/support/mock_app/config/initializers/wrap_parameters.rb +0 -14
- data/spec/support/mock_app/config/locales/en.yml +0 -5
- data/spec/support/mock_app/config/routes.rb +0 -58
- data/spec/support/mock_app/db/seeds.rb +0 -7
- data/spec/support/mock_app/doc/README_FOR_APP +0 -2
- data/spec/support/mock_app/lib/assets/.gitkeep +0 -0
- data/spec/support/mock_app/lib/tasks/.gitkeep +0 -0
- data/spec/support/mock_app/log/.gitkeep +0 -0
- data/spec/support/mock_app/public/404.html +0 -26
- data/spec/support/mock_app/public/422.html +0 -26
- data/spec/support/mock_app/public/500.html +0 -25
- data/spec/support/mock_app/public/favicon.ico +0 -0
- data/spec/support/mock_app/public/index.html +0 -241
- data/spec/support/mock_app/public/robots.txt +0 -5
- data/spec/support/mock_app/script/rails +0 -6
- data/spec/support/mock_app/test/fixtures/.gitkeep +0 -0
- data/spec/support/mock_app/test/functional/.gitkeep +0 -0
- data/spec/support/mock_app/test/integration/.gitkeep +0 -0
- data/spec/support/mock_app/test/performance/browsing_test.rb +0 -12
- data/spec/support/mock_app/test/test_helper.rb +0 -13
- data/spec/support/mock_app/test/unit/.gitkeep +0 -0
- data/spec/support/mock_app/test/unit/passing_test.rb +0 -7
- data/spec/support/mock_app/vendor/assets/javascripts/.gitkeep +0 -0
- data/spec/support/mock_app/vendor/assets/stylesheets/.gitkeep +0 -0
- data/spec/support/mock_app/vendor/plugins/.gitkeep +0 -0
- 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
|
data/spec/crash_reporter_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'gorgon/crash_reporter'
|
2
2
|
|
3
|
-
describe
|
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.
|
17
|
+
expect(container_class).to receive(:'`').once.
|
18
18
|
with(/tail.*stdout_file/).and_return ""
|
19
|
-
container_class.
|
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.
|
26
|
-
container_class.
|
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.
|
32
|
-
container_class.
|
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.
|
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.
|
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
|
data/spec/dummy/Gemfile
ADDED
@@ -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,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
|
File without changes
|
@@ -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
|