testbot_instructure 0.7.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gemtest +0 -0
- data/CHANGELOG +264 -0
- data/Gemfile +3 -0
- data/README.markdown +141 -0
- data/Rakefile +35 -0
- data/bin/testbot +59 -0
- data/lib/generators/testbot/templates/testbot.rake.erb +35 -0
- data/lib/generators/testbot/templates/testbot.yml.erb +45 -0
- data/lib/generators/testbot/testbot_generator.rb +19 -0
- data/lib/railtie.rb +16 -0
- data/lib/requester/requester.rb +171 -0
- data/lib/runner/job.rb +112 -0
- data/lib/runner/runner.rb +222 -0
- data/lib/runner/safe_result_text.rb +29 -0
- data/lib/server/build.rb +36 -0
- data/lib/server/group.rb +48 -0
- data/lib/server/job.rb +64 -0
- data/lib/server/memory_model.rb +91 -0
- data/lib/server/runner.rb +47 -0
- data/lib/server/server.rb +103 -0
- data/lib/server/status/javascripts/jquery-1.4.4.min.js +167 -0
- data/lib/server/status/status.html +48 -0
- data/lib/server/status/stylesheets/status.css +14 -0
- data/lib/shared/adapters/adapter.rb +27 -0
- data/lib/shared/adapters/cucumber_adapter.rb +91 -0
- data/lib/shared/adapters/helpers/ruby_env.rb +47 -0
- data/lib/shared/adapters/rspec2_adapter.rb +61 -0
- data/lib/shared/adapters/rspec_adapter.rb +79 -0
- data/lib/shared/adapters/test_unit_adapter.rb +44 -0
- data/lib/shared/color.rb +16 -0
- data/lib/shared/simple_daemonize.rb +25 -0
- data/lib/shared/ssh_tunnel.rb +36 -0
- data/lib/shared/testbot.rb +132 -0
- data/lib/shared/version.rb +12 -0
- data/lib/tasks/testbot.rake +30 -0
- data/lib/testbot.rb +2 -0
- data/test/fixtures/local/Rakefile +7 -0
- data/test/fixtures/local/config/testbot.yml +5 -0
- data/test/fixtures/local/log/test.log +0 -0
- data/test/fixtures/local/script/spec +2 -0
- data/test/fixtures/local/spec/models/car_spec.rb +0 -0
- data/test/fixtures/local/spec/models/house_spec.rb +0 -0
- data/test/fixtures/local/spec/spec.opts +0 -0
- data/test/fixtures/local/tmp/restart.txt +0 -0
- data/test/integration_test.rb +55 -0
- data/test/requester/requester_test.rb +407 -0
- data/test/requester/testbot.yml +7 -0
- data/test/requester/testbot_with_erb.yml +2 -0
- data/test/runner/job_test.rb +94 -0
- data/test/runner/safe_result_text_test.rb +20 -0
- data/test/server/group_test.rb +43 -0
- data/test/server/server_test.rb +511 -0
- data/test/shared/adapters/adapter_test.rb +22 -0
- data/test/shared/adapters/cucumber_adapter_test.rb +72 -0
- data/test/shared/adapters/helpers/ruby_env_test.rb +108 -0
- data/test/shared/adapters/rspec_adapter_test.rb +109 -0
- data/test/shared/testbot_test.rb +185 -0
- data/testbot.gemspec +34 -0
- metadata +313 -0
@@ -0,0 +1,108 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../../../../lib/shared/adapters/helpers/ruby_env.rb'))
|
2
|
+
require 'test/unit'
|
3
|
+
require 'shoulda'
|
4
|
+
require 'flexmock/test_unit'
|
5
|
+
|
6
|
+
class RubyEnvTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
# Can't override a stub in flexmock?
|
10
|
+
def RubyEnv.rvm?; false; end
|
11
|
+
end
|
12
|
+
|
13
|
+
context "self.bundler?" do
|
14
|
+
|
15
|
+
should "return true if bundler is installed and there is a Gemfile" do
|
16
|
+
flexmock(Gem::Specification).should_receive(:find_by_name).with("bundler").once.and_return(true)
|
17
|
+
flexmock(File).should_receive(:exists?).with("path/to/project/Gemfile").once.and_return(true)
|
18
|
+
assert_equal true, RubyEnv.bundler?("path/to/project")
|
19
|
+
end
|
20
|
+
|
21
|
+
should "return false if bundler is installed but there is no Gemfile" do
|
22
|
+
flexmock(Gem::Specification).should_receive(:find_by_name).with("bundler").once.and_return(true)
|
23
|
+
flexmock(File).should_receive(:exists?).and_return(false)
|
24
|
+
assert_equal false, RubyEnv.bundler?("path/to/project")
|
25
|
+
end
|
26
|
+
|
27
|
+
should "return false if bundler is not installed" do
|
28
|
+
flexmock(Gem::Specification).should_receive(:find_by_name).with("bundler").once.and_return(false)
|
29
|
+
assert_equal false, RubyEnv.bundler?("path/to/project")
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
context "self.rvm_prefix" do
|
35
|
+
|
36
|
+
should "return rvm prefix if rvm is installed" do
|
37
|
+
def RubyEnv.rvm?; true; end
|
38
|
+
flexmock(File).should_receive(:exists?).with("path/to/project/.rvmrc").once.and_return(true)
|
39
|
+
flexmock(File).should_receive(:read).with("path/to/project/.rvmrc").once.and_return("rvm 1.8.7\n")
|
40
|
+
assert_equal "rvm 1.8.7 exec", RubyEnv.rvm_prefix("path/to/project")
|
41
|
+
end
|
42
|
+
|
43
|
+
should "return nil if rvm is not installed" do
|
44
|
+
assert_equal nil, RubyEnv.rvm_prefix("path/to/project")
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
context "self.ruby_command" do
|
50
|
+
|
51
|
+
should "use ruby by default" do
|
52
|
+
flexmock(RubyEnv).should_receive(:bundler?).and_return(false)
|
53
|
+
flexmock(File).should_receive(:exists?).and_return(false)
|
54
|
+
assert_equal 'ruby -S rspec', RubyEnv.ruby_command("path/to/project", :script => "script/spec", :bin => "rspec")
|
55
|
+
end
|
56
|
+
|
57
|
+
should "use bundler when available and use the binary when there is no script" do
|
58
|
+
flexmock(RubyEnv).should_receive(:bundler?).once.with("path/to/project").and_return(true)
|
59
|
+
flexmock(File).should_receive(:exists?).with("path/to/project/script/spec").and_return(false)
|
60
|
+
assert_equal 'ruby -S bundle exec rspec', RubyEnv.ruby_command("path/to/project", :script => "script/spec", :bin => "rspec")
|
61
|
+
end
|
62
|
+
|
63
|
+
should "use the script when it exists when using bundler" do
|
64
|
+
flexmock(RubyEnv).should_receive(:bundler?).and_return(true)
|
65
|
+
flexmock(File).should_receive(:exists?).and_return(true)
|
66
|
+
assert_equal 'ruby -S bundle exec script/spec', RubyEnv.ruby_command("path/to/project", :script => "script/spec", :bin => "rspec")
|
67
|
+
end
|
68
|
+
|
69
|
+
should "use the script when it exists when not using bundler" do
|
70
|
+
flexmock(RubyEnv).should_receive(:bundler?).and_return(false)
|
71
|
+
flexmock(File).should_receive(:exists?).and_return(true)
|
72
|
+
assert_equal 'ruby -S script/spec', RubyEnv.ruby_command("path/to/project", :script => "script/spec", :bin => "rspec")
|
73
|
+
end
|
74
|
+
|
75
|
+
should "not look for a script when none is provided" do
|
76
|
+
assert_equal 'ruby -S rspec', RubyEnv.ruby_command("path/to/project", :bin => "rspec")
|
77
|
+
end
|
78
|
+
|
79
|
+
should "be able to use jruby" do
|
80
|
+
flexmock(RubyEnv).should_receive(:bundler?).and_return(false)
|
81
|
+
flexmock(File).should_receive(:exists?).and_return(true)
|
82
|
+
assert_equal 'jruby -S script/spec', RubyEnv.ruby_command("path/to/project", :script => "script/spec",
|
83
|
+
:bin => "rspec", :ruby_interpreter => "jruby")
|
84
|
+
end
|
85
|
+
|
86
|
+
should "be able to use jruby with bundler" do
|
87
|
+
flexmock(RubyEnv).should_receive(:bundler?).and_return(true)
|
88
|
+
flexmock(File).should_receive(:exists?).and_return(true)
|
89
|
+
assert_equal 'jruby -S bundle exec script/spec', RubyEnv.ruby_command("path/to/project", :script => "script/spec",
|
90
|
+
:bin => "rspec", :ruby_interpreter => "jruby")
|
91
|
+
end
|
92
|
+
|
93
|
+
should "work when there is no binary specified and bundler is present" do
|
94
|
+
flexmock(RubyEnv).should_receive(:bundler?).and_return(true)
|
95
|
+
flexmock(File).should_receive(:exists?).and_return(false)
|
96
|
+
assert_equal 'ruby -S bundle exec', RubyEnv.ruby_command("path/to/project")
|
97
|
+
end
|
98
|
+
|
99
|
+
should "work when there is no binary specified and bundler is not present" do
|
100
|
+
flexmock(RubyEnv).should_receive(:bundler?).and_return(false)
|
101
|
+
flexmock(File).should_receive(:exists?).and_return(false)
|
102
|
+
assert_equal 'ruby -S', RubyEnv.ruby_command("path/to/project")
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../../../lib/shared/adapters/rspec_adapter.rb'))
|
2
|
+
require 'test/unit'
|
3
|
+
require 'shoulda'
|
4
|
+
|
5
|
+
class RspecAdapterTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
context "sum_results" do
|
8
|
+
|
9
|
+
should "be able to parse and sum results" do
|
10
|
+
results =<<STR
|
11
|
+
srv-y5ei5:/tmp/testbot
|
12
|
+
..................FF..................................................
|
13
|
+
|
14
|
+
Finished in 4.962975 seconds
|
15
|
+
|
16
|
+
69 examples, 2 failures
|
17
|
+
|
18
|
+
|
19
|
+
testbot1:/tmp/testbot
|
20
|
+
.............F...........*........................
|
21
|
+
|
22
|
+
Finished in 9.987141 seconds
|
23
|
+
|
24
|
+
50 examples, 1 failure, 1 pending
|
25
|
+
|
26
|
+
testbot1:/tmp/testbot
|
27
|
+
.............FF.......****........................
|
28
|
+
|
29
|
+
Finished in 9.987141 seconds
|
30
|
+
|
31
|
+
50 examples, 2 failures, 3 pending
|
32
|
+
|
33
|
+
testbot1:/tmp/testbot
|
34
|
+
.
|
35
|
+
|
36
|
+
Finished in 9.987141 seconds
|
37
|
+
|
38
|
+
1 example, 0 failures, 0 pending
|
39
|
+
STR
|
40
|
+
assert_equal "170 examples, 5 failures, 4 pending", Color.strip(RspecAdapter.sum_results(results))
|
41
|
+
end
|
42
|
+
|
43
|
+
should "return 0 examples and failures for an empty resultset" do
|
44
|
+
assert_equal "0 examples, 0 failures", Color.strip(RspecAdapter.sum_results(""))
|
45
|
+
end
|
46
|
+
|
47
|
+
should "print in singular for examples" do
|
48
|
+
str =<<STR
|
49
|
+
testbot1:/tmp/testbot
|
50
|
+
.
|
51
|
+
|
52
|
+
Finished in 9.987141 seconds
|
53
|
+
|
54
|
+
1 example, 0 failures
|
55
|
+
STR
|
56
|
+
assert_equal "1 example, 0 failures", Color.strip(RspecAdapter.sum_results(str))
|
57
|
+
end
|
58
|
+
|
59
|
+
should "print in singular for failures" do
|
60
|
+
str =<<STR
|
61
|
+
testbot1:/tmp/testbot
|
62
|
+
F
|
63
|
+
|
64
|
+
Finished in 9.987141 seconds
|
65
|
+
|
66
|
+
0 example, 1 failures
|
67
|
+
STR
|
68
|
+
assert_equal "0 examples, 1 failure", Color.strip(RspecAdapter.sum_results(str))
|
69
|
+
end
|
70
|
+
|
71
|
+
should "make the result green if there is no failed or pending examples" do
|
72
|
+
str =<<STR
|
73
|
+
testbot1:/tmp/testbot
|
74
|
+
.
|
75
|
+
|
76
|
+
Finished in 9.987141 seconds
|
77
|
+
|
78
|
+
1 example, 0 failures
|
79
|
+
STR
|
80
|
+
assert_equal "\033[32m1 example, 0 failures\033[0m", RspecAdapter.sum_results(str)
|
81
|
+
end
|
82
|
+
|
83
|
+
should "make the result orange if there is pending examples" do
|
84
|
+
str =<<STR
|
85
|
+
testbot1:/tmp/testbot
|
86
|
+
*
|
87
|
+
|
88
|
+
Finished in 9.987141 seconds
|
89
|
+
|
90
|
+
1 example, 0 failures, 1 pending
|
91
|
+
STR
|
92
|
+
assert_equal "\033[33m1 example, 0 failures, 1 pending\033[0m", RspecAdapter.sum_results(str)
|
93
|
+
end
|
94
|
+
|
95
|
+
should "make the results red if there is failed examples" do
|
96
|
+
str = <<STR
|
97
|
+
testbot1:/tmp/testbot
|
98
|
+
F
|
99
|
+
|
100
|
+
Finished in 9.987141 seconds
|
101
|
+
|
102
|
+
1 example, 1 failures
|
103
|
+
STR
|
104
|
+
assert_equal "\033[31m1 example, 1 failure\033[0m", RspecAdapter.sum_results(str)
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
@@ -0,0 +1,185 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../../lib/shared/testbot')) unless defined?(Testbot)
|
2
|
+
require 'test/unit'
|
3
|
+
require 'shoulda'
|
4
|
+
require 'flexmock/test_unit'
|
5
|
+
require 'sinatra'
|
6
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../../lib/requester/requester'))
|
7
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../../lib/server/server'))
|
8
|
+
|
9
|
+
module Testbot
|
10
|
+
|
11
|
+
module TestHelpers
|
12
|
+
|
13
|
+
def requester_attributes
|
14
|
+
{ :server_host => "192.168.0.100",
|
15
|
+
:rsync_path => nil,
|
16
|
+
:rsync_ignores => '', :server_user => nil, :available_runner_usage => nil,
|
17
|
+
:project => nil, :ssh_tunnel => nil }
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
class CLITest < Test::Unit::TestCase
|
23
|
+
|
24
|
+
include TestHelpers
|
25
|
+
|
26
|
+
context "self.run" do
|
27
|
+
|
28
|
+
context "with no args" do
|
29
|
+
should "return false" do
|
30
|
+
assert_equal false, CLI.run([])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "with --help" do
|
35
|
+
should "return false" do
|
36
|
+
assert_equal false, CLI.run([ '--help' ])
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "with --version" do
|
41
|
+
should "print version and return true" do
|
42
|
+
flexmock(CLI).should_receive(:puts).once.with("Testbot #{Testbot.version}")
|
43
|
+
assert_equal true, CLI.run([ '--version' ])
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context "with --server" do
|
48
|
+
should "start a server" do
|
49
|
+
flexmock(SimpleDaemonize).should_receive(:stop).once.with(Testbot::SERVER_PID)
|
50
|
+
flexmock(SimpleDaemonize).should_receive(:start).once.with(any, Testbot::SERVER_PID, "testbot (server)")
|
51
|
+
flexmock(CLI).should_receive(:puts).once.with("Testbot server started (pid: #{Process.pid})")
|
52
|
+
assert_equal true, CLI.run([ "--server" ])
|
53
|
+
end
|
54
|
+
|
55
|
+
should "start a server when start is passed" do
|
56
|
+
flexmock(SimpleDaemonize).should_receive(:stop).once.with(Testbot::SERVER_PID)
|
57
|
+
flexmock(SimpleDaemonize).should_receive(:start).once
|
58
|
+
flexmock(CLI).should_receive(:puts)
|
59
|
+
assert_equal true, CLI.run([ "--server", "start" ])
|
60
|
+
end
|
61
|
+
|
62
|
+
should "stop a server when stop is passed" do
|
63
|
+
flexmock(SimpleDaemonize).should_receive(:stop).once.with(Testbot::SERVER_PID).and_return(true)
|
64
|
+
flexmock(CLI).should_receive(:puts).once.with("Testbot server stopped")
|
65
|
+
assert_equal true, CLI.run([ "--server", "stop" ])
|
66
|
+
end
|
67
|
+
|
68
|
+
should "not print when SimpleDaemonize.stop returns false" do
|
69
|
+
flexmock(SimpleDaemonize).should_receive(:stop).and_return(false)
|
70
|
+
flexmock(CLI).should_receive(:puts).never
|
71
|
+
CLI.run([ "--stop", "server" ])
|
72
|
+
end
|
73
|
+
|
74
|
+
should "start it in the foreground with run" do
|
75
|
+
flexmock(SimpleDaemonize).should_receive(:stop).once.with(Testbot::SERVER_PID)
|
76
|
+
flexmock(SimpleDaemonize).should_receive(:start).never
|
77
|
+
flexmock(Sinatra::Application).should_receive(:run!).once.with(:environment => "production")
|
78
|
+
assert_equal true, CLI.run([ "--server", 'run' ])
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "with --runner" do
|
83
|
+
should "start a runner" do
|
84
|
+
flexmock(SimpleDaemonize).should_receive(:stop).once.with(Testbot::RUNNER_PID)
|
85
|
+
flexmock(SimpleDaemonize).should_receive(:start).once.with(any, Testbot::RUNNER_PID, "testbot (runner)")
|
86
|
+
flexmock(CLI).should_receive(:puts).once.with("Testbot runner started (pid: #{Process.pid})")
|
87
|
+
assert_equal true, CLI.run([ "--runner", "--connect", "192.168.0.100", "--working_dir", "/tmp/testbot" ])
|
88
|
+
end
|
89
|
+
|
90
|
+
should "start a runner when start is passed" do
|
91
|
+
flexmock(SimpleDaemonize).should_receive(:stop).once.with(Testbot::RUNNER_PID)
|
92
|
+
flexmock(SimpleDaemonize).should_receive(:start).once
|
93
|
+
flexmock(CLI).should_receive(:puts)
|
94
|
+
assert_equal true, CLI.run([ "--runner", "start", "--connect", "192.168.0.100" ])
|
95
|
+
end
|
96
|
+
|
97
|
+
should "stop a runner when stop is passed" do
|
98
|
+
flexmock(SimpleDaemonize).should_receive(:stop).once.with(Testbot::RUNNER_PID).and_return(true)
|
99
|
+
flexmock(CLI).should_receive(:puts).once.with("Testbot runner stopped")
|
100
|
+
assert_equal true, CLI.run([ "--runner", "stop" ])
|
101
|
+
end
|
102
|
+
|
103
|
+
should "return false without connect" do
|
104
|
+
assert_equal false, CLI.run([ "--runner", "--connect" ])
|
105
|
+
assert_equal false, CLI.run([ "--runner" ])
|
106
|
+
end
|
107
|
+
|
108
|
+
should "start it in the foreground with run" do
|
109
|
+
flexmock(SimpleDaemonize).should_receive(:stop).once.with(Testbot::RUNNER_PID)
|
110
|
+
flexmock(SimpleDaemonize).should_receive(:start).never
|
111
|
+
flexmock(Runner::Runner).should_receive(:new).once.and_return(mock = Object.new)
|
112
|
+
flexmock(mock).should_receive(:run!).once
|
113
|
+
assert_equal true, CLI.run([ "--runner", 'run', '--connect', '192.168.0.100' ])
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
Adapter.all.each do |adapter|
|
118
|
+
context "with --#{adapter.type}" do
|
119
|
+
should "start a #{adapter.name} requester and return true" do
|
120
|
+
flexmock(Requester::Requester).should_receive(:new).once.
|
121
|
+
with(requester_attributes).and_return(mock = Object.new)
|
122
|
+
flexmock(mock).should_receive(:run_tests).once.with(adapter, adapter.base_path)
|
123
|
+
assert_equal true, CLI.run([ "--#{adapter.type}", "--connect", "192.168.0.100" ])
|
124
|
+
end
|
125
|
+
|
126
|
+
should "accept a custom rsync_path" do
|
127
|
+
flexmock(Requester::Requester).should_receive(:new).once.
|
128
|
+
with(requester_attributes.merge({ :rsync_path => "/somewhere/else" })).
|
129
|
+
and_return(mock = Object.new)
|
130
|
+
flexmock(mock).should_receive(:run_tests)
|
131
|
+
CLI.run([ "--#{adapter.type}", "--connect", "192.168.0.100", '--rsync_path', '/somewhere/else' ])
|
132
|
+
end
|
133
|
+
|
134
|
+
should "accept rsync_ignores" do
|
135
|
+
flexmock(Requester::Requester).should_receive(:new).once.
|
136
|
+
with(requester_attributes.merge({ :rsync_ignores => "tmp log" })).
|
137
|
+
and_return(mock = Object.new)
|
138
|
+
flexmock(mock).should_receive(:run_tests)
|
139
|
+
CLI.run([ "--#{adapter.type}", "--connect", "192.168.0.100", '--rsync_ignores', 'tmp', 'log' ])
|
140
|
+
end
|
141
|
+
|
142
|
+
should "accept ssh tunnel" do
|
143
|
+
flexmock(Requester::Requester).should_receive(:new).once.
|
144
|
+
with(requester_attributes.merge({ :ssh_tunnel => true })).
|
145
|
+
and_return(mock = Object.new)
|
146
|
+
flexmock(mock).should_receive(:run_tests)
|
147
|
+
CLI.run([ "--#{adapter.type}", "--connect", "192.168.0.100", '--ssh_tunnel' ])
|
148
|
+
end
|
149
|
+
|
150
|
+
should "accept a custom user" do
|
151
|
+
flexmock(Requester::Requester).should_receive(:new).once.
|
152
|
+
with(requester_attributes.merge({ :server_user => "cruise" })).
|
153
|
+
and_return(mock = Object.new)
|
154
|
+
flexmock(mock).should_receive(:run_tests)
|
155
|
+
CLI.run([ "--#{adapter.type}", "--connect", "192.168.0.100", '--user', 'cruise' ])
|
156
|
+
end
|
157
|
+
|
158
|
+
should "accept a custom project name" do
|
159
|
+
flexmock(Requester::Requester).should_receive(:new).once.
|
160
|
+
with(requester_attributes.merge({ :project => "rspec" })).
|
161
|
+
and_return(mock = Object.new)
|
162
|
+
flexmock(mock).should_receive(:run_tests)
|
163
|
+
CLI.run([ "--#{adapter.type}", "--connect", "192.168.0.100", '--project', 'rspec' ])
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
context "self.parse_args" do
|
170
|
+
|
171
|
+
should 'convert ARGV arguments to a hash' do
|
172
|
+
hash = CLI.parse_args("--runner --connect http://127.0.0.1:#{Testbot::SERVER_PORT} --working_dir ~/testbot --ssh_tunnel user@testbot_server".split)
|
173
|
+
assert_equal ({ :runner => true, :connect => "http://127.0.0.1:#{Testbot::SERVER_PORT}", :working_dir => "~/testbot", :ssh_tunnel => "user@testbot_server" }), hash
|
174
|
+
end
|
175
|
+
|
176
|
+
should "handle just a key without a value" do
|
177
|
+
hash = CLI.parse_args([ "--server" ])
|
178
|
+
assert_equal ({ :server => true }), hash
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
data/testbot.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/lib/shared/version')
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "testbot_instructure"
|
6
|
+
s.version = Testbot.version
|
7
|
+
s.authors = ["Joakim Kolsjö"]
|
8
|
+
s.email = ["joakim.kolsjo@gmail.com"]
|
9
|
+
s.homepage = "http://github.com/joakimk/testbot"
|
10
|
+
s.summary = %q{A test distribution tool forked for instructure.}
|
11
|
+
s.description = %q{Testbot is a test distribution tool that works with Rails, RSpec, RSpec2, Test::Unit and Cucumber.}
|
12
|
+
s.bindir = "bin"
|
13
|
+
s.executables = [ "testbot" ]
|
14
|
+
s.files = Dir.glob("lib/**/*") + Dir.glob("test/**/*") + %w(Gemfile .gemtest Rakefile testbot.gemspec CHANGELOG README.markdown bin/testbot) +
|
15
|
+
(File.exists?("DEV_VERSION") ? [ "DEV_VERSION" ] : [])
|
16
|
+
|
17
|
+
s.add_dependency('sinatra', '~> 1.0.0')
|
18
|
+
s.add_dependency('httparty', '>= 0.6.1')
|
19
|
+
s.add_dependency('net-ssh', '>= 2.0.23')
|
20
|
+
s.add_dependency('json_pure', '>= 1.4.6')
|
21
|
+
s.add_dependency('daemons', '>= 1.0.10')
|
22
|
+
s.add_dependency('acts_as_rails3_generator')
|
23
|
+
s.add_dependency('posix-spawn', '>= 0.3.6')
|
24
|
+
|
25
|
+
s.add_development_dependency("shoulda")
|
26
|
+
s.add_development_dependency("rack-test")
|
27
|
+
s.add_development_dependency("flexmock")
|
28
|
+
s.add_development_dependency("rvm")
|
29
|
+
s.add_development_dependency("rake", "0.8.7")
|
30
|
+
s.add_development_dependency("bundler")
|
31
|
+
s.add_development_dependency("guard")
|
32
|
+
s.add_development_dependency("guard-test")
|
33
|
+
end
|
34
|
+
|