test-kitchen 1.4.2 → 1.5.0

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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.travis.yml +29 -33
  4. data/CHANGELOG.md +86 -2
  5. data/CONTRIBUTING.md +17 -0
  6. data/Gemfile.proxy_tests +5 -0
  7. data/MAINTAINERS.md +24 -0
  8. data/features/kitchen_driver_discover_command.feature +6 -0
  9. data/features/kitchen_init_command.feature +55 -7
  10. data/features/step_definitions/gem_steps.rb +12 -4
  11. data/features/step_definitions/git_steps.rb +1 -1
  12. data/features/step_definitions/output_steps.rb +1 -1
  13. data/features/support/env.rb +13 -9
  14. data/lib/kitchen/cli.rb +46 -5
  15. data/lib/kitchen/command/driver_discover.rb +8 -0
  16. data/lib/kitchen/command.rb +1 -0
  17. data/lib/kitchen/config.rb +4 -0
  18. data/lib/kitchen/configurable.rb +32 -0
  19. data/lib/kitchen/driver/ssh_base.rb +18 -4
  20. data/lib/kitchen/generator/driver_create.rb +2 -2
  21. data/lib/kitchen/generator/init.rb +4 -4
  22. data/lib/kitchen/instance.rb +7 -0
  23. data/lib/kitchen/lazy_hash.rb +20 -0
  24. data/lib/kitchen/logger.rb +4 -7
  25. data/lib/kitchen/provisioner/base.rb +16 -1
  26. data/lib/kitchen/provisioner/chef_base.rb +43 -98
  27. data/lib/kitchen/provisioner/chef_solo.rb +7 -4
  28. data/lib/kitchen/provisioner/chef_zero.rb +12 -5
  29. data/lib/kitchen/ssh.rb +1 -1
  30. data/lib/kitchen/transport/base.rb +7 -0
  31. data/lib/kitchen/transport/ssh.rb +13 -6
  32. data/lib/kitchen/transport/winrm.rb +168 -50
  33. data/lib/kitchen/verifier/base.rb +18 -1
  34. data/lib/kitchen/verifier/busser.rb +12 -5
  35. data/lib/kitchen/verifier/shell.rb +101 -0
  36. data/lib/kitchen/version.rb +1 -2
  37. data/spec/kitchen/collection_spec.rb +1 -1
  38. data/spec/kitchen/configurable_spec.rb +211 -2
  39. data/spec/kitchen/driver/ssh_base_spec.rb +131 -8
  40. data/spec/kitchen/lazy_hash_spec.rb +27 -0
  41. data/spec/kitchen/logger_spec.rb +10 -0
  42. data/spec/kitchen/provisioner/base_spec.rb +25 -0
  43. data/spec/kitchen/provisioner/chef_base_spec.rb +133 -252
  44. data/spec/kitchen/provisioner/chef_solo_spec.rb +30 -0
  45. data/spec/kitchen/provisioner/chef_zero_spec.rb +27 -2
  46. data/spec/kitchen/provisioner/shell_spec.rb +60 -12
  47. data/spec/kitchen/ssh_spec.rb +1 -1
  48. data/spec/kitchen/transport/ssh_spec.rb +2 -1
  49. data/spec/kitchen/transport/winrm_spec.rb +228 -48
  50. data/spec/kitchen/verifier/base_spec.rb +26 -0
  51. data/spec/kitchen/verifier/busser_spec.rb +69 -3
  52. data/spec/kitchen/verifier/shell_spec.rb +157 -0
  53. data/support/busser_install_command.sh +1 -2
  54. data/support/chef_base_install_command.ps1 +19 -12
  55. data/templates/driver/README.md.erb +1 -1
  56. data/test-kitchen.gemspec +12 -3
  57. metadata +106 -10
@@ -0,0 +1,157 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Author:: SAWANOBORI Yukihiko (<sawanoboriyu@higanworks.com>)
4
+ #
5
+ # Copyright (C) 2015, HiganWorks LLC
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative "../../spec_helper"
20
+
21
+ require "logger"
22
+ require "stringio"
23
+
24
+ require "kitchen/verifier/shell"
25
+
26
+ describe Kitchen::Verifier::Shell do
27
+
28
+ let(:logged_output) { StringIO.new }
29
+ let(:logger) { Logger.new(logged_output) }
30
+ let(:platform) { stub(:os_type => nil, :shell_type => nil, :name => "coolbeans") }
31
+ let(:suite) { stub(:name => "fries") }
32
+ let(:state) { Hash.new }
33
+
34
+ let(:config) do
35
+ { :test_base_path => "/basist", :kitchen_root => "/rooty" }
36
+ end
37
+
38
+ let(:instance) do
39
+ stub(
40
+ :name => [platform.name, suite.name].join("-"),
41
+ :to_str => "instance",
42
+ :logger => logger,
43
+ :suite => suite,
44
+ :platform => platform
45
+ )
46
+ end
47
+
48
+ let(:verifier) do
49
+ Kitchen::Verifier::Shell.new(config).finalize_config!(instance)
50
+ end
51
+
52
+ it "verifier api_version is 1" do
53
+ verifier.diagnose_plugin[:api_version].must_equal 1
54
+ end
55
+
56
+ it "plugin_version is set to Kitchen::VERSION" do
57
+ verifier.diagnose_plugin[:version].must_equal Kitchen::VERSION
58
+ end
59
+
60
+ describe "configuration" do
61
+
62
+ it "sets :sleep to 0 by default" do
63
+ verifier[:sleep].must_equal 0
64
+ end
65
+
66
+ it "sets :command to 'true' by default" do
67
+ verifier[:command].must_equal "true"
68
+ end
69
+
70
+ it "sets :live_stream to stdout by default" do
71
+ verifier[:live_stream].must_equal $stdout
72
+ end
73
+ end
74
+
75
+ describe "#call" do
76
+
77
+ describe "#shell_out" do
78
+ it "calls sleep if :sleep value is greater than 0" do
79
+ config[:sleep] = 3
80
+ verifier.expects(:sleep).with(1).returns(true).at_least(3)
81
+
82
+ verifier.call(state)
83
+ end
84
+
85
+ it "states are set to environment" do
86
+ state[:hostname] = "testhost"
87
+ state[:server_id] = "i-xxxxxx"
88
+ verifier.call(state)
89
+ config[:shellout_opts][:environment]["KITCHEN_HOSTNAME"].must_equal "testhost"
90
+ config[:shellout_opts][:environment]["KITCHEN_SERVER_ID"].must_equal "i-xxxxxx"
91
+ config[:shellout_opts][:environment]["KITCHEN_INSTANCE"].must_equal "coolbeans-fries"
92
+ config[:shellout_opts][:environment]["KITCHEN_PLATFORM"].must_equal "coolbeans"
93
+ config[:shellout_opts][:environment]["KITCHEN_SUITE"].must_equal "fries"
94
+ end
95
+
96
+ it "raises ActionFailed if set false to :command" do
97
+ config[:command] = "false"
98
+
99
+ proc { verifier.call(state) }.must_raise Kitchen::ActionFailed
100
+ end
101
+
102
+ it "logs a converge event to INFO" do
103
+ verifier.call(state)
104
+
105
+ logged_output.string.must_match(/^.+ INFO .+ \[Shell\] Verify on .+$/)
106
+ end
107
+ end
108
+
109
+ describe "remote_exec" do
110
+ let(:transport) do
111
+ t = mock("transport")
112
+ t.responds_like_instance_of(Kitchen::Transport::Ssh)
113
+ t
114
+ end
115
+
116
+ let(:connection) do
117
+ c = mock("transport_connection")
118
+ c.responds_like_instance_of(Kitchen::Transport::Ssh::Connection)
119
+ c
120
+ end
121
+
122
+ let(:instance) do
123
+ stub(
124
+ :name => "coolbeans",
125
+ :to_str => "instance",
126
+ :logger => logger,
127
+ :platform => platform,
128
+ :suite => suite,
129
+ :transport => transport
130
+ )
131
+ end
132
+
133
+ before do
134
+ transport.stubs(:connection).yields(connection)
135
+ connection.stubs(:execute)
136
+ end
137
+
138
+ it "execute command onto instance." do
139
+ config[:remote_exec] = true
140
+
141
+ transport.expects(:connection).with(state).yields(connection)
142
+ verifier.call(state)
143
+ end
144
+ end
145
+ end
146
+
147
+ describe "#run_command" do
148
+ it "execute localy and returns nil" do
149
+ verifier.run_command
150
+ end
151
+
152
+ it "returns string when remote_exec" do
153
+ config[:remote_exec] = true
154
+ verifier.run_command.must_equal "true"
155
+ end
156
+ end
157
+ end
@@ -7,8 +7,7 @@ else
7
7
  fi
8
8
 
9
9
  if test ! -f "$BUSSER_ROOT/bin/busser"; then
10
- gem_bindir=`$ruby -rrubygems -e "puts Gem.bindir"`
11
- $gem_bindir/busser setup
10
+ $busser setup
12
11
  fi
13
12
 
14
13
  echo " Installing Busser plugins: $plugins"
@@ -1,14 +1,16 @@
1
+ $ErrorActionPreference = "stop"
2
+
1
3
  Function Check-UpdateChef($root, $version) {
2
4
  if (-Not (Test-Path $root)) { return $true }
3
5
  elseif ("$version" -eq "true") { return $false }
4
6
  elseif ("$version" -eq "latest") { return $true }
5
- Try { $chef_version = Get-Content $root\version-manifest.txt | select-object -1}
7
+ Try { $chef_version = (Get-Content $root\version-manifest.txt | select-object -first 1) }
6
8
  Catch {
7
- Try { $chef_version = (& $root\bin\chef-solo.bat -v).split(" ", 2)[1] }
8
- Catch { $chef_version = "" }
9
+ Try { $chef_version = (& $root\bin\chef-solo.bat -v) }
10
+ Catch { $chef_version = " " }
9
11
  }
10
12
 
11
- if ($chef_version.StartsWith($version)) { return $false }
13
+ if ($chef_version.split(" ", 2)[1].StartsWith($version)) { return $false }
12
14
  else { return $true }
13
15
  }
14
16
 
@@ -66,13 +68,18 @@ Function Unresolve-Path($p) {
66
68
  else { return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($p) }
67
69
  }
68
70
 
69
- $chef_omnibus_root = Unresolve-Path $chef_omnibus_root
70
- $msi = Unresolve-Path $msi
71
+ Try {
72
+ $chef_omnibus_root = Unresolve-Path $chef_omnibus_root
73
+ $msi = Unresolve-Path $msi
71
74
 
72
- if (Check-UpdateChef $chef_omnibus_root $version) {
73
- Write-Host "-----> Installing Chef Omnibus ($pretty_version)`n"
74
- Download-Chef "$chef_metadata_url" $msi
75
- Install-Chef $msi
76
- } else {
77
- Write-Host "-----> Chef Omnibus installation detected ($pretty_version)`n"
75
+ if (Check-UpdateChef $chef_omnibus_root $version) {
76
+ Write-Host "-----> Installing Chef Omnibus ($pretty_version)`n"
77
+ Download-Chef "$chef_metadata_url" $msi
78
+ Install-Chef $msi
79
+ } else {
80
+ Write-Host "-----> Chef Omnibus installation detected ($pretty_version)`n"
81
+ }
82
+ Catch {
83
+ Write-Error ($_ | ft -Property * | out-string) -ErrorAction Continue
84
+ exit 1
78
85
  }
@@ -61,4 +61,4 @@ Created and maintained by [<%= config[:author] %>][author] (<<%= config[:email]
61
61
  [license]: https://github.com/enter-github-user/<%= config[:gem_name] %>/blob/master/LICENSE
62
62
  [repo]: https://github.com/enter-github-user/<%= config[:gem_name] %>
63
63
  [driver_usage]: http://docs.kitchen-ci.org/drivers/usage
64
- [chef_omnibus_dl]: http://www.getchef.com/chef/install/
64
+ [chef_omnibus_dl]: http://www.chef.io/chef/install/
data/test-kitchen.gemspec CHANGED
@@ -25,21 +25,30 @@ 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", "< 2.10"
28
+ gem.add_dependency "net-ssh", ">= 2.9", "< 4.0"
29
29
  gem.add_dependency "safe_yaml", "~> 1.0"
30
30
  gem.add_dependency "thor", "~> 0.18"
31
+ gem.add_dependency "mixlib-install", "~> 0.7"
32
+ gem.add_dependency "chef-config", ">= 12.5.1"
31
33
 
32
34
  gem.add_development_dependency "pry"
33
- gem.add_development_dependency "winrm-transport", "~> 1.0"
35
+ gem.add_development_dependency "pry-byebug"
36
+ gem.add_development_dependency "pry-stack_explorer"
37
+ gem.add_development_dependency "winrm-transport", "~> 1.0", ">= 1.0.3"
38
+ gem.add_development_dependency "winrm-s", "~> 0.3"
34
39
 
35
40
  gem.add_development_dependency "bundler", "~> 1.3"
36
41
  gem.add_development_dependency "rake"
37
42
 
38
- gem.add_development_dependency "aruba", "~> 0.7.0"
43
+ gem.add_development_dependency "aruba", "~> 0.11.1"
39
44
  gem.add_development_dependency "fakefs", "~> 0.4"
40
45
  gem.add_development_dependency "minitest", "~> 5.3"
41
46
  gem.add_development_dependency "mocha", "~> 1.1"
42
47
 
48
+ # cucumber is getting explicit and aggresive version pin as the behavior of
49
+ # the aruba and cucumber apis are tightly coupled
50
+ gem.add_development_dependency "cucumber", "~> 2.1.0"
51
+
43
52
  gem.add_development_dependency "countloc", "~> 0.4"
44
53
  gem.add_development_dependency "maruku", "~> 0.6"
45
54
  gem.add_development_dependency "simplecov", "~> 0.7"
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.2
4
+ version: 1.5.0
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-08-03 00:00:00.000000000 Z
11
+ date: 2016-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout
@@ -48,22 +48,22 @@ dependencies:
48
48
  name: net-ssh
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - "~>"
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: '2.7'
53
+ version: '2.9'
54
54
  - - "<"
55
55
  - !ruby/object:Gem::Version
56
- version: '2.10'
56
+ version: '4.0'
57
57
  type: :runtime
58
58
  prerelease: false
59
59
  version_requirements: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - "~>"
61
+ - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: '2.7'
63
+ version: '2.9'
64
64
  - - "<"
65
65
  - !ruby/object:Gem::Version
66
- version: '2.10'
66
+ version: '4.0'
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: safe_yaml
69
69
  requirement: !ruby/object:Gem::Requirement
@@ -92,6 +92,34 @@ dependencies:
92
92
  - - "~>"
93
93
  - !ruby/object:Gem::Version
94
94
  version: '0.18'
95
+ - !ruby/object:Gem::Dependency
96
+ name: mixlib-install
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '0.7'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '0.7'
109
+ - !ruby/object:Gem::Dependency
110
+ name: chef-config
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: 12.5.1
116
+ type: :runtime
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 12.5.1
95
123
  - !ruby/object:Gem::Dependency
96
124
  name: pry
97
125
  requirement: !ruby/object:Gem::Requirement
@@ -106,6 +134,34 @@ dependencies:
106
134
  - - ">="
107
135
  - !ruby/object:Gem::Version
108
136
  version: '0'
137
+ - !ruby/object:Gem::Dependency
138
+ name: pry-byebug
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ - !ruby/object:Gem::Dependency
152
+ name: pry-stack_explorer
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ type: :development
159
+ prerelease: false
160
+ version_requirements: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
109
165
  - !ruby/object:Gem::Dependency
110
166
  name: winrm-transport
111
167
  requirement: !ruby/object:Gem::Requirement
@@ -113,6 +169,9 @@ dependencies:
113
169
  - - "~>"
114
170
  - !ruby/object:Gem::Version
115
171
  version: '1.0'
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: 1.0.3
116
175
  type: :development
117
176
  prerelease: false
118
177
  version_requirements: !ruby/object:Gem::Requirement
@@ -120,6 +179,23 @@ dependencies:
120
179
  - - "~>"
121
180
  - !ruby/object:Gem::Version
122
181
  version: '1.0'
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: 1.0.3
185
+ - !ruby/object:Gem::Dependency
186
+ name: winrm-s
187
+ requirement: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - "~>"
190
+ - !ruby/object:Gem::Version
191
+ version: '0.3'
192
+ type: :development
193
+ prerelease: false
194
+ version_requirements: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - "~>"
197
+ - !ruby/object:Gem::Version
198
+ version: '0.3'
123
199
  - !ruby/object:Gem::Dependency
124
200
  name: bundler
125
201
  requirement: !ruby/object:Gem::Requirement
@@ -154,14 +230,14 @@ dependencies:
154
230
  requirements:
155
231
  - - "~>"
156
232
  - !ruby/object:Gem::Version
157
- version: 0.7.0
233
+ version: 0.11.1
158
234
  type: :development
159
235
  prerelease: false
160
236
  version_requirements: !ruby/object:Gem::Requirement
161
237
  requirements:
162
238
  - - "~>"
163
239
  - !ruby/object:Gem::Version
164
- version: 0.7.0
240
+ version: 0.11.1
165
241
  - !ruby/object:Gem::Dependency
166
242
  name: fakefs
167
243
  requirement: !ruby/object:Gem::Requirement
@@ -204,6 +280,20 @@ dependencies:
204
280
  - - "~>"
205
281
  - !ruby/object:Gem::Version
206
282
  version: '1.1'
283
+ - !ruby/object:Gem::Dependency
284
+ name: cucumber
285
+ requirement: !ruby/object:Gem::Requirement
286
+ requirements:
287
+ - - "~>"
288
+ - !ruby/object:Gem::Version
289
+ version: 2.1.0
290
+ type: :development
291
+ prerelease: false
292
+ version_requirements: !ruby/object:Gem::Requirement
293
+ requirements:
294
+ - - "~>"
295
+ - !ruby/object:Gem::Version
296
+ version: 2.1.0
207
297
  - !ruby/object:Gem::Dependency
208
298
  name: countloc
209
299
  requirement: !ruby/object:Gem::Requirement
@@ -303,9 +393,12 @@ files:
303
393
  - ".travis.yml"
304
394
  - ".yardopts"
305
395
  - CHANGELOG.md
396
+ - CONTRIBUTING.md
306
397
  - Gemfile
398
+ - Gemfile.proxy_tests
307
399
  - Guardfile
308
400
  - LICENSE
401
+ - MAINTAINERS.md
309
402
  - README.md
310
403
  - Rakefile
311
404
  - appveyor.yml
@@ -388,6 +481,7 @@ files:
388
481
  - lib/kitchen/verifier/base.rb
389
482
  - lib/kitchen/verifier/busser.rb
390
483
  - lib/kitchen/verifier/dummy.rb
484
+ - lib/kitchen/verifier/shell.rb
391
485
  - lib/kitchen/version.rb
392
486
  - lib/vendor/hash_recursive_merge.rb
393
487
  - spec/kitchen/base64_stream_spec.rb
@@ -431,6 +525,7 @@ files:
431
525
  - spec/kitchen/verifier/base_spec.rb
432
526
  - spec/kitchen/verifier/busser_spec.rb
433
527
  - spec/kitchen/verifier/dummy_spec.rb
528
+ - spec/kitchen/verifier/shell_spec.rb
434
529
  - spec/kitchen/verifier_spec.rb
435
530
  - spec/kitchen_spec.rb
436
531
  - spec/spec_helper.rb
@@ -547,6 +642,7 @@ test_files:
547
642
  - spec/kitchen/verifier/base_spec.rb
548
643
  - spec/kitchen/verifier/busser_spec.rb
549
644
  - spec/kitchen/verifier/dummy_spec.rb
645
+ - spec/kitchen/verifier/shell_spec.rb
550
646
  - spec/kitchen/verifier_spec.rb
551
647
  - spec/kitchen_spec.rb
552
648
  - spec/spec_helper.rb