test-kitchen 1.4.1 → 1.4.2
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/CHANGELOG.md +23 -1
- data/Rakefile +2 -2
- data/appveyor.yml +34 -0
- data/features/support/env.rb +8 -4
- data/lib/kitchen.rb +4 -4
- data/lib/kitchen/base64_stream.rb +2 -2
- data/lib/kitchen/driver/base.rb +0 -2
- data/lib/kitchen/generator/driver_create.rb +2 -2
- data/lib/kitchen/provisioner/base.rb +0 -2
- data/lib/kitchen/provisioner/chef_base.rb +3 -2
- data/lib/kitchen/provisioner/chef_zero.rb +9 -3
- data/lib/kitchen/provisioner/dummy.rb +1 -1
- data/lib/kitchen/transport/base.rb +0 -2
- data/lib/kitchen/transport/ssh.rb +19 -9
- data/lib/kitchen/verifier/base.rb +0 -2
- data/lib/kitchen/verifier/dummy.rb +1 -1
- data/lib/kitchen/version.rb +1 -1
- data/spec/kitchen/configurable_spec.rb +8 -6
- data/spec/kitchen/data_munger_spec.rb +1 -1
- data/spec/kitchen/loader/yaml_spec.rb +1 -1
- data/spec/kitchen/provisioner/chef_base_spec.rb +31 -7
- data/spec/kitchen/provisioner/chef_zero_spec.rb +0 -1
- data/spec/kitchen/provisioner/shell_spec.rb +15 -6
- data/spec/kitchen/ssh_spec.rb +21 -14
- data/spec/kitchen/transport/ssh_spec.rb +40 -34
- data/spec/kitchen/transport/winrm_spec.rb +18 -20
- data/spec/kitchen/verifier/busser_spec.rb +3 -7
- data/spec/spec_helper.rb +30 -1
- data/support/chef_base_install_command.ps1 +5 -3
- data/support/chef_base_install_command.sh +11 -2
- data/test-kitchen.gemspec +3 -3
- metadata +13 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed6240c00a8d6ca35986ab16735134c1fe4368b1
|
4
|
+
data.tar.gz: 3b4324d554794093cc15ebd2f82e9bca3c426074
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1949f7688de24d288aa21d15f4d1bc80dc049937b60ab56e3ac445211e7c68c57fcb7c2b1f3fc93fa25e341f2dd9907494ecdcfcda4518dd2939cbed22fec3f
|
7
|
+
data.tar.gz: a8713a783d3ff9b2dff382e790a1496ec75b1f305bab75b02d0a5a36f505995c4b998f2a0a057d6d7443371757b50d69aa732b1d16a467211378500b021836d3
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
## 1.4.2
|
2
|
+
|
3
|
+
### Potentially breaking changes
|
4
|
+
|
5
|
+
### Bug fixes
|
6
|
+
|
7
|
+
* PR [#801][]: Use compression `true` instead of `'zlib'` by default, supports net-ssh 2.10. Old values of `'zlib'` and `'none'` are cast to `'zlib[@openssh][].com'` and `false` respectively but are deprecated. In 2.0 this casting will be removed. ([@coderanger][])
|
8
|
+
* PR [#802][]: net-ssh 2.10 throws a different error than 2.9 when connection times out, so we need to retry that. We now retry both the 2.9 and 2.10 errors. ([@Annih][])
|
9
|
+
* Pinning to net-ssh < 2.10 because 2.10 no longer works with Ruby 1.9 and TK still does ([@tyler-ball][])
|
10
|
+
|
11
|
+
### New features
|
12
|
+
|
13
|
+
### Improvements
|
14
|
+
|
15
|
+
* PR [#689][]: Fixing tests to run on Windows and adding AppVeyor builds. ([@tyler-ball][] and [@smurawski][])
|
16
|
+
|
1
17
|
## 1.4.1 / 2015-06-18
|
2
18
|
|
3
19
|
### Potentially breaking changes
|
@@ -745,6 +761,7 @@ The initial release.
|
|
745
761
|
[#674]: https://github.com/test-kitchen/test-kitchen/issues/674
|
746
762
|
[#675]: https://github.com/test-kitchen/test-kitchen/issues/675
|
747
763
|
[#688]: https://github.com/test-kitchen/test-kitchen/issues/688
|
764
|
+
[#689]: https://github.com/test-kitchen/test-kitchen/issues/689
|
748
765
|
[#704]: https://github.com/test-kitchen/test-kitchen/issues/704
|
749
766
|
[#711]: https://github.com/test-kitchen/test-kitchen/issues/711
|
750
767
|
[#728]: https://github.com/test-kitchen/test-kitchen/issues/728
|
@@ -752,6 +769,9 @@ The initial release.
|
|
752
769
|
[#734]: https://github.com/test-kitchen/test-kitchen/issues/734
|
753
770
|
[#736]: https://github.com/test-kitchen/test-kitchen/issues/736
|
754
771
|
[#737]: https://github.com/test-kitchen/test-kitchen/issues/737
|
772
|
+
[#801]: https://github.com/test-kitchen/test-kitchen/issues/801
|
773
|
+
[#802]: https://github.com/test-kitchen/test-kitchen/issues/802
|
774
|
+
[@Annih]: https://github.com/Annih
|
755
775
|
[@ChrisLundquist]: https://github.com/ChrisLundquist
|
756
776
|
[@MarkGibbons]: https://github.com/MarkGibbons
|
757
777
|
[@adamhjk]: https://github.com/adamhjk
|
@@ -804,6 +824,7 @@ The initial release.
|
|
804
824
|
[@mthssdrbrg]: https://github.com/mthssdrbrg
|
805
825
|
[@mwrock]: https://github.com/mwrock
|
806
826
|
[@oferrigni]: https://github.com/oferrigni
|
827
|
+
[@openssh]: https://github.com/openssh
|
807
828
|
[@patcon]: https://github.com/patcon
|
808
829
|
[@portertech]: https://github.com/portertech
|
809
830
|
[@rarenerd]: https://github.com/rarenerd
|
@@ -821,6 +842,7 @@ The initial release.
|
|
821
842
|
[@scotthain]: https://github.com/scotthain
|
822
843
|
[@sethvargo]: https://github.com/sethvargo
|
823
844
|
[@smith]: https://github.com/smith
|
845
|
+
[@smurawski]: https://github.com/smurawski
|
824
846
|
[@someara]: https://github.com/someara
|
825
847
|
[@srenatus]: https://github.com/srenatus
|
826
848
|
[@stevendanna]: https://github.com/stevendanna
|
@@ -829,4 +851,4 @@ The initial release.
|
|
829
851
|
[@tyler-ball]: https://github.com/tyler-ball
|
830
852
|
[@whiteley]: https://github.com/whiteley
|
831
853
|
[@zl4bv]: https://github.com/zl4bv
|
832
|
-
[@zts]: https://github.com/zts
|
854
|
+
[@zts]: https://github.com/zts
|
data/Rakefile
CHANGED
@@ -12,7 +12,7 @@ end
|
|
12
12
|
require "cucumber"
|
13
13
|
require "cucumber/rake/task"
|
14
14
|
Cucumber::Rake::Task.new(:features) do |t|
|
15
|
-
t.cucumber_opts = ["features", "-x", "--format progress"]
|
15
|
+
t.cucumber_opts = ["features", "-x", "--format progress", "--no-color"]
|
16
16
|
end
|
17
17
|
|
18
18
|
desc "Run all test suites"
|
@@ -29,7 +29,7 @@ end
|
|
29
29
|
require "finstyle"
|
30
30
|
require "rubocop/rake_task"
|
31
31
|
RuboCop::RakeTask.new(:style) do |task|
|
32
|
-
task.options
|
32
|
+
task.options += ["--display-cop-names", "--no-color"]
|
33
33
|
end
|
34
34
|
|
35
35
|
if RUBY_ENGINE != "jruby"
|
data/appveyor.yml
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
version: "master-{build}"
|
2
|
+
|
3
|
+
os: Windows Server 2012
|
4
|
+
platform:
|
5
|
+
- x64
|
6
|
+
|
7
|
+
environment:
|
8
|
+
matrix:
|
9
|
+
- ruby_version: "200"
|
10
|
+
|
11
|
+
clone_folder: c:\projects\test_kitchen
|
12
|
+
clone_depth: 1
|
13
|
+
skip_tags: true
|
14
|
+
|
15
|
+
branches:
|
16
|
+
only:
|
17
|
+
- master
|
18
|
+
|
19
|
+
install:
|
20
|
+
- winrm quickconfig -q
|
21
|
+
- SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
|
22
|
+
- echo %PATH%
|
23
|
+
- ruby --version
|
24
|
+
- gem --version
|
25
|
+
- gem install bundler --quiet --no-ri --no-rdoc
|
26
|
+
- bundler --version
|
27
|
+
|
28
|
+
build_script:
|
29
|
+
- bundle install || bundle install || bundle install
|
30
|
+
|
31
|
+
test_script:
|
32
|
+
- SET SPEC_OPTS=--format progress
|
33
|
+
- bundle exec rake unit
|
34
|
+
- bundle exec rake quality
|
data/features/support/env.rb
CHANGED
@@ -10,7 +10,11 @@ require "kitchen/cli"
|
|
10
10
|
class ArubaHelper
|
11
11
|
|
12
12
|
def initialize(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel)
|
13
|
-
@argv
|
13
|
+
@argv = argv
|
14
|
+
@stdin = stdin
|
15
|
+
@stdout = stdout
|
16
|
+
@stderr = stderr
|
17
|
+
@kernel = kernel
|
14
18
|
end
|
15
19
|
|
16
20
|
def execute!
|
@@ -27,12 +31,12 @@ Before do
|
|
27
31
|
@aruba_timeout_seconds = 15
|
28
32
|
@cleanup_dirs = []
|
29
33
|
|
30
|
-
Aruba::InProcess.main_class = ArubaHelper
|
31
|
-
Aruba.process = Aruba::InProcess
|
34
|
+
Aruba::Processes::InProcess.main_class = ArubaHelper
|
35
|
+
Aruba.process = Aruba::Processes::InProcess
|
32
36
|
end
|
33
37
|
|
34
38
|
Before("@spawn") do
|
35
|
-
Aruba.process = Aruba::SpawnProcess
|
39
|
+
Aruba.process = Aruba::Processes::SpawnProcess
|
36
40
|
end
|
37
41
|
|
38
42
|
After do |s|
|
data/lib/kitchen.rb
CHANGED
@@ -89,10 +89,10 @@ module Kitchen
|
|
89
89
|
log_location = log_location.to_s
|
90
90
|
|
91
91
|
Logger.new(
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
92
|
+
:stdout => $stdout,
|
93
|
+
:logdev => log_location,
|
94
|
+
:level => Util.to_logger_level(level),
|
95
|
+
:log_overwrite => log_overwrite
|
96
96
|
)
|
97
97
|
end
|
98
98
|
|
@@ -31,7 +31,7 @@ module Kitchen
|
|
31
31
|
# @param io_in [#read] input stream
|
32
32
|
# @param io_out [#write] output stream
|
33
33
|
def self.strict_encode(io_in, io_out)
|
34
|
-
buffer = ""
|
34
|
+
buffer = ""
|
35
35
|
while io_in.read(3 * 1000, buffer)
|
36
36
|
io_out.write([buffer].pack("m0"))
|
37
37
|
end
|
@@ -45,7 +45,7 @@ module Kitchen
|
|
45
45
|
# @param io_in [#read] input stream
|
46
46
|
# @param io_out [#write] output stream
|
47
47
|
def self.strict_decode(io_in, io_out)
|
48
|
-
buffer = ""
|
48
|
+
buffer = ""
|
49
49
|
while io_in.read(3 * 1000, buffer)
|
50
50
|
io_out.write(buffer.unpack("m0").first)
|
51
51
|
end
|
data/lib/kitchen/driver/base.rb
CHANGED
@@ -108,11 +108,9 @@ module Kitchen
|
|
108
108
|
#
|
109
109
|
# @param version [Integer,String] a version number
|
110
110
|
#
|
111
|
-
# rubocop:disable Style/TrivialAccessors
|
112
111
|
def self.kitchen_driver_api_version(version)
|
113
112
|
@api_version = version
|
114
113
|
end
|
115
|
-
# rubocop:enable Style/TrivialAccessors
|
116
114
|
|
117
115
|
private
|
118
116
|
|
@@ -129,7 +129,7 @@ module Kitchen
|
|
129
129
|
# found
|
130
130
|
# @api private
|
131
131
|
def author
|
132
|
-
git_user_name =
|
132
|
+
git_user_name = `git config user.name`.chomp
|
133
133
|
git_user_name.empty? ? "TODO: Write your name" : git_user_name
|
134
134
|
end
|
135
135
|
|
@@ -137,7 +137,7 @@ module Kitchen
|
|
137
137
|
# if found
|
138
138
|
# @api private
|
139
139
|
def email
|
140
|
-
git_user_email =
|
140
|
+
git_user_email = `git config user.email`.chomp
|
141
141
|
git_user_email.empty? ? "TODO: Write your email" : git_user_email
|
142
142
|
end
|
143
143
|
|
@@ -176,11 +176,9 @@ module Kitchen
|
|
176
176
|
#
|
177
177
|
# @param version [Integer,String] a version number
|
178
178
|
#
|
179
|
-
# rubocop:disable Style/TrivialAccessors
|
180
179
|
def self.kitchen_provisioner_api_version(version)
|
181
180
|
@api_version = version
|
182
181
|
end
|
183
|
-
# rubocop:enable Style/TrivialAccessors
|
184
182
|
|
185
183
|
private
|
186
184
|
|
@@ -19,6 +19,7 @@
|
|
19
19
|
require "fileutils"
|
20
20
|
require "pathname"
|
21
21
|
require "json"
|
22
|
+
require "cgi"
|
22
23
|
|
23
24
|
require "kitchen/provisioner/chef/berkshelf"
|
24
25
|
require "kitchen/provisioner/chef/common_sandbox"
|
@@ -112,7 +113,7 @@ module Kitchen
|
|
112
113
|
|
113
114
|
url = "#{base}#{metadata_project_from_options}"
|
114
115
|
url << "?p=windows&m=x86_64&pv=2008r2" # same pacakge for all versions
|
115
|
-
url << "&v=#{version.to_s.downcase}"
|
116
|
+
url << "&v=#{CGI.escape(version.to_s.downcase)}"
|
116
117
|
url
|
117
118
|
end
|
118
119
|
|
@@ -257,7 +258,7 @@ module Kitchen
|
|
257
258
|
# @return [String] shell variable lines
|
258
259
|
# @api private
|
259
260
|
def install_command_vars_for_bourne(version)
|
260
|
-
install_flags = %w[latest true].include?(version) ? "" : "-v #{version}"
|
261
|
+
install_flags = %w[latest true].include?(version) ? "" : "-v #{CGI.escape(version)}"
|
261
262
|
if config[:chef_omnibus_install_options]
|
262
263
|
install_flags << " " << config[:chef_omnibus_install_options]
|
263
264
|
end
|
@@ -99,10 +99,10 @@ module Kitchen
|
|
99
99
|
# these flags are modern/chef-client local most only and will not work
|
100
100
|
# on older versions of chef-client
|
101
101
|
if config[:chef_zero_host]
|
102
|
-
args <<
|
102
|
+
args << "--chef-zero-host #{config[:chef_zero_host]}"
|
103
103
|
end
|
104
104
|
if config[:chef_zero_port]
|
105
|
-
args <<
|
105
|
+
args << "--chef-zero-port #{config[:chef_zero_port]}"
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
@@ -169,7 +169,13 @@ module Kitchen
|
|
169
169
|
when nil, false, true, 11, "11", "latest"
|
170
170
|
true
|
171
171
|
else
|
172
|
-
Gem::Version.
|
172
|
+
if Gem::Version.correct?(version)
|
173
|
+
Gem::Version.new(version) >= Gem::Version.new("11.8.0") ? true : false
|
174
|
+
else
|
175
|
+
# Build versions of chef, for example
|
176
|
+
# 12.5.0-current.0+20150721082808.git.14.c91b337-1
|
177
|
+
true
|
178
|
+
end
|
173
179
|
end
|
174
180
|
end
|
175
181
|
|
@@ -58,7 +58,7 @@ module Kitchen
|
|
58
58
|
#
|
59
59
|
# @api private
|
60
60
|
def failure_if_set
|
61
|
-
if config[:
|
61
|
+
if config[:fail]
|
62
62
|
debug("Failure for Provisioner #{name}.")
|
63
63
|
raise ActionFailed, "Action #converge failed for #{instance.to_str}."
|
64
64
|
elsif config[:random_failure] && randomly_fail?
|
@@ -161,11 +161,9 @@ module Kitchen
|
|
161
161
|
#
|
162
162
|
# @param version [Integer,String] a version number
|
163
163
|
#
|
164
|
-
# rubocop:disable Style/TrivialAccessors
|
165
164
|
def self.kitchen_transport_api_version(version)
|
166
165
|
@api_version = version
|
167
166
|
end
|
168
|
-
# rubocop:enable Style/TrivialAccessors
|
169
167
|
end
|
170
168
|
end
|
171
169
|
end
|
@@ -52,16 +52,26 @@ module Kitchen
|
|
52
52
|
default_config :ssh_key, nil
|
53
53
|
expand_path_for :ssh_key
|
54
54
|
|
55
|
-
default_config :compression,
|
56
|
-
required_config :compression
|
57
|
-
if !%W[zlib none].include?(value)
|
58
|
-
raise UserError, "#{transport} :#{attr} value may only " \
|
59
|
-
"be set to `none' or `zlib'."
|
60
|
-
end
|
61
|
-
end
|
55
|
+
default_config :compression, true
|
56
|
+
required_config :compression
|
62
57
|
|
63
58
|
default_config :compression_level do |transport|
|
64
|
-
transport[:compression] ==
|
59
|
+
transport[:compression] == false ? 0 : 6
|
60
|
+
end
|
61
|
+
|
62
|
+
def finalize_config!(instance)
|
63
|
+
super
|
64
|
+
|
65
|
+
# zlib was never a valid value and breaks in net-ssh >= 2.10
|
66
|
+
# TODO: remove these backwards compatiable casts in 2.0
|
67
|
+
case config[:compression]
|
68
|
+
when "zlib"
|
69
|
+
config[:compression] = "zlib@openssh.com"
|
70
|
+
when "none"
|
71
|
+
config[:compression] = false
|
72
|
+
end
|
73
|
+
|
74
|
+
self
|
65
75
|
end
|
66
76
|
|
67
77
|
# (see Base#connection)
|
@@ -153,7 +163,7 @@ module Kitchen
|
|
153
163
|
PING_COMMAND = "echo '[SSH] Established'".freeze
|
154
164
|
|
155
165
|
RESCUE_EXCEPTIONS_ON_ESTABLISH = [
|
156
|
-
Errno::EACCES, Errno::EADDRINUSE, Errno::ECONNREFUSED,
|
166
|
+
Errno::EACCES, Errno::EADDRINUSE, Errno::ECONNREFUSED, Errno::ETIMEDOUT,
|
157
167
|
Errno::ECONNRESET, Errno::ENETUNREACH, Errno::EHOSTUNREACH,
|
158
168
|
Net::SSH::Disconnect, Net::SSH::AuthenticationFailed, Timeout::Error
|
159
169
|
].freeze
|
@@ -181,11 +181,9 @@ module Kitchen
|
|
181
181
|
#
|
182
182
|
# @param version [Integer,String] a version number
|
183
183
|
#
|
184
|
-
# rubocop:disable Style/TrivialAccessors
|
185
184
|
def self.kitchen_verifier_api_version(version)
|
186
185
|
@api_version = version
|
187
186
|
end
|
188
|
-
# rubocop:enable Style/TrivialAccessors
|
189
187
|
|
190
188
|
private
|
191
189
|
|
@@ -58,7 +58,7 @@ module Kitchen
|
|
58
58
|
#
|
59
59
|
# @api private
|
60
60
|
def failure_if_set
|
61
|
-
if config[:
|
61
|
+
if config[:fail]
|
62
62
|
debug("Failure for Verifier #{name}.")
|
63
63
|
raise ActionFailed, "Action #verify failed for #{instance.to_str}."
|
64
64
|
elsif config[:random_failure] && randomly_fail?
|
data/lib/kitchen/version.rb
CHANGED
@@ -311,25 +311,27 @@ describe Kitchen::Configurable do
|
|
311
311
|
end
|
312
312
|
|
313
313
|
it "expands a default value" do
|
314
|
-
subject[:success_path].must_equal "/tmp/yo/self/success"
|
314
|
+
subject[:success_path].must_equal os_safe_root_path("/tmp/yo/self/success")
|
315
315
|
end
|
316
316
|
|
317
317
|
it "uses provided config over default_config" do
|
318
318
|
config[:success_path] = "mine"
|
319
319
|
|
320
|
-
subject[:success_path].must_equal "/tmp/yo/self/mine"
|
320
|
+
subject[:success_path].must_equal os_safe_root_path("/tmp/yo/self/mine")
|
321
321
|
end
|
322
322
|
|
323
323
|
it "leaves a full path expanded" do
|
324
324
|
config[:success_path] = "/the/other/one"
|
325
325
|
|
326
|
-
subject[:success_path].must_equal "/the/other/one"
|
326
|
+
subject[:success_path].must_equal os_safe_root_path("/the/other/one")
|
327
327
|
end
|
328
328
|
|
329
329
|
it "expands all items if path is an array" do
|
330
|
-
|
330
|
+
paths = %W[
|
331
331
|
/tmp/yo/self/a /tmp/yo/self/b /tmp/yo/self/c
|
332
332
|
]
|
333
|
+
os_safe_paths = paths.collect { |path| os_safe_root_path(path) }
|
334
|
+
subject[:bunch_of_paths].must_equal os_safe_paths
|
333
335
|
end
|
334
336
|
|
335
337
|
it "doesn't expand path with a falsy expand_path_for value" do
|
@@ -342,7 +344,7 @@ describe Kitchen::Configurable do
|
|
342
344
|
config[:something_else] = "is_set"
|
343
345
|
config[:complex_path] = "./complex"
|
344
346
|
|
345
|
-
subject[:complex_path].must_equal "/tmp/yo/self/complex"
|
347
|
+
subject[:complex_path].must_equal os_safe_root_path("/tmp/yo/self/complex")
|
346
348
|
end
|
347
349
|
|
348
350
|
it "leaves a nil config value as nil" do
|
@@ -369,7 +371,7 @@ describe Kitchen::Configurable do
|
|
369
371
|
end
|
370
372
|
|
371
373
|
it "contains expand_path_for from superclass" do
|
372
|
-
subject[:success_path].must_equal "/rooty/success"
|
374
|
+
subject[:success_path].must_equal os_safe_root_path("/rooty/success")
|
373
375
|
end
|
374
376
|
|
375
377
|
it "uses its own expand_path_for over inherited expand_path_for" do
|
@@ -585,7 +585,7 @@ describe Kitchen::Loader::YAML do
|
|
585
585
|
|
586
586
|
it "global config contains a filename" do
|
587
587
|
loader.diagnose[:global_config][:filename].
|
588
|
-
must_equal File.join(ENV["HOME"], ".kitchen/config.yml")
|
588
|
+
must_equal File.join(ENV["HOME"].gsub('\\', "/"), ".kitchen/config.yml")
|
589
589
|
end
|
590
590
|
|
591
591
|
it "global config contains raw data" do
|
@@ -144,6 +144,14 @@ describe Kitchen::Provisioner::ChefBase do
|
|
144
144
|
must_equal "#{base_url}?p=windows&m=x86_64&pv=2008r2&v=11.6.0.rc.1"
|
145
145
|
end
|
146
146
|
|
147
|
+
it "defaults to a nightly package from :require_chef_omnibus" do
|
148
|
+
config[:require_chef_omnibus] = "12.5.0-current.0+20150721082808.git.14.c91b337-1"
|
149
|
+
|
150
|
+
provisioner[:chef_metadata_url].
|
151
|
+
must_equal "#{base_url}?p=windows&m=x86_64&pv=2008r2&" \
|
152
|
+
"v=12.5.0-current.0%2B20150721082808.git.14.c91b337-1"
|
153
|
+
end
|
154
|
+
|
147
155
|
it "defaults to a chefdk package from :chef_omnibus_install_options" do
|
148
156
|
config[:require_chef_omnibus] = true
|
149
157
|
config[:chef_omnibus_install_options] = "-P chefdk"
|
@@ -195,33 +203,38 @@ describe Kitchen::Provisioner::ChefBase do
|
|
195
203
|
end
|
196
204
|
|
197
205
|
it ":data_path uses calculate_path and is expanded" do
|
198
|
-
provisioner[:data_path].
|
206
|
+
provisioner[:data_path].
|
207
|
+
must_equal os_safe_root_path("/rooty/<calculated>/data")
|
199
208
|
end
|
200
209
|
|
201
210
|
it ":data_bags_path uses calculate_path and is expanded" do
|
202
|
-
provisioner[:data_bags_path].
|
211
|
+
provisioner[:data_bags_path].
|
212
|
+
must_equal os_safe_root_path("/rooty/<calculated>/data_bags")
|
203
213
|
end
|
204
214
|
|
205
215
|
it ":environments_path uses calculate_path and is expanded" do
|
206
216
|
provisioner[:environments_path].
|
207
|
-
must_equal "/rooty/<calculated>/environments"
|
217
|
+
must_equal os_safe_root_path("/rooty/<calculated>/environments")
|
208
218
|
end
|
209
219
|
|
210
220
|
it ":nodes_path uses calculate_path and is expanded" do
|
211
|
-
provisioner[:nodes_path].
|
221
|
+
provisioner[:nodes_path].
|
222
|
+
must_equal os_safe_root_path("/rooty/<calculated>/nodes")
|
212
223
|
end
|
213
224
|
|
214
225
|
it ":roles_path uses calculate_path and is expanded" do
|
215
|
-
provisioner[:roles_path].
|
226
|
+
provisioner[:roles_path].
|
227
|
+
must_equal os_safe_root_path("/rooty/<calculated>/roles")
|
216
228
|
end
|
217
229
|
|
218
230
|
it ":clients_path uses calculate_path and is expanded" do
|
219
|
-
provisioner[:clients_path].
|
231
|
+
provisioner[:clients_path].
|
232
|
+
must_equal os_safe_root_path("/rooty/<calculated>/clients")
|
220
233
|
end
|
221
234
|
|
222
235
|
it "...secret_key_path uses calculate_path and is expanded" do
|
223
236
|
provisioner[:encrypted_data_bag_secret_key_path].
|
224
|
-
must_equal "/rooty/<calculated>/encrypted_data_bag_secret_key"
|
237
|
+
must_equal os_safe_root_path("/rooty/<calculated>/encrypted_data_bag_secret_key")
|
225
238
|
end
|
226
239
|
end
|
227
240
|
|
@@ -315,6 +328,17 @@ describe Kitchen::Provisioner::ChefBase do
|
|
315
328
|
cmd.must_match regexify(%{version="10.1.0.rc.1"})
|
316
329
|
end
|
317
330
|
|
331
|
+
it "will install a nightly, if necessary" do
|
332
|
+
config[:require_chef_omnibus] = "12.5.0-current.0+20150721082808.git.14.c91b337-1"
|
333
|
+
|
334
|
+
cmd.must_match(
|
335
|
+
regexify(%{install_flags="-v 12.5.0-current.0%2B20150721082808.git.14.c91b337-1"}))
|
336
|
+
cmd.must_match(
|
337
|
+
regexify(%{pretty_version="12.5.0-current.0+20150721082808.git.14.c91b337-1"}))
|
338
|
+
cmd.must_match(
|
339
|
+
regexify(%{version="12.5.0-current.0+20150721082808.git.14.c91b337-1"}))
|
340
|
+
end
|
341
|
+
|
318
342
|
it "will install the latest of chef, if necessary" do
|
319
343
|
config[:require_chef_omnibus] = "latest"
|
320
344
|
|
@@ -810,7 +810,6 @@ describe Kitchen::Provisioner::ChefZero do
|
|
810
810
|
config[:require_chef_omnibus] = "10.20"
|
811
811
|
end
|
812
812
|
|
813
|
-
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
814
813
|
def self.common_old_shell_specs
|
815
814
|
it "does not set local mode flag" do
|
816
815
|
cmd.wont_match regexify(" --local-mode", :partial_line)
|
@@ -66,7 +66,7 @@ describe Kitchen::Provisioner::Shell do
|
|
66
66
|
before { platform.stubs(:shell_type).returns("bourne") }
|
67
67
|
|
68
68
|
it ":script uses calculate_path and is expanded" do
|
69
|
-
provisioner[:script].must_equal "/rooty/<calculated>/bootstrap.sh"
|
69
|
+
provisioner[:script].must_equal os_safe_root_path("/rooty/<calculated>/bootstrap.sh")
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
@@ -75,12 +75,12 @@ describe Kitchen::Provisioner::Shell do
|
|
75
75
|
before { platform.stubs(:shell_type).returns("powershell") }
|
76
76
|
|
77
77
|
it ":script uses calculate_path and is expanded" do
|
78
|
-
provisioner[:script].must_equal "/rooty/<calculated>/bootstrap.ps1"
|
78
|
+
provisioner[:script].must_equal os_safe_root_path("/rooty/<calculated>/bootstrap.ps1")
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
82
|
it ":data_path uses calculate_path and is expanded" do
|
83
|
-
provisioner[:data_path].must_equal "/rooty/<calculated>/data"
|
83
|
+
provisioner[:data_path].must_equal os_safe_root_path("/rooty/<calculated>/data")
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
@@ -398,7 +398,10 @@ describe Kitchen::Provisioner::Shell do
|
|
398
398
|
provisioner.create_sandbox
|
399
399
|
|
400
400
|
sandbox_path("my_script").file?.must_equal true
|
401
|
-
|
401
|
+
unless running_tests_on_windows?
|
402
|
+
# Windows doesn't have the concept of executable
|
403
|
+
sandbox_path("my_script").executable?.must_equal true
|
404
|
+
end
|
402
405
|
IO.read(sandbox_path("my_script")).must_equal "gonuts"
|
403
406
|
end
|
404
407
|
|
@@ -442,7 +445,10 @@ describe Kitchen::Provisioner::Shell do
|
|
442
445
|
provisioner.create_sandbox
|
443
446
|
|
444
447
|
sandbox_path("bootstrap.sh").file?.must_equal true
|
445
|
-
|
448
|
+
unless running_tests_on_windows?
|
449
|
+
# Windows doesn't have the concept of executable
|
450
|
+
sandbox_path("bootstrap.sh").executable?.must_equal true
|
451
|
+
end
|
446
452
|
IO.read(sandbox_path("bootstrap.sh")).
|
447
453
|
must_match(/NO BOOTSTRAP SCRIPT PRESENT/)
|
448
454
|
end
|
@@ -470,7 +476,10 @@ describe Kitchen::Provisioner::Shell do
|
|
470
476
|
provisioner.create_sandbox
|
471
477
|
|
472
478
|
sandbox_path("bootstrap.ps1").file?.must_equal true
|
473
|
-
|
479
|
+
unless running_tests_on_windows?
|
480
|
+
# Windows doesn't have the concept of executable
|
481
|
+
sandbox_path("bootstrap.ps1").executable?.must_equal true
|
482
|
+
end
|
474
483
|
IO.read(sandbox_path("bootstrap.ps1")).
|
475
484
|
must_match(/Write-Host "NO BOOTSTRAP SCRIPT PRESENT`n"/)
|
476
485
|
end
|
data/spec/kitchen/ssh_spec.rb
CHANGED
@@ -36,7 +36,7 @@ def with_sorted_dir_entries
|
|
36
36
|
class << self
|
37
37
|
alias_method :__entries__, :entries unless method_defined?(:__entries__)
|
38
38
|
|
39
|
-
def entries(*args)
|
39
|
+
def entries(*args) # rubocop:disable Lint/NestedMethodDefinition
|
40
40
|
send(:__entries__, *args).sort
|
41
41
|
end
|
42
42
|
end
|
@@ -95,7 +95,7 @@ module Net
|
|
95
95
|
pty_data = ["xterm", 80, 24, 640, 480, "\0"]
|
96
96
|
|
97
97
|
script.events << Class.new(Net::SSH::Test::LocalPacket) do
|
98
|
-
def types
|
98
|
+
def types # rubocop:disable Lint/NestedMethodDefinition
|
99
99
|
if @type == 98 && @data[1] == "pty-req"
|
100
100
|
@types ||= [
|
101
101
|
:long, :string, :bool, :string,
|
@@ -158,9 +158,9 @@ describe Kitchen::SSH do
|
|
158
158
|
rescue # rubocop:disable Lint/HandleExceptions
|
159
159
|
end
|
160
160
|
|
161
|
-
logged_output.string.lines.
|
161
|
+
logged_output.string.lines.count { |l|
|
162
162
|
l =~ debug_line("[SSH] opening connection to me@foo:22<{:ssh_retries=>3}>")
|
163
|
-
}.
|
163
|
+
}.must_equal opts[:ssh_retries]
|
164
164
|
end
|
165
165
|
|
166
166
|
it "sleeps for 1 second between retries" do
|
@@ -179,9 +179,9 @@ describe Kitchen::SSH do
|
|
179
179
|
rescue # rubocop:disable Lint/HandleExceptions
|
180
180
|
end
|
181
181
|
|
182
|
-
logged_output.string.lines.
|
182
|
+
logged_output.string.lines.count { |l|
|
183
183
|
l =~ info_line_with("[SSH] connection failed, retrying ")
|
184
|
-
}.
|
184
|
+
}.must_equal 2
|
185
185
|
end
|
186
186
|
|
187
187
|
it "logs the last retry failures on warn" do
|
@@ -190,9 +190,9 @@ describe Kitchen::SSH do
|
|
190
190
|
rescue # rubocop:disable Lint/HandleExceptions
|
191
191
|
end
|
192
192
|
|
193
|
-
logged_output.string.lines.
|
193
|
+
logged_output.string.lines.count { |l|
|
194
194
|
l =~ warn_line_with("[SSH] connection failed, terminating ")
|
195
|
-
}.
|
195
|
+
}.must_equal 1
|
196
196
|
end
|
197
197
|
end
|
198
198
|
end
|
@@ -320,8 +320,9 @@ describe Kitchen::SSH do
|
|
320
320
|
|
321
321
|
before do
|
322
322
|
expect_scp_session("-t /tmp/remote") do |channel|
|
323
|
+
file_mode = running_tests_on_windows? ? 0644 : 0755
|
323
324
|
channel.gets_data("\0")
|
324
|
-
channel.sends_data("
|
325
|
+
channel.sends_data("C#{padded_octal_string(file_mode)} 1234 #{File.basename(src.path)}\n")
|
325
326
|
channel.gets_data("\0")
|
326
327
|
channel.sends_data("a" * 1234)
|
327
328
|
channel.sends_data("\0")
|
@@ -357,6 +358,12 @@ describe Kitchen::SSH do
|
|
357
358
|
|
358
359
|
before do
|
359
360
|
@dir = Dir.mktmpdir("local")
|
361
|
+
|
362
|
+
# Since File.chmod is a NOOP on Windows
|
363
|
+
@tmp_dir_mode = running_tests_on_windows? ? 0755 : 0700
|
364
|
+
@alpha_file_mode = running_tests_on_windows? ? 0644 : 0644
|
365
|
+
@beta_file_mode = running_tests_on_windows? ? 0444 : 0555
|
366
|
+
|
360
367
|
FileUtils.chmod(0700, @dir)
|
361
368
|
File.open("#{@dir}/alpha", "wb") { |f| f.write("alpha-contents\n") }
|
362
369
|
FileUtils.chmod(0644, "#{@dir}/alpha")
|
@@ -369,16 +376,16 @@ describe Kitchen::SSH do
|
|
369
376
|
|
370
377
|
expect_scp_session("-t -r /tmp/remote") do |channel|
|
371
378
|
channel.gets_data("\0")
|
372
|
-
channel.sends_data("
|
379
|
+
channel.sends_data("D#{padded_octal_string(@tmp_dir_mode)} 0 #{File.basename(@dir)}\n")
|
373
380
|
channel.gets_data("\0")
|
374
|
-
channel.sends_data("
|
381
|
+
channel.sends_data("C#{padded_octal_string(@alpha_file_mode)} 15 alpha\n")
|
375
382
|
channel.gets_data("\0")
|
376
383
|
channel.sends_data("alpha-contents\n")
|
377
384
|
channel.sends_data("\0")
|
378
385
|
channel.gets_data("\0")
|
379
386
|
channel.sends_data("D0755 0 subdir\n")
|
380
387
|
channel.gets_data("\0")
|
381
|
-
channel.sends_data("
|
388
|
+
channel.sends_data("C#{padded_octal_string(@beta_file_mode)} 14 beta\n")
|
382
389
|
channel.gets_data("\0")
|
383
390
|
channel.sends_data("beta-contents\n")
|
384
391
|
channel.sends_data("\0")
|
@@ -642,9 +649,9 @@ describe Kitchen::SSH do
|
|
642
649
|
TCPSocket.stubs(:new).returns(not_ready, not_ready, ready)
|
643
650
|
ssh.wait
|
644
651
|
|
645
|
-
logged_output.string.lines.
|
652
|
+
logged_output.string.lines.count { |l|
|
646
653
|
l =~ info_line_with("Waiting for foo:22...")
|
647
|
-
}.
|
654
|
+
}.must_equal 2
|
648
655
|
end
|
649
656
|
end
|
650
657
|
|
@@ -36,7 +36,7 @@ def with_sorted_dir_entries
|
|
36
36
|
class << self
|
37
37
|
alias_method :__entries__, :entries unless method_defined?(:__entries__)
|
38
38
|
|
39
|
-
def entries(*args)
|
39
|
+
def entries(*args) # rubocop:disable Lint/NestedMethodDefinition
|
40
40
|
send(:__entries__, *args).sort
|
41
41
|
end
|
42
42
|
end
|
@@ -95,7 +95,7 @@ module Net
|
|
95
95
|
pty_data = ["xterm", 80, 24, 640, 480, "\0"]
|
96
96
|
|
97
97
|
script.events << Class.new(Net::SSH::Test::LocalPacket) do
|
98
|
-
def types
|
98
|
+
def types # rubocop:disable Lint/NestedMethodDefinition
|
99
99
|
if @type == 98 && @data[1] == "pty-req"
|
100
100
|
@types ||= [
|
101
101
|
:long, :string, :bool, :string,
|
@@ -145,21 +145,20 @@ describe Kitchen::Transport::Ssh do
|
|
145
145
|
transport[:username].must_equal "root"
|
146
146
|
end
|
147
147
|
|
148
|
-
it "sets :compression to
|
149
|
-
transport[:compression].must_equal
|
148
|
+
it "sets :compression to true by default" do
|
149
|
+
transport[:compression].must_equal true
|
150
150
|
end
|
151
151
|
|
152
|
-
it "sets :compression to
|
152
|
+
it "sets :compression to false if set to none" do
|
153
153
|
config[:compression] = "none"
|
154
154
|
|
155
|
-
transport[:compression].must_equal
|
155
|
+
transport[:compression].must_equal false
|
156
156
|
end
|
157
157
|
|
158
|
-
it "
|
159
|
-
config[:compression] = "
|
158
|
+
it "sets :compression to zlib@openssh.com if set to zlib" do
|
159
|
+
config[:compression] = "zlib"
|
160
160
|
|
161
|
-
|
162
|
-
err.message.must_match(%r{value may only be set to `none' or `zlib'})
|
161
|
+
transport[:compression].must_equal "zlib@openssh.com"
|
163
162
|
end
|
164
163
|
|
165
164
|
it "sets :compression_level to 6 by default" do
|
@@ -204,7 +203,7 @@ describe Kitchen::Transport::Ssh do
|
|
204
203
|
config[:kitchen_root] = "/rooty"
|
205
204
|
config[:ssh_key] = "my_key"
|
206
205
|
|
207
|
-
transport[:ssh_key].must_equal "/rooty/my_key"
|
206
|
+
transport[:ssh_key].must_equal os_safe_root_path("/rooty/my_key")
|
208
207
|
end
|
209
208
|
end
|
210
209
|
|
@@ -309,7 +308,7 @@ describe Kitchen::Transport::Ssh do
|
|
309
308
|
config[:compression] = "none"
|
310
309
|
|
311
310
|
klass.expects(:new).with do |hash|
|
312
|
-
hash[:compression] ==
|
311
|
+
hash[:compression] == false
|
313
312
|
end
|
314
313
|
|
315
314
|
make_connection
|
@@ -509,7 +508,7 @@ describe Kitchen::Transport::Ssh do
|
|
509
508
|
config[:ssh_key] = "ssh_key_from_config"
|
510
509
|
|
511
510
|
klass.expects(:new).with do |hash|
|
512
|
-
hash[:keys] == ["/r/ssh_key_from_config"]
|
511
|
+
hash[:keys] == [os_safe_root_path("/r/ssh_key_from_config")]
|
513
512
|
end
|
514
513
|
|
515
514
|
make_connection
|
@@ -579,9 +578,9 @@ describe Kitchen::Transport::Ssh do
|
|
579
578
|
make_connection(state)
|
580
579
|
make_connection(state)
|
581
580
|
|
582
|
-
logged_output.string.lines.
|
581
|
+
logged_output.string.lines.count { |l|
|
583
582
|
l =~ debug_line_with("[SSH] reusing existing connection ")
|
584
|
-
}.
|
583
|
+
}.must_equal 1
|
585
584
|
end
|
586
585
|
|
587
586
|
it "returns a new connection when called again if state differs" do
|
@@ -602,9 +601,9 @@ describe Kitchen::Transport::Ssh do
|
|
602
601
|
make_connection(state)
|
603
602
|
make_connection(state.merge(:port => 9000))
|
604
603
|
|
605
|
-
logged_output.string.lines.
|
604
|
+
logged_output.string.lines.count { |l|
|
606
605
|
l =~ debug_line_with("[SSH] shutting previous connection ")
|
607
|
-
}.
|
606
|
+
}.must_equal 1
|
608
607
|
end
|
609
608
|
end
|
610
609
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
@@ -667,7 +666,7 @@ describe Kitchen::Transport::Ssh::Connection do
|
|
667
666
|
describe "establishing a connection" do
|
668
667
|
|
669
668
|
[
|
670
|
-
Errno::EACCES, Errno::EADDRINUSE, Errno::ECONNREFUSED,
|
669
|
+
Errno::EACCES, Errno::EADDRINUSE, Errno::ECONNREFUSED, Errno::ETIMEDOUT,
|
671
670
|
Errno::ECONNRESET, Errno::ENETUNREACH, Errno::EHOSTUNREACH,
|
672
671
|
Net::SSH::Disconnect, Net::SSH::AuthenticationFailed, Timeout::Error
|
673
672
|
].each do |klass|
|
@@ -694,9 +693,9 @@ describe Kitchen::Transport::Ssh::Connection do
|
|
694
693
|
# the raise is not what is being tested here, rather its side-effect
|
695
694
|
end
|
696
695
|
|
697
|
-
logged_output.string.lines.
|
696
|
+
logged_output.string.lines.count { |l|
|
698
697
|
l =~ debug_line("[SSH] opening connection to me@foo<{:port=>22}>")
|
699
|
-
}.
|
698
|
+
}.must_equal 3
|
700
699
|
end
|
701
700
|
|
702
701
|
it "sleeps for :connection_retry_sleep seconds between retries" do
|
@@ -717,10 +716,10 @@ describe Kitchen::Transport::Ssh::Connection do
|
|
717
716
|
# the raise is not what is being tested here, rather its side-effect
|
718
717
|
end
|
719
718
|
|
720
|
-
logged_output.string.lines.
|
719
|
+
logged_output.string.lines.count { |l|
|
721
720
|
l =~ info_line_with(
|
722
721
|
"[SSH] connection failed, retrying in 7 seconds")
|
723
|
-
}.
|
722
|
+
}.must_equal 2
|
724
723
|
end
|
725
724
|
|
726
725
|
it "logs the last retry failures on warn" do
|
@@ -730,9 +729,9 @@ describe Kitchen::Transport::Ssh::Connection do
|
|
730
729
|
# the raise is not what is being tested here, rather its side-effect
|
731
730
|
end
|
732
731
|
|
733
|
-
logged_output.string.lines.
|
732
|
+
logged_output.string.lines.count { |l|
|
734
733
|
l =~ warn_line_with("[SSH] connection failed, terminating ")
|
735
|
-
}.
|
734
|
+
}.must_equal 1
|
736
735
|
end
|
737
736
|
end
|
738
737
|
end
|
@@ -1018,8 +1017,9 @@ describe Kitchen::Transport::Ssh::Connection do
|
|
1018
1017
|
|
1019
1018
|
before do
|
1020
1019
|
expect_scp_session("-t /tmp/remote") do |channel|
|
1020
|
+
file_mode = running_tests_on_windows? ? 0644 : 0755
|
1021
1021
|
channel.gets_data("\0")
|
1022
|
-
channel.sends_data("
|
1022
|
+
channel.sends_data("C#{padded_octal_string(file_mode)} 1234 #{File.basename(src.path)}\n")
|
1023
1023
|
channel.gets_data("\0")
|
1024
1024
|
channel.sends_data("a" * 1234)
|
1025
1025
|
channel.sends_data("\0")
|
@@ -1054,6 +1054,12 @@ describe Kitchen::Transport::Ssh::Connection do
|
|
1054
1054
|
describe "for a path" do
|
1055
1055
|
before do
|
1056
1056
|
@dir = Dir.mktmpdir("local")
|
1057
|
+
|
1058
|
+
# Since File.chmod is a NOOP on Windows
|
1059
|
+
@tmp_dir_mode = running_tests_on_windows? ? 0755 : 0700
|
1060
|
+
@alpha_file_mode = running_tests_on_windows? ? 0644 : 0644
|
1061
|
+
@beta_file_mode = running_tests_on_windows? ? 0444 : 0555
|
1062
|
+
|
1057
1063
|
FileUtils.chmod(0700, @dir)
|
1058
1064
|
File.open("#{@dir}/alpha", "wb") { |f| f.write("alpha-contents\n") }
|
1059
1065
|
FileUtils.chmod(0644, "#{@dir}/alpha")
|
@@ -1066,16 +1072,16 @@ describe Kitchen::Transport::Ssh::Connection do
|
|
1066
1072
|
|
1067
1073
|
expect_scp_session("-t -r /tmp/remote") do |channel|
|
1068
1074
|
channel.gets_data("\0")
|
1069
|
-
channel.sends_data("
|
1075
|
+
channel.sends_data("D#{padded_octal_string(@tmp_dir_mode)} 0 #{File.basename(@dir)}\n")
|
1070
1076
|
channel.gets_data("\0")
|
1071
|
-
channel.sends_data("
|
1077
|
+
channel.sends_data("C#{padded_octal_string(@alpha_file_mode)} 15 alpha\n")
|
1072
1078
|
channel.gets_data("\0")
|
1073
1079
|
channel.sends_data("alpha-contents\n")
|
1074
1080
|
channel.sends_data("\0")
|
1075
1081
|
channel.gets_data("\0")
|
1076
1082
|
channel.sends_data("D0755 0 subdir\n")
|
1077
1083
|
channel.gets_data("\0")
|
1078
|
-
channel.sends_data("
|
1084
|
+
channel.sends_data("C#{padded_octal_string(@beta_file_mode)} 14 beta\n")
|
1079
1085
|
channel.gets_data("\0")
|
1080
1086
|
channel.sends_data("beta-contents\n")
|
1081
1087
|
channel.sends_data("\0")
|
@@ -1161,16 +1167,16 @@ describe Kitchen::Transport::Ssh::Connection do
|
|
1161
1167
|
# the raise is not what is being tested here, rather its side-effect
|
1162
1168
|
end
|
1163
1169
|
|
1164
|
-
logged_output.string.lines.
|
1170
|
+
logged_output.string.lines.count { |l|
|
1165
1171
|
l =~ info_line_with(
|
1166
1172
|
"Waiting for SSH service on foo:22, retrying in 3 seconds")
|
1167
|
-
}.
|
1168
|
-
logged_output.string.lines.
|
1173
|
+
}.must_equal((300 / 3) - 1)
|
1174
|
+
logged_output.string.lines.count { |l|
|
1169
1175
|
l =~ debug_line_with("[SSH] connection failed ")
|
1170
|
-
}.
|
1171
|
-
logged_output.string.lines.
|
1176
|
+
}.must_equal((300 / 3) - 1)
|
1177
|
+
logged_output.string.lines.count { |l|
|
1172
1178
|
l =~ warn_line_with("[SSH] connection failed, terminating ")
|
1173
|
-
}.
|
1179
|
+
}.must_equal 1
|
1174
1180
|
end
|
1175
1181
|
|
1176
1182
|
it "sleeps for 3 seconds between retries" do
|
@@ -306,9 +306,9 @@ describe Kitchen::Transport::Winrm do
|
|
306
306
|
make_connection(state)
|
307
307
|
make_connection(state)
|
308
308
|
|
309
|
-
logged_output.string.lines.
|
309
|
+
logged_output.string.lines.count { |l|
|
310
310
|
l =~ debug_line_with("[WinRM] reusing existing connection ")
|
311
|
-
}.
|
311
|
+
}.must_equal 1
|
312
312
|
end
|
313
313
|
|
314
314
|
it "returns a new connection when called again if state differs" do
|
@@ -329,9 +329,9 @@ describe Kitchen::Transport::Winrm do
|
|
329
329
|
make_connection(state)
|
330
330
|
make_connection(state.merge(:port => 9000))
|
331
331
|
|
332
|
-
logged_output.string.lines.
|
332
|
+
logged_output.string.lines.count { |l|
|
333
333
|
l =~ debug_line_with("[WinRM] shutting previous connection ")
|
334
|
-
}.
|
334
|
+
}.must_equal 1
|
335
335
|
end
|
336
336
|
end
|
337
337
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
@@ -732,12 +732,12 @@ MSG
|
|
732
732
|
# the raise is not what is being tested here, rather its side-effect
|
733
733
|
end
|
734
734
|
|
735
|
-
logged_output.string.lines.
|
735
|
+
logged_output.string.lines.count { |l|
|
736
736
|
l =~ debug_line("[WinRM] opening remote shell on #{info}")
|
737
|
-
}.
|
738
|
-
logged_output.string.lines.
|
737
|
+
}.must_equal 3
|
738
|
+
logged_output.string.lines.count { |l|
|
739
739
|
l =~ debug_line("[WinRM] remote shell shell-123 is open on #{info}")
|
740
|
-
}.
|
740
|
+
}.must_equal 0
|
741
741
|
end
|
742
742
|
|
743
743
|
it "sleeps for :connection_retry_sleep seconds between retries" do
|
@@ -758,10 +758,10 @@ MSG
|
|
758
758
|
# the raise is not what is being tested here, rather its side-effect
|
759
759
|
end
|
760
760
|
|
761
|
-
logged_output.string.lines.
|
761
|
+
logged_output.string.lines.count { |l|
|
762
762
|
l =~ info_line_with(
|
763
763
|
"[WinRM] connection failed, retrying in 7 seconds")
|
764
|
-
}.
|
764
|
+
}.must_equal 2
|
765
765
|
end
|
766
766
|
|
767
767
|
it "logs the last retry failures on warn" do
|
@@ -771,9 +771,9 @@ MSG
|
|
771
771
|
# the raise is not what is being tested here, rather its side-effect
|
772
772
|
end
|
773
773
|
|
774
|
-
logged_output.string.lines.
|
774
|
+
logged_output.string.lines.count { |l|
|
775
775
|
l =~ warn_line_with("[WinRM] connection failed, terminating ")
|
776
|
-
}.
|
776
|
+
}.must_equal 1
|
777
777
|
end
|
778
778
|
end
|
779
779
|
end
|
@@ -968,7 +968,6 @@ MSG
|
|
968
968
|
transporter.stubs(:upload)
|
969
969
|
end
|
970
970
|
|
971
|
-
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
972
971
|
def self.common_specs_for_upload
|
973
972
|
it "builds a Winrm::FileTransporter" do
|
974
973
|
WinRM::Transport::FileTransporter.unstub(:new)
|
@@ -990,7 +989,6 @@ MSG
|
|
990
989
|
upload
|
991
990
|
end
|
992
991
|
end
|
993
|
-
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
994
992
|
|
995
993
|
describe "for a file" do
|
996
994
|
|
@@ -1035,16 +1033,16 @@ MSG
|
|
1035
1033
|
# the raise is not what is being tested here, rather its side-effect
|
1036
1034
|
end
|
1037
1035
|
|
1038
|
-
logged_output.string.lines.
|
1036
|
+
logged_output.string.lines.count { |l|
|
1039
1037
|
l =~ info_line_with(
|
1040
1038
|
"Waiting for WinRM service on http://foo:5985/wsman, retrying in 3 seconds")
|
1041
|
-
}.
|
1042
|
-
logged_output.string.lines.
|
1039
|
+
}.must_equal((300 / 3) - 1)
|
1040
|
+
logged_output.string.lines.count { |l|
|
1043
1041
|
l =~ debug_line_with("[WinRM] connection failed ")
|
1044
|
-
}.
|
1045
|
-
logged_output.string.lines.
|
1042
|
+
}.must_equal((300 / 3) - 1)
|
1043
|
+
logged_output.string.lines.count { |l|
|
1046
1044
|
l =~ warn_line_with("[WinRM] connection failed, terminating ")
|
1047
|
-
}.
|
1045
|
+
}.must_equal 1
|
1048
1046
|
end
|
1049
1047
|
|
1050
1048
|
it "sleeps for 3 seconds between retries" do
|
@@ -47,7 +47,7 @@ describe Kitchen::Verifier::Busser do
|
|
47
47
|
{
|
48
48
|
"mondospec/charlie" => {
|
49
49
|
:content => "charlie",
|
50
|
-
:perms => "0764"
|
50
|
+
:perms => (running_tests_on_windows? ? "0644" : "0764")
|
51
51
|
},
|
52
52
|
"minispec/beta" => {
|
53
53
|
:content => "beta",
|
@@ -55,7 +55,7 @@ describe Kitchen::Verifier::Busser do
|
|
55
55
|
},
|
56
56
|
"abba/alpha" => {
|
57
57
|
:content => "alpha",
|
58
|
-
:perms => "0440"
|
58
|
+
:perms => (running_tests_on_windows? ? "0444" : "0440")
|
59
59
|
}
|
60
60
|
}
|
61
61
|
end
|
@@ -68,7 +68,7 @@ describe Kitchen::Verifier::Busser do
|
|
68
68
|
},
|
69
69
|
"abba/common" => {
|
70
70
|
:content => "yeppers",
|
71
|
-
:perms => "0664"
|
71
|
+
:perms => (running_tests_on_windows? ? "0644" : "0664")
|
72
72
|
}
|
73
73
|
}
|
74
74
|
end
|
@@ -135,7 +135,6 @@ describe Kitchen::Verifier::Busser do
|
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
-
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
139
138
|
def self.common_bourne_variable_specs
|
140
139
|
it "uses bourne shell" do
|
141
140
|
cmd.must_match(/\Ash -c '$/)
|
@@ -162,9 +161,7 @@ describe Kitchen::Verifier::Busser do
|
|
162
161
|
cmd.must_match regexify(%{GEM_CACHE="/r/gems/cache"; export GEM_CACHE})
|
163
162
|
end
|
164
163
|
end
|
165
|
-
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
166
164
|
|
167
|
-
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
168
165
|
def self.common_powershell_variable_specs
|
169
166
|
it "sets the BUSSER_ROOT environment variable" do
|
170
167
|
cmd.must_match regexify(%{$env:BUSSER_ROOT = "\\r"})
|
@@ -182,7 +179,6 @@ describe Kitchen::Verifier::Busser do
|
|
182
179
|
cmd.must_match regexify(%{$env:GEM_CACHE = "\\r\\gems\\cache"})
|
183
180
|
end
|
184
181
|
end
|
185
|
-
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
186
182
|
|
187
183
|
describe "#install_command" do
|
188
184
|
|
data/spec/spec_helper.rb
CHANGED
@@ -43,7 +43,20 @@ require "tempfile"
|
|
43
43
|
# Nasty hack to redefine IO.read in terms of File#read for fakefs
|
44
44
|
class IO
|
45
45
|
def self.read(*args)
|
46
|
-
|
46
|
+
length = args[1]
|
47
|
+
offset = args[2]
|
48
|
+
opt = args[3]
|
49
|
+
if length.is_a? Hash
|
50
|
+
opt = length
|
51
|
+
length = nil
|
52
|
+
elsif offset.is_a? Hash
|
53
|
+
opt = offset
|
54
|
+
end
|
55
|
+
if opt && opt.key?(:mode)
|
56
|
+
File.open(args[0], opt) { |f| f.read(length) }
|
57
|
+
else
|
58
|
+
File.open(args[0], "rb", opt) { |f| f.read(length) }
|
59
|
+
end
|
47
60
|
end
|
48
61
|
end
|
49
62
|
|
@@ -54,3 +67,19 @@ def with_fake_fs
|
|
54
67
|
FakeFS.deactivate!
|
55
68
|
FakeFS::FileSystem.clear
|
56
69
|
end
|
70
|
+
|
71
|
+
def running_tests_on_windows?
|
72
|
+
ENV["OS"] == "Windows_NT"
|
73
|
+
end
|
74
|
+
|
75
|
+
def os_safe_root_path(root_path)
|
76
|
+
if running_tests_on_windows?
|
77
|
+
"#{File.join(ENV["SystemDrive"], root_path)}"
|
78
|
+
else
|
79
|
+
root_path
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def padded_octal_string(integer)
|
84
|
+
integer.to_s(8).rjust(4, "0")
|
85
|
+
end
|
@@ -2,9 +2,11 @@ Function Check-UpdateChef($root, $version) {
|
|
2
2
|
if (-Not (Test-Path $root)) { return $true }
|
3
3
|
elseif ("$version" -eq "true") { return $false }
|
4
4
|
elseif ("$version" -eq "latest") { return $true }
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
Try { $chef_version = Get-Content $root\version-manifest.txt | select-object -1}
|
6
|
+
Catch {
|
7
|
+
Try { $chef_version = (& $root\bin\chef-solo.bat -v).split(" ", 2)[1] }
|
8
|
+
Catch { $chef_version = "" }
|
9
|
+
}
|
8
10
|
|
9
11
|
if ($chef_version.StartsWith($version)) { return $false }
|
10
12
|
else { return $true }
|
@@ -172,13 +172,22 @@ should_update_chef() {
|
|
172
172
|
return 0;
|
173
173
|
fi
|
174
174
|
|
175
|
-
|
175
|
+
if test -f "${1}/version-manifest.txt"; then
|
176
|
+
chef_version="`head -n 1 ${1}/version-manifest.txt | cut -d \" \" -f 2`";
|
177
|
+
else
|
178
|
+
chef_version="`${1}/bin/chef-solo -v | cut -d \" \" -f 2`";
|
179
|
+
fi
|
176
180
|
|
177
181
|
echo "$chef_version" | grep "^${2}" 2>&1 >/dev/null;
|
178
182
|
if test $? -eq 0; then
|
179
183
|
return 1;
|
180
184
|
else
|
181
|
-
|
185
|
+
echo "${2}" | grep "^$chef_version" 2>&1 >/dev/null;
|
186
|
+
if test $? -eq 0; then
|
187
|
+
return 1;
|
188
|
+
else
|
189
|
+
return 0;
|
190
|
+
fi
|
182
191
|
fi
|
183
192
|
}
|
184
193
|
|
data/test-kitchen.gemspec
CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |gem|
|
|
25
25
|
|
26
26
|
gem.add_dependency "mixlib-shellout", ">= 1.2", "< 3.0"
|
27
27
|
gem.add_dependency "net-scp", "~> 1.1"
|
28
|
-
gem.add_dependency "net-ssh", "~> 2.7"
|
28
|
+
gem.add_dependency "net-ssh", "~> 2.7", "< 2.10"
|
29
29
|
gem.add_dependency "safe_yaml", "~> 1.0"
|
30
30
|
gem.add_dependency "thor", "~> 0.18"
|
31
31
|
|
@@ -35,7 +35,7 @@ Gem::Specification.new do |gem|
|
|
35
35
|
gem.add_development_dependency "bundler", "~> 1.3"
|
36
36
|
gem.add_development_dependency "rake"
|
37
37
|
|
38
|
-
gem.add_development_dependency "aruba", "~> 0.
|
38
|
+
gem.add_development_dependency "aruba", "~> 0.7.0"
|
39
39
|
gem.add_development_dependency "fakefs", "~> 0.4"
|
40
40
|
gem.add_development_dependency "minitest", "~> 5.3"
|
41
41
|
gem.add_development_dependency "mocha", "~> 1.1"
|
@@ -48,6 +48,6 @@ Gem::Specification.new do |gem|
|
|
48
48
|
# style and complexity libraries are tightly version pinned as newer releases
|
49
49
|
# may introduce new and undesireable style choices which would be immediately
|
50
50
|
# enforced in CI
|
51
|
-
gem.add_development_dependency "finstyle", "1.
|
51
|
+
gem.add_development_dependency "finstyle", "1.5.0"
|
52
52
|
gem.add_development_dependency "cane", "2.6.2"
|
53
53
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: test-kitchen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fletcher Nichol
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-shellout
|
@@ -51,6 +51,9 @@ dependencies:
|
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '2.7'
|
54
|
+
- - "<"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '2.10'
|
54
57
|
type: :runtime
|
55
58
|
prerelease: false
|
56
59
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,6 +61,9 @@ dependencies:
|
|
58
61
|
- - "~>"
|
59
62
|
- !ruby/object:Gem::Version
|
60
63
|
version: '2.7'
|
64
|
+
- - "<"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '2.10'
|
61
67
|
- !ruby/object:Gem::Dependency
|
62
68
|
name: safe_yaml
|
63
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -148,14 +154,14 @@ dependencies:
|
|
148
154
|
requirements:
|
149
155
|
- - "~>"
|
150
156
|
- !ruby/object:Gem::Version
|
151
|
-
version:
|
157
|
+
version: 0.7.0
|
152
158
|
type: :development
|
153
159
|
prerelease: false
|
154
160
|
version_requirements: !ruby/object:Gem::Requirement
|
155
161
|
requirements:
|
156
162
|
- - "~>"
|
157
163
|
- !ruby/object:Gem::Version
|
158
|
-
version:
|
164
|
+
version: 0.7.0
|
159
165
|
- !ruby/object:Gem::Dependency
|
160
166
|
name: fakefs
|
161
167
|
requirement: !ruby/object:Gem::Requirement
|
@@ -260,14 +266,14 @@ dependencies:
|
|
260
266
|
requirements:
|
261
267
|
- - '='
|
262
268
|
- !ruby/object:Gem::Version
|
263
|
-
version: 1.
|
269
|
+
version: 1.5.0
|
264
270
|
type: :development
|
265
271
|
prerelease: false
|
266
272
|
version_requirements: !ruby/object:Gem::Requirement
|
267
273
|
requirements:
|
268
274
|
- - '='
|
269
275
|
- !ruby/object:Gem::Version
|
270
|
-
version: 1.
|
276
|
+
version: 1.5.0
|
271
277
|
- !ruby/object:Gem::Dependency
|
272
278
|
name: cane
|
273
279
|
requirement: !ruby/object:Gem::Requirement
|
@@ -302,6 +308,7 @@ files:
|
|
302
308
|
- LICENSE
|
303
309
|
- README.md
|
304
310
|
- Rakefile
|
311
|
+
- appveyor.yml
|
305
312
|
- bin/kitchen
|
306
313
|
- features/kitchen_action_commands.feature
|
307
314
|
- features/kitchen_command.feature
|