test-kitchen 1.23.3 → 1.23.4
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/lib/kitchen/version.rb +1 -1
- data/support/chef-client-zero.rb +1 -1
- metadata +5 -324
- data/.gitattributes +0 -3
- data/.github/ISSUE_TEMPLATE.md +0 -56
- data/.github/lock.yml +0 -1
- data/.gitignore +0 -38
- data/.gitmodules +0 -0
- data/.kitchen.appveyor.yml +0 -25
- data/.kitchen.dokken.yml +0 -31
- data/.kitchen.proxy.yml +0 -27
- data/.rubocop.yml +0 -5
- data/.travis.yml +0 -57
- data/.yardopts +0 -3
- data/Berksfile +0 -3
- data/CHANGELOG.md +0 -1510
- data/CONTRIBUTING.md +0 -14
- data/ECOSYSTEM.md +0 -93
- data/Gemfile +0 -40
- data/Gemfile.proxy_tests +0 -4
- data/Guardfile +0 -42
- data/MAINTAINERS.md +0 -29
- data/README.md +0 -138
- data/RELEASE_NOTES.md +0 -167
- data/Rakefile +0 -77
- data/appveyor.yml +0 -47
- data/docs/CONTRIBUTING.md +0 -8
- data/docs/LICENSE +0 -22
- data/docs/README.md +0 -78
- data/docs/archetypes/default.md +0 -6
- data/docs/config.toml +0 -36
- data/docs/content/docs/_index.md +0 -5
- data/docs/content/docs/drivers/_index.md +0 -27
- data/docs/content/docs/drivers/azurerm.md +0 -44
- data/docs/content/docs/drivers/vagrant.md +0 -39
- data/docs/content/docs/getting-started/00-introduction.md +0 -14
- data/docs/content/docs/getting-started/01-installing.md +0 -64
- data/docs/content/docs/getting-started/02-getting-help.md +0 -59
- data/docs/content/docs/getting-started/03-creating-cookbook.md +0 -46
- data/docs/content/docs/getting-started/04-kitchen-yml.md +0 -56
- data/docs/content/docs/getting-started/05-instances.md +0 -79
- data/docs/content/docs/getting-started/06-writing-recipe.md +0 -21
- data/docs/content/docs/getting-started/07-running-converge.md +0 -134
- data/docs/content/docs/getting-started/08-manually-verifying.md +0 -55
- data/docs/content/docs/getting-started/09-writing-test.md +0 -49
- data/docs/content/docs/getting-started/10-running-verify.md +0 -120
- data/docs/content/docs/getting-started/11-running-test.md +0 -168
- data/docs/content/docs/getting-started/12-adding-platform.md +0 -206
- data/docs/content/docs/getting-started/13-adding-feature.md +0 -30
- data/docs/content/docs/getting-started/14-adding-suite.md +0 -60
- data/docs/content/docs/getting-started/15-adding-test.md +0 -66
- data/docs/content/docs/getting-started/16-adding-recipe.md +0 -53
- data/docs/content/docs/getting-started/17-excluding-platforms.md +0 -101
- data/docs/content/docs/getting-started/18-next-steps.md +0 -23
- data/docs/content/docs/getting-started/_index.md +0 -5
- data/docs/content/docs/provisioners/_index.md +0 -36
- data/docs/content/docs/provisioners/chef.md +0 -69
- data/docs/content/docs/provisioners/shell.md +0 -31
- data/docs/content/docs/reference/_index.md +0 -5
- data/docs/content/docs/reference/configuration.md +0 -53
- data/docs/content/docs/reference/examples.md +0 -97
- data/docs/content/docs/reference/faq.md +0 -58
- data/docs/content/docs/reference/fixtures.md +0 -32
- data/docs/content/docs/reference/glossary.md +0 -34
- data/docs/content/docs/reference/lifecycle-hooks.md +0 -68
- data/docs/content/docs/reference/reboots.md +0 -24
- data/docs/content/docs/verifiers/_index.md +0 -14
- data/docs/content/docs/verifiers/inspec.md +0 -44
- data/docs/content/docs/verifiers/serverspec.md +0 -20
- data/docs/static/images/chef-logo.png +0 -0
- data/docs/static/images/chef-logo.svg +0 -1
- data/docs/static/images/github-banner.png +0 -0
- data/docs/static/images/github-banner.svg +0 -71
- data/docs/static/images/kitchen-logo.png +0 -0
- data/docs/static/images/logo-block.svg +0 -222
- data/docs/static/images/logo.png +0 -0
- data/docs/static/images/logos-group.png +0 -0
- data/docs/static/images/terminal-1.png +0 -0
- data/docs/static/images/terminal-1.svg +0 -589
- data/docs/static/images/terminal-2.png +0 -0
- data/docs/static/images/terminal-2.svg +0 -235
- data/docs/static/images/terminal-3.png +0 -0
- data/docs/static/images/terminal-3.svg +0 -439
- data/docs/static/index.html +0 -59
- data/docs/static/javascripts/all.js +0 -348
- data/docs/static/javascripts/vendor/foundation.min.js +0 -4
- data/docs/static/javascripts/vendor/jquery.min.js +0 -5
- data/docs/static/javascripts/vendor/what-input.js +0 -336
- data/docs/static/stylesheets/site.css +0 -4667
- data/docs/themes/kitchen/layouts/_default/baseof.html +0 -53
- data/docs/themes/kitchen/layouts/_default/list.html +0 -4
- data/docs/themes/kitchen/layouts/_default/redirect.html +0 -10
- data/docs/themes/kitchen/layouts/_default/single.html +0 -6
- data/docs/themes/kitchen/layouts/partials/core/head.html +0 -6
- data/docs/themes/kitchen/layouts/partials/kitchen/footer.html +0 -18
- data/docs/themes/kitchen/layouts/partials/kitchen/head.html +0 -4
- data/docs/themes/kitchen/layouts/partials/kitchen/header.html +0 -26
- data/docs/themes/kitchen/layouts/partials/search-docs.html +0 -3
- data/docs/themes/kitchen/layouts/partials/sidebar.html +0 -33
- data/docs/themes/kitchen/layouts/shortcodes/button.html +0 -1
- data/docs/themes/kitchen/layouts/shortcodes/codeblock.html +0 -8
- data/docs/themes/kitchen/layouts/shortcodes/cta.html +0 -5
- data/docs/themes/kitchen/layouts/shortcodes/danger.html +0 -1
- data/docs/themes/kitchen/layouts/shortcodes/example_fqdn.html +0 -1
- data/docs/themes/kitchen/layouts/shortcodes/info.html +0 -1
- data/docs/themes/kitchen/layouts/shortcodes/ol-styled.html +0 -3
- data/docs/themes/kitchen/layouts/shortcodes/success.html +0 -1
- data/docs/themes/kitchen/layouts/shortcodes/tip.html +0 -1
- data/docs/themes/kitchen/layouts/shortcodes/warning.html +0 -1
- data/docs/themes/kitchen/static/css/kitchen.css +0 -10
- data/docs/themes/kitchen/static/css/kitchen.css.map +0 -7
- data/docs/themes/kitchen/static/fonts/Muli-Bold.ttf +0 -0
- data/docs/themes/kitchen/static/fonts/Muli-Regular.ttf +0 -0
- data/docs/themes/kitchen/static/fonts/Muli-SemiBold.ttf +0 -0
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-brands-400.eot +0 -0
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-brands-400.svg +0 -1104
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-brands-400.ttf +0 -0
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-brands-400.woff +0 -0
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-brands-400.woff2 +0 -0
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-regular-400.eot +0 -0
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-regular-400.svg +0 -372
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-regular-400.ttf +0 -0
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-regular-400.woff +0 -0
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-regular-400.woff2 +0 -0
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-solid-900.eot +0 -0
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-solid-900.svg +0 -1896
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-solid-900.ttf +0 -0
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-solid-900.woff +0 -0
- data/docs/themes/kitchen/static/fonts/fontawesome/fa-solid-900.woff2 +0 -0
- data/docs/themes/kitchen/static/images/chef-logo-light.svg +0 -36
- data/docs/themes/kitchen/static/images/chef-logo-white.svg +0 -38
- data/docs/themes/kitchen/static/images/chef-logo.svg +0 -37
- data/docs/themes/kitchen/static/images/favicon.ico +0 -0
- data/docs/themes/kitchen/static/js/scripts-all.js +0 -7
- data/docs/themes/kitchen/static/js/source/chef-hugo.js +0 -116
- data/docs/themes/kitchen/static/js/source/omnitruck.js +0 -82
- data/docs/themes/kitchen/static/js/source/segment.js +0 -52
- data/docs/themes/kitchen/static/sass/_buttons.scss +0 -161
- data/docs/themes/kitchen/static/sass/_core.scss +0 -24
- data/docs/themes/kitchen/static/sass/_forms.scss +0 -14
- data/docs/themes/kitchen/static/sass/_mixins.scss +0 -133
- data/docs/themes/kitchen/static/sass/_typography.scss +0 -34
- data/docs/themes/kitchen/static/sass/_variables.scss +0 -82
- data/docs/themes/kitchen/static/sass/kitchen.scss +0 -7
- data/docs/themes/kitchen/static/sass/kitchen/_footer.scss +0 -50
- data/docs/themes/kitchen/static/sass/kitchen/_header.scss +0 -187
- data/docs/themes/kitchen/static/sass/kitchen/_homepage.scss +0 -27
- data/docs/themes/kitchen/static/sass/kitchen/_utility-bar.scss +0 -173
- data/docs/themes/kitchen/static/sass/partials/_alerts.scss +0 -32
- data/docs/themes/kitchen/static/sass/partials/_bg.scss +0 -19
- data/docs/themes/kitchen/static/sass/partials/_blurbs.scss +0 -25
- data/docs/themes/kitchen/static/sass/partials/_callout.scss +0 -15
- data/docs/themes/kitchen/static/sass/partials/_cards.scss +0 -54
- data/docs/themes/kitchen/static/sass/partials/_dropdown.scss +0 -77
- data/docs/themes/kitchen/static/sass/partials/_grid.scss +0 -87
- data/docs/themes/kitchen/static/sass/partials/_padding.scss +0 -73
- data/docs/themes/kitchen/static/sass/partials/_sidebar.scss +0 -71
- data/docs/themes/kitchen/static/sass/partials/_tabs.scss +0 -125
- data/docs/themes/kitchen/static/sass/typography/_chroma.scss +0 -366
- data/docs/themes/kitchen/static/sass/typography/_code.scss +0 -72
- data/docs/themes/kitchen/static/sass/typography/_headers.scss +0 -90
- data/docs/themes/kitchen/static/sass/typography/_links.scss +0 -127
- data/docs/themes/kitchen/static/sass/typography/_lists.scss +0 -155
- data/docs/themes/kitchen/static/sass/typography/_prose.scss +0 -29
- data/docs/themes/kitchen/static/sass/typography/_text.scss +0 -221
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/_animated.scss +0 -20
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/_bordered-pulled.scss +0 -20
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/_core.scss +0 -16
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/_fixed-width.scss +0 -6
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/_icons.scss +0 -992
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/_larger.scss +0 -23
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/_list.scss +0 -18
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/_mixins.scss +0 -57
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/_rotated-flipped.scss +0 -23
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/_screen-reader.scss +0 -5
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/_stacked.scss +0 -31
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/_variables.scss +0 -1005
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/fa-brands.scss +0 -21
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/fa-regular.scss +0 -22
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/fa-solid.scss +0 -23
- data/docs/themes/kitchen/static/sass/vendor/fontawesome/fontawesome.scss +0 -16
- data/docs/themes/kitchen/theme.toml +0 -8
- data/features/kitchen_action_commands.feature +0 -164
- data/features/kitchen_command.feature +0 -16
- data/features/kitchen_console_command.feature +0 -35
- data/features/kitchen_defaults.feature +0 -38
- data/features/kitchen_diagnose_command.feature +0 -96
- data/features/kitchen_help_command.feature +0 -16
- data/features/kitchen_init_command.feature +0 -254
- data/features/kitchen_list_command.feature +0 -140
- data/features/kitchen_login_command.feature +0 -62
- data/features/kitchen_sink_command.feature +0 -30
- data/features/kitchen_test_command.feature +0 -88
- data/features/step_definitions/gem_steps.rb +0 -24
- data/features/step_definitions/git_steps.rb +0 -5
- data/features/step_definitions/output_steps.rb +0 -5
- data/features/support/env.rb +0 -74
- data/spec/kitchen/base64_stream_spec.rb +0 -74
- data/spec/kitchen/cli_spec.rb +0 -54
- data/spec/kitchen/collection_spec.rb +0 -76
- data/spec/kitchen/color_spec.rb +0 -51
- data/spec/kitchen/config_spec.rb +0 -434
- data/spec/kitchen/configurable_spec.rb +0 -1113
- data/spec/kitchen/data_munger_spec.rb +0 -2800
- data/spec/kitchen/diagnostic_spec.rb +0 -128
- data/spec/kitchen/driver/base_spec.rb +0 -132
- data/spec/kitchen/driver/dummy_spec.rb +0 -193
- data/spec/kitchen/driver/exec_spec.rb +0 -75
- data/spec/kitchen/driver/proxy_spec.rb +0 -127
- data/spec/kitchen/driver/ssh_base_spec.rb +0 -1136
- data/spec/kitchen/driver_spec.rb +0 -106
- data/spec/kitchen/errors_spec.rb +0 -317
- data/spec/kitchen/instance_spec.rb +0 -1372
- data/spec/kitchen/lazy_hash_spec.rb +0 -113
- data/spec/kitchen/lifecycle_hooks_spec.rb +0 -171
- data/spec/kitchen/loader/yaml_spec.rb +0 -787
- data/spec/kitchen/logger_spec.rb +0 -425
- data/spec/kitchen/logging_spec.rb +0 -56
- data/spec/kitchen/login_command_spec.rb +0 -67
- data/spec/kitchen/metadata_chopper_spec.rb +0 -79
- data/spec/kitchen/platform_spec.rb +0 -88
- data/spec/kitchen/provisioner/base_spec.rb +0 -393
- data/spec/kitchen/provisioner/chef/policyfile_spec.rb +0 -140
- data/spec/kitchen/provisioner/chef_apply_spec.rb +0 -131
- data/spec/kitchen/provisioner/chef_base_spec.rb +0 -1565
- data/spec/kitchen/provisioner/chef_solo_spec.rb +0 -602
- data/spec/kitchen/provisioner/chef_zero_spec.rb +0 -1013
- data/spec/kitchen/provisioner/dummy_spec.rb +0 -96
- data/spec/kitchen/provisioner/shell_spec.rb +0 -623
- data/spec/kitchen/provisioner_spec.rb +0 -101
- data/spec/kitchen/shell_out_spec.rb +0 -146
- data/spec/kitchen/ssh_spec.rb +0 -584
- data/spec/kitchen/state_file_spec.rb +0 -122
- data/spec/kitchen/suite_spec.rb +0 -61
- data/spec/kitchen/transport/base_spec.rb +0 -140
- data/spec/kitchen/transport/exec_spec.rb +0 -79
- data/spec/kitchen/transport/ssh_spec.rb +0 -1317
- data/spec/kitchen/transport/winrm_spec.rb +0 -1320
- data/spec/kitchen/transport_spec.rb +0 -106
- data/spec/kitchen/util_spec.rb +0 -250
- data/spec/kitchen/verifier/base_spec.rb +0 -346
- data/spec/kitchen/verifier/busser_spec.rb +0 -580
- data/spec/kitchen/verifier/dummy_spec.rb +0 -96
- data/spec/kitchen/verifier/shell_spec.rb +0 -157
- data/spec/kitchen/verifier_spec.rb +0 -114
- data/spec/kitchen_spec.rb +0 -112
- data/spec/spec_helper.rb +0 -110
- data/spec/support/powershell_max_size_spec.rb +0 -39
- data/test-kitchen.gemspec +0 -49
- data/test/cookbooks/test_cookbook/metadata.rb +0 -6
- data/test/cookbooks/test_cookbook/recipes/default.rb +0 -1
- data/test/integration/default/default_spec.rb +0 -3
- data/testing_windows.md +0 -38
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
#
|
|
3
|
-
# Author:: Matt Wrock (<matt@mattwrock.com>)
|
|
4
|
-
#
|
|
5
|
-
# Copyright (C) 2014, Matt Wrock
|
|
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/configurable"
|
|
22
|
-
require "kitchen/errors"
|
|
23
|
-
require "kitchen/logging"
|
|
24
|
-
require "kitchen/transport"
|
|
25
|
-
require "kitchen/transport/base"
|
|
26
|
-
|
|
27
|
-
module Kitchen
|
|
28
|
-
module Transport
|
|
29
|
-
class Coolbeans < Kitchen::Transport::Base
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
class ItDepends < Kitchen::Transport::Base
|
|
33
|
-
attr_reader :verify_call_count
|
|
34
|
-
|
|
35
|
-
def initialize(config = {})
|
|
36
|
-
@verify_call_count = 0
|
|
37
|
-
super
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def verify_dependencies
|
|
41
|
-
@verify_call_count += 1
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
class UnstableDepends < Kitchen::Transport::Base
|
|
46
|
-
def verify_dependencies
|
|
47
|
-
raise UserError, "Oh noes, you don't have software!"
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
describe Kitchen::Transport do
|
|
54
|
-
describe ".for_plugin" do
|
|
55
|
-
before do
|
|
56
|
-
Kitchen::Transport.stubs(:require).returns(true)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "returns a transport object of the correct class" do
|
|
60
|
-
transport = Kitchen::Transport.for_plugin("coolbeans", {})
|
|
61
|
-
|
|
62
|
-
transport.must_be_kind_of Kitchen::Transport::Coolbeans
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "returns a transport initialized with its config" do
|
|
66
|
-
transport = Kitchen::Transport.for_plugin("coolbeans", foo: "bar")
|
|
67
|
-
|
|
68
|
-
transport[:foo].must_equal "bar"
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it "calls #verify_dependencies on the transport object" do
|
|
72
|
-
transport = Kitchen::Transport.for_plugin("it_depends", {})
|
|
73
|
-
|
|
74
|
-
transport.verify_call_count.must_equal 1
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it "calls #verify_dependencies once per transport require" do
|
|
78
|
-
Kitchen::Transport.stubs(:require).returns(true, false)
|
|
79
|
-
transport1 = Kitchen::Transport.for_plugin("it_depends", {})
|
|
80
|
-
transport1.verify_call_count.must_equal 1
|
|
81
|
-
transport2 = Kitchen::Transport.for_plugin("it_depends", {})
|
|
82
|
-
|
|
83
|
-
transport2.verify_call_count.must_equal 0
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
it "raises ClientError if the transport could not be required" do
|
|
87
|
-
Kitchen::Transport.stubs(:require).raises(LoadError)
|
|
88
|
-
|
|
89
|
-
proc { Kitchen::Transport.for_plugin("coolbeans", {}) }
|
|
90
|
-
.must_raise Kitchen::ClientError
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it "raises ClientError if the transport's class constant was not found" do
|
|
94
|
-
# pretend require worked
|
|
95
|
-
Kitchen::Transport.stubs(:require).returns(true)
|
|
96
|
-
|
|
97
|
-
proc { Kitchen::Transport.for_plugin("nope", {}) }
|
|
98
|
-
.must_raise Kitchen::ClientError
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
it "raises UserError if #verify_dependencies failes" do
|
|
102
|
-
proc { Kitchen::Transport.for_plugin("unstable_depends", {}) }
|
|
103
|
-
.must_raise Kitchen::UserError
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
data/spec/kitchen/util_spec.rb
DELETED
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
#
|
|
3
|
-
# Author:: Fletcher Nichol (<fnichol@nichol.ca>)
|
|
4
|
-
#
|
|
5
|
-
# Copyright (C) 2013, 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 "logger"
|
|
22
|
-
|
|
23
|
-
require "kitchen/util"
|
|
24
|
-
|
|
25
|
-
describe Kitchen::Util do
|
|
26
|
-
describe ".to_logger_level" do
|
|
27
|
-
it "returns nil for invalid symbols" do
|
|
28
|
-
Kitchen::Util.to_logger_level(:nope).must_be_nil
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
%w{debug info warn error fatal}.each do |level|
|
|
32
|
-
it "returns Logger::#{level.upcase} for :#{level} input" do
|
|
33
|
-
Kitchen::Util.to_logger_level(level.to_sym)
|
|
34
|
-
.must_equal Logger.const_get(level.upcase)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
describe ".from_logger_level" do
|
|
40
|
-
it "returns :fatal for invalid symbols" do
|
|
41
|
-
Kitchen::Util.from_logger_level("nope").must_equal :fatal
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
%w{debug info warn error fatal}.each do |level|
|
|
45
|
-
it "returns :#{level} for Logger::#{level.upcase} input" do
|
|
46
|
-
Kitchen::Util.from_logger_level(Logger.const_get(level.upcase))
|
|
47
|
-
.must_equal(level.to_sym)
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
describe ".symbolized_hash" do
|
|
53
|
-
it "returns itself if not a hash" do
|
|
54
|
-
obj = Object.new
|
|
55
|
-
Kitchen::Util.symbolized_hash(obj).must_equal obj
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "preserves a symbolized hash" do
|
|
59
|
-
hash = { one: [{ two: "three" }] }
|
|
60
|
-
Kitchen::Util.symbolized_hash(hash).must_equal hash
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
it "converts string keys into symbols" do
|
|
64
|
-
Kitchen::Util
|
|
65
|
-
.symbolized_hash("one" => [{ "two" => :three, :four => "five" }])
|
|
66
|
-
.must_equal(one: [{ two: :three, four: "five" }])
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
describe ".stringified_hash" do
|
|
71
|
-
it "returns itself if not a hash" do
|
|
72
|
-
obj = Object.new
|
|
73
|
-
Kitchen::Util.stringified_hash(obj).must_equal obj
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "preserves a stringified hash" do
|
|
77
|
-
hash = { "one" => [{ "two" => "three" }] }
|
|
78
|
-
Kitchen::Util.stringified_hash(hash).must_equal hash
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "converts symbol keys into strings" do
|
|
82
|
-
Kitchen::Util
|
|
83
|
-
.stringified_hash(one: [{ :two => :three, "four" => "five" }])
|
|
84
|
-
.must_equal("one" => [{ "two" => :three, "four" => "five" }])
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
describe ".duration" do
|
|
89
|
-
it "turns nil into a zero" do
|
|
90
|
-
Kitchen::Util.duration(nil).must_equal "(0m0.00s)"
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it "formats seconds to 2 digits" do
|
|
94
|
-
Kitchen::Util.duration(60).must_equal "(1m0.00s)"
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it "formats large values into minutes and seconds" do
|
|
98
|
-
Kitchen::Util.duration(48_033).must_equal "(800m33.00s)"
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
describe ".wrap_unix_command" do
|
|
103
|
-
it "returns the wrapped command" do
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it "returns a false if command is nil" do
|
|
107
|
-
Kitchen::Util.wrap_command(nil).must_equal("sh -c '\nfalse\n'")
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
it "returns a true if command string is empty" do
|
|
111
|
-
Kitchen::Util.wrap_command("yoyo").must_equal("sh -c '\nyoyo\n'")
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
it "handles a command string with a trailing newline" do
|
|
115
|
-
Kitchen::Util.wrap_command("yep\n").must_equal("sh -c '\nyep\n'")
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
describe ".outdent!" do
|
|
120
|
-
it "modifies the argument string in place, destructively" do
|
|
121
|
-
string = "yep"
|
|
122
|
-
|
|
123
|
-
Kitchen::Util.outdent!(string).object_id.must_equal string.object_id
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it "returns the same string if no leading whitespace exists" do
|
|
127
|
-
string = "one\ntwo\nthree"
|
|
128
|
-
|
|
129
|
-
Kitchen::Util.outdent!(string).must_equal "one\ntwo\nthree"
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
it "strips same amount of leading whitespace as found on first line" do
|
|
133
|
-
string = " one\n two\n three\nfour"
|
|
134
|
-
|
|
135
|
-
Kitchen::Util.outdent!(string).must_equal "one\n two\n three\nfour"
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
describe ".shell_helpers" do
|
|
140
|
-
%w{
|
|
141
|
-
exists do_wget do_curl do_fetch do_perl do_python do_download
|
|
142
|
-
}.each do |func|
|
|
143
|
-
it "contains a #{func} shell function" do
|
|
144
|
-
Kitchen::Util.shell_helpers.must_match "#{func}() {"
|
|
145
|
-
end
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
it "does not contain bare single quotes" do
|
|
149
|
-
Kitchen::Util.shell_helpers.wont_match "'"
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
def regexify(str)
|
|
153
|
-
Regexp.new("^ +" + Regexp.escape(str) + "$")
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
describe ".list_directory" do
|
|
158
|
-
before do
|
|
159
|
-
@root = Dir.mktmpdir
|
|
160
|
-
FileUtils.touch(File.join(@root, "foo"))
|
|
161
|
-
Dir.mkdir(File.join(@root, "bar"))
|
|
162
|
-
FileUtils.touch(File.join(@root, ".foo"))
|
|
163
|
-
FileUtils.touch(File.join(@root, "bar", "baz"))
|
|
164
|
-
FileUtils.touch(File.join(@root, "bar", ".baz"))
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
after do
|
|
168
|
-
FileUtils.remove_entry(@root)
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
it "returns [] when the directory does not exist" do
|
|
172
|
-
Kitchen::Util.list_directory(File.join(@root, "notexist")).must_equal []
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
it "lists one level with no dot files by default" do
|
|
176
|
-
listed = Kitchen::Util.list_directory(@root)
|
|
177
|
-
expected = %w{
|
|
178
|
-
foo
|
|
179
|
-
bar
|
|
180
|
-
}.map { |f| File.join(@root, f) }
|
|
181
|
-
(listed - expected).must_equal []
|
|
182
|
-
(expected - listed).must_equal []
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
it "matches dot files only when include_dot" do
|
|
186
|
-
listed = Kitchen::Util.list_directory(@root, include_dot: true)
|
|
187
|
-
expected = [
|
|
188
|
-
"foo",
|
|
189
|
-
".foo",
|
|
190
|
-
"bar",
|
|
191
|
-
].map { |f| File.join(@root, f) }
|
|
192
|
-
(listed - expected).must_equal []
|
|
193
|
-
(expected - listed).must_equal []
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
it "recusivly lists only when recurse" do
|
|
197
|
-
listed = Kitchen::Util.list_directory(@root, recurse: true)
|
|
198
|
-
expected = [
|
|
199
|
-
"foo",
|
|
200
|
-
"bar",
|
|
201
|
-
"bar/baz",
|
|
202
|
-
].map { |f| File.join(@root, f) }
|
|
203
|
-
(listed - expected).must_equal []
|
|
204
|
-
(expected - listed).must_equal []
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
it "recusivly lists and provides dots when recurse and include_dot" do
|
|
208
|
-
listed = Kitchen::Util.list_directory(@root, recurse: true, include_dot: true)
|
|
209
|
-
expected = [
|
|
210
|
-
"foo",
|
|
211
|
-
".foo",
|
|
212
|
-
"bar",
|
|
213
|
-
"bar/baz",
|
|
214
|
-
"bar/.",
|
|
215
|
-
"bar/.baz",
|
|
216
|
-
].map { |f| File.join(@root, f) }
|
|
217
|
-
(listed - expected).must_equal []
|
|
218
|
-
(expected - listed).must_equal []
|
|
219
|
-
end
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
describe ".safe_glob" do
|
|
223
|
-
before do
|
|
224
|
-
@root = Dir.mktmpdir
|
|
225
|
-
FileUtils.touch(File.join(@root, "foo"))
|
|
226
|
-
Dir.mkdir(File.join(@root, "bar"))
|
|
227
|
-
FileUtils.touch(File.join(@root, "foo"))
|
|
228
|
-
FileUtils.touch(File.join(@root, "foo.rb"))
|
|
229
|
-
FileUtils.touch(File.join(@root, "bar", "baz.rb"))
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
after do
|
|
233
|
-
FileUtils.remove_entry(@root)
|
|
234
|
-
end
|
|
235
|
-
|
|
236
|
-
it "globs without parameters" do
|
|
237
|
-
Kitchen::Util.safe_glob(@root, "**/*").must_equal Dir.glob(File.join(@root, "**/*"))
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
it "globs with parameters" do
|
|
241
|
-
Kitchen::Util.safe_glob(@root, "**/*", File::FNM_DOTMATCH).must_equal(
|
|
242
|
-
Dir.glob(File.join(@root, "**/*"), File::FNM_DOTMATCH))
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
it "globs a folder that does not exist" do
|
|
246
|
-
dne_dir = File.join(@root, "notexist")
|
|
247
|
-
Kitchen::Util.safe_glob(dne_dir, "**/*").must_equal Dir.glob(File.join(dne_dir, "**/*"))
|
|
248
|
-
end
|
|
249
|
-
end
|
|
250
|
-
end
|
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
#
|
|
3
|
-
# Author:: Fletcher Nichol (<fnichol@nichol.ca>)
|
|
4
|
-
#
|
|
5
|
-
# Copyright (C) 2015, 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
|
-
require_relative "../ssh_spec"
|
|
21
|
-
|
|
22
|
-
require "logger"
|
|
23
|
-
require "stringio"
|
|
24
|
-
|
|
25
|
-
require "kitchen/verifier/base"
|
|
26
|
-
require "kitchen/transport/base"
|
|
27
|
-
|
|
28
|
-
module Kitchen
|
|
29
|
-
module Verifier
|
|
30
|
-
class TestingDummy < Kitchen::Verifier::Base
|
|
31
|
-
attr_reader :called_create_sandbox, :called_cleanup_sandbox
|
|
32
|
-
|
|
33
|
-
def install_command
|
|
34
|
-
"install"
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def init_command
|
|
38
|
-
"init"
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def prepare_command
|
|
42
|
-
"prepare"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def run_command
|
|
46
|
-
"run"
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def create_sandbox
|
|
50
|
-
@called_create_sandbox = true
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def cleanup_sandbox
|
|
54
|
-
@called_cleanup_sandbox = true
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def sandbox_path
|
|
58
|
-
"/tmp/sandbox"
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
describe Kitchen::Verifier::Base do
|
|
65
|
-
let(:logged_output) { StringIO.new }
|
|
66
|
-
let(:logger) { Logger.new(logged_output) }
|
|
67
|
-
let(:platform) { stub(os_type: nil, shell_type: nil) }
|
|
68
|
-
let(:suite) { stub(name: "germany") }
|
|
69
|
-
let(:config) { Hash.new }
|
|
70
|
-
|
|
71
|
-
let(:transport) do
|
|
72
|
-
t = mock("transport")
|
|
73
|
-
t.responds_like_instance_of(Kitchen::Transport::Base)
|
|
74
|
-
t
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
let(:instance) do
|
|
78
|
-
stub(
|
|
79
|
-
name: "coolbeans",
|
|
80
|
-
to_str: "instance",
|
|
81
|
-
logger: logger,
|
|
82
|
-
platform: platform,
|
|
83
|
-
suite: suite,
|
|
84
|
-
transport: transport
|
|
85
|
-
)
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
let(:verifier) do
|
|
89
|
-
Kitchen::Verifier::Base.new(config).finalize_config!(instance)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
describe "configuration" do
|
|
93
|
-
describe "for unix operating systems" do
|
|
94
|
-
before { platform.stubs(:os_type).returns("unix") }
|
|
95
|
-
|
|
96
|
-
it ":sudo defaults to true" do
|
|
97
|
-
verifier[:sudo].must_equal true
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
it ":sudo_command defaults to sudo -E" do
|
|
101
|
-
verifier[:sudo_command].must_equal "sudo -E"
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
it ":root_path defaults to '/tmp/verifier'" do
|
|
105
|
-
verifier[:root_path].must_equal "/tmp/verifier"
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
describe "for windows operating systems" do
|
|
110
|
-
before { platform.stubs(:os_type).returns("windows") }
|
|
111
|
-
|
|
112
|
-
it ":sudo defaults to nil" do
|
|
113
|
-
verifier[:sudo].must_be_nil
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
it ":sudo_command defaults to nil" do
|
|
117
|
-
verifier[:sudo_command].must_be_nil
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
it ':root_path defaults to $env:TEMP\\verifier' do
|
|
121
|
-
verifier[:root_path].must_equal '$env:TEMP\\verifier'
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
it ":suite_name defaults to the passed in suite name" do
|
|
126
|
-
verifier[:suite_name].must_equal "germany"
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
it ":http_proxy defaults to nil" do
|
|
130
|
-
verifier[:http_proxy].must_be_nil
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
it ":http_proxys defaults to nil" do
|
|
134
|
-
verifier[:https_proxy].must_be_nil
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
it ":ftp_proxy defaults to nil" do
|
|
138
|
-
verifier[:ftp_proxy].must_be_nil
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
describe "#call" do
|
|
143
|
-
let(:state) { Hash.new }
|
|
144
|
-
let(:cmd) { verifier.call(state) }
|
|
145
|
-
|
|
146
|
-
let(:connection) do
|
|
147
|
-
c = mock("transport_connection")
|
|
148
|
-
c.responds_like_instance_of(Kitchen::Transport::Base::Connection)
|
|
149
|
-
c
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
let(:verifier) do
|
|
153
|
-
Kitchen::Verifier::TestingDummy.new(config).finalize_config!(instance)
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
before do
|
|
157
|
-
FakeFS.activate!
|
|
158
|
-
FileUtils.mkdir_p(File.join(verifier.sandbox_path, "stuff"))
|
|
159
|
-
transport.stubs(:connection).yields(connection)
|
|
160
|
-
connection.stubs(:execute)
|
|
161
|
-
connection.stubs(:upload)
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
after do
|
|
165
|
-
FakeFS.deactivate!
|
|
166
|
-
FakeFS::FileSystem.clear
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
it "creates the sandbox" do
|
|
170
|
-
verifier.expects(:create_sandbox)
|
|
171
|
-
|
|
172
|
-
cmd
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
it "ensures that the sandbox is cleanup up" do
|
|
176
|
-
transport.stubs(:connection).raises
|
|
177
|
-
verifier.expects(:cleanup_sandbox)
|
|
178
|
-
|
|
179
|
-
begin
|
|
180
|
-
cmd
|
|
181
|
-
rescue # rubocop:disable Lint/HandleExceptions
|
|
182
|
-
end
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
it "yields a connection given the state" do
|
|
186
|
-
state[:a] = "b"
|
|
187
|
-
transport.expects(:connection).with(state).yields(connection)
|
|
188
|
-
|
|
189
|
-
cmd
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
it "invokes the verifier commands over the transport" do
|
|
193
|
-
order = sequence("order")
|
|
194
|
-
connection.expects(:execute).with("install").in_sequence(order)
|
|
195
|
-
connection.expects(:execute).with("init").in_sequence(order)
|
|
196
|
-
connection.expects(:execute).with("prepare").in_sequence(order)
|
|
197
|
-
connection.expects(:execute).with("run").in_sequence(order)
|
|
198
|
-
|
|
199
|
-
cmd
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
it "logs to info" do
|
|
203
|
-
cmd
|
|
204
|
-
|
|
205
|
-
logged_output.string
|
|
206
|
-
.must_match(/INFO -- : Transferring files to instance$/)
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
it "uploads sandbox files" do
|
|
210
|
-
connection.expects(:upload).with(["/tmp/sandbox/stuff"], "/tmp/verifier")
|
|
211
|
-
|
|
212
|
-
cmd
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
it "logs to debug" do
|
|
216
|
-
cmd
|
|
217
|
-
|
|
218
|
-
logged_output.string.must_match(/DEBUG -- : Transfer complete$/)
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
it "raises an ActionFailed on transfer when TransportFailed is raised" do
|
|
222
|
-
connection.stubs(:upload)
|
|
223
|
-
.raises(Kitchen::Transport::TransportFailed.new("dang"))
|
|
224
|
-
|
|
225
|
-
proc { cmd }.must_raise Kitchen::ActionFailed
|
|
226
|
-
end
|
|
227
|
-
|
|
228
|
-
it "raises an ActionFailed on execute when TransportFailed is raised" do
|
|
229
|
-
connection.stubs(:execute)
|
|
230
|
-
.raises(Kitchen::Transport::TransportFailed.new("dang"))
|
|
231
|
-
|
|
232
|
-
proc { cmd }.must_raise Kitchen::ActionFailed
|
|
233
|
-
end
|
|
234
|
-
end
|
|
235
|
-
|
|
236
|
-
[:init_command, :install_command, :prepare_command, :run_command].each do |cmd|
|
|
237
|
-
it "has a #{cmd} method" do
|
|
238
|
-
verifier.public_send(cmd).must_be_nil
|
|
239
|
-
end
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
describe "sandbox" do
|
|
243
|
-
after do
|
|
244
|
-
begin
|
|
245
|
-
verifier.cleanup_sandbox
|
|
246
|
-
rescue # rubocop:disable Lint/HandleExceptions
|
|
247
|
-
end
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
it "raises ClientError if #sandbox_path is called before #create_sandbox" do
|
|
251
|
-
proc { verifier.sandbox_path }.must_raise Kitchen::ClientError
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
it "#create_sandbox creates a temporary directory" do
|
|
255
|
-
verifier.create_sandbox
|
|
256
|
-
|
|
257
|
-
File.directory?(verifier.sandbox_path).must_equal true
|
|
258
|
-
format("%o", File.stat(verifier.sandbox_path).mode)[1, 4]
|
|
259
|
-
.must_equal "0755"
|
|
260
|
-
end
|
|
261
|
-
|
|
262
|
-
it "#create_sandbox logs an info message" do
|
|
263
|
-
verifier.create_sandbox
|
|
264
|
-
|
|
265
|
-
logged_output.string.must_match info_line("Preparing files for transfer")
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
it "#create_sandbox logs a debug message" do
|
|
269
|
-
verifier.create_sandbox
|
|
270
|
-
|
|
271
|
-
logged_output.string
|
|
272
|
-
.must_match debug_line_starting_with("Creating local sandbox in ")
|
|
273
|
-
end
|
|
274
|
-
|
|
275
|
-
it "#cleanup_sandbox deletes the sandbox directory" do
|
|
276
|
-
verifier.create_sandbox
|
|
277
|
-
verifier.cleanup_sandbox
|
|
278
|
-
|
|
279
|
-
File.directory?(verifier.sandbox_path).must_equal false
|
|
280
|
-
end
|
|
281
|
-
|
|
282
|
-
it "#cleanup_sandbox logs a debug message" do
|
|
283
|
-
verifier.create_sandbox
|
|
284
|
-
verifier.cleanup_sandbox
|
|
285
|
-
|
|
286
|
-
logged_output.string
|
|
287
|
-
.must_match debug_line_starting_with("Cleaning up local sandbox in ")
|
|
288
|
-
end
|
|
289
|
-
|
|
290
|
-
def info_line(msg)
|
|
291
|
-
/^I, .* : #{Regexp.escape(msg)}$/
|
|
292
|
-
end
|
|
293
|
-
|
|
294
|
-
def debug_line_starting_with(msg)
|
|
295
|
-
/^D, .* : #{Regexp.escape(msg)}/
|
|
296
|
-
end
|
|
297
|
-
end
|
|
298
|
-
|
|
299
|
-
describe "#sudo" do
|
|
300
|
-
describe "with :sudo set" do
|
|
301
|
-
before { config[:sudo] = true }
|
|
302
|
-
|
|
303
|
-
it "prepends sudo command" do
|
|
304
|
-
verifier.send(:sudo, "wakka").must_equal("sudo -E wakka")
|
|
305
|
-
end
|
|
306
|
-
|
|
307
|
-
it "customizes sudo when :sudo_command is set" do
|
|
308
|
-
config[:sudo_command] = "blueto -Ohai"
|
|
309
|
-
|
|
310
|
-
verifier.send(:sudo, "wakka").must_equal("blueto -Ohai wakka")
|
|
311
|
-
end
|
|
312
|
-
end
|
|
313
|
-
|
|
314
|
-
describe "with :sudo falsey" do
|
|
315
|
-
before { config[:sudo] = false }
|
|
316
|
-
|
|
317
|
-
it "does not include sudo command" do
|
|
318
|
-
verifier.send(:sudo, "wakka").must_equal("wakka")
|
|
319
|
-
end
|
|
320
|
-
|
|
321
|
-
it "does not include sudo command, even when :sudo_command is set" do
|
|
322
|
-
config[:sudo_command] = "blueto -Ohai"
|
|
323
|
-
|
|
324
|
-
verifier.send(:sudo, "wakka").must_equal("wakka")
|
|
325
|
-
end
|
|
326
|
-
end
|
|
327
|
-
end
|
|
328
|
-
|
|
329
|
-
describe "#prefix_command" do
|
|
330
|
-
describe "with :command_prefix set" do
|
|
331
|
-
before { config[:command_prefix] = "my_prefix" }
|
|
332
|
-
|
|
333
|
-
it "prepends the command with the prefix" do
|
|
334
|
-
verifier.send(:prefix_command, "my_command").must_equal("my_prefix my_command")
|
|
335
|
-
end
|
|
336
|
-
end
|
|
337
|
-
|
|
338
|
-
describe "with :command_prefix unset" do
|
|
339
|
-
before { config[:command_prefix] = nil }
|
|
340
|
-
|
|
341
|
-
it "returns an unaltered command" do
|
|
342
|
-
verifier.send(:prefix_command, "my_command").must_equal("my_command")
|
|
343
|
-
end
|
|
344
|
-
end
|
|
345
|
-
end
|
|
346
|
-
end
|