test-kitchen 1.6.0 → 1.7.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 (180) hide show
  1. checksums.yaml +4 -4
  2. data/.cane +8 -7
  3. data/.github/ISSUE_TEMPLATE.md +56 -0
  4. data/.gitignore +28 -27
  5. data/.kitchen.ci.yml +23 -0
  6. data/.kitchen.proxy.yml +27 -0
  7. data/.rubocop.yml +3 -3
  8. data/.travis.yml +70 -53
  9. data/.yardopts +3 -3
  10. data/Berksfile +3 -0
  11. data/CHANGELOG.md +1083 -1051
  12. data/CONTRIBUTING.md +14 -14
  13. data/Gemfile +19 -14
  14. data/Gemfile.proxy_tests +4 -5
  15. data/Guardfile +42 -42
  16. data/LICENSE +15 -15
  17. data/MAINTAINERS.md +23 -24
  18. data/README.md +135 -135
  19. data/Rakefile +61 -76
  20. data/appveyor.yml +44 -34
  21. data/features/kitchen_action_commands.feature +164 -164
  22. data/features/kitchen_command.feature +16 -16
  23. data/features/kitchen_console_command.feature +34 -34
  24. data/features/kitchen_defaults.feature +38 -38
  25. data/features/kitchen_diagnose_command.feature +96 -96
  26. data/features/kitchen_driver_create_command.feature +64 -64
  27. data/features/kitchen_driver_discover_command.feature +25 -25
  28. data/features/kitchen_help_command.feature +16 -16
  29. data/features/kitchen_init_command.feature +274 -274
  30. data/features/kitchen_list_command.feature +104 -104
  31. data/features/kitchen_login_command.feature +62 -62
  32. data/features/kitchen_sink_command.feature +30 -30
  33. data/features/kitchen_test_command.feature +88 -88
  34. data/features/step_definitions/gem_steps.rb +36 -36
  35. data/features/step_definitions/git_steps.rb +5 -5
  36. data/features/step_definitions/output_steps.rb +5 -5
  37. data/features/support/env.rb +75 -75
  38. data/lib/kitchen.rb +150 -150
  39. data/lib/kitchen/base64_stream.rb +55 -55
  40. data/lib/kitchen/cli.rb +419 -419
  41. data/lib/kitchen/collection.rb +55 -55
  42. data/lib/kitchen/color.rb +65 -65
  43. data/lib/kitchen/command.rb +185 -185
  44. data/lib/kitchen/command/action.rb +45 -45
  45. data/lib/kitchen/command/console.rb +58 -58
  46. data/lib/kitchen/command/diagnose.rb +92 -92
  47. data/lib/kitchen/command/driver_discover.rb +105 -105
  48. data/lib/kitchen/command/exec.rb +41 -41
  49. data/lib/kitchen/command/list.rb +119 -119
  50. data/lib/kitchen/command/login.rb +43 -43
  51. data/lib/kitchen/command/sink.rb +54 -54
  52. data/lib/kitchen/command/test.rb +51 -51
  53. data/lib/kitchen/config.rb +322 -322
  54. data/lib/kitchen/configurable.rb +529 -529
  55. data/lib/kitchen/data_munger.rb +959 -960
  56. data/lib/kitchen/diagnostic.rb +141 -141
  57. data/lib/kitchen/driver.rb +56 -56
  58. data/lib/kitchen/driver/base.rb +134 -134
  59. data/lib/kitchen/driver/dummy.rb +108 -108
  60. data/lib/kitchen/driver/proxy.rb +72 -72
  61. data/lib/kitchen/driver/ssh_base.rb +357 -357
  62. data/lib/kitchen/errors.rb +229 -229
  63. data/lib/kitchen/generator/driver_create.rb +177 -177
  64. data/lib/kitchen/generator/init.rb +296 -296
  65. data/lib/kitchen/instance.rb +662 -662
  66. data/lib/kitchen/lazy_hash.rb +142 -142
  67. data/lib/kitchen/loader/yaml.rb +349 -349
  68. data/lib/kitchen/logger.rb +423 -423
  69. data/lib/kitchen/logging.rb +56 -56
  70. data/lib/kitchen/login_command.rb +52 -52
  71. data/lib/kitchen/metadata_chopper.rb +52 -52
  72. data/lib/kitchen/platform.rb +67 -67
  73. data/lib/kitchen/provisioner.rb +54 -54
  74. data/lib/kitchen/provisioner/base.rb +236 -236
  75. data/lib/kitchen/provisioner/chef/berkshelf.rb +114 -114
  76. data/lib/kitchen/provisioner/chef/common_sandbox.rb +322 -322
  77. data/lib/kitchen/provisioner/chef/librarian.rb +112 -112
  78. data/lib/kitchen/provisioner/chef_apply.rb +124 -125
  79. data/lib/kitchen/provisioner/chef_base.rb +341 -294
  80. data/lib/kitchen/provisioner/chef_solo.rb +88 -89
  81. data/lib/kitchen/provisioner/chef_zero.rb +245 -245
  82. data/lib/kitchen/provisioner/dummy.rb +79 -79
  83. data/lib/kitchen/provisioner/shell.rb +138 -138
  84. data/lib/kitchen/rake_tasks.rb +63 -63
  85. data/lib/kitchen/shell_out.rb +93 -93
  86. data/lib/kitchen/ssh.rb +276 -276
  87. data/lib/kitchen/state_file.rb +120 -120
  88. data/lib/kitchen/suite.rb +51 -51
  89. data/lib/kitchen/thor_tasks.rb +66 -66
  90. data/lib/kitchen/transport.rb +54 -54
  91. data/lib/kitchen/transport/base.rb +176 -176
  92. data/lib/kitchen/transport/dummy.rb +79 -79
  93. data/lib/kitchen/transport/ssh.rb +364 -364
  94. data/lib/kitchen/transport/winrm.rb +486 -486
  95. data/lib/kitchen/util.rb +147 -147
  96. data/lib/kitchen/verifier.rb +55 -55
  97. data/lib/kitchen/verifier/base.rb +235 -235
  98. data/lib/kitchen/verifier/busser.rb +277 -277
  99. data/lib/kitchen/verifier/dummy.rb +79 -79
  100. data/lib/kitchen/verifier/shell.rb +101 -101
  101. data/lib/kitchen/version.rb +21 -21
  102. data/lib/vendor/hash_recursive_merge.rb +82 -82
  103. data/spec/kitchen/base64_stream_spec.rb +77 -77
  104. data/spec/kitchen/cli_spec.rb +56 -56
  105. data/spec/kitchen/collection_spec.rb +80 -80
  106. data/spec/kitchen/color_spec.rb +54 -54
  107. data/spec/kitchen/config_spec.rb +408 -408
  108. data/spec/kitchen/configurable_spec.rb +1095 -1062
  109. data/spec/kitchen/data_munger_spec.rb +2694 -2383
  110. data/spec/kitchen/diagnostic_spec.rb +129 -129
  111. data/spec/kitchen/driver/base_spec.rb +121 -121
  112. data/spec/kitchen/driver/dummy_spec.rb +199 -199
  113. data/spec/kitchen/driver/proxy_spec.rb +138 -138
  114. data/spec/kitchen/driver/ssh_base_spec.rb +1115 -1115
  115. data/spec/kitchen/driver_spec.rb +112 -112
  116. data/spec/kitchen/errors_spec.rb +309 -309
  117. data/spec/kitchen/instance_spec.rb +1419 -1419
  118. data/spec/kitchen/lazy_hash_spec.rb +117 -117
  119. data/spec/kitchen/loader/yaml_spec.rb +774 -774
  120. data/spec/kitchen/logger_spec.rb +429 -429
  121. data/spec/kitchen/logging_spec.rb +59 -59
  122. data/spec/kitchen/login_command_spec.rb +68 -68
  123. data/spec/kitchen/metadata_chopper_spec.rb +82 -82
  124. data/spec/kitchen/platform_spec.rb +89 -89
  125. data/spec/kitchen/provisioner/base_spec.rb +386 -386
  126. data/spec/kitchen/provisioner/chef_apply_spec.rb +136 -136
  127. data/spec/kitchen/provisioner/chef_base_spec.rb +1161 -1067
  128. data/spec/kitchen/provisioner/chef_solo_spec.rb +557 -557
  129. data/spec/kitchen/provisioner/chef_zero_spec.rb +1001 -1001
  130. data/spec/kitchen/provisioner/dummy_spec.rb +99 -99
  131. data/spec/kitchen/provisioner/shell_spec.rb +566 -566
  132. data/spec/kitchen/provisioner_spec.rb +107 -107
  133. data/spec/kitchen/shell_out_spec.rb +150 -150
  134. data/spec/kitchen/ssh_spec.rb +693 -693
  135. data/spec/kitchen/state_file_spec.rb +129 -129
  136. data/spec/kitchen/suite_spec.rb +62 -62
  137. data/spec/kitchen/transport/base_spec.rb +89 -89
  138. data/spec/kitchen/transport/ssh_spec.rb +1255 -1255
  139. data/spec/kitchen/transport/winrm_spec.rb +1143 -1143
  140. data/spec/kitchen/transport_spec.rb +112 -112
  141. data/spec/kitchen/util_spec.rb +165 -165
  142. data/spec/kitchen/verifier/base_spec.rb +362 -362
  143. data/spec/kitchen/verifier/busser_spec.rb +610 -610
  144. data/spec/kitchen/verifier/dummy_spec.rb +99 -99
  145. data/spec/kitchen/verifier/shell_spec.rb +160 -158
  146. data/spec/kitchen/verifier_spec.rb +120 -120
  147. data/spec/kitchen_spec.rb +114 -114
  148. data/spec/spec_helper.rb +85 -85
  149. data/spec/support/powershell_max_size_spec.rb +40 -40
  150. data/support/busser_install_command.ps1 +14 -14
  151. data/support/busser_install_command.sh +14 -14
  152. data/support/chef-client-zero.rb +77 -77
  153. data/support/chef_base_init_command.ps1 +18 -18
  154. data/support/chef_base_init_command.sh +2 -2
  155. data/support/chef_base_install_command.ps1 +85 -85
  156. data/support/chef_base_install_command.sh +229 -229
  157. data/support/chef_zero_prepare_command_legacy.ps1 +9 -9
  158. data/support/chef_zero_prepare_command_legacy.sh +10 -10
  159. data/support/download_helpers.sh +109 -109
  160. data/support/dummy-validation.pem +27 -27
  161. data/templates/driver/CHANGELOG.md.erb +3 -3
  162. data/templates/driver/Gemfile.erb +3 -3
  163. data/templates/driver/README.md.erb +64 -64
  164. data/templates/driver/Rakefile.erb +21 -21
  165. data/templates/driver/driver.rb.erb +23 -23
  166. data/templates/driver/gemspec.erb +29 -29
  167. data/templates/driver/gitignore.erb +17 -17
  168. data/templates/driver/license_apachev2.erb +15 -15
  169. data/templates/driver/license_lgplv3.erb +16 -16
  170. data/templates/driver/license_mit.erb +22 -22
  171. data/templates/driver/license_reserved.erb +5 -5
  172. data/templates/driver/tailor.erb +4 -4
  173. data/templates/driver/travis.yml.erb +11 -11
  174. data/templates/driver/version.rb.erb +12 -12
  175. data/templates/init/chefignore.erb +1 -1
  176. data/templates/init/kitchen.yml.erb +18 -18
  177. data/test-kitchen.gemspec +62 -62
  178. data/test/integration/default/default_spec.rb +3 -0
  179. data/testing_windows.md +37 -37
  180. metadata +23 -11
@@ -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