beaker 0.0.0 → 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.
Files changed (98) hide show
  1. checksums.yaml +8 -8
  2. data/.travis.yml +8 -0
  3. data/README.md +6 -6
  4. data/beaker.gemspec +6 -2
  5. data/lib/beaker.rb +1 -1
  6. data/lib/beaker/answers.rb +34 -7
  7. data/lib/beaker/answers/version20.rb +124 -0
  8. data/lib/beaker/answers/version28.rb +21 -0
  9. data/lib/beaker/answers/version30.rb +24 -5
  10. data/lib/beaker/cli.rb +55 -41
  11. data/lib/beaker/command.rb +2 -2
  12. data/lib/beaker/dsl/helpers.rb +320 -106
  13. data/lib/beaker/dsl/install_utils.rb +202 -81
  14. data/lib/beaker/dsl/roles.rb +40 -0
  15. data/lib/beaker/host.rb +28 -20
  16. data/lib/beaker/host/unix.rb +7 -4
  17. data/lib/beaker/host/unix/pkg.rb +42 -12
  18. data/lib/beaker/host/windows.rb +9 -5
  19. data/lib/beaker/host/windows/group.rb +1 -1
  20. data/lib/beaker/host/windows/pkg.rb +41 -8
  21. data/lib/beaker/hypervisor.rb +23 -10
  22. data/lib/beaker/hypervisor/aixer.rb +15 -19
  23. data/lib/beaker/hypervisor/blimper.rb +71 -72
  24. data/lib/beaker/hypervisor/fusion.rb +11 -10
  25. data/lib/beaker/hypervisor/solaris.rb +17 -23
  26. data/lib/beaker/hypervisor/vagrant.rb +27 -12
  27. data/lib/beaker/hypervisor/vcloud.rb +154 -138
  28. data/lib/beaker/hypervisor/vcloud_pooled.rb +97 -0
  29. data/lib/beaker/hypervisor/vsphere.rb +8 -5
  30. data/lib/beaker/hypervisor/vsphere_helper.rb +43 -33
  31. data/lib/beaker/network_manager.rb +16 -12
  32. data/lib/beaker/options/command_line_parser.rb +199 -0
  33. data/lib/beaker/options/hosts_file_parser.rb +39 -0
  34. data/lib/beaker/options/options_file_parser.rb +45 -0
  35. data/lib/beaker/options/options_hash.rb +294 -0
  36. data/lib/beaker/options/parser.rb +288 -0
  37. data/lib/beaker/options/pe_version_scraper.rb +35 -0
  38. data/lib/beaker/options/presets.rb +70 -0
  39. data/lib/beaker/shared.rb +2 -1
  40. data/lib/beaker/shared/host_handler.rb +7 -2
  41. data/lib/beaker/shared/repetition.rb +1 -0
  42. data/lib/beaker/shared/timed.rb +14 -0
  43. data/lib/beaker/test_case.rb +2 -38
  44. data/lib/beaker/test_suite.rb +11 -25
  45. data/lib/beaker/utils/repo_control.rb +6 -8
  46. data/lib/beaker/utils/setup_helper.rb +9 -20
  47. data/spec/beaker/answers_spec.rb +109 -0
  48. data/spec/beaker/command_spec.rb +2 -2
  49. data/spec/beaker/dsl/assertions_spec.rb +1 -3
  50. data/spec/beaker/dsl/helpers_spec.rb +519 -84
  51. data/spec/beaker/dsl/install_utils_spec.rb +265 -16
  52. data/spec/beaker/dsl/roles_spec.rb +31 -10
  53. data/spec/beaker/host/windows/group_spec.rb +55 -0
  54. data/spec/beaker/host_spec.rb +130 -40
  55. data/spec/beaker/hypervisor/aixer_spec.rb +34 -0
  56. data/spec/beaker/hypervisor/blimper_spec.rb +77 -0
  57. data/spec/beaker/hypervisor/fusion_spec.rb +26 -0
  58. data/spec/beaker/hypervisor/hypervisor_spec.rb +66 -0
  59. data/spec/beaker/hypervisor/solaris_spec.rb +39 -0
  60. data/spec/beaker/hypervisor/vagrant_spec.rb +105 -0
  61. data/spec/beaker/hypervisor/vcloud_pooled_spec.rb +60 -0
  62. data/spec/beaker/hypervisor/vcloud_spec.rb +70 -0
  63. data/spec/beaker/hypervisor/vsphere_helper_spec.rb +162 -0
  64. data/spec/beaker/hypervisor/vsphere_spec.rb +76 -0
  65. data/spec/beaker/options/command_line_parser_spec.rb +25 -0
  66. data/spec/beaker/options/data/LATEST +1 -0
  67. data/spec/beaker/options/data/badyaml.cfg +21 -0
  68. data/spec/beaker/options/data/hosts.cfg +21 -0
  69. data/spec/beaker/options/data/opts.txt +6 -0
  70. data/spec/beaker/options/hosts_file_parser_spec.rb +30 -0
  71. data/spec/beaker/options/options_file_parser_spec.rb +23 -0
  72. data/spec/beaker/options/options_hash_spec.rb +111 -0
  73. data/spec/beaker/options/parser_spec.rb +172 -0
  74. data/spec/beaker/options/pe_version_scaper_spec.rb +15 -0
  75. data/spec/beaker/options/presets_spec.rb +24 -0
  76. data/spec/beaker/puppet_command_spec.rb +54 -21
  77. data/spec/beaker/shared/error_handler_spec.rb +40 -0
  78. data/spec/beaker/shared/host_handler_spec.rb +104 -0
  79. data/spec/beaker/shared/repetition_spec.rb +72 -0
  80. data/spec/beaker/test_suite_spec.rb +3 -16
  81. data/spec/beaker/utils/ntp_control_spec.rb +42 -0
  82. data/spec/beaker/utils/repo_control_spec.rb +168 -0
  83. data/spec/beaker/utils/setup_helper_spec.rb +82 -0
  84. data/spec/beaker/utils/validator_spec.rb +58 -0
  85. data/spec/helpers.rb +97 -0
  86. data/spec/matchers.rb +39 -0
  87. data/spec/mock_blimpy.rb +48 -0
  88. data/spec/mock_fission.rb +60 -0
  89. data/spec/mock_vsphere.rb +310 -0
  90. data/spec/mock_vsphere_helper.rb +183 -0
  91. data/spec/mocks.rb +83 -0
  92. data/spec/spec_helper.rb +8 -1
  93. metadata +106 -13
  94. data/beaker.rb +0 -10
  95. data/lib/beaker/options_parsing.rb +0 -323
  96. data/lib/beaker/test_config.rb +0 -148
  97. data/spec/beaker/options_parsing_spec.rb +0 -37
  98. data/spec/mocks_and_helpers.rb +0 -34
@@ -0,0 +1,183 @@
1
+ class MockVsphereSnapshot
2
+ attr_accessor :name
3
+
4
+ def RevertToSnapshot_Task
5
+ self
6
+ end
7
+
8
+ def wait_for_completion
9
+ true
10
+ end
11
+
12
+ end
13
+
14
+
15
+ class MockVsphereVM
16
+ attr_accessor :name, :powerState, :snapshot, :template, :toolsRunningStatus
17
+
18
+ def initialize
19
+ @powerState = "poweredOff"
20
+ @toolsRunningStatus = "guestToolsStopped"
21
+ @first = true
22
+ end
23
+
24
+ def runtime
25
+ self
26
+ end
27
+
28
+ def powerState
29
+ @powerState
30
+ end
31
+
32
+ def toolsRunningStatus
33
+ prev = @toolsRunningStatus
34
+ @toolsRunningStatus = "guestToolsRunning"
35
+ prev
36
+ end
37
+
38
+ def PowerOnVM_Task
39
+ @powerState = 'poweredOn'
40
+ self
41
+ end
42
+
43
+ def PowerOffVM_Task
44
+ @powerState = "poweredOff"
45
+ self
46
+ end
47
+
48
+ def summary
49
+ self
50
+ end
51
+
52
+ def guest
53
+ self
54
+ end
55
+
56
+ def ipAddress
57
+ @toolsRunningStatus = 'guestToolsRunning'
58
+ "#{@name}.ip.address"
59
+ end
60
+
61
+ def CloneVM_Task opts
62
+ clone = MockVsphereVM.new
63
+ clone.name = opts[:name]
64
+ clone.snapshot = self.snapshot
65
+ clone.template = self.template
66
+ clone.PowerOnVM_Task
67
+ MockVsphereHelper.add_vm( opts[:name], clone )
68
+ clone
69
+ end
70
+
71
+ def wait_for_completion
72
+ true
73
+ end
74
+
75
+ def Destroy_Task
76
+ true
77
+ end
78
+
79
+ end
80
+
81
+
82
+ class MockVsphereHelper
83
+
84
+ @@fog_file = {}
85
+ @@vms = {}
86
+
87
+ def initialize arg
88
+
89
+ end
90
+
91
+ def self.add_vm name, vm
92
+ @@vms[name] = vm
93
+ end
94
+
95
+ def self.set_config conf
96
+ @@fog_file = conf
97
+ end
98
+
99
+ def self.powerOn
100
+ @@vms.each do | name, vm |
101
+ vm.powerState = "poweredOn"
102
+ end
103
+ end
104
+
105
+ def self.powerOff
106
+ @@vms.each do | name, vm |
107
+ vm.powerState = "poweredOff"
108
+ end
109
+ end
110
+
111
+ def self.set_vms hosts
112
+ @@vms = {}
113
+ hosts.each do |host|
114
+ vm = MockVsphereVM.new
115
+ vm.name = host.name
116
+ vm.snapshot = MockVsphereSnapshot.new
117
+ vm.snapshot.name = host[:snapshot]
118
+ @@vms[host.name] = vm
119
+ template = MockVsphereVM.new
120
+ template.name = host[:template]
121
+ template.snapshot = MockVsphereSnapshot.new
122
+ template.snapshot.name = host[:snapshot]
123
+ @@vms[host[:template]] = template
124
+ end
125
+ end
126
+
127
+ def self.load_config file
128
+ @@fog_file
129
+ end
130
+
131
+ def find_vms keys
132
+ found = {}
133
+ keys = ([] << keys)
134
+ keys.flatten!
135
+ keys.each do |key|
136
+ if @@vms.has_key?( key )
137
+ found[key] = @@vms[key]
138
+ end
139
+ end
140
+ found
141
+ end
142
+
143
+ def self.find_vm key
144
+ if @@vms.has_key?( key )
145
+ @@vms[key]
146
+ else
147
+ nil
148
+ end
149
+ end
150
+
151
+ def find_snapshot vm, snap
152
+ if @@vms[vm.name].snapshot.name == snap
153
+ @@vms[vm.name].snapshot
154
+ else
155
+ nil
156
+ end
157
+ end
158
+
159
+ def find_customization template
160
+ nil
161
+ end
162
+
163
+ def find_datastore datastore
164
+ datastore
165
+ end
166
+
167
+ def find_pool pool
168
+ pool
169
+ end
170
+
171
+ def find_folder folder
172
+ folder
173
+ end
174
+
175
+ def wait_for_tasks tasks, try, attempts
176
+ true
177
+ end
178
+
179
+ def close
180
+ true
181
+ end
182
+
183
+ end
data/spec/mocks.rb ADDED
@@ -0,0 +1,83 @@
1
+ class MockIO < IO
2
+ def initialize
3
+ end
4
+
5
+ methods.each do |meth|
6
+ define_method(:meth) {}
7
+ end
8
+
9
+ def === other
10
+ super other
11
+ end
12
+ end
13
+
14
+ module MockNet
15
+ class HTTP
16
+
17
+ class Response
18
+ class ResponseHash
19
+ def []key
20
+ { 'ok' => true, 'hostname' => 'pool' }
21
+ end
22
+
23
+ end
24
+
25
+ def body
26
+ ResponseHash.new
27
+ end
28
+
29
+ end
30
+
31
+ class Post
32
+ def initialize uri
33
+ @uri = uri
34
+ end
35
+
36
+ def set_form_data hash
37
+
38
+ end
39
+ end
40
+
41
+ class Delete
42
+ def initialize uri
43
+ @uri = uri
44
+ end
45
+ end
46
+
47
+ def initialize host, port
48
+ @host = host
49
+ @port = port
50
+ end
51
+
52
+ def request req
53
+ Response.new
54
+ end
55
+ end
56
+
57
+ end
58
+
59
+ class FakeHost
60
+ attr_accessor :commands
61
+
62
+ def initialize(options = {})
63
+ @pe = options[:pe]
64
+ @commands = []
65
+ end
66
+
67
+ def is_pe?
68
+ @pe
69
+ end
70
+
71
+ def any_exec_result
72
+ RSpec::Mocks::Mock.new('exec-result').as_null_object
73
+ end
74
+
75
+ def exec(command, options = {})
76
+ commands << command
77
+ any_exec_result
78
+ end
79
+
80
+ def command_strings
81
+ commands.map { |c| [c.command, c.args].join(' ') }
82
+ end
83
+ end
data/spec/spec_helper.rb CHANGED
@@ -7,9 +7,16 @@ end
7
7
 
8
8
  require 'beaker'
9
9
  require 'fakefs/spec_helpers'
10
- require 'mocks_and_helpers'
10
+ require 'mocks'
11
+ require 'helpers'
12
+ require 'matchers'
13
+ require 'mock_fission'
14
+ require 'mock_blimpy'
15
+ require 'mock_vsphere'
16
+ require 'mock_vsphere_helper'
11
17
 
12
18
  RSpec.configure do |config|
13
19
  config.include FakeFS::SpecHelpers
14
20
  config.include TestFileHelpers
21
+ config.include HostHelpers
15
22
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beaker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppetlabs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-20 00:00:00.000000000 Z
11
+ date: 2013-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '='
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 2.11.0
19
+ version: 2.14.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '='
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 2.11.0
26
+ version: 2.14.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: fakefs
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -220,6 +220,20 @@ dependencies:
220
220
  - - ! '>='
221
221
  - !ruby/object:Gem::Version
222
222
  version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: unf
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ! '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ! '>='
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
223
237
  description: Puppetlabs accceptance testing harness
224
238
  email:
225
239
  - delivery@puppetlabs.com
@@ -231,16 +245,17 @@ files:
231
245
  - .gitignore
232
246
  - .rspec
233
247
  - .simplecov
248
+ - .travis.yml
234
249
  - DOCUMENTING.md
235
250
  - Gemfile
236
251
  - LICENSE
237
252
  - README.md
238
253
  - Rakefile
239
254
  - beaker.gemspec
240
- - beaker.rb
241
255
  - bin/beaker
242
256
  - lib/beaker.rb
243
257
  - lib/beaker/answers.rb
258
+ - lib/beaker/answers/version20.rb
244
259
  - lib/beaker/answers/version28.rb
245
260
  - lib/beaker/answers/version30.rb
246
261
  - lib/beaker/cli.rb
@@ -278,25 +293,34 @@ files:
278
293
  - lib/beaker/hypervisor/solaris.rb
279
294
  - lib/beaker/hypervisor/vagrant.rb
280
295
  - lib/beaker/hypervisor/vcloud.rb
296
+ - lib/beaker/hypervisor/vcloud_pooled.rb
281
297
  - lib/beaker/hypervisor/vsphere.rb
282
298
  - lib/beaker/hypervisor/vsphere_helper.rb
283
299
  - lib/beaker/logger.rb
284
300
  - lib/beaker/network_manager.rb
285
- - lib/beaker/options_parsing.rb
301
+ - lib/beaker/options.rb
302
+ - lib/beaker/options/command_line_parser.rb
303
+ - lib/beaker/options/hosts_file_parser.rb
304
+ - lib/beaker/options/options_file_parser.rb
305
+ - lib/beaker/options/options_hash.rb
306
+ - lib/beaker/options/parser.rb
307
+ - lib/beaker/options/pe_version_scraper.rb
308
+ - lib/beaker/options/presets.rb
286
309
  - lib/beaker/result.rb
287
310
  - lib/beaker/shared.rb
288
311
  - lib/beaker/shared/error_handler.rb
289
312
  - lib/beaker/shared/host_handler.rb
290
313
  - lib/beaker/shared/repetition.rb
314
+ - lib/beaker/shared/timed.rb
291
315
  - lib/beaker/ssh_connection.rb
292
316
  - lib/beaker/test_case.rb
293
- - lib/beaker/test_config.rb
294
317
  - lib/beaker/test_suite.rb
295
318
  - lib/beaker/utils.rb
296
319
  - lib/beaker/utils/ntp_control.rb
297
320
  - lib/beaker/utils/repo_control.rb
298
321
  - lib/beaker/utils/setup_helper.rb
299
322
  - lib/beaker/utils/validator.rb
323
+ - spec/beaker/answers_spec.rb
300
324
  - spec/beaker/command_spec.rb
301
325
  - spec/beaker/dsl/assertions_spec.rb
302
326
  - spec/beaker/dsl/helpers_spec.rb
@@ -305,14 +329,48 @@ files:
305
329
  - spec/beaker/dsl/roles_spec.rb
306
330
  - spec/beaker/dsl/structure_spec.rb
307
331
  - spec/beaker/dsl/wrappers_spec.rb
332
+ - spec/beaker/host/windows/group_spec.rb
308
333
  - spec/beaker/host_spec.rb
334
+ - spec/beaker/hypervisor/aixer_spec.rb
335
+ - spec/beaker/hypervisor/blimper_spec.rb
336
+ - spec/beaker/hypervisor/fusion_spec.rb
337
+ - spec/beaker/hypervisor/hypervisor_spec.rb
338
+ - spec/beaker/hypervisor/solaris_spec.rb
339
+ - spec/beaker/hypervisor/vagrant_spec.rb
340
+ - spec/beaker/hypervisor/vcloud_pooled_spec.rb
341
+ - spec/beaker/hypervisor/vcloud_spec.rb
342
+ - spec/beaker/hypervisor/vsphere_helper_spec.rb
343
+ - spec/beaker/hypervisor/vsphere_spec.rb
309
344
  - spec/beaker/logger_spec.rb
310
- - spec/beaker/options_parsing_spec.rb
345
+ - spec/beaker/options/command_line_parser_spec.rb
346
+ - spec/beaker/options/data/LATEST
347
+ - spec/beaker/options/data/badyaml.cfg
348
+ - spec/beaker/options/data/hosts.cfg
349
+ - spec/beaker/options/data/opts.txt
350
+ - spec/beaker/options/hosts_file_parser_spec.rb
351
+ - spec/beaker/options/options_file_parser_spec.rb
352
+ - spec/beaker/options/options_hash_spec.rb
353
+ - spec/beaker/options/parser_spec.rb
354
+ - spec/beaker/options/pe_version_scaper_spec.rb
355
+ - spec/beaker/options/presets_spec.rb
311
356
  - spec/beaker/puppet_command_spec.rb
357
+ - spec/beaker/shared/error_handler_spec.rb
358
+ - spec/beaker/shared/host_handler_spec.rb
359
+ - spec/beaker/shared/repetition_spec.rb
312
360
  - spec/beaker/ssh_connection_spec.rb
313
361
  - spec/beaker/test_case_spec.rb
314
362
  - spec/beaker/test_suite_spec.rb
315
- - spec/mocks_and_helpers.rb
363
+ - spec/beaker/utils/ntp_control_spec.rb
364
+ - spec/beaker/utils/repo_control_spec.rb
365
+ - spec/beaker/utils/setup_helper_spec.rb
366
+ - spec/beaker/utils/validator_spec.rb
367
+ - spec/helpers.rb
368
+ - spec/matchers.rb
369
+ - spec/mock_blimpy.rb
370
+ - spec/mock_fission.rb
371
+ - spec/mock_vsphere.rb
372
+ - spec/mock_vsphere_helper.rb
373
+ - spec/mocks.rb
316
374
  - spec/spec_helper.rb
317
375
  homepage: https://github.com/puppetlabs/beaker
318
376
  licenses:
@@ -339,6 +397,7 @@ signing_key:
339
397
  specification_version: 4
340
398
  summary: Let's test Puppet!
341
399
  test_files:
400
+ - spec/beaker/answers_spec.rb
342
401
  - spec/beaker/command_spec.rb
343
402
  - spec/beaker/dsl/assertions_spec.rb
344
403
  - spec/beaker/dsl/helpers_spec.rb
@@ -347,13 +406,47 @@ test_files:
347
406
  - spec/beaker/dsl/roles_spec.rb
348
407
  - spec/beaker/dsl/structure_spec.rb
349
408
  - spec/beaker/dsl/wrappers_spec.rb
409
+ - spec/beaker/host/windows/group_spec.rb
350
410
  - spec/beaker/host_spec.rb
411
+ - spec/beaker/hypervisor/aixer_spec.rb
412
+ - spec/beaker/hypervisor/blimper_spec.rb
413
+ - spec/beaker/hypervisor/fusion_spec.rb
414
+ - spec/beaker/hypervisor/hypervisor_spec.rb
415
+ - spec/beaker/hypervisor/solaris_spec.rb
416
+ - spec/beaker/hypervisor/vagrant_spec.rb
417
+ - spec/beaker/hypervisor/vcloud_pooled_spec.rb
418
+ - spec/beaker/hypervisor/vcloud_spec.rb
419
+ - spec/beaker/hypervisor/vsphere_helper_spec.rb
420
+ - spec/beaker/hypervisor/vsphere_spec.rb
351
421
  - spec/beaker/logger_spec.rb
352
- - spec/beaker/options_parsing_spec.rb
422
+ - spec/beaker/options/command_line_parser_spec.rb
423
+ - spec/beaker/options/data/LATEST
424
+ - spec/beaker/options/data/badyaml.cfg
425
+ - spec/beaker/options/data/hosts.cfg
426
+ - spec/beaker/options/data/opts.txt
427
+ - spec/beaker/options/hosts_file_parser_spec.rb
428
+ - spec/beaker/options/options_file_parser_spec.rb
429
+ - spec/beaker/options/options_hash_spec.rb
430
+ - spec/beaker/options/parser_spec.rb
431
+ - spec/beaker/options/pe_version_scaper_spec.rb
432
+ - spec/beaker/options/presets_spec.rb
353
433
  - spec/beaker/puppet_command_spec.rb
434
+ - spec/beaker/shared/error_handler_spec.rb
435
+ - spec/beaker/shared/host_handler_spec.rb
436
+ - spec/beaker/shared/repetition_spec.rb
354
437
  - spec/beaker/ssh_connection_spec.rb
355
438
  - spec/beaker/test_case_spec.rb
356
439
  - spec/beaker/test_suite_spec.rb
357
- - spec/mocks_and_helpers.rb
440
+ - spec/beaker/utils/ntp_control_spec.rb
441
+ - spec/beaker/utils/repo_control_spec.rb
442
+ - spec/beaker/utils/setup_helper_spec.rb
443
+ - spec/beaker/utils/validator_spec.rb
444
+ - spec/helpers.rb
445
+ - spec/matchers.rb
446
+ - spec/mock_blimpy.rb
447
+ - spec/mock_fission.rb
448
+ - spec/mock_vsphere.rb
449
+ - spec/mock_vsphere_helper.rb
450
+ - spec/mocks.rb
358
451
  - spec/spec_helper.rb
359
452
  has_rdoc: