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,112 +1,112 @@
|
|
|
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
|
-
|
|
29
|
-
module Transport
|
|
30
|
-
|
|
31
|
-
class Coolbeans < Kitchen::Transport::Base
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
class ItDepends < Kitchen::Transport::Base
|
|
35
|
-
|
|
36
|
-
attr_reader :verify_call_count
|
|
37
|
-
|
|
38
|
-
def initialize(config = {})
|
|
39
|
-
@verify_call_count = 0
|
|
40
|
-
super
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def verify_dependencies
|
|
44
|
-
@verify_call_count += 1
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
class UnstableDepends < Kitchen::Transport::Base
|
|
49
|
-
|
|
50
|
-
def verify_dependencies
|
|
51
|
-
raise UserError, "Oh noes, you don't have software!"
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
describe Kitchen::Transport do
|
|
58
|
-
|
|
59
|
-
describe ".for_plugin" do
|
|
60
|
-
|
|
61
|
-
before do
|
|
62
|
-
Kitchen::Transport.stubs(:require).returns(true)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "returns a transport object of the correct class" do
|
|
66
|
-
transport = Kitchen::Transport.for_plugin("coolbeans", {})
|
|
67
|
-
|
|
68
|
-
transport.must_be_kind_of Kitchen::Transport::Coolbeans
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it "returns a transport initialized with its config" do
|
|
72
|
-
transport = Kitchen::Transport.for_plugin("coolbeans", :foo => "bar")
|
|
73
|
-
|
|
74
|
-
transport[:foo].must_equal "bar"
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it "calls #verify_dependencies on the transport object" do
|
|
78
|
-
transport = Kitchen::Transport.for_plugin("it_depends", {})
|
|
79
|
-
|
|
80
|
-
transport.verify_call_count.must_equal 1
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it "calls #verify_dependencies once per transport require" do
|
|
84
|
-
Kitchen::Transport.stubs(:require).returns(true, false)
|
|
85
|
-
transport1 = Kitchen::Transport.for_plugin("it_depends", {})
|
|
86
|
-
transport1.verify_call_count.must_equal 1
|
|
87
|
-
transport2 = Kitchen::Transport.for_plugin("it_depends", {})
|
|
88
|
-
|
|
89
|
-
transport2.verify_call_count.must_equal 0
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it "raises ClientError if the transport could not be required" do
|
|
93
|
-
Kitchen::Transport.stubs(:require).raises(LoadError)
|
|
94
|
-
|
|
95
|
-
proc { Kitchen::Transport.for_plugin("coolbeans", {}) }.
|
|
96
|
-
must_raise Kitchen::ClientError
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
it "raises ClientError if the transport's class constant was not found" do
|
|
100
|
-
# pretend require worked
|
|
101
|
-
Kitchen::Transport.stubs(:require).returns(true)
|
|
102
|
-
|
|
103
|
-
proc { Kitchen::Transport.for_plugin("nope", {}) }.
|
|
104
|
-
must_raise Kitchen::ClientError
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "raises UserError if #verify_dependencies failes" do
|
|
108
|
-
proc { Kitchen::Transport.for_plugin("unstable_depends", {}) }.
|
|
109
|
-
must_raise Kitchen::UserError
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
end
|
|
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
|
+
|
|
29
|
+
module Transport
|
|
30
|
+
|
|
31
|
+
class Coolbeans < Kitchen::Transport::Base
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class ItDepends < Kitchen::Transport::Base
|
|
35
|
+
|
|
36
|
+
attr_reader :verify_call_count
|
|
37
|
+
|
|
38
|
+
def initialize(config = {})
|
|
39
|
+
@verify_call_count = 0
|
|
40
|
+
super
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def verify_dependencies
|
|
44
|
+
@verify_call_count += 1
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
class UnstableDepends < Kitchen::Transport::Base
|
|
49
|
+
|
|
50
|
+
def verify_dependencies
|
|
51
|
+
raise UserError, "Oh noes, you don't have software!"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe Kitchen::Transport do
|
|
58
|
+
|
|
59
|
+
describe ".for_plugin" do
|
|
60
|
+
|
|
61
|
+
before do
|
|
62
|
+
Kitchen::Transport.stubs(:require).returns(true)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "returns a transport object of the correct class" do
|
|
66
|
+
transport = Kitchen::Transport.for_plugin("coolbeans", {})
|
|
67
|
+
|
|
68
|
+
transport.must_be_kind_of Kitchen::Transport::Coolbeans
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "returns a transport initialized with its config" do
|
|
72
|
+
transport = Kitchen::Transport.for_plugin("coolbeans", :foo => "bar")
|
|
73
|
+
|
|
74
|
+
transport[:foo].must_equal "bar"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "calls #verify_dependencies on the transport object" do
|
|
78
|
+
transport = Kitchen::Transport.for_plugin("it_depends", {})
|
|
79
|
+
|
|
80
|
+
transport.verify_call_count.must_equal 1
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "calls #verify_dependencies once per transport require" do
|
|
84
|
+
Kitchen::Transport.stubs(:require).returns(true, false)
|
|
85
|
+
transport1 = Kitchen::Transport.for_plugin("it_depends", {})
|
|
86
|
+
transport1.verify_call_count.must_equal 1
|
|
87
|
+
transport2 = Kitchen::Transport.for_plugin("it_depends", {})
|
|
88
|
+
|
|
89
|
+
transport2.verify_call_count.must_equal 0
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "raises ClientError if the transport could not be required" do
|
|
93
|
+
Kitchen::Transport.stubs(:require).raises(LoadError)
|
|
94
|
+
|
|
95
|
+
proc { Kitchen::Transport.for_plugin("coolbeans", {}) }.
|
|
96
|
+
must_raise Kitchen::ClientError
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "raises ClientError if the transport's class constant was not found" do
|
|
100
|
+
# pretend require worked
|
|
101
|
+
Kitchen::Transport.stubs(:require).returns(true)
|
|
102
|
+
|
|
103
|
+
proc { Kitchen::Transport.for_plugin("nope", {}) }.
|
|
104
|
+
must_raise Kitchen::ClientError
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "raises UserError if #verify_dependencies failes" do
|
|
108
|
+
proc { Kitchen::Transport.for_plugin("unstable_depends", {}) }.
|
|
109
|
+
must_raise Kitchen::UserError
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
data/spec/kitchen/util_spec.rb
CHANGED
|
@@ -1,165 +1,165 @@
|
|
|
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
|
-
|
|
27
|
-
describe ".to_logger_level" do
|
|
28
|
-
|
|
29
|
-
it "returns nil for invalid symbols" do
|
|
30
|
-
Kitchen::Util.to_logger_level(:nope).must_be_nil
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
%w[debug info warn error fatal].each do |level|
|
|
34
|
-
it "returns Logger::#{level.upcase} for :#{level} input" do
|
|
35
|
-
Kitchen::Util.to_logger_level(level.to_sym).
|
|
36
|
-
must_equal Logger.const_get(level.upcase)
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
describe ".from_logger_level" do
|
|
42
|
-
|
|
43
|
-
it "returns :fatal for invalid symbols" do
|
|
44
|
-
Kitchen::Util.from_logger_level("nope").must_equal :fatal
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
%w[debug info warn error fatal].each do |level|
|
|
48
|
-
it "returns :#{level} for Logger::#{level.upcase} input" do
|
|
49
|
-
Kitchen::Util.from_logger_level(Logger.const_get(level.upcase)).
|
|
50
|
-
must_equal(level.to_sym)
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
describe ".symbolized_hash" do
|
|
56
|
-
|
|
57
|
-
it "returns itself if not a hash" do
|
|
58
|
-
obj = Object.new
|
|
59
|
-
Kitchen::Util.symbolized_hash(obj).must_equal obj
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
it "preserves a symbolized hash" do
|
|
63
|
-
hash = { :one => [{ :two => "three" }] }
|
|
64
|
-
Kitchen::Util.symbolized_hash(hash).must_equal hash
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "converts string keys into symbols" do
|
|
68
|
-
Kitchen::Util.
|
|
69
|
-
symbolized_hash("one" => [{ "two" => :three, :four => "five" }]).
|
|
70
|
-
must_equal(:one => [{ :two => :three, :four => "five" }])
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
describe ".stringified_hash" do
|
|
75
|
-
|
|
76
|
-
it "returns itself if not a hash" do
|
|
77
|
-
obj = Object.new
|
|
78
|
-
Kitchen::Util.stringified_hash(obj).must_equal obj
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "preserves a stringified hash" do
|
|
82
|
-
hash = { "one" => [{ "two" => "three" }] }
|
|
83
|
-
Kitchen::Util.stringified_hash(hash).must_equal hash
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
it "converts symbol keys into strings" do
|
|
87
|
-
Kitchen::Util.
|
|
88
|
-
stringified_hash(:one => [{ :two => :three, "four" => "five" }]).
|
|
89
|
-
must_equal("one" => [{ "two" => :three, "four" => "five" }])
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
describe ".duration" do
|
|
94
|
-
|
|
95
|
-
it "turns nil into a zero" do
|
|
96
|
-
Kitchen::Util.duration(nil).must_equal "(0m0.00s)"
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
it "formats seconds to 2 digits" do
|
|
100
|
-
Kitchen::Util.duration(60).must_equal "(1m0.00s)"
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
it "formats large values into minutes and seconds" do
|
|
104
|
-
Kitchen::Util.duration(48033).must_equal "(800m33.00s)"
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
describe ".wrap_unix_command" do
|
|
109
|
-
|
|
110
|
-
it "returns the wrapped command" do
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
it "returns a false if command is nil" do
|
|
114
|
-
Kitchen::Util.wrap_command(nil).must_equal("sh -c '\nfalse\n'")
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
it "returns a true if command string is empty" do
|
|
118
|
-
Kitchen::Util.wrap_command("yoyo").must_equal("sh -c '\nyoyo\n'")
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "handles a command string with a trailing newline" do
|
|
122
|
-
Kitchen::Util.wrap_command("yep\n").must_equal("sh -c '\nyep\n'")
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
describe ".outdent!" do
|
|
127
|
-
|
|
128
|
-
it "modifies the argument string in place, destructively" do
|
|
129
|
-
string = "yep"
|
|
130
|
-
|
|
131
|
-
Kitchen::Util.outdent!(string).object_id.must_equal string.object_id
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
it "returns the same string if no leading whitespace exists" do
|
|
135
|
-
string = "one\ntwo\nthree"
|
|
136
|
-
|
|
137
|
-
Kitchen::Util.outdent!(string).must_equal "one\ntwo\nthree"
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
it "strips same amount of leading whitespace as found on first line" do
|
|
141
|
-
string = " one\n two\n three\nfour"
|
|
142
|
-
|
|
143
|
-
Kitchen::Util.outdent!(string).must_equal "one\n two\n three\nfour"
|
|
144
|
-
end
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
describe ".shell_helpers" do
|
|
148
|
-
|
|
149
|
-
%w[
|
|
150
|
-
exists do_wget do_curl do_fetch do_perl do_python do_download
|
|
151
|
-
].each do |func|
|
|
152
|
-
it "contains a #{func} shell function" do
|
|
153
|
-
Kitchen::Util.shell_helpers.must_match "#{func}() {"
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
it "does not contain bare single quotes" do
|
|
158
|
-
Kitchen::Util.shell_helpers.wont_match "'"
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
def regexify(str)
|
|
162
|
-
Regexp.new("^\s+" + Regexp.escape(str) + "$")
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
end
|
|
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
|
+
|
|
27
|
+
describe ".to_logger_level" do
|
|
28
|
+
|
|
29
|
+
it "returns nil for invalid symbols" do
|
|
30
|
+
Kitchen::Util.to_logger_level(:nope).must_be_nil
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
%w[debug info warn error fatal].each do |level|
|
|
34
|
+
it "returns Logger::#{level.upcase} for :#{level} input" do
|
|
35
|
+
Kitchen::Util.to_logger_level(level.to_sym).
|
|
36
|
+
must_equal Logger.const_get(level.upcase)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe ".from_logger_level" do
|
|
42
|
+
|
|
43
|
+
it "returns :fatal for invalid symbols" do
|
|
44
|
+
Kitchen::Util.from_logger_level("nope").must_equal :fatal
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
%w[debug info warn error fatal].each do |level|
|
|
48
|
+
it "returns :#{level} for Logger::#{level.upcase} input" do
|
|
49
|
+
Kitchen::Util.from_logger_level(Logger.const_get(level.upcase)).
|
|
50
|
+
must_equal(level.to_sym)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
describe ".symbolized_hash" do
|
|
56
|
+
|
|
57
|
+
it "returns itself if not a hash" do
|
|
58
|
+
obj = Object.new
|
|
59
|
+
Kitchen::Util.symbolized_hash(obj).must_equal obj
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "preserves a symbolized hash" do
|
|
63
|
+
hash = { :one => [{ :two => "three" }] }
|
|
64
|
+
Kitchen::Util.symbolized_hash(hash).must_equal hash
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "converts string keys into symbols" do
|
|
68
|
+
Kitchen::Util.
|
|
69
|
+
symbolized_hash("one" => [{ "two" => :three, :four => "five" }]).
|
|
70
|
+
must_equal(:one => [{ :two => :three, :four => "five" }])
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe ".stringified_hash" do
|
|
75
|
+
|
|
76
|
+
it "returns itself if not a hash" do
|
|
77
|
+
obj = Object.new
|
|
78
|
+
Kitchen::Util.stringified_hash(obj).must_equal obj
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "preserves a stringified hash" do
|
|
82
|
+
hash = { "one" => [{ "two" => "three" }] }
|
|
83
|
+
Kitchen::Util.stringified_hash(hash).must_equal hash
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "converts symbol keys into strings" do
|
|
87
|
+
Kitchen::Util.
|
|
88
|
+
stringified_hash(:one => [{ :two => :three, "four" => "five" }]).
|
|
89
|
+
must_equal("one" => [{ "two" => :three, "four" => "five" }])
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
describe ".duration" do
|
|
94
|
+
|
|
95
|
+
it "turns nil into a zero" do
|
|
96
|
+
Kitchen::Util.duration(nil).must_equal "(0m0.00s)"
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "formats seconds to 2 digits" do
|
|
100
|
+
Kitchen::Util.duration(60).must_equal "(1m0.00s)"
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "formats large values into minutes and seconds" do
|
|
104
|
+
Kitchen::Util.duration(48033).must_equal "(800m33.00s)"
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe ".wrap_unix_command" do
|
|
109
|
+
|
|
110
|
+
it "returns the wrapped command" do
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it "returns a false if command is nil" do
|
|
114
|
+
Kitchen::Util.wrap_command(nil).must_equal("sh -c '\nfalse\n'")
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "returns a true if command string is empty" do
|
|
118
|
+
Kitchen::Util.wrap_command("yoyo").must_equal("sh -c '\nyoyo\n'")
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "handles a command string with a trailing newline" do
|
|
122
|
+
Kitchen::Util.wrap_command("yep\n").must_equal("sh -c '\nyep\n'")
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
describe ".outdent!" do
|
|
127
|
+
|
|
128
|
+
it "modifies the argument string in place, destructively" do
|
|
129
|
+
string = "yep"
|
|
130
|
+
|
|
131
|
+
Kitchen::Util.outdent!(string).object_id.must_equal string.object_id
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it "returns the same string if no leading whitespace exists" do
|
|
135
|
+
string = "one\ntwo\nthree"
|
|
136
|
+
|
|
137
|
+
Kitchen::Util.outdent!(string).must_equal "one\ntwo\nthree"
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it "strips same amount of leading whitespace as found on first line" do
|
|
141
|
+
string = " one\n two\n three\nfour"
|
|
142
|
+
|
|
143
|
+
Kitchen::Util.outdent!(string).must_equal "one\n two\n three\nfour"
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
describe ".shell_helpers" do
|
|
148
|
+
|
|
149
|
+
%w[
|
|
150
|
+
exists do_wget do_curl do_fetch do_perl do_python do_download
|
|
151
|
+
].each do |func|
|
|
152
|
+
it "contains a #{func} shell function" do
|
|
153
|
+
Kitchen::Util.shell_helpers.must_match "#{func}() {"
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "does not contain bare single quotes" do
|
|
158
|
+
Kitchen::Util.shell_helpers.wont_match "'"
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def regexify(str)
|
|
162
|
+
Regexp.new("^\s+" + Regexp.escape(str) + "$")
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|