tinderbox 1.0.0
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/History.txt +6 -0
- data/LICENSE.txt +27 -0
- data/Manifest.txt +14 -0
- data/README.txt +33 -0
- data/Rakefile +21 -0
- data/bin/tinderbox_gem_build +14 -0
- data/bin/tinderbox_gem_run +7 -0
- data/lib/tinderbox.rb +34 -0
- data/lib/tinderbox/build.rb +22 -0
- data/lib/tinderbox/gem_runner.rb +369 -0
- data/lib/tinderbox/gem_tinderbox.rb +285 -0
- data/test/test_tinderbox_build.rb +103 -0
- data/test/test_tinderbox_gem_runner.rb +688 -0
- data/test/test_tinderbox_gem_tinderbox.rb +236 -0
- metadata +97 -0
@@ -0,0 +1,236 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'test/zentest_assertions'
|
4
|
+
require 'rc_rest/net_http_stub'
|
5
|
+
require 'rc_rest/uri_stub'
|
6
|
+
|
7
|
+
$TESTING = true
|
8
|
+
|
9
|
+
require 'tinderbox/gem_tinderbox'
|
10
|
+
require 'tinderbox/gem_runner'
|
11
|
+
|
12
|
+
class Firebrigade::Cache
|
13
|
+
attr_reader :builds, :owners, :projects, :versions, :targets
|
14
|
+
end
|
15
|
+
|
16
|
+
class Tinderbox::GemTinderbox
|
17
|
+
attr_writer :source_info_cache, :target_id
|
18
|
+
attr_reader :fc, :seen_gem_names
|
19
|
+
end
|
20
|
+
|
21
|
+
class TestTinderboxGemTinderbox < Test::Unit::TestCase
|
22
|
+
|
23
|
+
def setup
|
24
|
+
Net::HTTP.params = []
|
25
|
+
Net::HTTP.paths = []
|
26
|
+
Net::HTTP.responses = []
|
27
|
+
|
28
|
+
URI::HTTP.uris = []
|
29
|
+
URI::HTTP.responses = []
|
30
|
+
|
31
|
+
@tgt = Tinderbox::GemTinderbox.new 'firebrigade.example.com', 'username',
|
32
|
+
'password'
|
33
|
+
|
34
|
+
sic = {}
|
35
|
+
def sic.refresh
|
36
|
+
end
|
37
|
+
|
38
|
+
def sic.cache_data
|
39
|
+
o = Object.new
|
40
|
+
def o.each(&block)
|
41
|
+
spec = Gem::Specification.new
|
42
|
+
spec.name = 'gem_one'
|
43
|
+
spec.version = '0.0.2'
|
44
|
+
si = Gem::SourceIndex.new 'gem_one-0.0.2' => spec
|
45
|
+
sic_e = Gem::SourceInfoCacheEntry.new si, 0
|
46
|
+
yield 'http://gems.example.com', sic_e
|
47
|
+
end
|
48
|
+
o
|
49
|
+
end
|
50
|
+
|
51
|
+
@tgt.source_info_cache = sic
|
52
|
+
|
53
|
+
@spec = Gem::Specification.new
|
54
|
+
@spec.name = 'gem_one'
|
55
|
+
@spec.version = '0.0.2'
|
56
|
+
@spec.rubyforge_project = 'gem'
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_new_gems
|
60
|
+
specs = @tgt.new_gems.map { |s| s.full_name }
|
61
|
+
assert_equal ['gem_one-0.0.2'], specs
|
62
|
+
specs = @tgt.new_gems.map { |s| s.full_name }
|
63
|
+
assert_equal [], specs, 'Your rubygems needs Gem::Specification#eql?'
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_run_communication_error
|
67
|
+
Net::HTTP.responses << proc do |req|
|
68
|
+
raise Errno::ECONNREFUSED, 'connect(2)'
|
69
|
+
end
|
70
|
+
|
71
|
+
util_test_run_error "Communication error: Connection refused - connect(2)(Errno::ECONNREFUSED)"
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_run_fetch_error
|
75
|
+
Net::HTTP.responses << <<-EOF
|
76
|
+
<ok>
|
77
|
+
<target>
|
78
|
+
<id>5</id>
|
79
|
+
<platform>fake platform</platform>
|
80
|
+
<release_date>fake release_date</release_date>
|
81
|
+
<username>fake username</username>
|
82
|
+
<version>fake version</version>
|
83
|
+
</target>
|
84
|
+
</ok>
|
85
|
+
EOF
|
86
|
+
|
87
|
+
o = Object.new
|
88
|
+
def o.refresh() raise Gem::RemoteFetcher::FetchError end
|
89
|
+
@tgt.instance_variable_set :@source_info_cache, o
|
90
|
+
|
91
|
+
util_test_run_error "Gem::RemoteFetcher::FetchError"
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_run_remote_source_exception
|
95
|
+
Net::HTTP.responses << proc do |req|
|
96
|
+
raise Gem::RemoteSourceException, 'HTTP Response 403'
|
97
|
+
end
|
98
|
+
|
99
|
+
util_test_run_error 'HTTP Response 403'
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_run_spec
|
103
|
+
fc = util_setup_cache
|
104
|
+
def fc.get_build_id(*a) nil end # not tested
|
105
|
+
|
106
|
+
Net::HTTP.responses << <<-EOF
|
107
|
+
<ok>
|
108
|
+
<build>
|
109
|
+
<id>5</id>
|
110
|
+
<created_on>#{Time.now}</created_on>
|
111
|
+
<duration>1.5</duration>
|
112
|
+
<successful>true</successful>
|
113
|
+
<target_id>4</target_id>
|
114
|
+
<version_id>3</version_id>
|
115
|
+
</build>
|
116
|
+
</ok>
|
117
|
+
EOF
|
118
|
+
|
119
|
+
build = nil
|
120
|
+
|
121
|
+
out, err = util_capture do
|
122
|
+
build = @tgt.run_spec @spec
|
123
|
+
end
|
124
|
+
|
125
|
+
assert_equal '', out.read
|
126
|
+
err = err.read.split "\n"
|
127
|
+
assert_equal "*** Checking #{@spec.full_name}", err.shift
|
128
|
+
assert_equal "*** Igniting (http://firebrigade.example.com/gem/show/gem_one/0.0.2)", err.shift
|
129
|
+
assert_equal "*** I lit #{@spec.full_name} on fire!", err.shift
|
130
|
+
assert_empty err
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_run_spec_install_error
|
134
|
+
fc = util_setup_cache
|
135
|
+
def fc.get_build_id(*a) nil end # not tested
|
136
|
+
def @tgt.test_gem(spec) raise Tinderbox::InstallError end
|
137
|
+
@tgt.seen_gem_names << @spec
|
138
|
+
|
139
|
+
out, err = util_capture do
|
140
|
+
@tgt.run_spec @spec
|
141
|
+
end
|
142
|
+
|
143
|
+
deny_includes @spec.full_name, @tgt.seen_gem_names
|
144
|
+
assert_equal '', out.read
|
145
|
+
err = err.read.split "\n"
|
146
|
+
assert_equal "*** Checking #{@spec.full_name}", err.shift
|
147
|
+
assert_equal "*** Igniting (http://firebrigade.example.com/gem/show/gem_one/0.0.2)", err.shift
|
148
|
+
assert_equal "*** Failed to install (Tinderbox::InstallError)", err.shift
|
149
|
+
assert_empty err
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_run_spec_manual_install_error
|
153
|
+
fc = util_setup_cache
|
154
|
+
def fc.get_build_id(*a) nil end # not tested
|
155
|
+
def @tgt.test_gem(spec) raise Tinderbox::ManualInstallError end
|
156
|
+
@tgt.seen_gem_names << @spec
|
157
|
+
|
158
|
+
out, err = util_capture do
|
159
|
+
@tgt.run_spec @spec
|
160
|
+
end
|
161
|
+
|
162
|
+
assert_includes @spec, @tgt.seen_gem_names
|
163
|
+
assert_equal '', out.read
|
164
|
+
err = err.read.split "\n"
|
165
|
+
assert_equal "*** Checking #{@spec.full_name}", err.shift
|
166
|
+
assert_equal "*** Igniting (http://firebrigade.example.com/gem/show/gem_one/0.0.2)",
|
167
|
+
err.shift
|
168
|
+
assert_equal "*** Failed to install (Tinderbox::ManualInstallError)",
|
169
|
+
err.shift
|
170
|
+
assert_empty err
|
171
|
+
end
|
172
|
+
|
173
|
+
def test_run_spec_tested
|
174
|
+
fc = util_setup_cache
|
175
|
+
def fc.get_build_id(*a) true end # tested
|
176
|
+
|
177
|
+
out, err = util_capture do
|
178
|
+
@tgt.run_spec @spec
|
179
|
+
end
|
180
|
+
|
181
|
+
assert_equal '', out.read
|
182
|
+
err = err.read.split "\n"
|
183
|
+
assert_equal "*** Checking #{@spec.full_name}", err.shift
|
184
|
+
assert_empty err
|
185
|
+
end
|
186
|
+
|
187
|
+
def test_tested_eh
|
188
|
+
@tgt.target_id = 5
|
189
|
+
@tgt.fc.builds[[3, 5]] = 4
|
190
|
+
assert_equal true, @tgt.tested?(3)
|
191
|
+
|
192
|
+
URI::HTTP.responses << <<-EOF
|
193
|
+
<error>
|
194
|
+
<message>No such build exists</message>
|
195
|
+
</error>
|
196
|
+
EOF
|
197
|
+
|
198
|
+
assert_equal false, @tgt.tested?(-1)
|
199
|
+
end
|
200
|
+
|
201
|
+
def test_update_gems
|
202
|
+
o = Object.new
|
203
|
+
def o.refreshed?() @refreshed end
|
204
|
+
def o.refresh() @refreshed = true end
|
205
|
+
|
206
|
+
@tgt.instance_variable_set :@source_info_cache, o
|
207
|
+
|
208
|
+
@tgt.update_gems
|
209
|
+
|
210
|
+
assert_equal true, o.refreshed?
|
211
|
+
end
|
212
|
+
|
213
|
+
def util_test_run_error(message)
|
214
|
+
out, err = util_capture do
|
215
|
+
@tgt.run
|
216
|
+
end
|
217
|
+
|
218
|
+
assert_equal '', out.read
|
219
|
+
|
220
|
+
err = err.read.split "\n"
|
221
|
+
assert_equal message, err.first
|
222
|
+
assert_match(/Will retry at/, err.last)
|
223
|
+
end
|
224
|
+
|
225
|
+
def util_setup_cache
|
226
|
+
@tgt.target_id = 5
|
227
|
+
fc = @tgt.fc
|
228
|
+
fc.owners['gem'] = 100
|
229
|
+
fc.projects[[100, 'gem_one']] = 101
|
230
|
+
fc.versions[[101, '0.0.2']] = 102
|
231
|
+
|
232
|
+
fc
|
233
|
+
end
|
234
|
+
|
235
|
+
end
|
236
|
+
|
metadata
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.1
|
3
|
+
specification_version: 1
|
4
|
+
name: tinderbox
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 1.0.0
|
7
|
+
date: 2007-01-31 00:00:00 -08:00
|
8
|
+
summary: Tinderbox says, "I'm gonna light you on fire."
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: drbrain@segment7.net
|
12
|
+
homepage:
|
13
|
+
rubyforge_project: seattlerb
|
14
|
+
description: "http://seattlerb.rubyforge.org/tinderbox == DESCRIPTION: Tinderbox tests projects and tries to make them break by running them on as many different platforms as possible. == FEATURES/PROBLEMS:"
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors:
|
30
|
+
- Eric Hodel
|
31
|
+
files:
|
32
|
+
- History.txt
|
33
|
+
- LICENSE.txt
|
34
|
+
- Manifest.txt
|
35
|
+
- README.txt
|
36
|
+
- Rakefile
|
37
|
+
- bin/tinderbox_gem_build
|
38
|
+
- bin/tinderbox_gem_run
|
39
|
+
- lib/tinderbox.rb
|
40
|
+
- lib/tinderbox/build.rb
|
41
|
+
- lib/tinderbox/gem_runner.rb
|
42
|
+
- lib/tinderbox/gem_tinderbox.rb
|
43
|
+
- test/test_tinderbox_build.rb
|
44
|
+
- test/test_tinderbox_gem_runner.rb
|
45
|
+
- test/test_tinderbox_gem_tinderbox.rb
|
46
|
+
test_files:
|
47
|
+
- test/test_tinderbox_build.rb
|
48
|
+
- test/test_tinderbox_gem_runner.rb
|
49
|
+
- test/test_tinderbox_gem_tinderbox.rb
|
50
|
+
rdoc_options: []
|
51
|
+
|
52
|
+
extra_rdoc_files: []
|
53
|
+
|
54
|
+
executables:
|
55
|
+
- tinderbox_gem_build
|
56
|
+
- tinderbox_gem_run
|
57
|
+
extensions: []
|
58
|
+
|
59
|
+
requirements: []
|
60
|
+
|
61
|
+
dependencies:
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: ZenTest
|
64
|
+
version_requirement:
|
65
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 3.4.0
|
70
|
+
version:
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: firebrigade_api
|
73
|
+
version_requirement:
|
74
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 1.0.0
|
79
|
+
version:
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: rspec
|
82
|
+
version_requirement:
|
83
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 0.7.5.1
|
88
|
+
version:
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: hoe
|
91
|
+
version_requirement:
|
92
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.1.7
|
97
|
+
version:
|