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
data/spec/kitchen/driver_spec.rb
CHANGED
|
@@ -1,112 +1,112 @@
|
|
|
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 "kitchen/configurable"
|
|
22
|
-
require "kitchen/errors"
|
|
23
|
-
require "kitchen/logging"
|
|
24
|
-
require "kitchen/shell_out"
|
|
25
|
-
require "kitchen/driver"
|
|
26
|
-
require "kitchen/driver/base"
|
|
27
|
-
|
|
28
|
-
module Kitchen
|
|
29
|
-
|
|
30
|
-
module Driver
|
|
31
|
-
|
|
32
|
-
class Coolbeans < Kitchen::Driver::Base
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
class ItDepends < Kitchen::Driver::Base
|
|
36
|
-
|
|
37
|
-
attr_reader :verify_call_count
|
|
38
|
-
|
|
39
|
-
def initialize(config = {})
|
|
40
|
-
@verify_call_count = 0
|
|
41
|
-
super
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def verify_dependencies
|
|
45
|
-
@verify_call_count += 1
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
class UnstableDepends < Kitchen::Driver::Base
|
|
50
|
-
|
|
51
|
-
def verify_dependencies
|
|
52
|
-
raise UserError, "Oh noes, you don't have software!"
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
describe Kitchen::Driver do
|
|
59
|
-
|
|
60
|
-
describe ".for_plugin" do
|
|
61
|
-
|
|
62
|
-
before do
|
|
63
|
-
Kitchen::Driver.stubs(:require).returns(true)
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it "returns a driver object of the correct class" do
|
|
67
|
-
driver = Kitchen::Driver.for_plugin("coolbeans", {})
|
|
68
|
-
|
|
69
|
-
driver.must_be_kind_of Kitchen::Driver::Coolbeans
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
it "returns a driver initialized with its config" do
|
|
73
|
-
driver = Kitchen::Driver.for_plugin("coolbeans", :jelly => "beans")
|
|
74
|
-
|
|
75
|
-
driver[:jelly].must_equal "beans"
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it "calls #verify_dependencies on the driver object" do
|
|
79
|
-
driver = Kitchen::Driver.for_plugin("it_depends", {})
|
|
80
|
-
|
|
81
|
-
driver.verify_call_count.must_equal 1
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
it "calls #verify_dependencies once per driver require" do
|
|
85
|
-
Kitchen::Driver.stubs(:require).returns(true, false)
|
|
86
|
-
driver1 = Kitchen::Driver.for_plugin("it_depends", {})
|
|
87
|
-
driver1.verify_call_count.must_equal 1
|
|
88
|
-
driver2 = Kitchen::Driver.for_plugin("it_depends", {})
|
|
89
|
-
|
|
90
|
-
driver2.verify_call_count.must_equal 0
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it "raises ClientError if the driver could not be required" do
|
|
94
|
-
Kitchen::Driver.stubs(:require).raises(LoadError)
|
|
95
|
-
|
|
96
|
-
proc { Kitchen::Driver.for_plugin("coolbeans", {}) }.
|
|
97
|
-
must_raise Kitchen::ClientError
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
it "raises ClientError if the driver's class constant could not be found" do
|
|
101
|
-
Kitchen::Driver.stubs(:require).returns(true) # pretend require worked
|
|
102
|
-
|
|
103
|
-
proc { Kitchen::Driver.for_plugin("nope", {}) }.
|
|
104
|
-
must_raise Kitchen::ClientError
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "raises UserError if #verify_dependencies fails" do
|
|
108
|
-
proc { Kitchen::Driver.for_plugin("unstable_depends", {}) }.
|
|
109
|
-
must_raise Kitchen::UserError
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
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 "kitchen/configurable"
|
|
22
|
+
require "kitchen/errors"
|
|
23
|
+
require "kitchen/logging"
|
|
24
|
+
require "kitchen/shell_out"
|
|
25
|
+
require "kitchen/driver"
|
|
26
|
+
require "kitchen/driver/base"
|
|
27
|
+
|
|
28
|
+
module Kitchen
|
|
29
|
+
|
|
30
|
+
module Driver
|
|
31
|
+
|
|
32
|
+
class Coolbeans < Kitchen::Driver::Base
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class ItDepends < Kitchen::Driver::Base
|
|
36
|
+
|
|
37
|
+
attr_reader :verify_call_count
|
|
38
|
+
|
|
39
|
+
def initialize(config = {})
|
|
40
|
+
@verify_call_count = 0
|
|
41
|
+
super
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def verify_dependencies
|
|
45
|
+
@verify_call_count += 1
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class UnstableDepends < Kitchen::Driver::Base
|
|
50
|
+
|
|
51
|
+
def verify_dependencies
|
|
52
|
+
raise UserError, "Oh noes, you don't have software!"
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe Kitchen::Driver do
|
|
59
|
+
|
|
60
|
+
describe ".for_plugin" do
|
|
61
|
+
|
|
62
|
+
before do
|
|
63
|
+
Kitchen::Driver.stubs(:require).returns(true)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "returns a driver object of the correct class" do
|
|
67
|
+
driver = Kitchen::Driver.for_plugin("coolbeans", {})
|
|
68
|
+
|
|
69
|
+
driver.must_be_kind_of Kitchen::Driver::Coolbeans
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "returns a driver initialized with its config" do
|
|
73
|
+
driver = Kitchen::Driver.for_plugin("coolbeans", :jelly => "beans")
|
|
74
|
+
|
|
75
|
+
driver[:jelly].must_equal "beans"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "calls #verify_dependencies on the driver object" do
|
|
79
|
+
driver = Kitchen::Driver.for_plugin("it_depends", {})
|
|
80
|
+
|
|
81
|
+
driver.verify_call_count.must_equal 1
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "calls #verify_dependencies once per driver require" do
|
|
85
|
+
Kitchen::Driver.stubs(:require).returns(true, false)
|
|
86
|
+
driver1 = Kitchen::Driver.for_plugin("it_depends", {})
|
|
87
|
+
driver1.verify_call_count.must_equal 1
|
|
88
|
+
driver2 = Kitchen::Driver.for_plugin("it_depends", {})
|
|
89
|
+
|
|
90
|
+
driver2.verify_call_count.must_equal 0
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "raises ClientError if the driver could not be required" do
|
|
94
|
+
Kitchen::Driver.stubs(:require).raises(LoadError)
|
|
95
|
+
|
|
96
|
+
proc { Kitchen::Driver.for_plugin("coolbeans", {}) }.
|
|
97
|
+
must_raise Kitchen::ClientError
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "raises ClientError if the driver's class constant could not be found" do
|
|
101
|
+
Kitchen::Driver.stubs(:require).returns(true) # pretend require worked
|
|
102
|
+
|
|
103
|
+
proc { Kitchen::Driver.for_plugin("nope", {}) }.
|
|
104
|
+
must_raise Kitchen::ClientError
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "raises UserError if #verify_dependencies fails" do
|
|
108
|
+
proc { Kitchen::Driver.for_plugin("unstable_depends", {}) }.
|
|
109
|
+
must_raise Kitchen::UserError
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
data/spec/kitchen/errors_spec.rb
CHANGED
|
@@ -1,309 +1,309 @@
|
|
|
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/errors"
|
|
23
|
-
|
|
24
|
-
describe Kitchen::Error do
|
|
25
|
-
|
|
26
|
-
let(:exception) { Kitchen::StandardError.new("shoot") }
|
|
27
|
-
|
|
28
|
-
describe ".formatted_exception" do
|
|
29
|
-
|
|
30
|
-
it "returns an array of a formatted message" do
|
|
31
|
-
Kitchen::Error.formatted_exception(exception).must_equal([
|
|
32
|
-
"------Exception-------",
|
|
33
|
-
"Class: Kitchen::StandardError",
|
|
34
|
-
"Message: shoot",
|
|
35
|
-
"----------------------"
|
|
36
|
-
])
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "takes a customized title" do
|
|
40
|
-
Kitchen::Error.formatted_exception(exception, "Trouble").first.
|
|
41
|
-
must_equal("-------Trouble--------")
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
describe ".formatted_exception" do
|
|
46
|
-
|
|
47
|
-
it "returns an array of a formatted message with a nil backtrace" do
|
|
48
|
-
Kitchen::Error.formatted_trace(exception).must_equal([
|
|
49
|
-
"------Exception-------",
|
|
50
|
-
"Class: Kitchen::StandardError",
|
|
51
|
-
"Message: shoot",
|
|
52
|
-
"------Backtrace-------",
|
|
53
|
-
nil,
|
|
54
|
-
"----------------------"
|
|
55
|
-
])
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "returns an array containing the exception's backtrace" do
|
|
59
|
-
begin
|
|
60
|
-
raise Kitchen::StandardError, "shoot"
|
|
61
|
-
rescue => e
|
|
62
|
-
Kitchen::Error.formatted_trace(e)[4...-1].must_equal e.backtrace
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it "returns an array containing a nested exception, if given" do
|
|
67
|
-
begin
|
|
68
|
-
raise IOError, "no disk, yo"
|
|
69
|
-
rescue
|
|
70
|
-
e = Kitchen::StandardError.new("shoot")
|
|
71
|
-
|
|
72
|
-
Kitchen::Error.formatted_trace(e).must_equal([
|
|
73
|
-
"------Exception-------",
|
|
74
|
-
"Class: Kitchen::StandardError",
|
|
75
|
-
"Message: shoot",
|
|
76
|
-
"---Nested Exception---",
|
|
77
|
-
"Class: IOError",
|
|
78
|
-
"Message: no disk, yo",
|
|
79
|
-
"------Backtrace-------",
|
|
80
|
-
nil,
|
|
81
|
-
"----------------------"
|
|
82
|
-
])
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
describe Kitchen::StandardError do
|
|
89
|
-
|
|
90
|
-
it "is a kind of Kitchen::Error" do
|
|
91
|
-
Kitchen::StandardError.new("oops").must_be_kind_of Kitchen::Error
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
it "by default, sets original exception to the last raised exception" do
|
|
95
|
-
begin
|
|
96
|
-
raise IOError, "crap"
|
|
97
|
-
rescue
|
|
98
|
-
original = Kitchen::StandardError.new("oops").original
|
|
99
|
-
original.must_be_kind_of IOError
|
|
100
|
-
original.message.must_equal "crap"
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
it "can embed an exception when constructing" do
|
|
105
|
-
original = Kitchen::StandardError.new("durn", IOError.new("ack")).original
|
|
106
|
-
original.must_be_kind_of IOError
|
|
107
|
-
original.message.must_equal "ack"
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
[
|
|
112
|
-
Kitchen::UserError, Kitchen::ClientError, Kitchen::TransientFailure
|
|
113
|
-
].each do |klass|
|
|
114
|
-
describe klass do
|
|
115
|
-
|
|
116
|
-
it "is a kind of Kitchen::StandardError" do
|
|
117
|
-
klass.new("oops").must_be_kind_of Kitchen::StandardError
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
[
|
|
123
|
-
Kitchen::ActionFailed, Kitchen::InstanceFailure
|
|
124
|
-
].each do |klass|
|
|
125
|
-
describe klass do
|
|
126
|
-
|
|
127
|
-
it "is a kind of Kitchen::TransientFailure" do
|
|
128
|
-
klass.new("oops").must_be_kind_of Kitchen::TransientFailure
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
describe Kitchen do
|
|
134
|
-
|
|
135
|
-
describe ".with_friendly_errors" do
|
|
136
|
-
|
|
137
|
-
let(:logger_io) { StringIO.new }
|
|
138
|
-
let(:logger) { Kitchen::Logger.new(:logdev => logger_io) }
|
|
139
|
-
|
|
140
|
-
before do
|
|
141
|
-
Kitchen.stubs(:tty?).returns(true)
|
|
142
|
-
@orig_stderr = $stderr
|
|
143
|
-
$stderr = StringIO.new
|
|
144
|
-
@orig_logger = Kitchen.logger
|
|
145
|
-
Kitchen.logger = logger
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
after do
|
|
149
|
-
$stderr = @orig_stderr
|
|
150
|
-
Kitchen.logger = @orig_logger
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
describe "for instance failures" do
|
|
154
|
-
|
|
155
|
-
def go_boom
|
|
156
|
-
Kitchen.with_friendly_errors do
|
|
157
|
-
begin
|
|
158
|
-
raise IOError, "no stuff"
|
|
159
|
-
rescue
|
|
160
|
-
raise Kitchen::InstanceFailure, "cannot do that"
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
it "exits with 10" do
|
|
166
|
-
begin
|
|
167
|
-
go_boom
|
|
168
|
-
rescue SystemExit => e
|
|
169
|
-
e.status.must_equal 10
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
it "prints a message on STDERR" do
|
|
174
|
-
output = [
|
|
175
|
-
">>>>>> cannot do that",
|
|
176
|
-
">>>>>> ------Exception-------",
|
|
177
|
-
">>>>>> Class: IOError",
|
|
178
|
-
">>>>>> Message: no stuff",
|
|
179
|
-
">>>>>> ----------------------"
|
|
180
|
-
].map { |l| Kitchen::Color.colorize(l, :red) }.join("\n").concat("\n")
|
|
181
|
-
|
|
182
|
-
begin
|
|
183
|
-
go_boom
|
|
184
|
-
rescue SystemExit
|
|
185
|
-
$stderr.string.must_equal output
|
|
186
|
-
end
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
it "prints a message on STDERR without color" do
|
|
190
|
-
Kitchen.stubs(:tty?).returns(false)
|
|
191
|
-
output = [
|
|
192
|
-
">>>>>> cannot do that",
|
|
193
|
-
">>>>>> ------Exception-------",
|
|
194
|
-
">>>>>> Class: IOError",
|
|
195
|
-
">>>>>> Message: no stuff",
|
|
196
|
-
">>>>>> ----------------------"
|
|
197
|
-
].join("\n").concat("\n")
|
|
198
|
-
|
|
199
|
-
begin
|
|
200
|
-
go_boom
|
|
201
|
-
rescue SystemExit
|
|
202
|
-
$stderr.string.must_equal output
|
|
203
|
-
end
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
it "logs the exception message on the common logger's error severity" do
|
|
207
|
-
begin
|
|
208
|
-
go_boom
|
|
209
|
-
rescue SystemExit
|
|
210
|
-
logger_io.string.must_match(/ERROR -- Kitchen: cannot do that$/)
|
|
211
|
-
end
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
it "logs the exception message on debug, if set" do
|
|
215
|
-
logger.level = ::Logger::DEBUG
|
|
216
|
-
|
|
217
|
-
begin
|
|
218
|
-
go_boom
|
|
219
|
-
rescue SystemExit
|
|
220
|
-
logger_io.string.must_match(/DEBUG -- Kitchen: cannot do that$/)
|
|
221
|
-
end
|
|
222
|
-
end
|
|
223
|
-
end
|
|
224
|
-
|
|
225
|
-
describe "for unexpected failures" do
|
|
226
|
-
|
|
227
|
-
def go_boom
|
|
228
|
-
Kitchen.with_friendly_errors do
|
|
229
|
-
begin
|
|
230
|
-
raise IOError, "wtf?"
|
|
231
|
-
rescue
|
|
232
|
-
raise Kitchen::StandardError, "ah crap"
|
|
233
|
-
end
|
|
234
|
-
end
|
|
235
|
-
end
|
|
236
|
-
|
|
237
|
-
it "exits with 20" do
|
|
238
|
-
begin
|
|
239
|
-
go_boom
|
|
240
|
-
rescue SystemExit => e
|
|
241
|
-
e.status.must_equal 20
|
|
242
|
-
end
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
it "prints a message on STDERR" do
|
|
246
|
-
output = [
|
|
247
|
-
">>>>>> ------Exception-------",
|
|
248
|
-
">>>>>> Class: Kitchen::StandardError",
|
|
249
|
-
">>>>>> Message: ah crap",
|
|
250
|
-
">>>>>> ----------------------",
|
|
251
|
-
">>>>>> Please see .kitchen/logs/kitchen.log for more details",
|
|
252
|
-
">>>>>> Also try running `kitchen diagnose --all` for configuration\n"
|
|
253
|
-
].map { |l| Kitchen::Color.colorize(l, :red) }.join("\n").concat("\n")
|
|
254
|
-
|
|
255
|
-
begin
|
|
256
|
-
go_boom
|
|
257
|
-
rescue SystemExit
|
|
258
|
-
$stderr.string.must_equal output
|
|
259
|
-
end
|
|
260
|
-
end
|
|
261
|
-
|
|
262
|
-
it "prints a message on STDERR without color" do
|
|
263
|
-
Kitchen.stubs(:tty?).returns(false)
|
|
264
|
-
output = [
|
|
265
|
-
">>>>>> ------Exception-------",
|
|
266
|
-
">>>>>> Class: Kitchen::StandardError",
|
|
267
|
-
">>>>>> Message: ah crap",
|
|
268
|
-
">>>>>> ----------------------",
|
|
269
|
-
">>>>>> Please see .kitchen/logs/kitchen.log for more details",
|
|
270
|
-
">>>>>> Also try running `kitchen diagnose --all` for configuration"
|
|
271
|
-
].join("\n").concat("\n")
|
|
272
|
-
|
|
273
|
-
begin
|
|
274
|
-
go_boom
|
|
275
|
-
rescue SystemExit
|
|
276
|
-
$stderr.string.must_equal output
|
|
277
|
-
end
|
|
278
|
-
end
|
|
279
|
-
|
|
280
|
-
it "logs the exception message on the common logger's error severity" do
|
|
281
|
-
begin
|
|
282
|
-
go_boom
|
|
283
|
-
rescue SystemExit
|
|
284
|
-
logger_io.string.
|
|
285
|
-
must_match(/ERROR -- Kitchen: ------Exception-------$/)
|
|
286
|
-
logger_io.string.
|
|
287
|
-
must_match(/ERROR -- Kitchen: Class: Kitchen::StandardError$/)
|
|
288
|
-
logger_io.string.
|
|
289
|
-
must_match(/ERROR -- Kitchen: ------Backtrace-------$/)
|
|
290
|
-
end
|
|
291
|
-
end
|
|
292
|
-
|
|
293
|
-
it "logs the exception message on debug, if set" do
|
|
294
|
-
logger.level = ::Logger::DEBUG
|
|
295
|
-
|
|
296
|
-
begin
|
|
297
|
-
go_boom
|
|
298
|
-
rescue SystemExit
|
|
299
|
-
logger_io.string.
|
|
300
|
-
must_match(/DEBUG -- Kitchen: ------Exception-------$/)
|
|
301
|
-
logger_io.string.
|
|
302
|
-
must_match(/DEBUG -- Kitchen: Class: Kitchen::StandardError$/)
|
|
303
|
-
logger_io.string.
|
|
304
|
-
must_match(/DEBUG -- Kitchen: ------Backtrace-------$/)
|
|
305
|
-
end
|
|
306
|
-
end
|
|
307
|
-
end
|
|
308
|
-
end
|
|
309
|
-
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/errors"
|
|
23
|
+
|
|
24
|
+
describe Kitchen::Error do
|
|
25
|
+
|
|
26
|
+
let(:exception) { Kitchen::StandardError.new("shoot") }
|
|
27
|
+
|
|
28
|
+
describe ".formatted_exception" do
|
|
29
|
+
|
|
30
|
+
it "returns an array of a formatted message" do
|
|
31
|
+
Kitchen::Error.formatted_exception(exception).must_equal([
|
|
32
|
+
"------Exception-------",
|
|
33
|
+
"Class: Kitchen::StandardError",
|
|
34
|
+
"Message: shoot",
|
|
35
|
+
"----------------------"
|
|
36
|
+
])
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "takes a customized title" do
|
|
40
|
+
Kitchen::Error.formatted_exception(exception, "Trouble").first.
|
|
41
|
+
must_equal("-------Trouble--------")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe ".formatted_exception" do
|
|
46
|
+
|
|
47
|
+
it "returns an array of a formatted message with a nil backtrace" do
|
|
48
|
+
Kitchen::Error.formatted_trace(exception).must_equal([
|
|
49
|
+
"------Exception-------",
|
|
50
|
+
"Class: Kitchen::StandardError",
|
|
51
|
+
"Message: shoot",
|
|
52
|
+
"------Backtrace-------",
|
|
53
|
+
nil,
|
|
54
|
+
"----------------------"
|
|
55
|
+
])
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "returns an array containing the exception's backtrace" do
|
|
59
|
+
begin
|
|
60
|
+
raise Kitchen::StandardError, "shoot"
|
|
61
|
+
rescue => e
|
|
62
|
+
Kitchen::Error.formatted_trace(e)[4...-1].must_equal e.backtrace
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "returns an array containing a nested exception, if given" do
|
|
67
|
+
begin
|
|
68
|
+
raise IOError, "no disk, yo"
|
|
69
|
+
rescue
|
|
70
|
+
e = Kitchen::StandardError.new("shoot")
|
|
71
|
+
|
|
72
|
+
Kitchen::Error.formatted_trace(e).must_equal([
|
|
73
|
+
"------Exception-------",
|
|
74
|
+
"Class: Kitchen::StandardError",
|
|
75
|
+
"Message: shoot",
|
|
76
|
+
"---Nested Exception---",
|
|
77
|
+
"Class: IOError",
|
|
78
|
+
"Message: no disk, yo",
|
|
79
|
+
"------Backtrace-------",
|
|
80
|
+
nil,
|
|
81
|
+
"----------------------"
|
|
82
|
+
])
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
describe Kitchen::StandardError do
|
|
89
|
+
|
|
90
|
+
it "is a kind of Kitchen::Error" do
|
|
91
|
+
Kitchen::StandardError.new("oops").must_be_kind_of Kitchen::Error
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "by default, sets original exception to the last raised exception" do
|
|
95
|
+
begin
|
|
96
|
+
raise IOError, "crap"
|
|
97
|
+
rescue
|
|
98
|
+
original = Kitchen::StandardError.new("oops").original
|
|
99
|
+
original.must_be_kind_of IOError
|
|
100
|
+
original.message.must_equal "crap"
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "can embed an exception when constructing" do
|
|
105
|
+
original = Kitchen::StandardError.new("durn", IOError.new("ack")).original
|
|
106
|
+
original.must_be_kind_of IOError
|
|
107
|
+
original.message.must_equal "ack"
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
[
|
|
112
|
+
Kitchen::UserError, Kitchen::ClientError, Kitchen::TransientFailure
|
|
113
|
+
].each do |klass|
|
|
114
|
+
describe klass do
|
|
115
|
+
|
|
116
|
+
it "is a kind of Kitchen::StandardError" do
|
|
117
|
+
klass.new("oops").must_be_kind_of Kitchen::StandardError
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
[
|
|
123
|
+
Kitchen::ActionFailed, Kitchen::InstanceFailure
|
|
124
|
+
].each do |klass|
|
|
125
|
+
describe klass do
|
|
126
|
+
|
|
127
|
+
it "is a kind of Kitchen::TransientFailure" do
|
|
128
|
+
klass.new("oops").must_be_kind_of Kitchen::TransientFailure
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
describe Kitchen do
|
|
134
|
+
|
|
135
|
+
describe ".with_friendly_errors" do
|
|
136
|
+
|
|
137
|
+
let(:logger_io) { StringIO.new }
|
|
138
|
+
let(:logger) { Kitchen::Logger.new(:logdev => logger_io) }
|
|
139
|
+
|
|
140
|
+
before do
|
|
141
|
+
Kitchen.stubs(:tty?).returns(true)
|
|
142
|
+
@orig_stderr = $stderr
|
|
143
|
+
$stderr = StringIO.new
|
|
144
|
+
@orig_logger = Kitchen.logger
|
|
145
|
+
Kitchen.logger = logger
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
after do
|
|
149
|
+
$stderr = @orig_stderr
|
|
150
|
+
Kitchen.logger = @orig_logger
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
describe "for instance failures" do
|
|
154
|
+
|
|
155
|
+
def go_boom
|
|
156
|
+
Kitchen.with_friendly_errors do
|
|
157
|
+
begin
|
|
158
|
+
raise IOError, "no stuff"
|
|
159
|
+
rescue
|
|
160
|
+
raise Kitchen::InstanceFailure, "cannot do that"
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
it "exits with 10" do
|
|
166
|
+
begin
|
|
167
|
+
go_boom
|
|
168
|
+
rescue SystemExit => e
|
|
169
|
+
e.status.must_equal 10
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it "prints a message on STDERR" do
|
|
174
|
+
output = [
|
|
175
|
+
">>>>>> cannot do that",
|
|
176
|
+
">>>>>> ------Exception-------",
|
|
177
|
+
">>>>>> Class: IOError",
|
|
178
|
+
">>>>>> Message: no stuff",
|
|
179
|
+
">>>>>> ----------------------"
|
|
180
|
+
].map { |l| Kitchen::Color.colorize(l, :red) }.join("\n").concat("\n")
|
|
181
|
+
|
|
182
|
+
begin
|
|
183
|
+
go_boom
|
|
184
|
+
rescue SystemExit
|
|
185
|
+
$stderr.string.must_equal output
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
it "prints a message on STDERR without color" do
|
|
190
|
+
Kitchen.stubs(:tty?).returns(false)
|
|
191
|
+
output = [
|
|
192
|
+
">>>>>> cannot do that",
|
|
193
|
+
">>>>>> ------Exception-------",
|
|
194
|
+
">>>>>> Class: IOError",
|
|
195
|
+
">>>>>> Message: no stuff",
|
|
196
|
+
">>>>>> ----------------------"
|
|
197
|
+
].join("\n").concat("\n")
|
|
198
|
+
|
|
199
|
+
begin
|
|
200
|
+
go_boom
|
|
201
|
+
rescue SystemExit
|
|
202
|
+
$stderr.string.must_equal output
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
it "logs the exception message on the common logger's error severity" do
|
|
207
|
+
begin
|
|
208
|
+
go_boom
|
|
209
|
+
rescue SystemExit
|
|
210
|
+
logger_io.string.must_match(/ERROR -- Kitchen: cannot do that$/)
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
it "logs the exception message on debug, if set" do
|
|
215
|
+
logger.level = ::Logger::DEBUG
|
|
216
|
+
|
|
217
|
+
begin
|
|
218
|
+
go_boom
|
|
219
|
+
rescue SystemExit
|
|
220
|
+
logger_io.string.must_match(/DEBUG -- Kitchen: cannot do that$/)
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
describe "for unexpected failures" do
|
|
226
|
+
|
|
227
|
+
def go_boom
|
|
228
|
+
Kitchen.with_friendly_errors do
|
|
229
|
+
begin
|
|
230
|
+
raise IOError, "wtf?"
|
|
231
|
+
rescue
|
|
232
|
+
raise Kitchen::StandardError, "ah crap"
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
it "exits with 20" do
|
|
238
|
+
begin
|
|
239
|
+
go_boom
|
|
240
|
+
rescue SystemExit => e
|
|
241
|
+
e.status.must_equal 20
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
it "prints a message on STDERR" do
|
|
246
|
+
output = [
|
|
247
|
+
">>>>>> ------Exception-------",
|
|
248
|
+
">>>>>> Class: Kitchen::StandardError",
|
|
249
|
+
">>>>>> Message: ah crap",
|
|
250
|
+
">>>>>> ----------------------",
|
|
251
|
+
">>>>>> Please see .kitchen/logs/kitchen.log for more details",
|
|
252
|
+
">>>>>> Also try running `kitchen diagnose --all` for configuration\n"
|
|
253
|
+
].map { |l| Kitchen::Color.colorize(l, :red) }.join("\n").concat("\n")
|
|
254
|
+
|
|
255
|
+
begin
|
|
256
|
+
go_boom
|
|
257
|
+
rescue SystemExit
|
|
258
|
+
$stderr.string.must_equal output
|
|
259
|
+
end
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
it "prints a message on STDERR without color" do
|
|
263
|
+
Kitchen.stubs(:tty?).returns(false)
|
|
264
|
+
output = [
|
|
265
|
+
">>>>>> ------Exception-------",
|
|
266
|
+
">>>>>> Class: Kitchen::StandardError",
|
|
267
|
+
">>>>>> Message: ah crap",
|
|
268
|
+
">>>>>> ----------------------",
|
|
269
|
+
">>>>>> Please see .kitchen/logs/kitchen.log for more details",
|
|
270
|
+
">>>>>> Also try running `kitchen diagnose --all` for configuration"
|
|
271
|
+
].join("\n").concat("\n")
|
|
272
|
+
|
|
273
|
+
begin
|
|
274
|
+
go_boom
|
|
275
|
+
rescue SystemExit
|
|
276
|
+
$stderr.string.must_equal output
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
it "logs the exception message on the common logger's error severity" do
|
|
281
|
+
begin
|
|
282
|
+
go_boom
|
|
283
|
+
rescue SystemExit
|
|
284
|
+
logger_io.string.
|
|
285
|
+
must_match(/ERROR -- Kitchen: ------Exception-------$/)
|
|
286
|
+
logger_io.string.
|
|
287
|
+
must_match(/ERROR -- Kitchen: Class: Kitchen::StandardError$/)
|
|
288
|
+
logger_io.string.
|
|
289
|
+
must_match(/ERROR -- Kitchen: ------Backtrace-------$/)
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
it "logs the exception message on debug, if set" do
|
|
294
|
+
logger.level = ::Logger::DEBUG
|
|
295
|
+
|
|
296
|
+
begin
|
|
297
|
+
go_boom
|
|
298
|
+
rescue SystemExit
|
|
299
|
+
logger_io.string.
|
|
300
|
+
must_match(/DEBUG -- Kitchen: ------Exception-------$/)
|
|
301
|
+
logger_io.string.
|
|
302
|
+
must_match(/DEBUG -- Kitchen: Class: Kitchen::StandardError$/)
|
|
303
|
+
logger_io.string.
|
|
304
|
+
must_match(/DEBUG -- Kitchen: ------Backtrace-------$/)
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
end
|