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,129 +1,129 @@
|
|
|
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/diagnostic"
|
|
22
|
-
|
|
23
|
-
describe Kitchen::Diagnostic do
|
|
24
|
-
|
|
25
|
-
let(:loader) do
|
|
26
|
-
stub(:diagnose => { :who => "loader" })
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
let(:instances) do
|
|
30
|
-
[
|
|
31
|
-
stub(
|
|
32
|
-
:name => "i1",
|
|
33
|
-
:diagnose => { :stuff => "sup" },
|
|
34
|
-
:diagnose_plugins => {
|
|
35
|
-
:driver => { :name => "driva", :a => "b" },
|
|
36
|
-
:provisioner => { :name => "prov", :c => "d" },
|
|
37
|
-
:transport => { :name => "transa", :e => "f" },
|
|
38
|
-
:verifier => { :name => "verve", :g => "h" }
|
|
39
|
-
}
|
|
40
|
-
),
|
|
41
|
-
stub(
|
|
42
|
-
:name => "i2",
|
|
43
|
-
:diagnose => { :stuff => "yo" },
|
|
44
|
-
:diagnose_plugins => {
|
|
45
|
-
:driver => { :name => "driva", :a => "b" },
|
|
46
|
-
:provisioner => { :name => "presto", :i => "j" },
|
|
47
|
-
:transport => { :name => "tressa", :k => "l" },
|
|
48
|
-
:verifier => { :name => "verve", :g => "h" }
|
|
49
|
-
}
|
|
50
|
-
)
|
|
51
|
-
]
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "#read returns a Hash" do
|
|
55
|
-
Kitchen::Diagnostic.new.read.must_be_instance_of Hash
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
it "#read returns the version of Test Kitchen" do
|
|
59
|
-
Kitchen::Diagnostic.new.read["kitchen_version"].must_equal Kitchen::VERSION
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
it "#read returns a timestamp in UTC" do
|
|
63
|
-
Time.stubs(:now).returns(Time.at(0))
|
|
64
|
-
|
|
65
|
-
Kitchen::Diagnostic.new.read["timestamp"].
|
|
66
|
-
must_equal "1970-01-01 00:00:00 UTC"
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
it "#read doesn't return a loader hash if not given one" do
|
|
70
|
-
Kitchen::Diagnostic.new.read.key?("loader").must_equal false
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "#read returns the loader's diganose hash if a loader is present" do
|
|
74
|
-
Kitchen::Diagnostic.new(:loader => loader).
|
|
75
|
-
read["loader"].must_equal("who" => "loader")
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it "#read returns an error hash for loader if error hash is passed in" do
|
|
79
|
-
Kitchen::Diagnostic.new(:loader => { :error => "damn" }).
|
|
80
|
-
read["loader"].must_equal("error" => "damn")
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it "#read returns the unique set of plugins' diagnose hash if :plugins is set" do
|
|
84
|
-
Kitchen::Diagnostic.new(:instances => instances, :plugins => true).
|
|
85
|
-
read["plugins"].
|
|
86
|
-
must_equal(
|
|
87
|
-
"driver" => {
|
|
88
|
-
"driva" => { "a" => "b" }
|
|
89
|
-
},
|
|
90
|
-
"provisioner" => {
|
|
91
|
-
"prov" => { "c" => "d" },
|
|
92
|
-
"presto" => { "i" => "j" }
|
|
93
|
-
},
|
|
94
|
-
"transport" => {
|
|
95
|
-
"transa" => { "e" => "f" },
|
|
96
|
-
"tressa" => { "k" => "l" }
|
|
97
|
-
},
|
|
98
|
-
"verifier" => {
|
|
99
|
-
"verve" => { "g" => "h" }
|
|
100
|
-
}
|
|
101
|
-
)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
it "#read returns an empty plugins hash if no instances were given" do
|
|
105
|
-
Kitchen::Diagnostic.new(:plugins => true).
|
|
106
|
-
read["plugins"].must_equal Hash.new
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
it "#read returns an empty instances hash if no instances were given" do
|
|
110
|
-
Kitchen::Diagnostic.new.read["instances"].must_equal Hash.new
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
it "#read returns an error hash for plugins if error hash is passed in" do
|
|
114
|
-
Kitchen::Diagnostic.new(
|
|
115
|
-
:instances => { :error => "shoot" }, :plugins => true
|
|
116
|
-
).read["plugins"].must_equal("error" => "shoot")
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
it "#read returns the instances' diganose hashes if instances are present" do
|
|
120
|
-
Kitchen::Diagnostic.new(:instances => instances).
|
|
121
|
-
read["instances"].
|
|
122
|
-
must_equal("i1" => { "stuff" => "sup" }, "i2" => { "stuff" => "yo" })
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
it "#read returns an error hash for instances if error hash is passed in" do
|
|
126
|
-
Kitchen::Diagnostic.new(:instances => { :error => "shoot" }).
|
|
127
|
-
read["instances"].must_equal("error" => "shoot")
|
|
128
|
-
end
|
|
129
|
-
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/diagnostic"
|
|
22
|
+
|
|
23
|
+
describe Kitchen::Diagnostic do
|
|
24
|
+
|
|
25
|
+
let(:loader) do
|
|
26
|
+
stub(:diagnose => { :who => "loader" })
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
let(:instances) do
|
|
30
|
+
[
|
|
31
|
+
stub(
|
|
32
|
+
:name => "i1",
|
|
33
|
+
:diagnose => { :stuff => "sup" },
|
|
34
|
+
:diagnose_plugins => {
|
|
35
|
+
:driver => { :name => "driva", :a => "b" },
|
|
36
|
+
:provisioner => { :name => "prov", :c => "d" },
|
|
37
|
+
:transport => { :name => "transa", :e => "f" },
|
|
38
|
+
:verifier => { :name => "verve", :g => "h" }
|
|
39
|
+
}
|
|
40
|
+
),
|
|
41
|
+
stub(
|
|
42
|
+
:name => "i2",
|
|
43
|
+
:diagnose => { :stuff => "yo" },
|
|
44
|
+
:diagnose_plugins => {
|
|
45
|
+
:driver => { :name => "driva", :a => "b" },
|
|
46
|
+
:provisioner => { :name => "presto", :i => "j" },
|
|
47
|
+
:transport => { :name => "tressa", :k => "l" },
|
|
48
|
+
:verifier => { :name => "verve", :g => "h" }
|
|
49
|
+
}
|
|
50
|
+
)
|
|
51
|
+
]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "#read returns a Hash" do
|
|
55
|
+
Kitchen::Diagnostic.new.read.must_be_instance_of Hash
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "#read returns the version of Test Kitchen" do
|
|
59
|
+
Kitchen::Diagnostic.new.read["kitchen_version"].must_equal Kitchen::VERSION
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "#read returns a timestamp in UTC" do
|
|
63
|
+
Time.stubs(:now).returns(Time.at(0))
|
|
64
|
+
|
|
65
|
+
Kitchen::Diagnostic.new.read["timestamp"].
|
|
66
|
+
must_equal "1970-01-01 00:00:00 UTC"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "#read doesn't return a loader hash if not given one" do
|
|
70
|
+
Kitchen::Diagnostic.new.read.key?("loader").must_equal false
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "#read returns the loader's diganose hash if a loader is present" do
|
|
74
|
+
Kitchen::Diagnostic.new(:loader => loader).
|
|
75
|
+
read["loader"].must_equal("who" => "loader")
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "#read returns an error hash for loader if error hash is passed in" do
|
|
79
|
+
Kitchen::Diagnostic.new(:loader => { :error => "damn" }).
|
|
80
|
+
read["loader"].must_equal("error" => "damn")
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it "#read returns the unique set of plugins' diagnose hash if :plugins is set" do
|
|
84
|
+
Kitchen::Diagnostic.new(:instances => instances, :plugins => true).
|
|
85
|
+
read["plugins"].
|
|
86
|
+
must_equal(
|
|
87
|
+
"driver" => {
|
|
88
|
+
"driva" => { "a" => "b" }
|
|
89
|
+
},
|
|
90
|
+
"provisioner" => {
|
|
91
|
+
"prov" => { "c" => "d" },
|
|
92
|
+
"presto" => { "i" => "j" }
|
|
93
|
+
},
|
|
94
|
+
"transport" => {
|
|
95
|
+
"transa" => { "e" => "f" },
|
|
96
|
+
"tressa" => { "k" => "l" }
|
|
97
|
+
},
|
|
98
|
+
"verifier" => {
|
|
99
|
+
"verve" => { "g" => "h" }
|
|
100
|
+
}
|
|
101
|
+
)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "#read returns an empty plugins hash if no instances were given" do
|
|
105
|
+
Kitchen::Diagnostic.new(:plugins => true).
|
|
106
|
+
read["plugins"].must_equal Hash.new
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "#read returns an empty instances hash if no instances were given" do
|
|
110
|
+
Kitchen::Diagnostic.new.read["instances"].must_equal Hash.new
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it "#read returns an error hash for plugins if error hash is passed in" do
|
|
114
|
+
Kitchen::Diagnostic.new(
|
|
115
|
+
:instances => { :error => "shoot" }, :plugins => true
|
|
116
|
+
).read["plugins"].must_equal("error" => "shoot")
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "#read returns the instances' diganose hashes if instances are present" do
|
|
120
|
+
Kitchen::Diagnostic.new(:instances => instances).
|
|
121
|
+
read["instances"].
|
|
122
|
+
must_equal("i1" => { "stuff" => "sup" }, "i2" => { "stuff" => "yo" })
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "#read returns an error hash for instances if error hash is passed in" do
|
|
126
|
+
Kitchen::Diagnostic.new(:instances => { :error => "shoot" }).
|
|
127
|
+
read["instances"].must_equal("error" => "shoot")
|
|
128
|
+
end
|
|
129
|
+
end
|
|
@@ -1,121 +1,121 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
#
|
|
3
|
-
# Author:: Fletcher Nichol (<fnichol@nichol.ca>)
|
|
4
|
-
#
|
|
5
|
-
# Copyright (C) 2012, 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 "logger"
|
|
21
|
-
require "stringio"
|
|
22
|
-
|
|
23
|
-
require "kitchen"
|
|
24
|
-
|
|
25
|
-
module Kitchen
|
|
26
|
-
|
|
27
|
-
module Driver
|
|
28
|
-
|
|
29
|
-
class Speedy < Base
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
class Dodgy < Base
|
|
33
|
-
|
|
34
|
-
no_parallel_for :setup
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
class Slow < Base
|
|
38
|
-
|
|
39
|
-
no_parallel_for :create, :destroy
|
|
40
|
-
no_parallel_for :verify
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
describe Kitchen::Driver::Base do
|
|
46
|
-
|
|
47
|
-
let(:logged_output) { StringIO.new }
|
|
48
|
-
let(:logger) { Logger.new(logged_output) }
|
|
49
|
-
let(:config) { Hash.new }
|
|
50
|
-
let(:state) { Hash.new }
|
|
51
|
-
|
|
52
|
-
let(:busser) do
|
|
53
|
-
stub(:setup_cmd => "setup", :sync_cmd => "sync", :run_cmd => "run")
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
let(:instance) do
|
|
57
|
-
stub(
|
|
58
|
-
:name => "coolbeans",
|
|
59
|
-
:logger => logger,
|
|
60
|
-
:busser => busser,
|
|
61
|
-
:to_str => "instance"
|
|
62
|
-
)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
let(:driver) do
|
|
66
|
-
Kitchen::Driver::Base.new(config).finalize_config!(instance)
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
it "#instance returns its instance" do
|
|
70
|
-
driver.instance.must_equal instance
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "#puts calls logger.info" do
|
|
74
|
-
driver.send(:puts, "yo")
|
|
75
|
-
|
|
76
|
-
logged_output.string.must_match(/I, /)
|
|
77
|
-
logged_output.string.must_match(/yo\n/)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it "#print calls logger.info" do
|
|
81
|
-
driver.send(:print, "yo")
|
|
82
|
-
|
|
83
|
-
logged_output.string.must_match(/I, /)
|
|
84
|
-
logged_output.string.must_match(/yo\n/)
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
[:create, :setup, :verify, :destroy].each do |action|
|
|
88
|
-
|
|
89
|
-
it "has a #{action} method that takes state" do
|
|
90
|
-
# TODO: revert back
|
|
91
|
-
# state = Hash.new
|
|
92
|
-
# driver.public_send(action, state).must_be_nil
|
|
93
|
-
driver.respond_to?(action)
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
describe ".no_parallel_for" do
|
|
98
|
-
|
|
99
|
-
it "registers no serial actions when none are declared" do
|
|
100
|
-
Kitchen::Driver::Speedy.serial_actions.must_equal nil
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
it "registers a single serial action method" do
|
|
104
|
-
Kitchen::Driver::Dodgy.serial_actions.must_equal [:setup]
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "registers multiple serial action methods" do
|
|
108
|
-
actions = Kitchen::Driver::Slow.serial_actions
|
|
109
|
-
|
|
110
|
-
actions.must_include :create
|
|
111
|
-
actions.must_include :verify
|
|
112
|
-
actions.must_include :destroy
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "raises a ClientError if value is not an action method" do
|
|
116
|
-
proc {
|
|
117
|
-
Class.new(Kitchen::Driver::Base) { no_parallel_for :telling_stories }
|
|
118
|
-
}.must_raise Kitchen::ClientError
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
end
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
#
|
|
3
|
+
# Author:: Fletcher Nichol (<fnichol@nichol.ca>)
|
|
4
|
+
#
|
|
5
|
+
# Copyright (C) 2012, 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 "logger"
|
|
21
|
+
require "stringio"
|
|
22
|
+
|
|
23
|
+
require "kitchen"
|
|
24
|
+
|
|
25
|
+
module Kitchen
|
|
26
|
+
|
|
27
|
+
module Driver
|
|
28
|
+
|
|
29
|
+
class Speedy < Base
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class Dodgy < Base
|
|
33
|
+
|
|
34
|
+
no_parallel_for :setup
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class Slow < Base
|
|
38
|
+
|
|
39
|
+
no_parallel_for :create, :destroy
|
|
40
|
+
no_parallel_for :verify
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe Kitchen::Driver::Base do
|
|
46
|
+
|
|
47
|
+
let(:logged_output) { StringIO.new }
|
|
48
|
+
let(:logger) { Logger.new(logged_output) }
|
|
49
|
+
let(:config) { Hash.new }
|
|
50
|
+
let(:state) { Hash.new }
|
|
51
|
+
|
|
52
|
+
let(:busser) do
|
|
53
|
+
stub(:setup_cmd => "setup", :sync_cmd => "sync", :run_cmd => "run")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
let(:instance) do
|
|
57
|
+
stub(
|
|
58
|
+
:name => "coolbeans",
|
|
59
|
+
:logger => logger,
|
|
60
|
+
:busser => busser,
|
|
61
|
+
:to_str => "instance"
|
|
62
|
+
)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
let(:driver) do
|
|
66
|
+
Kitchen::Driver::Base.new(config).finalize_config!(instance)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "#instance returns its instance" do
|
|
70
|
+
driver.instance.must_equal instance
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "#puts calls logger.info" do
|
|
74
|
+
driver.send(:puts, "yo")
|
|
75
|
+
|
|
76
|
+
logged_output.string.must_match(/I, /)
|
|
77
|
+
logged_output.string.must_match(/yo\n/)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "#print calls logger.info" do
|
|
81
|
+
driver.send(:print, "yo")
|
|
82
|
+
|
|
83
|
+
logged_output.string.must_match(/I, /)
|
|
84
|
+
logged_output.string.must_match(/yo\n/)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
[:create, :setup, :verify, :destroy].each do |action|
|
|
88
|
+
|
|
89
|
+
it "has a #{action} method that takes state" do
|
|
90
|
+
# TODO: revert back
|
|
91
|
+
# state = Hash.new
|
|
92
|
+
# driver.public_send(action, state).must_be_nil
|
|
93
|
+
driver.respond_to?(action)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
describe ".no_parallel_for" do
|
|
98
|
+
|
|
99
|
+
it "registers no serial actions when none are declared" do
|
|
100
|
+
Kitchen::Driver::Speedy.serial_actions.must_equal nil
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "registers a single serial action method" do
|
|
104
|
+
Kitchen::Driver::Dodgy.serial_actions.must_equal [:setup]
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "registers multiple serial action methods" do
|
|
108
|
+
actions = Kitchen::Driver::Slow.serial_actions
|
|
109
|
+
|
|
110
|
+
actions.must_include :create
|
|
111
|
+
actions.must_include :verify
|
|
112
|
+
actions.must_include :destroy
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it "raises a ClientError if value is not an action method" do
|
|
116
|
+
proc {
|
|
117
|
+
Class.new(Kitchen::Driver::Base) { no_parallel_for :telling_stories }
|
|
118
|
+
}.must_raise Kitchen::ClientError
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|