test-kitchen 1.7.0 → 1.7.1.dev

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 (181) hide show
  1. checksums.yaml +4 -4
  2. data/.cane +8 -8
  3. data/.gitattributes +3 -0
  4. data/.github/ISSUE_TEMPLATE.md +55 -55
  5. data/.gitignore +28 -28
  6. data/.kitchen.ci.yml +23 -23
  7. data/.kitchen.proxy.yml +27 -27
  8. data/.rubocop.yml +3 -3
  9. data/.travis.yml +70 -70
  10. data/.yardopts +3 -3
  11. data/Berksfile +3 -3
  12. data/CHANGELOG.md +1090 -1083
  13. data/CONTRIBUTING.md +14 -14
  14. data/Gemfile +19 -19
  15. data/Gemfile.proxy_tests +4 -4
  16. data/Guardfile +42 -42
  17. data/LICENSE +15 -15
  18. data/MAINTAINERS.md +23 -23
  19. data/README.md +135 -135
  20. data/Rakefile +61 -61
  21. data/appveyor.yml +44 -44
  22. data/features/kitchen_action_commands.feature +164 -164
  23. data/features/kitchen_command.feature +16 -16
  24. data/features/kitchen_console_command.feature +34 -34
  25. data/features/kitchen_defaults.feature +38 -38
  26. data/features/kitchen_diagnose_command.feature +96 -96
  27. data/features/kitchen_driver_create_command.feature +64 -64
  28. data/features/kitchen_driver_discover_command.feature +25 -25
  29. data/features/kitchen_help_command.feature +16 -16
  30. data/features/kitchen_init_command.feature +274 -274
  31. data/features/kitchen_list_command.feature +104 -104
  32. data/features/kitchen_login_command.feature +62 -62
  33. data/features/kitchen_sink_command.feature +30 -30
  34. data/features/kitchen_test_command.feature +88 -88
  35. data/features/step_definitions/gem_steps.rb +36 -36
  36. data/features/step_definitions/git_steps.rb +5 -5
  37. data/features/step_definitions/output_steps.rb +5 -5
  38. data/features/support/env.rb +75 -75
  39. data/lib/kitchen.rb +150 -150
  40. data/lib/kitchen/base64_stream.rb +55 -55
  41. data/lib/kitchen/cli.rb +419 -419
  42. data/lib/kitchen/collection.rb +55 -55
  43. data/lib/kitchen/color.rb +65 -65
  44. data/lib/kitchen/command.rb +185 -185
  45. data/lib/kitchen/command/action.rb +45 -45
  46. data/lib/kitchen/command/console.rb +58 -58
  47. data/lib/kitchen/command/diagnose.rb +92 -92
  48. data/lib/kitchen/command/driver_discover.rb +105 -105
  49. data/lib/kitchen/command/exec.rb +41 -41
  50. data/lib/kitchen/command/list.rb +119 -119
  51. data/lib/kitchen/command/login.rb +43 -43
  52. data/lib/kitchen/command/sink.rb +54 -54
  53. data/lib/kitchen/command/test.rb +51 -51
  54. data/lib/kitchen/config.rb +322 -322
  55. data/lib/kitchen/configurable.rb +529 -529
  56. data/lib/kitchen/data_munger.rb +959 -959
  57. data/lib/kitchen/diagnostic.rb +141 -141
  58. data/lib/kitchen/driver.rb +56 -56
  59. data/lib/kitchen/driver/base.rb +134 -134
  60. data/lib/kitchen/driver/dummy.rb +108 -108
  61. data/lib/kitchen/driver/proxy.rb +72 -72
  62. data/lib/kitchen/driver/ssh_base.rb +357 -357
  63. data/lib/kitchen/errors.rb +229 -229
  64. data/lib/kitchen/generator/driver_create.rb +177 -177
  65. data/lib/kitchen/generator/init.rb +296 -296
  66. data/lib/kitchen/instance.rb +662 -662
  67. data/lib/kitchen/lazy_hash.rb +142 -142
  68. data/lib/kitchen/loader/yaml.rb +349 -349
  69. data/lib/kitchen/logger.rb +423 -423
  70. data/lib/kitchen/logging.rb +56 -56
  71. data/lib/kitchen/login_command.rb +52 -52
  72. data/lib/kitchen/metadata_chopper.rb +52 -52
  73. data/lib/kitchen/platform.rb +67 -67
  74. data/lib/kitchen/provisioner.rb +54 -54
  75. data/lib/kitchen/provisioner/base.rb +236 -236
  76. data/lib/kitchen/provisioner/chef/berkshelf.rb +114 -114
  77. data/lib/kitchen/provisioner/chef/common_sandbox.rb +322 -322
  78. data/lib/kitchen/provisioner/chef/librarian.rb +112 -112
  79. data/lib/kitchen/provisioner/chef_apply.rb +124 -124
  80. data/lib/kitchen/provisioner/chef_base.rb +341 -341
  81. data/lib/kitchen/provisioner/chef_solo.rb +88 -88
  82. data/lib/kitchen/provisioner/chef_zero.rb +245 -245
  83. data/lib/kitchen/provisioner/dummy.rb +79 -79
  84. data/lib/kitchen/provisioner/shell.rb +138 -138
  85. data/lib/kitchen/rake_tasks.rb +63 -63
  86. data/lib/kitchen/shell_out.rb +93 -93
  87. data/lib/kitchen/ssh.rb +276 -276
  88. data/lib/kitchen/state_file.rb +120 -120
  89. data/lib/kitchen/suite.rb +51 -51
  90. data/lib/kitchen/thor_tasks.rb +66 -66
  91. data/lib/kitchen/transport.rb +54 -54
  92. data/lib/kitchen/transport/base.rb +176 -176
  93. data/lib/kitchen/transport/dummy.rb +79 -79
  94. data/lib/kitchen/transport/ssh.rb +364 -364
  95. data/lib/kitchen/transport/winrm.rb +486 -486
  96. data/lib/kitchen/util.rb +147 -147
  97. data/lib/kitchen/verifier.rb +55 -55
  98. data/lib/kitchen/verifier/base.rb +235 -235
  99. data/lib/kitchen/verifier/busser.rb +277 -277
  100. data/lib/kitchen/verifier/dummy.rb +79 -79
  101. data/lib/kitchen/verifier/shell.rb +101 -101
  102. data/lib/kitchen/version.rb +21 -21
  103. data/lib/vendor/hash_recursive_merge.rb +82 -82
  104. data/spec/kitchen/base64_stream_spec.rb +77 -77
  105. data/spec/kitchen/cli_spec.rb +56 -56
  106. data/spec/kitchen/collection_spec.rb +80 -80
  107. data/spec/kitchen/color_spec.rb +54 -54
  108. data/spec/kitchen/config_spec.rb +408 -408
  109. data/spec/kitchen/configurable_spec.rb +1095 -1095
  110. data/spec/kitchen/data_munger_spec.rb +2694 -2694
  111. data/spec/kitchen/diagnostic_spec.rb +129 -129
  112. data/spec/kitchen/driver/base_spec.rb +121 -121
  113. data/spec/kitchen/driver/dummy_spec.rb +199 -199
  114. data/spec/kitchen/driver/proxy_spec.rb +138 -138
  115. data/spec/kitchen/driver/ssh_base_spec.rb +1115 -1115
  116. data/spec/kitchen/driver_spec.rb +112 -112
  117. data/spec/kitchen/errors_spec.rb +309 -309
  118. data/spec/kitchen/instance_spec.rb +1419 -1419
  119. data/spec/kitchen/lazy_hash_spec.rb +117 -117
  120. data/spec/kitchen/loader/yaml_spec.rb +774 -774
  121. data/spec/kitchen/logger_spec.rb +429 -429
  122. data/spec/kitchen/logging_spec.rb +59 -59
  123. data/spec/kitchen/login_command_spec.rb +68 -68
  124. data/spec/kitchen/metadata_chopper_spec.rb +82 -82
  125. data/spec/kitchen/platform_spec.rb +89 -89
  126. data/spec/kitchen/provisioner/base_spec.rb +386 -386
  127. data/spec/kitchen/provisioner/chef_apply_spec.rb +136 -136
  128. data/spec/kitchen/provisioner/chef_base_spec.rb +1161 -1161
  129. data/spec/kitchen/provisioner/chef_solo_spec.rb +557 -557
  130. data/spec/kitchen/provisioner/chef_zero_spec.rb +1001 -1001
  131. data/spec/kitchen/provisioner/dummy_spec.rb +99 -99
  132. data/spec/kitchen/provisioner/shell_spec.rb +566 -566
  133. data/spec/kitchen/provisioner_spec.rb +107 -107
  134. data/spec/kitchen/shell_out_spec.rb +150 -150
  135. data/spec/kitchen/ssh_spec.rb +693 -693
  136. data/spec/kitchen/state_file_spec.rb +129 -129
  137. data/spec/kitchen/suite_spec.rb +62 -62
  138. data/spec/kitchen/transport/base_spec.rb +89 -89
  139. data/spec/kitchen/transport/ssh_spec.rb +1255 -1255
  140. data/spec/kitchen/transport/winrm_spec.rb +1143 -1143
  141. data/spec/kitchen/transport_spec.rb +112 -112
  142. data/spec/kitchen/util_spec.rb +165 -165
  143. data/spec/kitchen/verifier/base_spec.rb +362 -362
  144. data/spec/kitchen/verifier/busser_spec.rb +610 -610
  145. data/spec/kitchen/verifier/dummy_spec.rb +99 -99
  146. data/spec/kitchen/verifier/shell_spec.rb +160 -160
  147. data/spec/kitchen/verifier_spec.rb +120 -120
  148. data/spec/kitchen_spec.rb +114 -114
  149. data/spec/spec_helper.rb +85 -85
  150. data/spec/support/powershell_max_size_spec.rb +40 -40
  151. data/support/busser_install_command.ps1 +14 -14
  152. data/support/busser_install_command.sh +14 -14
  153. data/support/chef-client-zero.rb +77 -77
  154. data/support/chef_base_init_command.ps1 +18 -18
  155. data/support/chef_base_init_command.sh +2 -2
  156. data/support/chef_base_install_command.ps1 +85 -85
  157. data/support/chef_base_install_command.sh +229 -229
  158. data/support/chef_zero_prepare_command_legacy.ps1 +9 -9
  159. data/support/chef_zero_prepare_command_legacy.sh +10 -10
  160. data/support/download_helpers.sh +109 -109
  161. data/support/dummy-validation.pem +27 -27
  162. data/templates/driver/CHANGELOG.md.erb +3 -3
  163. data/templates/driver/Gemfile.erb +3 -3
  164. data/templates/driver/README.md.erb +64 -64
  165. data/templates/driver/Rakefile.erb +21 -21
  166. data/templates/driver/driver.rb.erb +23 -23
  167. data/templates/driver/gemspec.erb +29 -29
  168. data/templates/driver/gitignore.erb +17 -17
  169. data/templates/driver/license_apachev2.erb +15 -15
  170. data/templates/driver/license_lgplv3.erb +16 -16
  171. data/templates/driver/license_mit.erb +22 -22
  172. data/templates/driver/license_reserved.erb +5 -5
  173. data/templates/driver/tailor.erb +4 -4
  174. data/templates/driver/travis.yml.erb +11 -11
  175. data/templates/driver/version.rb.erb +12 -12
  176. data/templates/init/chefignore.erb +1 -1
  177. data/templates/init/kitchen.yml.erb +18 -18
  178. data/test-kitchen.gemspec +62 -62
  179. data/test/integration/default/default_spec.rb +3 -3
  180. data/testing_windows.md +37 -37
  181. metadata +5 -4
@@ -1,610 +1,610 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # Author:: Fletcher Nichol (<fnichol@nichol.ca>)
4
- #
5
- # Copyright (C) 2014, Fletcher Nichol
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
-
19
- require_relative "../../spec_helper"
20
-
21
- require "kitchen"
22
- require "kitchen/verifier/busser"
23
-
24
- describe Kitchen::Verifier::Busser do
25
-
26
- let(:logged_output) { StringIO.new }
27
- let(:logger) { Logger.new(logged_output) }
28
- let(:config) { Hash.new }
29
- let(:platform) { stub(:os_type => nil, :shell_type => nil) }
30
- let(:suite) { stub(:name => "germany") }
31
-
32
- let(:instance) do
33
- stub(
34
- :name => "coolbeans",
35
- :logger => logger,
36
- :platform => platform,
37
- :suite => suite,
38
- :to_str => "instance"
39
- )
40
- end
41
-
42
- let(:verifier) do
43
- Kitchen::Verifier::Busser.new(config).finalize_config!(instance)
44
- end
45
-
46
- let(:files) do
47
- {
48
- "mondospec/charlie" => {
49
- :content => "charlie",
50
- :perms => (running_tests_on_windows? ? "0644" : "0764")
51
- },
52
- "minispec/beta" => {
53
- :content => "beta",
54
- :perms => "0644"
55
- },
56
- "abba/alpha" => {
57
- :content => "alpha",
58
- :perms => (running_tests_on_windows? ? "0444" : "0440")
59
- }
60
- }
61
- end
62
-
63
- let(:helper_files) do
64
- {
65
- "minispec/spec_helper" => {
66
- :content => "helping",
67
- :perms => "0644"
68
- },
69
- "abba/common" => {
70
- :content => "yeppers",
71
- :perms => (running_tests_on_windows? ? "0644" : "0664")
72
- }
73
- }
74
- end
75
-
76
- before do
77
- @root = Dir.mktmpdir
78
- config[:test_base_path] = @root
79
- end
80
-
81
- after do
82
- FileUtils.remove_entry(@root)
83
- end
84
-
85
- # TODO: deal with this:
86
- # it "raises a UserError if the suite name is 'helper'" do
87
- # proc {
88
- # Kitchen::Busser.new("helper", config)
89
- # }.must_raise Kitchen::UserError
90
- # end
91
-
92
- it "verifier api_version is 1" do
93
- verifier.diagnose_plugin[:api_version].must_equal 1
94
- end
95
-
96
- it "plugin_version is set to Kitchen::VERSION" do
97
- verifier.diagnose_plugin[:version].must_equal Kitchen::VERSION
98
- end
99
-
100
- describe "configuration" do
101
-
102
- describe "for unix operating systems" do
103
-
104
- before {
105
- platform.stubs(:os_type).returns("unix")
106
- }
107
-
108
- it ":ruby_bindir defaults the an Omnibus Chef installation" do
109
- verifier[:ruby_bindir].must_equal "/opt/chef/embedded/bin"
110
- end
111
-
112
- it ":busser_bin defaults to a binstub under :root_path" do
113
- config[:root_path] = "/beep"
114
-
115
- verifier[:busser_bin].must_equal "/beep/bin/busser"
116
- end
117
- end
118
-
119
- describe "for windows operating systems" do
120
-
121
- before { platform.stubs(:os_type).returns("windows") }
122
-
123
- it ":ruby_bindir defaults the an Omnibus Chef installation" do
124
- verifier[:ruby_bindir].
125
- must_equal "$env:systemdrive\\opscode\\chef\\embedded\\bin"
126
- end
127
-
128
- it ":busser_bin defaults to a binstub under :root_path" do
129
- config[:root_path] = "\\beep"
130
-
131
- verifier[:busser_bin].must_equal "\\beep\\bin\\busser.bat"
132
- end
133
- end
134
-
135
- it ":version defaults to 'busser'" do
136
- verifier[:version].must_equal "busser"
137
- end
138
- end
139
-
140
- def self.common_bourne_variable_specs
141
- it "uses bourne shell" do
142
- cmd.must_match(/\Ash -c '$/)
143
- cmd.must_match(/'\Z/)
144
- end
145
-
146
- it "ends with a single quote" do
147
- cmd.must_match(/'\Z/)
148
- end
149
-
150
- it "sets the BUSSER_ROOT environment variable" do
151
- cmd.must_match regexify(%{BUSSER_ROOT="/r"; export BUSSER_ROOT})
152
- end
153
-
154
- it "sets the GEM_HOME environment variable" do
155
- cmd.must_match regexify(%{GEM_HOME="/r/gems"; export GEM_HOME})
156
- end
157
-
158
- it "sets the GEM_PATH environment variable" do
159
- cmd.must_match regexify(%{GEM_PATH="/r/gems"; export GEM_PATH})
160
- end
161
-
162
- it "sets the GEM_CACHE environment variable" do
163
- cmd.must_match regexify(%{GEM_CACHE="/r/gems/cache"; export GEM_CACHE})
164
- end
165
- end
166
-
167
- def self.common_powershell_variable_specs
168
- it "sets the BUSSER_ROOT environment variable" do
169
- cmd.must_match regexify(%{$env:BUSSER_ROOT = "\\r"})
170
- end
171
-
172
- it "sets the GEM_HOME environment variable" do
173
- cmd.must_match regexify(%{$env:GEM_HOME = "\\r\\gems"})
174
- end
175
-
176
- it "sets the GEM_PATH environment variable" do
177
- cmd.must_match regexify(%{$env:GEM_PATH = "\\r\\gems"})
178
- end
179
-
180
- it "sets the GEM_CACHE environment variable" do
181
- cmd.must_match regexify(%{$env:GEM_CACHE = "\\r\\gems\\cache"})
182
- end
183
- end
184
-
185
- describe "#install_command" do
186
-
187
- let(:cmd) { verifier.install_command }
188
-
189
- describe "with no suite test files" do
190
-
191
- describe "for bourne shells" do
192
-
193
- before { platform.stubs(:shell_type).returns("bourne") }
194
-
195
- it "returns nil" do
196
- cmd.must_equal nil
197
- end
198
- end
199
-
200
- describe "for powershell shells on windows os types" do
201
-
202
- before do
203
- platform.stubs(:shell_type).returns("powershell")
204
- platform.stubs(:os_type).returns("windows")
205
- end
206
-
207
- it "returns nil" do
208
- cmd.must_equal nil
209
- end
210
- end
211
- end
212
-
213
- describe "with suite test files" do
214
-
215
- describe "common behavior" do
216
-
217
- before do
218
- platform.stubs(:shell_type).returns("fake")
219
- create_test_files
220
- end
221
-
222
- it "prefixs the whole command with the command_prefix if set" do
223
- config[:command_prefix] = "my_prefix"
224
-
225
- cmd.must_match(/\Amy_prefix /)
226
- end
227
-
228
- it "does not prefix the command if command_prefix is not set" do
229
- config[:command_prefix] = nil
230
-
231
- cmd.wont_match(/\Amy_prefix /)
232
- end
233
- end
234
-
235
- describe "for bourne shells" do
236
-
237
- before do
238
- platform.stubs(:shell_type).returns("bourne")
239
- create_test_files
240
- config[:ruby_bindir] = "/rbd"
241
- config[:root_path] = "/r"
242
- end
243
-
244
- common_bourne_variable_specs
245
-
246
- it "sets path to ruby command" do
247
- cmd.must_match regexify(%{ruby="/rbd/ruby"})
248
- end
249
-
250
- it "sets path to gem command" do
251
- cmd.must_match regexify(%{gem="/rbd/gem"})
252
- end
253
-
254
- it "sets version for busser" do
255
- config[:version] = "the_best"
256
-
257
- cmd.must_match regexify(%{version="the_best"})
258
- end
259
-
260
- it "sets gem install arguments" do
261
- cmd.must_match regexify(
262
- "gem_install_args=\"busser --no-rdoc --no-ri --no-format-executable" \
263
- " -n /r/bin --no-user-install\""
264
- )
265
- end
266
-
267
- it "prepends sudo for busser binstub command when :sudo is set" do
268
- cmd.must_match regexify(%{busser="sudo -E /r/bin/busser"})
269
- end
270
-
271
- it "does not sudo for busser binstub command when :sudo is falsey" do
272
- config[:sudo] = false
273
-
274
- cmd.must_match regexify(%{busser="/r/bin/busser"})
275
- end
276
-
277
- it "sets the busser plugins list" do
278
- cmd.must_match regexify(
279
- %{plugins="busser-abba busser-minispec busser-mondospec"})
280
- end
281
- end
282
-
283
- describe "for powershell shells on windows os types" do
284
-
285
- before do
286
- platform.stubs(:shell_type).returns("powershell")
287
- platform.stubs(:os_type).returns("windows")
288
- create_test_files
289
- config[:ruby_bindir] = "\\rbd"
290
- config[:root_path] = "\\r"
291
- end
292
-
293
- common_powershell_variable_specs
294
-
295
- it "sets path to ruby command" do
296
- cmd.must_match regexify(%{$ruby = "\\rbd\\ruby.exe"})
297
- end
298
-
299
- it "sets path to gem command" do
300
- cmd.must_match regexify(%{$gem = "\\rbd\\gem"})
301
- end
302
-
303
- it "sets version for busser" do
304
- config[:version] = "the_best"
305
-
306
- cmd.must_match regexify(%{$version = "the_best"})
307
- end
308
-
309
- it "sets gem install arguments" do
310
- cmd.must_match regexify(
311
- "$gem_install_args = \"busser --no-rdoc --no-ri --no-format-executable" \
312
- " -n \\r\\bin --no-user-install\""
313
- )
314
- end
315
-
316
- it "sets path to busser binstub command" do
317
- cmd.must_match regexify(%{$busser = "\\r\\bin\\busser.bat"})
318
- end
319
-
320
- it "sets the busser plugins list" do
321
- cmd.must_match regexify(
322
- %{$plugins = "busser-abba busser-minispec busser-mondospec"})
323
- end
324
- end
325
- end
326
- end
327
-
328
- describe "#init_command" do
329
-
330
- let(:cmd) { verifier.init_command }
331
-
332
- describe "with no suite test files" do
333
-
334
- describe "for bourne shells" do
335
-
336
- before { platform.stubs(:shell_type).returns("bourne") }
337
-
338
- it "returns nil" do
339
- cmd.must_equal nil
340
- end
341
- end
342
-
343
- describe "for powershell shells on windows os types" do
344
-
345
- before do
346
- platform.stubs(:shell_type).returns("powershell")
347
- platform.stubs(:os_type).returns("windows")
348
- end
349
-
350
- it "returns nil" do
351
- cmd.must_equal nil
352
- end
353
- end
354
- end
355
-
356
- describe "with suite test files" do
357
-
358
- describe "common behavior" do
359
-
360
- before do
361
- platform.stubs(:shell_type).returns("fake")
362
- create_test_files
363
- end
364
-
365
- it "prefixs the whole command with the command_prefix if set" do
366
- config[:command_prefix] = "my_prefix"
367
-
368
- cmd.must_match(/\Amy_prefix /)
369
- end
370
-
371
- it "does not prefix the command if command_prefix is not set" do
372
- config[:command_prefix] = nil
373
-
374
- cmd.wont_match(/\Amy_prefix /)
375
- end
376
- end
377
-
378
- describe "for bourne shells" do
379
-
380
- before do
381
- platform.stubs(:shell_type).returns("bourne")
382
- create_test_files
383
- config[:ruby_bindir] = "/rbd"
384
- config[:root_path] = "/r"
385
- end
386
-
387
- common_bourne_variable_specs
388
-
389
- it "runs busser's suite cleanup with sudo, if set" do
390
- config[:root_path] = "/b"
391
- config[:sudo] = true
392
-
393
- cmd.must_match regexify(%{sudo -E /b/bin/busser suite cleanup})
394
- end
395
-
396
- it "runs busser's suite cleanup without sudo, if falsey" do
397
- config[:root_path] = "/b"
398
- config[:sudo] = false
399
-
400
- cmd.wont_match regexify(%{sudo -E /b/bin/busser suite cleanup})
401
- cmd.must_match regexify(%{/b/bin/busser suite cleanup})
402
- end
403
- end
404
-
405
- describe "for powershell shells on windows os types" do
406
-
407
- before do
408
- platform.stubs(:shell_type).returns("powershell")
409
- platform.stubs(:os_type).returns("windows")
410
- create_test_files
411
- config[:ruby_bindir] = "\\rbd"
412
- config[:root_path] = "\\r"
413
- end
414
-
415
- common_powershell_variable_specs
416
-
417
- it "runs busser's suite cleanup" do
418
- config[:root_path] = "\\b"
419
-
420
- cmd.must_match regexify(%{& \\b\\bin\\busser.bat suite cleanup})
421
- end
422
- end
423
- end
424
- end
425
-
426
- describe "#run_command" do
427
-
428
- let(:cmd) { verifier.run_command }
429
-
430
- describe "with no suite test files" do
431
-
432
- describe "for bourne shells" do
433
-
434
- before { platform.stubs(:shell_type).returns("bourne") }
435
-
436
- it "returns nil" do
437
- cmd.must_equal nil
438
- end
439
- end
440
-
441
- describe "for powershell shells on windows os types" do
442
-
443
- before do
444
- platform.stubs(:shell_type).returns("powershell")
445
- platform.stubs(:os_type).returns("windows")
446
- end
447
-
448
- it "returns nil" do
449
- cmd.must_equal nil
450
- end
451
- end
452
- end
453
-
454
- describe "with suite test files" do
455
-
456
- describe "common behavior" do
457
-
458
- before do
459
- platform.stubs(:shell_type).returns("fake")
460
- create_test_files
461
- end
462
-
463
- it "prefixs the whole command with the command_prefix if set" do
464
- config[:command_prefix] = "my_prefix"
465
-
466
- cmd.must_match(/\Amy_prefix /)
467
- end
468
-
469
- it "does not prefix the command if command_prefix is not set" do
470
- config[:command_prefix] = nil
471
-
472
- cmd.wont_match(/\Amy_prefix /)
473
- end
474
- end
475
-
476
- describe "for bourne shells" do
477
-
478
- before do
479
- platform.stubs(:shell_type).returns("bourne")
480
- create_test_files
481
- config[:ruby_bindir] = "/rbd"
482
- config[:root_path] = "/r"
483
- end
484
-
485
- common_bourne_variable_specs
486
-
487
- it "uses sudo for busser test when configured" do
488
- config[:sudo] = true
489
- config[:busser_bin] = "/p/b"
490
-
491
- cmd.must_match regexify("sudo -E /p/b test", :partial_line)
492
- end
493
-
494
- it "does not use sudo for busser test when configured" do
495
- config[:sudo] = false
496
- config[:busser_bin] = "/p/b"
497
-
498
- cmd.must_match regexify("/p/b test", :partial_line)
499
- cmd.wont_match regexify("sudo -E /p/b test", :partial_line)
500
- end
501
- end
502
-
503
- describe "for powershell shells on windows os types" do
504
-
505
- before do
506
- platform.stubs(:shell_type).returns("powershell")
507
- platform.stubs(:os_type).returns("windows")
508
- create_test_files
509
- config[:ruby_bindir] = "\\rbd"
510
- config[:root_path] = "\\r"
511
- end
512
-
513
- common_powershell_variable_specs
514
-
515
- it "runs busser's test" do
516
- config[:root_path] = "\\b"
517
-
518
- cmd.must_match regexify(%{& \\b\\bin\\busser.bat test})
519
- end
520
- end
521
- end
522
- end
523
-
524
- describe "#create_sandbox" do
525
-
526
- before do
527
- create_test_files
528
- end
529
-
530
- it "copies each suite file into the suites directory in sandbox" do
531
- verifier.create_sandbox
532
-
533
- files.each do |f, md|
534
- file = sandbox_path("suites/#{f}")
535
-
536
- file.file?.must_equal true
537
- file.stat.mode.to_s(8)[2, 4].must_equal md[:perms]
538
- IO.read(file).must_equal md[:content]
539
- end
540
- end
541
-
542
- it "copies each helper file into the suites directory in sandbox" do
543
- verifier.create_sandbox
544
-
545
- helper_files.each do |f, md|
546
- file = sandbox_path("suites/#{f}")
547
-
548
- file.file?.must_equal true
549
- file.stat.mode.to_s(8)[2, 4].must_equal md[:perms]
550
- IO.read(file).must_equal md[:content]
551
- end
552
- end
553
-
554
- def sandbox_path(path)
555
- Pathname.new(verifier.sandbox_path).join(path)
556
- end
557
- end
558
-
559
- describe "Busser legacy behavior for code calling old method names" do
560
-
561
- let(:busser) { verifier }
562
-
563
- it "responds to #setup_cmd which calls #install_command" do
564
- busser.stubs(:install_command).returns("install")
565
-
566
- busser.setup_cmd.must_equal "install"
567
- end
568
-
569
- it "responds to #run_cmd which calls #run_command" do
570
- busser.stubs(:run_command).returns("run")
571
-
572
- busser.run_cmd.must_equal "run"
573
- end
574
-
575
- it "responds to #sync_cmd which logs a warning" do
576
- busser.sync_cmd
577
-
578
- logged_output.string.must_match warn_line_with(
579
- "Legacy call to #sync_cmd cannot be preserved")
580
- end
581
- end
582
-
583
- def create_file(file, content, perms)
584
- FileUtils.mkdir_p(File.dirname(file))
585
- File.open(file, "wb") { |f| f.write(content) }
586
- FileUtils.chmod(perms.to_i(8), file)
587
- end
588
-
589
- def create_test_files
590
- base = "#{config[:test_base_path]}/germany"
591
- hbase = "#{config[:test_base_path]}/helpers"
592
-
593
- files.map { |f, md| [File.join(base, f), md] }.each do |f, md|
594
- create_file(f, md[:content], md[:perms])
595
- end
596
- helper_files.map { |f, md| [File.join(hbase, f), md] }.each do |f, md|
597
- create_file(f, md[:content], md[:perms])
598
- end
599
- end
600
-
601
- def regexify(str, line = :whole_line)
602
- r = Regexp.escape(str)
603
- r = "^\s*#{r}$" if line == :whole_line
604
- Regexp.new(r)
605
- end
606
-
607
- def warn_line_with(msg)
608
- %r{^W, .* : #{Regexp.escape(msg)}}
609
- end
610
- end
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Author:: Fletcher Nichol (<fnichol@nichol.ca>)
4
+ #
5
+ # Copyright (C) 2014, Fletcher Nichol
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative "../../spec_helper"
20
+
21
+ require "kitchen"
22
+ require "kitchen/verifier/busser"
23
+
24
+ describe Kitchen::Verifier::Busser do
25
+
26
+ let(:logged_output) { StringIO.new }
27
+ let(:logger) { Logger.new(logged_output) }
28
+ let(:config) { Hash.new }
29
+ let(:platform) { stub(:os_type => nil, :shell_type => nil) }
30
+ let(:suite) { stub(:name => "germany") }
31
+
32
+ let(:instance) do
33
+ stub(
34
+ :name => "coolbeans",
35
+ :logger => logger,
36
+ :platform => platform,
37
+ :suite => suite,
38
+ :to_str => "instance"
39
+ )
40
+ end
41
+
42
+ let(:verifier) do
43
+ Kitchen::Verifier::Busser.new(config).finalize_config!(instance)
44
+ end
45
+
46
+ let(:files) do
47
+ {
48
+ "mondospec/charlie" => {
49
+ :content => "charlie",
50
+ :perms => (running_tests_on_windows? ? "0644" : "0764")
51
+ },
52
+ "minispec/beta" => {
53
+ :content => "beta",
54
+ :perms => "0644"
55
+ },
56
+ "abba/alpha" => {
57
+ :content => "alpha",
58
+ :perms => (running_tests_on_windows? ? "0444" : "0440")
59
+ }
60
+ }
61
+ end
62
+
63
+ let(:helper_files) do
64
+ {
65
+ "minispec/spec_helper" => {
66
+ :content => "helping",
67
+ :perms => "0644"
68
+ },
69
+ "abba/common" => {
70
+ :content => "yeppers",
71
+ :perms => (running_tests_on_windows? ? "0644" : "0664")
72
+ }
73
+ }
74
+ end
75
+
76
+ before do
77
+ @root = Dir.mktmpdir
78
+ config[:test_base_path] = @root
79
+ end
80
+
81
+ after do
82
+ FileUtils.remove_entry(@root)
83
+ end
84
+
85
+ # TODO: deal with this:
86
+ # it "raises a UserError if the suite name is 'helper'" do
87
+ # proc {
88
+ # Kitchen::Busser.new("helper", config)
89
+ # }.must_raise Kitchen::UserError
90
+ # end
91
+
92
+ it "verifier api_version is 1" do
93
+ verifier.diagnose_plugin[:api_version].must_equal 1
94
+ end
95
+
96
+ it "plugin_version is set to Kitchen::VERSION" do
97
+ verifier.diagnose_plugin[:version].must_equal Kitchen::VERSION
98
+ end
99
+
100
+ describe "configuration" do
101
+
102
+ describe "for unix operating systems" do
103
+
104
+ before {
105
+ platform.stubs(:os_type).returns("unix")
106
+ }
107
+
108
+ it ":ruby_bindir defaults the an Omnibus Chef installation" do
109
+ verifier[:ruby_bindir].must_equal "/opt/chef/embedded/bin"
110
+ end
111
+
112
+ it ":busser_bin defaults to a binstub under :root_path" do
113
+ config[:root_path] = "/beep"
114
+
115
+ verifier[:busser_bin].must_equal "/beep/bin/busser"
116
+ end
117
+ end
118
+
119
+ describe "for windows operating systems" do
120
+
121
+ before { platform.stubs(:os_type).returns("windows") }
122
+
123
+ it ":ruby_bindir defaults the an Omnibus Chef installation" do
124
+ verifier[:ruby_bindir].
125
+ must_equal "$env:systemdrive\\opscode\\chef\\embedded\\bin"
126
+ end
127
+
128
+ it ":busser_bin defaults to a binstub under :root_path" do
129
+ config[:root_path] = "\\beep"
130
+
131
+ verifier[:busser_bin].must_equal "\\beep\\bin\\busser.bat"
132
+ end
133
+ end
134
+
135
+ it ":version defaults to 'busser'" do
136
+ verifier[:version].must_equal "busser"
137
+ end
138
+ end
139
+
140
+ def self.common_bourne_variable_specs
141
+ it "uses bourne shell" do
142
+ cmd.must_match(/\Ash -c '$/)
143
+ cmd.must_match(/'\Z/)
144
+ end
145
+
146
+ it "ends with a single quote" do
147
+ cmd.must_match(/'\Z/)
148
+ end
149
+
150
+ it "sets the BUSSER_ROOT environment variable" do
151
+ cmd.must_match regexify(%{BUSSER_ROOT="/r"; export BUSSER_ROOT})
152
+ end
153
+
154
+ it "sets the GEM_HOME environment variable" do
155
+ cmd.must_match regexify(%{GEM_HOME="/r/gems"; export GEM_HOME})
156
+ end
157
+
158
+ it "sets the GEM_PATH environment variable" do
159
+ cmd.must_match regexify(%{GEM_PATH="/r/gems"; export GEM_PATH})
160
+ end
161
+
162
+ it "sets the GEM_CACHE environment variable" do
163
+ cmd.must_match regexify(%{GEM_CACHE="/r/gems/cache"; export GEM_CACHE})
164
+ end
165
+ end
166
+
167
+ def self.common_powershell_variable_specs
168
+ it "sets the BUSSER_ROOT environment variable" do
169
+ cmd.must_match regexify(%{$env:BUSSER_ROOT = "\\r"})
170
+ end
171
+
172
+ it "sets the GEM_HOME environment variable" do
173
+ cmd.must_match regexify(%{$env:GEM_HOME = "\\r\\gems"})
174
+ end
175
+
176
+ it "sets the GEM_PATH environment variable" do
177
+ cmd.must_match regexify(%{$env:GEM_PATH = "\\r\\gems"})
178
+ end
179
+
180
+ it "sets the GEM_CACHE environment variable" do
181
+ cmd.must_match regexify(%{$env:GEM_CACHE = "\\r\\gems\\cache"})
182
+ end
183
+ end
184
+
185
+ describe "#install_command" do
186
+
187
+ let(:cmd) { verifier.install_command }
188
+
189
+ describe "with no suite test files" do
190
+
191
+ describe "for bourne shells" do
192
+
193
+ before { platform.stubs(:shell_type).returns("bourne") }
194
+
195
+ it "returns nil" do
196
+ cmd.must_equal nil
197
+ end
198
+ end
199
+
200
+ describe "for powershell shells on windows os types" do
201
+
202
+ before do
203
+ platform.stubs(:shell_type).returns("powershell")
204
+ platform.stubs(:os_type).returns("windows")
205
+ end
206
+
207
+ it "returns nil" do
208
+ cmd.must_equal nil
209
+ end
210
+ end
211
+ end
212
+
213
+ describe "with suite test files" do
214
+
215
+ describe "common behavior" do
216
+
217
+ before do
218
+ platform.stubs(:shell_type).returns("fake")
219
+ create_test_files
220
+ end
221
+
222
+ it "prefixs the whole command with the command_prefix if set" do
223
+ config[:command_prefix] = "my_prefix"
224
+
225
+ cmd.must_match(/\Amy_prefix /)
226
+ end
227
+
228
+ it "does not prefix the command if command_prefix is not set" do
229
+ config[:command_prefix] = nil
230
+
231
+ cmd.wont_match(/\Amy_prefix /)
232
+ end
233
+ end
234
+
235
+ describe "for bourne shells" do
236
+
237
+ before do
238
+ platform.stubs(:shell_type).returns("bourne")
239
+ create_test_files
240
+ config[:ruby_bindir] = "/rbd"
241
+ config[:root_path] = "/r"
242
+ end
243
+
244
+ common_bourne_variable_specs
245
+
246
+ it "sets path to ruby command" do
247
+ cmd.must_match regexify(%{ruby="/rbd/ruby"})
248
+ end
249
+
250
+ it "sets path to gem command" do
251
+ cmd.must_match regexify(%{gem="/rbd/gem"})
252
+ end
253
+
254
+ it "sets version for busser" do
255
+ config[:version] = "the_best"
256
+
257
+ cmd.must_match regexify(%{version="the_best"})
258
+ end
259
+
260
+ it "sets gem install arguments" do
261
+ cmd.must_match regexify(
262
+ "gem_install_args=\"busser --no-rdoc --no-ri --no-format-executable" \
263
+ " -n /r/bin --no-user-install\""
264
+ )
265
+ end
266
+
267
+ it "prepends sudo for busser binstub command when :sudo is set" do
268
+ cmd.must_match regexify(%{busser="sudo -E /r/bin/busser"})
269
+ end
270
+
271
+ it "does not sudo for busser binstub command when :sudo is falsey" do
272
+ config[:sudo] = false
273
+
274
+ cmd.must_match regexify(%{busser="/r/bin/busser"})
275
+ end
276
+
277
+ it "sets the busser plugins list" do
278
+ cmd.must_match regexify(
279
+ %{plugins="busser-abba busser-minispec busser-mondospec"})
280
+ end
281
+ end
282
+
283
+ describe "for powershell shells on windows os types" do
284
+
285
+ before do
286
+ platform.stubs(:shell_type).returns("powershell")
287
+ platform.stubs(:os_type).returns("windows")
288
+ create_test_files
289
+ config[:ruby_bindir] = "\\rbd"
290
+ config[:root_path] = "\\r"
291
+ end
292
+
293
+ common_powershell_variable_specs
294
+
295
+ it "sets path to ruby command" do
296
+ cmd.must_match regexify(%{$ruby = "\\rbd\\ruby.exe"})
297
+ end
298
+
299
+ it "sets path to gem command" do
300
+ cmd.must_match regexify(%{$gem = "\\rbd\\gem"})
301
+ end
302
+
303
+ it "sets version for busser" do
304
+ config[:version] = "the_best"
305
+
306
+ cmd.must_match regexify(%{$version = "the_best"})
307
+ end
308
+
309
+ it "sets gem install arguments" do
310
+ cmd.must_match regexify(
311
+ "$gem_install_args = \"busser --no-rdoc --no-ri --no-format-executable" \
312
+ " -n \\r\\bin --no-user-install\""
313
+ )
314
+ end
315
+
316
+ it "sets path to busser binstub command" do
317
+ cmd.must_match regexify(%{$busser = "\\r\\bin\\busser.bat"})
318
+ end
319
+
320
+ it "sets the busser plugins list" do
321
+ cmd.must_match regexify(
322
+ %{$plugins = "busser-abba busser-minispec busser-mondospec"})
323
+ end
324
+ end
325
+ end
326
+ end
327
+
328
+ describe "#init_command" do
329
+
330
+ let(:cmd) { verifier.init_command }
331
+
332
+ describe "with no suite test files" do
333
+
334
+ describe "for bourne shells" do
335
+
336
+ before { platform.stubs(:shell_type).returns("bourne") }
337
+
338
+ it "returns nil" do
339
+ cmd.must_equal nil
340
+ end
341
+ end
342
+
343
+ describe "for powershell shells on windows os types" do
344
+
345
+ before do
346
+ platform.stubs(:shell_type).returns("powershell")
347
+ platform.stubs(:os_type).returns("windows")
348
+ end
349
+
350
+ it "returns nil" do
351
+ cmd.must_equal nil
352
+ end
353
+ end
354
+ end
355
+
356
+ describe "with suite test files" do
357
+
358
+ describe "common behavior" do
359
+
360
+ before do
361
+ platform.stubs(:shell_type).returns("fake")
362
+ create_test_files
363
+ end
364
+
365
+ it "prefixs the whole command with the command_prefix if set" do
366
+ config[:command_prefix] = "my_prefix"
367
+
368
+ cmd.must_match(/\Amy_prefix /)
369
+ end
370
+
371
+ it "does not prefix the command if command_prefix is not set" do
372
+ config[:command_prefix] = nil
373
+
374
+ cmd.wont_match(/\Amy_prefix /)
375
+ end
376
+ end
377
+
378
+ describe "for bourne shells" do
379
+
380
+ before do
381
+ platform.stubs(:shell_type).returns("bourne")
382
+ create_test_files
383
+ config[:ruby_bindir] = "/rbd"
384
+ config[:root_path] = "/r"
385
+ end
386
+
387
+ common_bourne_variable_specs
388
+
389
+ it "runs busser's suite cleanup with sudo, if set" do
390
+ config[:root_path] = "/b"
391
+ config[:sudo] = true
392
+
393
+ cmd.must_match regexify(%{sudo -E /b/bin/busser suite cleanup})
394
+ end
395
+
396
+ it "runs busser's suite cleanup without sudo, if falsey" do
397
+ config[:root_path] = "/b"
398
+ config[:sudo] = false
399
+
400
+ cmd.wont_match regexify(%{sudo -E /b/bin/busser suite cleanup})
401
+ cmd.must_match regexify(%{/b/bin/busser suite cleanup})
402
+ end
403
+ end
404
+
405
+ describe "for powershell shells on windows os types" do
406
+
407
+ before do
408
+ platform.stubs(:shell_type).returns("powershell")
409
+ platform.stubs(:os_type).returns("windows")
410
+ create_test_files
411
+ config[:ruby_bindir] = "\\rbd"
412
+ config[:root_path] = "\\r"
413
+ end
414
+
415
+ common_powershell_variable_specs
416
+
417
+ it "runs busser's suite cleanup" do
418
+ config[:root_path] = "\\b"
419
+
420
+ cmd.must_match regexify(%{& \\b\\bin\\busser.bat suite cleanup})
421
+ end
422
+ end
423
+ end
424
+ end
425
+
426
+ describe "#run_command" do
427
+
428
+ let(:cmd) { verifier.run_command }
429
+
430
+ describe "with no suite test files" do
431
+
432
+ describe "for bourne shells" do
433
+
434
+ before { platform.stubs(:shell_type).returns("bourne") }
435
+
436
+ it "returns nil" do
437
+ cmd.must_equal nil
438
+ end
439
+ end
440
+
441
+ describe "for powershell shells on windows os types" do
442
+
443
+ before do
444
+ platform.stubs(:shell_type).returns("powershell")
445
+ platform.stubs(:os_type).returns("windows")
446
+ end
447
+
448
+ it "returns nil" do
449
+ cmd.must_equal nil
450
+ end
451
+ end
452
+ end
453
+
454
+ describe "with suite test files" do
455
+
456
+ describe "common behavior" do
457
+
458
+ before do
459
+ platform.stubs(:shell_type).returns("fake")
460
+ create_test_files
461
+ end
462
+
463
+ it "prefixs the whole command with the command_prefix if set" do
464
+ config[:command_prefix] = "my_prefix"
465
+
466
+ cmd.must_match(/\Amy_prefix /)
467
+ end
468
+
469
+ it "does not prefix the command if command_prefix is not set" do
470
+ config[:command_prefix] = nil
471
+
472
+ cmd.wont_match(/\Amy_prefix /)
473
+ end
474
+ end
475
+
476
+ describe "for bourne shells" do
477
+
478
+ before do
479
+ platform.stubs(:shell_type).returns("bourne")
480
+ create_test_files
481
+ config[:ruby_bindir] = "/rbd"
482
+ config[:root_path] = "/r"
483
+ end
484
+
485
+ common_bourne_variable_specs
486
+
487
+ it "uses sudo for busser test when configured" do
488
+ config[:sudo] = true
489
+ config[:busser_bin] = "/p/b"
490
+
491
+ cmd.must_match regexify("sudo -E /p/b test", :partial_line)
492
+ end
493
+
494
+ it "does not use sudo for busser test when configured" do
495
+ config[:sudo] = false
496
+ config[:busser_bin] = "/p/b"
497
+
498
+ cmd.must_match regexify("/p/b test", :partial_line)
499
+ cmd.wont_match regexify("sudo -E /p/b test", :partial_line)
500
+ end
501
+ end
502
+
503
+ describe "for powershell shells on windows os types" do
504
+
505
+ before do
506
+ platform.stubs(:shell_type).returns("powershell")
507
+ platform.stubs(:os_type).returns("windows")
508
+ create_test_files
509
+ config[:ruby_bindir] = "\\rbd"
510
+ config[:root_path] = "\\r"
511
+ end
512
+
513
+ common_powershell_variable_specs
514
+
515
+ it "runs busser's test" do
516
+ config[:root_path] = "\\b"
517
+
518
+ cmd.must_match regexify(%{& \\b\\bin\\busser.bat test})
519
+ end
520
+ end
521
+ end
522
+ end
523
+
524
+ describe "#create_sandbox" do
525
+
526
+ before do
527
+ create_test_files
528
+ end
529
+
530
+ it "copies each suite file into the suites directory in sandbox" do
531
+ verifier.create_sandbox
532
+
533
+ files.each do |f, md|
534
+ file = sandbox_path("suites/#{f}")
535
+
536
+ file.file?.must_equal true
537
+ file.stat.mode.to_s(8)[2, 4].must_equal md[:perms]
538
+ IO.read(file).must_equal md[:content]
539
+ end
540
+ end
541
+
542
+ it "copies each helper file into the suites directory in sandbox" do
543
+ verifier.create_sandbox
544
+
545
+ helper_files.each do |f, md|
546
+ file = sandbox_path("suites/#{f}")
547
+
548
+ file.file?.must_equal true
549
+ file.stat.mode.to_s(8)[2, 4].must_equal md[:perms]
550
+ IO.read(file).must_equal md[:content]
551
+ end
552
+ end
553
+
554
+ def sandbox_path(path)
555
+ Pathname.new(verifier.sandbox_path).join(path)
556
+ end
557
+ end
558
+
559
+ describe "Busser legacy behavior for code calling old method names" do
560
+
561
+ let(:busser) { verifier }
562
+
563
+ it "responds to #setup_cmd which calls #install_command" do
564
+ busser.stubs(:install_command).returns("install")
565
+
566
+ busser.setup_cmd.must_equal "install"
567
+ end
568
+
569
+ it "responds to #run_cmd which calls #run_command" do
570
+ busser.stubs(:run_command).returns("run")
571
+
572
+ busser.run_cmd.must_equal "run"
573
+ end
574
+
575
+ it "responds to #sync_cmd which logs a warning" do
576
+ busser.sync_cmd
577
+
578
+ logged_output.string.must_match warn_line_with(
579
+ "Legacy call to #sync_cmd cannot be preserved")
580
+ end
581
+ end
582
+
583
+ def create_file(file, content, perms)
584
+ FileUtils.mkdir_p(File.dirname(file))
585
+ File.open(file, "wb") { |f| f.write(content) }
586
+ FileUtils.chmod(perms.to_i(8), file)
587
+ end
588
+
589
+ def create_test_files
590
+ base = "#{config[:test_base_path]}/germany"
591
+ hbase = "#{config[:test_base_path]}/helpers"
592
+
593
+ files.map { |f, md| [File.join(base, f), md] }.each do |f, md|
594
+ create_file(f, md[:content], md[:perms])
595
+ end
596
+ helper_files.map { |f, md| [File.join(hbase, f), md] }.each do |f, md|
597
+ create_file(f, md[:content], md[:perms])
598
+ end
599
+ end
600
+
601
+ def regexify(str, line = :whole_line)
602
+ r = Regexp.escape(str)
603
+ r = "^\s*#{r}$" if line == :whole_line
604
+ Regexp.new(r)
605
+ end
606
+
607
+ def warn_line_with(msg)
608
+ %r{^W, .* : #{Regexp.escape(msg)}}
609
+ end
610
+ end