jperkins-deep_test 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +47 -0
- data/README.rdoc +228 -0
- data/Rakefile +247 -0
- data/bin/deep_test +15 -0
- data/lib/deep_test.rb +91 -0
- data/lib/deep_test/database/mysql_setup_listener.rb +112 -0
- data/lib/deep_test/database/postgresql_setup_listener.rb +116 -0
- data/lib/deep_test/database/setup_listener.rb +125 -0
- data/lib/deep_test/deadlock_detector.rb +7 -0
- data/lib/deep_test/distributed/dispatch_controller.rb +53 -0
- data/lib/deep_test/distributed/drb_client_connection_info.rb +15 -0
- data/lib/deep_test/distributed/filename_resolver.rb +40 -0
- data/lib/deep_test/distributed/master_test_server.rb +52 -0
- data/lib/deep_test/distributed/multi_test_server_proxy.rb +44 -0
- data/lib/deep_test/distributed/null_work_unit.rb +12 -0
- data/lib/deep_test/distributed/remote_worker_client.rb +54 -0
- data/lib/deep_test/distributed/remote_worker_server.rb +82 -0
- data/lib/deep_test/distributed/rsync.rb +37 -0
- data/lib/deep_test/distributed/show_status.rhtml +41 -0
- data/lib/deep_test/distributed/test_server.rb +78 -0
- data/lib/deep_test/distributed/test_server_status.rb +9 -0
- data/lib/deep_test/distributed/test_server_workers.rb +24 -0
- data/lib/deep_test/distributed/throughput_runner.rb +42 -0
- data/lib/deep_test/distributed/throughput_statistics.rb +26 -0
- data/lib/deep_test/distributed/throughput_worker_client.rb +19 -0
- data/lib/deep_test/extensions/drb_extension.rb +34 -0
- data/lib/deep_test/extensions/object_extension.rb +40 -0
- data/lib/deep_test/listener_list.rb +17 -0
- data/lib/deep_test/local_workers.rb +55 -0
- data/lib/deep_test/logger.rb +17 -0
- data/lib/deep_test/marshallable_exception_wrapper.rb +44 -0
- data/lib/deep_test/metrics/gatherer.rb +67 -0
- data/lib/deep_test/metrics/queue_lock_wait_time_measurement.rb +133 -0
- data/lib/deep_test/null_worker_listener.rb +62 -0
- data/lib/deep_test/option.rb +60 -0
- data/lib/deep_test/options.rb +110 -0
- data/lib/deep_test/process_orchestrator.rb +49 -0
- data/lib/deep_test/rake_tasks.rb +11 -0
- data/lib/deep_test/result_reader.rb +36 -0
- data/lib/deep_test/rspec_detector.rb +21 -0
- data/lib/deep_test/server.rb +75 -0
- data/lib/deep_test/spec.rb +13 -0
- data/lib/deep_test/spec/extensions/example_group_methods.rb +64 -0
- data/lib/deep_test/spec/extensions/example_methods.rb +46 -0
- data/lib/deep_test/spec/extensions/options.rb +43 -0
- data/lib/deep_test/spec/extensions/reporter.rb +29 -0
- data/lib/deep_test/spec/extensions/spec_task.rb +20 -0
- data/lib/deep_test/spec/runner.rb +57 -0
- data/lib/deep_test/spec/work_result.rb +33 -0
- data/lib/deep_test/spec/work_unit.rb +59 -0
- data/lib/deep_test/test.rb +10 -0
- data/lib/deep_test/test/extensions/error.rb +14 -0
- data/lib/deep_test/test/runner.rb +24 -0
- data/lib/deep_test/test/supervised_test_suite.rb +49 -0
- data/lib/deep_test/test/work_result.rb +34 -0
- data/lib/deep_test/test/work_unit.rb +40 -0
- data/lib/deep_test/test_task.rb +47 -0
- data/lib/deep_test/ui/console.rb +76 -0
- data/lib/deep_test/ui/null.rb +17 -0
- data/lib/deep_test/warlock.rb +134 -0
- data/lib/deep_test/worker.rb +57 -0
- data/script/internal/run_test_suite.rb +7 -0
- data/script/public/master_test_server.rb +24 -0
- data/script/public/test_server.rb +18 -0
- data/script/public/test_throughput.rb +29 -0
- data/spec/deep_test/option_spec.rb +33 -0
- data/spec/deep_test/options_spec.rb +183 -0
- data/spec/deep_test/spec/extensions/example_group_methods_spec.rb +48 -0
- data/spec/deep_test/spec/extensions/example_methods_spec.rb +61 -0
- data/spec/deep_test/spec/extensions/options_spec.rb +23 -0
- data/spec/deep_test/spec/extensions/reporter_spec.rb +28 -0
- data/spec/deep_test/spec/extensions/spec_task_spec.rb +36 -0
- data/spec/deep_test/spec/runner_spec.rb +106 -0
- data/spec/deep_test/spec/work_result_spec.rb +14 -0
- data/spec/deep_test/spec/work_unit_spec.rb +78 -0
- data/spec/spec_helper.rb +59 -0
- data/spec/thread_worker.rb +25 -0
- data/test/deep_test/database/mysql_setup_listener_test.rb +14 -0
- data/test/deep_test/distributed/dispatch_controller_test.rb +209 -0
- data/test/deep_test/distributed/drb_client_connection_info_test.rb +42 -0
- data/test/deep_test/distributed/filename_resolver_test.rb +52 -0
- data/test/deep_test/distributed/master_test_server_test.rb +32 -0
- data/test/deep_test/distributed/multi_test_server_proxy_test.rb +96 -0
- data/test/deep_test/distributed/remote_worker_client_test.rb +180 -0
- data/test/deep_test/distributed/remote_worker_server_test.rb +99 -0
- data/test/deep_test/distributed/rsync_test.rb +67 -0
- data/test/deep_test/distributed/test_server_test.rb +94 -0
- data/test/deep_test/distributed/test_server_workers_test.rb +26 -0
- data/test/deep_test/distributed/throughput_runner_test.rb +68 -0
- data/test/deep_test/distributed/throughput_worker_client_test.rb +28 -0
- data/test/deep_test/extensions/object_extension_test.rb +37 -0
- data/test/deep_test/listener_list_test.rb +20 -0
- data/test/deep_test/local_workers_test.rb +22 -0
- data/test/deep_test/logger_test.rb +11 -0
- data/test/deep_test/marshallable_exception_wrapper_test.rb +44 -0
- data/test/deep_test/metrics/gatherer_test.rb +66 -0
- data/test/deep_test/process_orchestrator_test.rb +11 -0
- data/test/deep_test/result_reader_test.rb +128 -0
- data/test/deep_test/server_test.rb +58 -0
- data/test/deep_test/test/extensions/error_test.rb +40 -0
- data/test/deep_test/test/runner_test.rb +7 -0
- data/test/deep_test/test/supervised_test_suite_test.rb +79 -0
- data/test/deep_test/test/work_result_test.rb +81 -0
- data/test/deep_test/test/work_unit_test.rb +61 -0
- data/test/deep_test/test_task_test.rb +43 -0
- data/test/deep_test/ui/console_test.rb +9 -0
- data/test/deep_test/warlock_test.rb +38 -0
- data/test/deep_test/worker_test.rb +94 -0
- data/test/failing.rake +11 -0
- data/test/failing.rb +7 -0
- data/test/fake_deadlock_error.rb +12 -0
- data/test/simple_test_blackboard.rb +45 -0
- data/test/simple_test_blackboard_test.rb +33 -0
- data/test/test_factory.rb +74 -0
- data/test/test_helper.rb +15 -0
- data/test/test_task_test.rb +72 -0
- metadata +214 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "executes rsync with source and destination" do
|
|
5
|
+
options = DeepTest::Options.new(:sync_options => {:source => "source", :local => true})
|
|
6
|
+
|
|
7
|
+
DeepTest::Distributed::RSync.expects(:system).
|
|
8
|
+
with("rsync -az --delete source/ destination").returns(true)
|
|
9
|
+
|
|
10
|
+
DeepTest::Distributed::RSync.sync(mock, options, "destination")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
test "raises error if sync fails" do
|
|
14
|
+
DeepTest::Distributed::RSync.expects(:system).returns(false)
|
|
15
|
+
|
|
16
|
+
assert_raises(RuntimeError) do
|
|
17
|
+
DeepTest::Distributed::RSync.sync(
|
|
18
|
+
mock,
|
|
19
|
+
DeepTest::Options.new(:sync_options => {:source => "a", :local => true}),
|
|
20
|
+
"destination"
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test "include rsync_options in command" do
|
|
26
|
+
options = DeepTest::Options.new(:sync_options => {:source => "source",
|
|
27
|
+
:local => true,
|
|
28
|
+
:rsync_options => "opt1 opt2"})
|
|
29
|
+
|
|
30
|
+
args = DeepTest::Distributed::RSync::Args.new(mock, options)
|
|
31
|
+
assert_equal "rsync -az --delete opt1 opt2 source/", args.command("")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
test "includes host in source_location" do
|
|
35
|
+
options = DeepTest::Options.new(:sync_options => {:source => "source"})
|
|
36
|
+
args = DeepTest::Distributed::RSync::Args.new(mock(:address => 'host'),
|
|
37
|
+
options)
|
|
38
|
+
|
|
39
|
+
assert_equal "host:source", args.source_location
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
test "separates host and source with double colon if using daemon" do
|
|
43
|
+
options = DeepTest::Options.new(
|
|
44
|
+
:sync_options => {:source => "source", :daemon => true}
|
|
45
|
+
)
|
|
46
|
+
args = DeepTest::Distributed::RSync::Args.new(mock(:address => 'host'),
|
|
47
|
+
options)
|
|
48
|
+
|
|
49
|
+
assert_equal "host::source", args.source_location
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
test "includes username in source_location if specified" do
|
|
53
|
+
options = DeepTest::Options.new(:sync_options => {:source => "source",
|
|
54
|
+
:username => "user"})
|
|
55
|
+
args = DeepTest::Distributed::RSync::Args.new(mock(:address => 'host'),
|
|
56
|
+
options)
|
|
57
|
+
|
|
58
|
+
assert_equal "user@host:source", args.source_location
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
test "does not include host in source_location if local is specified" do
|
|
62
|
+
options = DeepTest::Options.new(:sync_options => {:source => "source", :local => true})
|
|
63
|
+
args = DeepTest::Distributed::RSync::Args.new(mock, options)
|
|
64
|
+
|
|
65
|
+
assert_equal "source", args.source_location
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "generates a local working copy path based on host and source of request" do
|
|
5
|
+
DeepTest::Distributed::DRbClientConnectionInfo.expects(:new).
|
|
6
|
+
returns(:connection_info)
|
|
7
|
+
|
|
8
|
+
Socket.stubs(:gethostname).returns("myhost", "serverhost")
|
|
9
|
+
server = DeepTest::Distributed::TestServer.new(:work_dir => "/tmp")
|
|
10
|
+
options = DeepTest::Options.new(:sync_options => {:source => "/my/local/dir"})
|
|
11
|
+
DeepTest::Distributed::RSync.expects(:sync).with(:connection_info,
|
|
12
|
+
options,
|
|
13
|
+
"/tmp/myhost_my_local_dir")
|
|
14
|
+
server.sync(options)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
test "work_dir can be set from command line" do
|
|
18
|
+
config = DeepTest::Distributed::TestServer.parse_args(
|
|
19
|
+
['--work_dir','path']
|
|
20
|
+
)
|
|
21
|
+
assert_equal 'path', config[:work_dir]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
test "uri can be set from command line" do
|
|
25
|
+
config = DeepTest::Distributed::TestServer.parse_args(['--uri','uri'])
|
|
26
|
+
assert_equal 'uri', config[:uri]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
test "number_of_workers can be set from command line" do
|
|
30
|
+
config = DeepTest::Distributed::TestServer.parse_args(
|
|
31
|
+
['--number_of_workers','4']
|
|
32
|
+
)
|
|
33
|
+
assert_equal 4, config[:number_of_workers]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
test "default number_of_workers is 2" do
|
|
37
|
+
assert_equal(
|
|
38
|
+
2,
|
|
39
|
+
DeepTest::Distributed::TestServer::DEFAULT_CONFIG[:number_of_workers]
|
|
40
|
+
)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
test "uses default options for those not specified" do
|
|
44
|
+
config = DeepTest::Distributed::TestServer.parse_args([])
|
|
45
|
+
assert_equal DeepTest::Distributed::TestServer::DEFAULT_CONFIG, config
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
test "spawn_worker_server starts RemoteWorkerServer with TestServerWorkers" do
|
|
49
|
+
config = {:number_of_workers => 4, :uri => "druby://localhost:4022"}
|
|
50
|
+
server = DeepTest::Distributed::TestServer.new(config)
|
|
51
|
+
options = DeepTest::Options.new(:sync_options => {:source => ""})
|
|
52
|
+
DeepTest::Distributed::DRbClientConnectionInfo.expects(:new).
|
|
53
|
+
returns(:connection_info)
|
|
54
|
+
|
|
55
|
+
DeepTest::Distributed::TestServerWorkers.expects(:new).with(
|
|
56
|
+
options, config, :connection_info
|
|
57
|
+
).returns(:workers)
|
|
58
|
+
|
|
59
|
+
DeepTest::Distributed::RemoteWorkerServer.expects(:start).with(
|
|
60
|
+
"localhost", anything, :workers
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
server.spawn_worker_server(options)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
test "connect creates dispatch controller for all servers" do
|
|
67
|
+
options = DeepTest::Options.new({:ui => "DeepTest::UI::Null"})
|
|
68
|
+
DRbObject.expects(:new_with_uri).returns(server = mock)
|
|
69
|
+
server.expects(:servers).returns([s1 = mock, s2 = mock])
|
|
70
|
+
s1.expects(:sync)
|
|
71
|
+
s2.expects(:sync)
|
|
72
|
+
DeepTest::Distributed::TestServer.connect(options).sync(options)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
test "status.binding_uri is the uri that DRb is bound to" do
|
|
76
|
+
server = DeepTest::Distributed::TestServer.new(:number_of_workers => 4)
|
|
77
|
+
DRb.expects(:uri).returns("druby://test")
|
|
78
|
+
assert_equal "druby://test", server.status.binding_uri
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
test "status.number_of_workers in the configured number of workers" do
|
|
82
|
+
server = DeepTest::Distributed::TestServer.new(:number_of_workers => 4)
|
|
83
|
+
DRb.expects(:uri)
|
|
84
|
+
assert_equal 4, server.status.number_of_workers
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
test "status.remote_worker_server_count is number of servers currently running" do
|
|
88
|
+
server = DeepTest::Distributed::TestServer.new(:number_of_workers => 4)
|
|
89
|
+
DRb.expects(:uri)
|
|
90
|
+
DeepTest::Distributed::RemoteWorkerServer.expects(:running_server_count).
|
|
91
|
+
returns(3)
|
|
92
|
+
assert_equal 3, server.status.remote_worker_server_count
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "number_of_workers is determined by mirror server options" do
|
|
5
|
+
workers = DeepTest::Distributed::TestServerWorkers.new(
|
|
6
|
+
DeepTest::Options.new({}),
|
|
7
|
+
{:number_of_workers => 4},
|
|
8
|
+
mock
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
assert_equal 4, workers.number_of_workers
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
test "server is retrieved using client connection information" do
|
|
15
|
+
workers = DeepTest::Distributed::TestServerWorkers.new(
|
|
16
|
+
options = DeepTest::Options.new({}),
|
|
17
|
+
{:number_of_workers => 4},
|
|
18
|
+
mock(:address => "address")
|
|
19
|
+
)
|
|
20
|
+
DeepTest::Server.expects(:remote_reference).
|
|
21
|
+
with("address", options.server_port).
|
|
22
|
+
returns(:server_reference)
|
|
23
|
+
|
|
24
|
+
assert_equal :server_reference, workers.server
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "runner adds specified number of work units to blackboard" do
|
|
5
|
+
blackboard = DeepTest::SimpleTestBlackboard.new
|
|
6
|
+
runner = DeepTest::Distributed::ThroughputRunner.new(
|
|
7
|
+
DeepTest::Options.new({}),
|
|
8
|
+
5,
|
|
9
|
+
blackboard
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
worker = ThreadWorker.new(blackboard, 5)
|
|
13
|
+
Timeout.timeout(5) do
|
|
14
|
+
runner.process_work_units
|
|
15
|
+
end
|
|
16
|
+
worker.wait_until_done
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
test "runner yields all results from blackboard" do
|
|
20
|
+
blackboard = DeepTest::SimpleTestBlackboard.new
|
|
21
|
+
count = 0
|
|
22
|
+
runner = DeepTest::Distributed::ThroughputRunner.new(
|
|
23
|
+
DeepTest::Options.new({}),
|
|
24
|
+
2,
|
|
25
|
+
blackboard
|
|
26
|
+
) do |result|
|
|
27
|
+
assert_equal :null_work_unit_result, result
|
|
28
|
+
count += 1
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
worker = ThreadWorker.new(blackboard, 2)
|
|
32
|
+
Timeout.timeout(5) do
|
|
33
|
+
runner.process_work_units
|
|
34
|
+
end
|
|
35
|
+
worker.wait_until_done
|
|
36
|
+
|
|
37
|
+
assert_equal 2, count
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
test "statistics are available after run" do
|
|
41
|
+
blackboard = DeepTest::SimpleTestBlackboard.new
|
|
42
|
+
runner = DeepTest::Distributed::ThroughputRunner.new(
|
|
43
|
+
DeepTest::Options.new({}),
|
|
44
|
+
2,
|
|
45
|
+
blackboard
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
worker = ThreadWorker.new(blackboard, 2)
|
|
49
|
+
count = 0
|
|
50
|
+
Timeout.timeout(5) do
|
|
51
|
+
runner.process_work_units
|
|
52
|
+
end
|
|
53
|
+
worker.wait_until_done
|
|
54
|
+
|
|
55
|
+
assert_kind_of DeepTest::Distributed::ThroughputStatistics,
|
|
56
|
+
runner.statistics
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
test "runner returns true" do
|
|
60
|
+
runner = DeepTest::Distributed::ThroughputRunner.new(
|
|
61
|
+
DeepTest::Options.new({}),
|
|
62
|
+
0,
|
|
63
|
+
DeepTest::SimpleTestBlackboard.new
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
assert_equal true, runner.process_work_units
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "start_all starts workers on a new worker server" do
|
|
5
|
+
client = DeepTest::Distributed::ThroughputWorkerClient.new(
|
|
6
|
+
options = DeepTest::Options.new({}),
|
|
7
|
+
test_server = stub_everything
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
test_server.expects(:spawn_worker_server).with(options).
|
|
11
|
+
returns(worker_server = stub_everything)
|
|
12
|
+
|
|
13
|
+
worker_server.expects(:start_all)
|
|
14
|
+
client.start_all
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
test "stop_all stops workers on worker server that was spawned in start_all" do
|
|
18
|
+
worker_server = stub_everything
|
|
19
|
+
client = DeepTest::Distributed::ThroughputWorkerClient.new(
|
|
20
|
+
DeepTest::Options.new({}),
|
|
21
|
+
test_server = stub_everything(:spawn_worker_server => worker_server)
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
client.start_all
|
|
25
|
+
worker_server.expects(:stop_all)
|
|
26
|
+
client.stop_all
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "retrying once" do
|
|
5
|
+
object = Object.new
|
|
6
|
+
object.expects(:call_it_twice).times(2).raises(RuntimeError).then.returns(:ok)
|
|
7
|
+
result = nil
|
|
8
|
+
capture_stdout do
|
|
9
|
+
result = retrying do
|
|
10
|
+
object.call_it_twice
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
assert_equal :ok, result
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test "retrying defaults to 5 times" do
|
|
17
|
+
object = Object.new
|
|
18
|
+
object.expects(:may_i_please_have_another).times(5).
|
|
19
|
+
raises(RuntimeError).raises(RuntimeError).raises(RuntimeError).raises(RuntimeError).returns("ok")
|
|
20
|
+
capture_stdout do
|
|
21
|
+
retrying do
|
|
22
|
+
object.may_i_please_have_another
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
test "retrying raises exception if still failing after number of attempts" do
|
|
28
|
+
my_error = Class.new(StandardError)
|
|
29
|
+
assert_raises(my_error) do
|
|
30
|
+
capture_stdout do
|
|
31
|
+
retrying "", 1 do
|
|
32
|
+
raise my_error
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "forwards methods defined in NullWorkerListener to all listeners" do
|
|
5
|
+
listener_1, listener_2 = mock, mock
|
|
6
|
+
list = DeepTest::ListenerList.new([listener_1, listener_2])
|
|
7
|
+
listener_1.expects(:starting).with(:worker)
|
|
8
|
+
listener_2.expects(:starting).with(:worker)
|
|
9
|
+
listener_1.expects(:starting_work).with(:worker, :work)
|
|
10
|
+
listener_2.expects(:starting_work).with(:worker, :work)
|
|
11
|
+
list.starting(:worker)
|
|
12
|
+
list.starting_work(:worker, :work)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
test "doesn't forward methods not defined in NullWorkerListener" do
|
|
16
|
+
listener = mock
|
|
17
|
+
listener.expects(:to_s).never
|
|
18
|
+
DeepTest::ListenerList.new([listener]).to_s
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "number_of_workers is determined by options" do
|
|
5
|
+
workers = DeepTest::LocalWorkers.new(
|
|
6
|
+
DeepTest::Options.new(:number_of_workers => 4)
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
assert_equal 4, workers.number_of_workers
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
test "load_files simply loads each file provided" do
|
|
13
|
+
workers = DeepTest::LocalWorkers.new(
|
|
14
|
+
DeepTest::Options.new(:number_of_workers => 4)
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
workers.expects(:load).with(:file_1)
|
|
18
|
+
workers.expects(:load).with(:file_2)
|
|
19
|
+
|
|
20
|
+
workers.load_files([:file_1, :file_2])
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "info log level by default" do
|
|
5
|
+
assert_equal Logger::INFO, DeepTest.logger.level
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
test "formatter uses msg only" do
|
|
9
|
+
assert_equal "[DeepTest] my_msg\n", DeepTest.logger.formatter.call(nil, nil, nil, "my_msg")
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "loading a marshallable exception evals the classname and returns an instance of the original exception" do
|
|
5
|
+
original = RuntimeError.new "message"
|
|
6
|
+
original.set_backtrace ['1', '2']
|
|
7
|
+
|
|
8
|
+
marshalled = DeepTest::MarshallableExceptionWrapper.new(original)
|
|
9
|
+
DeepTest::MarshallableExceptionWrapper.any_instance.expects(:eval).
|
|
10
|
+
with("::RuntimeError").returns(RuntimeError)
|
|
11
|
+
|
|
12
|
+
loaded = Marshal.load(Marshal.dump(marshalled)).resolve
|
|
13
|
+
|
|
14
|
+
assert_equal original.class, loaded.class
|
|
15
|
+
assert_equal original.message, loaded.message
|
|
16
|
+
assert_equal original.backtrace, loaded.backtrace
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
test "loading a marshallable exception when class is not available returns an instance of unloadable exception" do
|
|
20
|
+
original = RuntimeError.new "message"
|
|
21
|
+
original.set_backtrace ['1', '2']
|
|
22
|
+
|
|
23
|
+
marshalled = DeepTest::MarshallableExceptionWrapper.new(original)
|
|
24
|
+
DeepTest::MarshallableExceptionWrapper.any_instance.expects(:eval).
|
|
25
|
+
raises("Eval Error")
|
|
26
|
+
|
|
27
|
+
loaded = Marshal.load(Marshal.dump(marshalled)).resolve
|
|
28
|
+
|
|
29
|
+
assert_equal DeepTest::UnloadableException, loaded.class
|
|
30
|
+
assert_equal "RuntimeError: " + original.message, loaded.message
|
|
31
|
+
assert_equal original.backtrace, loaded.backtrace
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
test "loading a marshallable exception when class init throws an error returns an unloadable exception" do
|
|
35
|
+
original = RuntimeError.new "message"
|
|
36
|
+
|
|
37
|
+
marshalled = DeepTest::MarshallableExceptionWrapper.new(original)
|
|
38
|
+
RuntimeError.expects(:new).raises(StandardError.new)
|
|
39
|
+
|
|
40
|
+
loaded = Marshal.load(Marshal.dump(marshalled)).resolve
|
|
41
|
+
|
|
42
|
+
assert_equal DeepTest::UnloadableException, loaded.class
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../test_helper"
|
|
2
|
+
|
|
3
|
+
unit_tests do
|
|
4
|
+
test "section uses block to add measurements when render is called" do
|
|
5
|
+
i = j = 0
|
|
6
|
+
section = DeepTest::Metrics::Gatherer::Section.new("my section") do |s|
|
|
7
|
+
s.measurement("i", i)
|
|
8
|
+
s.measurement("j", j)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
i = 1
|
|
12
|
+
j = 2
|
|
13
|
+
|
|
14
|
+
rendered_string = section.render
|
|
15
|
+
|
|
16
|
+
assert_match /^i: 1$/, rendered_string
|
|
17
|
+
assert_match /^j: 2$/, rendered_string
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
test "section starts with title" do
|
|
21
|
+
section = DeepTest::Metrics::Gatherer::Section.new("my section") {|s|}
|
|
22
|
+
assert_equal "[my section]\n", section.render
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test "gatherer renders all sections defined" do
|
|
26
|
+
gatherer = DeepTest::Metrics::Gatherer.new(DeepTest::Options.new(:metrics_file => "something"))
|
|
27
|
+
gatherer.section("section 1") {|s|}
|
|
28
|
+
gatherer.section("section 2") {|s|}
|
|
29
|
+
|
|
30
|
+
assert_equal "[section 1]\n\n[section 2]\n", gatherer.render
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
test "no sections are added if not gathering metrics" do
|
|
34
|
+
gatherer = DeepTest::Metrics::Gatherer.new(DeepTest::Options.new({}))
|
|
35
|
+
gatherer.section("section 1") {|s|}
|
|
36
|
+
gatherer.section("section 2") {|s|}
|
|
37
|
+
|
|
38
|
+
assert_equal "", gatherer.render
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
test "enabled? is true if metrics_file is specified" do
|
|
42
|
+
gatherer = DeepTest::Metrics::Gatherer.new(DeepTest::Options.new(:metrics_file => "something"))
|
|
43
|
+
assert_equal true, gatherer.enabled?
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
test "enabled? is false if metrics_file is not specified" do
|
|
47
|
+
gatherer = DeepTest::Metrics::Gatherer.new(DeepTest::Options.new({}))
|
|
48
|
+
assert_equal false, gatherer.enabled?
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
test "write_file writes rendered contents to metrics file" do
|
|
52
|
+
gatherer = DeepTest::Metrics::Gatherer.new(
|
|
53
|
+
DeepTest::Options.new(:metrics_file => "a_file")
|
|
54
|
+
)
|
|
55
|
+
gatherer.section("section 1") {|s|}
|
|
56
|
+
File.expects(:open).with("a_file", "w").yields(io = StringIO.new)
|
|
57
|
+
gatherer.write_file
|
|
58
|
+
assert_equal gatherer.render, io.string
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
test "write_file does nothing if not enabled" do
|
|
62
|
+
gatherer = DeepTest::Metrics::Gatherer.new(DeepTest::Options.new({}))
|
|
63
|
+
File.expects(:open).never
|
|
64
|
+
gatherer.write_file
|
|
65
|
+
end
|
|
66
|
+
end
|