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.
- checksums.yaml +4 -4
- data/.cane +8 -8
- data/.gitattributes +3 -0
- data/.github/ISSUE_TEMPLATE.md +55 -55
- data/.gitignore +28 -28
- data/.kitchen.ci.yml +23 -23
- data/.kitchen.proxy.yml +27 -27
- data/.rubocop.yml +3 -3
- data/.travis.yml +70 -70
- data/.yardopts +3 -3
- data/Berksfile +3 -3
- data/CHANGELOG.md +1090 -1083
- data/CONTRIBUTING.md +14 -14
- data/Gemfile +19 -19
- data/Gemfile.proxy_tests +4 -4
- data/Guardfile +42 -42
- data/LICENSE +15 -15
- data/MAINTAINERS.md +23 -23
- data/README.md +135 -135
- data/Rakefile +61 -61
- data/appveyor.yml +44 -44
- data/features/kitchen_action_commands.feature +164 -164
- data/features/kitchen_command.feature +16 -16
- data/features/kitchen_console_command.feature +34 -34
- data/features/kitchen_defaults.feature +38 -38
- data/features/kitchen_diagnose_command.feature +96 -96
- data/features/kitchen_driver_create_command.feature +64 -64
- data/features/kitchen_driver_discover_command.feature +25 -25
- data/features/kitchen_help_command.feature +16 -16
- data/features/kitchen_init_command.feature +274 -274
- data/features/kitchen_list_command.feature +104 -104
- data/features/kitchen_login_command.feature +62 -62
- data/features/kitchen_sink_command.feature +30 -30
- data/features/kitchen_test_command.feature +88 -88
- data/features/step_definitions/gem_steps.rb +36 -36
- data/features/step_definitions/git_steps.rb +5 -5
- data/features/step_definitions/output_steps.rb +5 -5
- data/features/support/env.rb +75 -75
- data/lib/kitchen.rb +150 -150
- data/lib/kitchen/base64_stream.rb +55 -55
- data/lib/kitchen/cli.rb +419 -419
- data/lib/kitchen/collection.rb +55 -55
- data/lib/kitchen/color.rb +65 -65
- data/lib/kitchen/command.rb +185 -185
- data/lib/kitchen/command/action.rb +45 -45
- data/lib/kitchen/command/console.rb +58 -58
- data/lib/kitchen/command/diagnose.rb +92 -92
- data/lib/kitchen/command/driver_discover.rb +105 -105
- data/lib/kitchen/command/exec.rb +41 -41
- data/lib/kitchen/command/list.rb +119 -119
- data/lib/kitchen/command/login.rb +43 -43
- data/lib/kitchen/command/sink.rb +54 -54
- data/lib/kitchen/command/test.rb +51 -51
- data/lib/kitchen/config.rb +322 -322
- data/lib/kitchen/configurable.rb +529 -529
- data/lib/kitchen/data_munger.rb +959 -959
- data/lib/kitchen/diagnostic.rb +141 -141
- data/lib/kitchen/driver.rb +56 -56
- data/lib/kitchen/driver/base.rb +134 -134
- data/lib/kitchen/driver/dummy.rb +108 -108
- data/lib/kitchen/driver/proxy.rb +72 -72
- data/lib/kitchen/driver/ssh_base.rb +357 -357
- data/lib/kitchen/errors.rb +229 -229
- data/lib/kitchen/generator/driver_create.rb +177 -177
- data/lib/kitchen/generator/init.rb +296 -296
- data/lib/kitchen/instance.rb +662 -662
- data/lib/kitchen/lazy_hash.rb +142 -142
- data/lib/kitchen/loader/yaml.rb +349 -349
- data/lib/kitchen/logger.rb +423 -423
- data/lib/kitchen/logging.rb +56 -56
- data/lib/kitchen/login_command.rb +52 -52
- data/lib/kitchen/metadata_chopper.rb +52 -52
- data/lib/kitchen/platform.rb +67 -67
- data/lib/kitchen/provisioner.rb +54 -54
- data/lib/kitchen/provisioner/base.rb +236 -236
- data/lib/kitchen/provisioner/chef/berkshelf.rb +114 -114
- data/lib/kitchen/provisioner/chef/common_sandbox.rb +322 -322
- data/lib/kitchen/provisioner/chef/librarian.rb +112 -112
- data/lib/kitchen/provisioner/chef_apply.rb +124 -124
- data/lib/kitchen/provisioner/chef_base.rb +341 -341
- data/lib/kitchen/provisioner/chef_solo.rb +88 -88
- data/lib/kitchen/provisioner/chef_zero.rb +245 -245
- data/lib/kitchen/provisioner/dummy.rb +79 -79
- data/lib/kitchen/provisioner/shell.rb +138 -138
- data/lib/kitchen/rake_tasks.rb +63 -63
- data/lib/kitchen/shell_out.rb +93 -93
- data/lib/kitchen/ssh.rb +276 -276
- data/lib/kitchen/state_file.rb +120 -120
- data/lib/kitchen/suite.rb +51 -51
- data/lib/kitchen/thor_tasks.rb +66 -66
- data/lib/kitchen/transport.rb +54 -54
- data/lib/kitchen/transport/base.rb +176 -176
- data/lib/kitchen/transport/dummy.rb +79 -79
- data/lib/kitchen/transport/ssh.rb +364 -364
- data/lib/kitchen/transport/winrm.rb +486 -486
- data/lib/kitchen/util.rb +147 -147
- data/lib/kitchen/verifier.rb +55 -55
- data/lib/kitchen/verifier/base.rb +235 -235
- data/lib/kitchen/verifier/busser.rb +277 -277
- data/lib/kitchen/verifier/dummy.rb +79 -79
- data/lib/kitchen/verifier/shell.rb +101 -101
- data/lib/kitchen/version.rb +21 -21
- data/lib/vendor/hash_recursive_merge.rb +82 -82
- data/spec/kitchen/base64_stream_spec.rb +77 -77
- data/spec/kitchen/cli_spec.rb +56 -56
- data/spec/kitchen/collection_spec.rb +80 -80
- data/spec/kitchen/color_spec.rb +54 -54
- data/spec/kitchen/config_spec.rb +408 -408
- data/spec/kitchen/configurable_spec.rb +1095 -1095
- data/spec/kitchen/data_munger_spec.rb +2694 -2694
- data/spec/kitchen/diagnostic_spec.rb +129 -129
- data/spec/kitchen/driver/base_spec.rb +121 -121
- data/spec/kitchen/driver/dummy_spec.rb +199 -199
- data/spec/kitchen/driver/proxy_spec.rb +138 -138
- data/spec/kitchen/driver/ssh_base_spec.rb +1115 -1115
- data/spec/kitchen/driver_spec.rb +112 -112
- data/spec/kitchen/errors_spec.rb +309 -309
- data/spec/kitchen/instance_spec.rb +1419 -1419
- data/spec/kitchen/lazy_hash_spec.rb +117 -117
- data/spec/kitchen/loader/yaml_spec.rb +774 -774
- data/spec/kitchen/logger_spec.rb +429 -429
- data/spec/kitchen/logging_spec.rb +59 -59
- data/spec/kitchen/login_command_spec.rb +68 -68
- data/spec/kitchen/metadata_chopper_spec.rb +82 -82
- data/spec/kitchen/platform_spec.rb +89 -89
- data/spec/kitchen/provisioner/base_spec.rb +386 -386
- data/spec/kitchen/provisioner/chef_apply_spec.rb +136 -136
- data/spec/kitchen/provisioner/chef_base_spec.rb +1161 -1161
- data/spec/kitchen/provisioner/chef_solo_spec.rb +557 -557
- data/spec/kitchen/provisioner/chef_zero_spec.rb +1001 -1001
- data/spec/kitchen/provisioner/dummy_spec.rb +99 -99
- data/spec/kitchen/provisioner/shell_spec.rb +566 -566
- data/spec/kitchen/provisioner_spec.rb +107 -107
- data/spec/kitchen/shell_out_spec.rb +150 -150
- data/spec/kitchen/ssh_spec.rb +693 -693
- data/spec/kitchen/state_file_spec.rb +129 -129
- data/spec/kitchen/suite_spec.rb +62 -62
- data/spec/kitchen/transport/base_spec.rb +89 -89
- data/spec/kitchen/transport/ssh_spec.rb +1255 -1255
- data/spec/kitchen/transport/winrm_spec.rb +1143 -1143
- data/spec/kitchen/transport_spec.rb +112 -112
- data/spec/kitchen/util_spec.rb +165 -165
- data/spec/kitchen/verifier/base_spec.rb +362 -362
- data/spec/kitchen/verifier/busser_spec.rb +610 -610
- data/spec/kitchen/verifier/dummy_spec.rb +99 -99
- data/spec/kitchen/verifier/shell_spec.rb +160 -160
- data/spec/kitchen/verifier_spec.rb +120 -120
- data/spec/kitchen_spec.rb +114 -114
- data/spec/spec_helper.rb +85 -85
- data/spec/support/powershell_max_size_spec.rb +40 -40
- data/support/busser_install_command.ps1 +14 -14
- data/support/busser_install_command.sh +14 -14
- data/support/chef-client-zero.rb +77 -77
- data/support/chef_base_init_command.ps1 +18 -18
- data/support/chef_base_init_command.sh +2 -2
- data/support/chef_base_install_command.ps1 +85 -85
- data/support/chef_base_install_command.sh +229 -229
- data/support/chef_zero_prepare_command_legacy.ps1 +9 -9
- data/support/chef_zero_prepare_command_legacy.sh +10 -10
- data/support/download_helpers.sh +109 -109
- data/support/dummy-validation.pem +27 -27
- data/templates/driver/CHANGELOG.md.erb +3 -3
- data/templates/driver/Gemfile.erb +3 -3
- data/templates/driver/README.md.erb +64 -64
- data/templates/driver/Rakefile.erb +21 -21
- data/templates/driver/driver.rb.erb +23 -23
- data/templates/driver/gemspec.erb +29 -29
- data/templates/driver/gitignore.erb +17 -17
- data/templates/driver/license_apachev2.erb +15 -15
- data/templates/driver/license_lgplv3.erb +16 -16
- data/templates/driver/license_mit.erb +22 -22
- data/templates/driver/license_reserved.erb +5 -5
- data/templates/driver/tailor.erb +4 -4
- data/templates/driver/travis.yml.erb +11 -11
- data/templates/driver/version.rb.erb +12 -12
- data/templates/init/chefignore.erb +1 -1
- data/templates/init/kitchen.yml.erb +18 -18
- data/test-kitchen.gemspec +62 -62
- data/test/integration/default/default_spec.rb +3 -3
- data/testing_windows.md +37 -37
- 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
|