test-kitchen 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/.cane +1 -1
  3. data/.rubocop.yml +3 -0
  4. data/.travis.yml +20 -9
  5. data/CHANGELOG.md +219 -108
  6. data/Gemfile +10 -6
  7. data/Guardfile +38 -9
  8. data/README.md +11 -1
  9. data/Rakefile +21 -37
  10. data/bin/kitchen +4 -4
  11. data/features/kitchen_action_commands.feature +161 -0
  12. data/features/kitchen_console_command.feature +34 -0
  13. data/features/kitchen_diagnose_command.feature +64 -0
  14. data/features/kitchen_init_command.feature +29 -17
  15. data/features/kitchen_list_command.feature +2 -2
  16. data/features/kitchen_login_command.feature +56 -0
  17. data/features/{sink_command.feature → kitchen_sink_command.feature} +0 -0
  18. data/features/kitchen_test_command.feature +88 -0
  19. data/features/step_definitions/gem_steps.rb +8 -6
  20. data/features/step_definitions/git_steps.rb +4 -2
  21. data/features/step_definitions/output_steps.rb +5 -0
  22. data/features/support/env.rb +12 -9
  23. data/lib/kitchen.rb +60 -38
  24. data/lib/kitchen/base64_stream.rb +55 -0
  25. data/lib/kitchen/busser.rb +124 -58
  26. data/lib/kitchen/cli.rb +121 -38
  27. data/lib/kitchen/collection.rb +3 -3
  28. data/lib/kitchen/color.rb +4 -4
  29. data/lib/kitchen/command.rb +78 -11
  30. data/lib/kitchen/command/action.rb +3 -2
  31. data/lib/kitchen/command/console.rb +12 -5
  32. data/lib/kitchen/command/diagnose.rb +17 -3
  33. data/lib/kitchen/command/driver_discover.rb +26 -7
  34. data/lib/kitchen/command/exec.rb +41 -0
  35. data/lib/kitchen/command/list.rb +44 -14
  36. data/lib/kitchen/command/login.rb +2 -1
  37. data/lib/kitchen/command/sink.rb +2 -1
  38. data/lib/kitchen/command/test.rb +5 -4
  39. data/lib/kitchen/config.rb +146 -14
  40. data/lib/kitchen/configurable.rb +314 -0
  41. data/lib/kitchen/data_munger.rb +522 -18
  42. data/lib/kitchen/diagnostic.rb +43 -4
  43. data/lib/kitchen/driver.rb +4 -4
  44. data/lib/kitchen/driver/base.rb +80 -115
  45. data/lib/kitchen/driver/dummy.rb +34 -6
  46. data/lib/kitchen/driver/proxy.rb +14 -3
  47. data/lib/kitchen/driver/ssh_base.rb +61 -7
  48. data/lib/kitchen/errors.rb +109 -9
  49. data/lib/kitchen/generator/driver_create.rb +39 -5
  50. data/lib/kitchen/generator/init.rb +130 -45
  51. data/lib/kitchen/instance.rb +162 -28
  52. data/lib/kitchen/lazy_hash.rb +79 -7
  53. data/lib/kitchen/loader/yaml.rb +159 -27
  54. data/lib/kitchen/logger.rb +267 -21
  55. data/lib/kitchen/logging.rb +30 -3
  56. data/lib/kitchen/login_command.rb +11 -2
  57. data/lib/kitchen/metadata_chopper.rb +2 -2
  58. data/lib/kitchen/provisioner.rb +4 -4
  59. data/lib/kitchen/provisioner/base.rb +107 -103
  60. data/lib/kitchen/provisioner/chef/berkshelf.rb +36 -8
  61. data/lib/kitchen/provisioner/chef/librarian.rb +40 -11
  62. data/lib/kitchen/provisioner/chef_base.rb +206 -167
  63. data/lib/kitchen/provisioner/chef_solo.rb +25 -7
  64. data/lib/kitchen/provisioner/chef_zero.rb +105 -29
  65. data/lib/kitchen/provisioner/dummy.rb +1 -1
  66. data/lib/kitchen/provisioner/shell.rb +21 -6
  67. data/lib/kitchen/rake_tasks.rb +8 -3
  68. data/lib/kitchen/shell_out.rb +15 -18
  69. data/lib/kitchen/ssh.rb +122 -27
  70. data/lib/kitchen/state_file.rb +24 -7
  71. data/lib/kitchen/thor_tasks.rb +9 -4
  72. data/lib/kitchen/util.rb +43 -118
  73. data/lib/kitchen/version.rb +1 -1
  74. data/lib/vendor/hash_recursive_merge.rb +10 -2
  75. data/spec/kitchen/base64_stream_spec.rb +77 -0
  76. data/spec/kitchen/busser_spec.rb +490 -0
  77. data/spec/kitchen/collection_spec.rb +10 -10
  78. data/spec/kitchen/color_spec.rb +2 -2
  79. data/spec/kitchen/config_spec.rb +234 -62
  80. data/spec/kitchen/configurable_spec.rb +490 -0
  81. data/spec/kitchen/data_munger_spec.rb +1070 -862
  82. data/spec/kitchen/diagnostic_spec.rb +79 -0
  83. data/spec/kitchen/driver/base_spec.rb +80 -85
  84. data/spec/kitchen/driver/dummy_spec.rb +43 -14
  85. data/spec/kitchen/driver/proxy_spec.rb +134 -0
  86. data/spec/kitchen/driver/ssh_base_spec.rb +644 -0
  87. data/spec/kitchen/driver_spec.rb +15 -15
  88. data/spec/kitchen/errors_spec.rb +309 -0
  89. data/spec/kitchen/instance_spec.rb +143 -46
  90. data/spec/kitchen/lazy_hash_spec.rb +36 -9
  91. data/spec/kitchen/loader/yaml_spec.rb +237 -226
  92. data/spec/kitchen/logger_spec.rb +419 -0
  93. data/spec/kitchen/logging_spec.rb +59 -0
  94. data/spec/kitchen/login_command_spec.rb +49 -0
  95. data/spec/kitchen/metadata_chopper_spec.rb +82 -0
  96. data/spec/kitchen/platform_spec.rb +4 -4
  97. data/spec/kitchen/provisioner/base_spec.rb +65 -125
  98. data/spec/kitchen/provisioner/chef_base_spec.rb +798 -0
  99. data/spec/kitchen/provisioner/chef_solo_spec.rb +316 -0
  100. data/spec/kitchen/provisioner/chef_zero_spec.rb +624 -0
  101. data/spec/kitchen/provisioner/shell_spec.rb +269 -0
  102. data/spec/kitchen/provisioner_spec.rb +6 -6
  103. data/spec/kitchen/shell_out_spec.rb +143 -0
  104. data/spec/kitchen/ssh_spec.rb +683 -0
  105. data/spec/kitchen/state_file_spec.rb +28 -21
  106. data/spec/kitchen/suite_spec.rb +7 -7
  107. data/spec/kitchen/util_spec.rb +68 -10
  108. data/spec/kitchen_spec.rb +107 -0
  109. data/spec/spec_helper.rb +18 -13
  110. data/support/chef-client-zero.rb +10 -9
  111. data/support/chef_helpers.sh +16 -0
  112. data/support/download_helpers.sh +109 -0
  113. data/test-kitchen.gemspec +42 -33
  114. metadata +107 -33
@@ -16,9 +16,9 @@
16
16
  # See the License for the specific language governing permissions and
17
17
  # limitations under the License.
18
18
 
19
- require_relative '../spec_helper'
19
+ require_relative "../spec_helper"
20
20
 
21
- require 'kitchen/lazy_hash'
21
+ require "kitchen/lazy_hash"
22
22
 
23
23
  describe Kitchen::LazyHash do
24
24
 
@@ -26,33 +26,60 @@ describe Kitchen::LazyHash do
26
26
  stub(:color => "blue", :metal => "heavy")
27
27
  end
28
28
 
29
- let(:hash) do
29
+ let(:hash_obj) do
30
30
  {
31
- :shed_color => lambda { |c| c.color },
31
+ :shed_color => ->(c) { c.color },
32
32
  :barn => "locked",
33
- :genre => Proc.new { |c| "#{c.metal} metal"}
33
+ :genre => proc { |c| "#{c.metal} metal" }
34
34
  }
35
35
  end
36
36
 
37
37
  describe "#[]" do
38
38
 
39
39
  it "returns regular values for keys" do
40
- Kitchen::LazyHash.new(hash, context)[:barn].must_equal "locked"
40
+ Kitchen::LazyHash.new(hash_obj, context)[:barn].must_equal "locked"
41
41
  end
42
42
 
43
43
  it "invokes call on values that are lambdas" do
44
- Kitchen::LazyHash.new(hash, context)[:shed_color].must_equal "blue"
44
+ Kitchen::LazyHash.new(hash_obj, context)[:shed_color].must_equal "blue"
45
45
  end
46
46
 
47
47
  it "invokes call on values that are Procs" do
48
- Kitchen::LazyHash.new(hash, context)[:genre].must_equal "heavy metal"
48
+ Kitchen::LazyHash.new(hash_obj, context)[:genre].must_equal "heavy metal"
49
+ end
50
+ end
51
+
52
+ describe "#fetch" do
53
+
54
+ it "returns regular hash values for keys" do
55
+ Kitchen::LazyHash.new(hash_obj, context).fetch(:barn).must_equal "locked"
56
+ end
57
+
58
+ it "invokes call on values that are lambdas" do
59
+ Kitchen::LazyHash.new(hash_obj, context).
60
+ fetch(:shed_color).must_equal "blue"
61
+ end
62
+
63
+ it "invokes call on values that are Procs" do
64
+ Kitchen::LazyHash.new(hash_obj, context).
65
+ fetch(:genre).must_equal "heavy metal"
66
+ end
67
+
68
+ it "uses a default value for unset values" do
69
+ Kitchen::LazyHash.new(hash_obj, context).
70
+ fetch(:nope, "candy").must_equal "candy"
71
+ end
72
+
73
+ it "uses a block for unset values" do
74
+ Kitchen::LazyHash.new(hash_obj, context).
75
+ fetch(:nope) { |key| "#{key} is costly" }.must_equal "nope is costly"
49
76
  end
50
77
  end
51
78
 
52
79
  describe "#to_hash" do
53
80
 
54
81
  it "invokes any callable values and returns a Hash object" do
55
- converted = Kitchen::LazyHash.new(hash, context).to_hash
82
+ converted = Kitchen::LazyHash.new(hash_obj, context).to_hash
56
83
 
57
84
  converted.must_be_instance_of Hash
58
85
  converted.fetch(:shed_color).must_equal "blue"
@@ -16,11 +16,11 @@
16
16
  # See the License for the specific language governing permissions and
17
17
  # limitations under the License.
18
18
 
19
- require_relative '../../spec_helper'
19
+ require_relative "../../spec_helper"
20
20
 
21
- require 'kitchen/errors'
22
- require 'kitchen/util'
23
- require 'kitchen/loader/yaml'
21
+ require "kitchen/errors"
22
+ require "kitchen/util"
23
+ require "kitchen/loader/yaml"
24
24
 
25
25
  class Yamled
26
26
  attr_accessor :foo
@@ -45,60 +45,60 @@ describe Kitchen::Loader::YAML do
45
45
  describe ".initialize" do
46
46
 
47
47
  it "sets project_config based on Dir.pwd by default" do
48
- stub_file(File.join(Dir.pwd, '.kitchen.yml'), Hash.new)
48
+ stub_file(File.join(Dir.pwd, ".kitchen.yml"), Hash.new)
49
49
  loader = Kitchen::Loader::YAML.new
50
50
 
51
51
  loader.diagnose[:project_config][:filename].
52
- must_equal File.expand_path(File.join(Dir.pwd, '.kitchen.yml'))
52
+ must_equal File.expand_path(File.join(Dir.pwd, ".kitchen.yml"))
53
53
  end
54
54
 
55
55
  it "sets project_config from parameter, if given" do
56
- stub_file('/tmp/crazyfunkytown.file', Hash.new)
56
+ stub_file("/tmp/crazyfunkytown.file", Hash.new)
57
57
  loader = Kitchen::Loader::YAML.new(
58
- :project_config => '/tmp/crazyfunkytown.file')
58
+ :project_config => "/tmp/crazyfunkytown.file")
59
59
 
60
60
  loader.diagnose[:project_config][:filename].
61
61
  must_match %r{/tmp/crazyfunkytown.file$}
62
62
  end
63
63
 
64
64
  it "sets local_config based on Dir.pwd by default" do
65
- stub_file(File.join(Dir.pwd, '.kitchen.local.yml'), Hash.new)
65
+ stub_file(File.join(Dir.pwd, ".kitchen.local.yml"), Hash.new)
66
66
  loader = Kitchen::Loader::YAML.new
67
67
 
68
68
  loader.diagnose[:local_config][:filename].
69
- must_equal File.expand_path(File.join(Dir.pwd, '.kitchen.local.yml'))
69
+ must_equal File.expand_path(File.join(Dir.pwd, ".kitchen.local.yml"))
70
70
  end
71
71
 
72
72
  it "sets local_config based on location of project_config by default" do
73
- stub_file('/tmp/.kitchen.local.yml', Hash.new)
73
+ stub_file("/tmp/.kitchen.local.yml", Hash.new)
74
74
  loader = Kitchen::Loader::YAML.new(
75
- :project_config => '/tmp/.kitchen.yml')
75
+ :project_config => "/tmp/.kitchen.yml")
76
76
 
77
77
  loader.diagnose[:local_config][:filename].
78
78
  must_match %r{/tmp/.kitchen.local.yml$}
79
79
  end
80
80
 
81
81
  it "sets local_config from parameter, if given" do
82
- stub_file('/tmp/crazyfunkytown.file', Hash.new)
82
+ stub_file("/tmp/crazyfunkytown.file", Hash.new)
83
83
  loader = Kitchen::Loader::YAML.new(
84
- :local_config => '/tmp/crazyfunkytown.file')
84
+ :local_config => "/tmp/crazyfunkytown.file")
85
85
 
86
86
  loader.diagnose[:local_config][:filename].
87
87
  must_match %r{/tmp/crazyfunkytown.file$}
88
88
  end
89
89
 
90
90
  it "sets global_config based on ENV['HOME'] by default" do
91
- stub_file(File.join(ENV['HOME'], '.kitchen/config.yml'), Hash.new)
91
+ stub_file(File.join(ENV["HOME"], ".kitchen/config.yml"), Hash.new)
92
92
  loader = Kitchen::Loader::YAML.new
93
93
 
94
94
  loader.diagnose[:global_config][:filename].must_equal File.expand_path(
95
- File.join(ENV['HOME'], '.kitchen/config.yml'))
95
+ File.join(ENV["HOME"], ".kitchen/config.yml"))
96
96
  end
97
97
 
98
98
  it "sets global_config from parameter, if given" do
99
- stub_file('/tmp/crazyfunkytown.file', Hash.new)
99
+ stub_file("/tmp/crazyfunkytown.file", Hash.new)
100
100
  loader = Kitchen::Loader::YAML.new(
101
- :global_config => '/tmp/crazyfunkytown.file')
101
+ :global_config => "/tmp/crazyfunkytown.file")
102
102
 
103
103
  loader.diagnose[:global_config][:filename].
104
104
  must_match %r{/tmp/crazyfunkytown.file$}
@@ -108,75 +108,86 @@ describe Kitchen::Loader::YAML do
108
108
  describe "#read" do
109
109
 
110
110
  it "returns a hash of kitchen.yml with symbolized keys" do
111
- stub_yaml!({
112
- 'foo' => 'bar'
113
- })
111
+ stub_yaml!(
112
+ "foo" => "bar"
113
+ )
114
114
 
115
- loader.read.must_equal({ :foo => 'bar' })
115
+ loader.read.must_equal(:foo => "bar")
116
116
  end
117
117
 
118
118
  it "deep merges in kitchen.local.yml configuration with kitchen.yml" do
119
- stub_yaml!(".kitchen.yml", {
120
- 'common' => { 'xx' => 1 },
121
- 'a' => 'b'
122
- })
123
- stub_yaml!(".kitchen.local.yml", {
124
- 'common' => { 'yy' => 2 },
125
- 'c' => 'd'
126
- })
127
-
128
- loader.read.must_equal({
129
- :a => 'b',
130
- :c => 'd',
119
+ stub_yaml!(".kitchen.yml",
120
+ "common" => { "xx" => 1 },
121
+ "a" => "b"
122
+ )
123
+ stub_yaml!(".kitchen.local.yml",
124
+ "common" => { "yy" => 2 },
125
+ "c" => "d"
126
+ )
127
+
128
+ loader.read.must_equal(
129
+ :a => "b",
130
+ :c => "d",
131
131
  :common => { :xx => 1, :yy => 2 }
132
- })
132
+ )
133
133
  end
134
134
 
135
135
  it "deep merges in a global config file with all other configs" do
136
- stub_yaml!(".kitchen.yml", {
137
- 'common' => { 'xx' => 1 },
138
- 'a' => 'b'
139
- })
140
- stub_yaml!(".kitchen.local.yml", {
141
- 'common' => { 'yy' => 2 },
142
- 'c' => 'd'
143
- })
144
- stub_global!({
145
- 'common' => { 'zz' => 3 },
146
- 'e' => 'f'
147
- })
148
-
149
- loader.read.must_equal({
150
- :a => 'b',
151
- :c => 'd',
152
- :e => 'f',
136
+ stub_yaml!(".kitchen.yml",
137
+ "common" => { "xx" => 1 },
138
+ "a" => "b"
139
+ )
140
+ stub_yaml!(".kitchen.local.yml",
141
+ "common" => { "yy" => 2 },
142
+ "c" => "d"
143
+ )
144
+ stub_global!(
145
+ "common" => { "zz" => 3 },
146
+ "e" => "f"
147
+ )
148
+
149
+ loader.read.must_equal(
150
+ :a => "b",
151
+ :c => "d",
152
+ :e => "f",
153
153
  :common => { :xx => 1, :yy => 2, :zz => 3 }
154
- })
154
+ )
155
+ end
156
+
157
+ it "merges kitchen.yml over configuration in global config" do
158
+ stub_global!(
159
+ "common" => { "thekey" => "nope" }
160
+ )
161
+ stub_yaml!(".kitchen.yml",
162
+ "common" => { "thekey" => "yep" }
163
+ )
164
+
165
+ loader.read.must_equal(:common => { :thekey => "yep" })
155
166
  end
156
167
 
157
168
  it "merges kitchen.local.yml over configuration in kitchen.yml" do
158
- stub_yaml!(".kitchen.yml", {
159
- 'common' => { 'thekey' => 'nope' }
160
- })
161
- stub_yaml!(".kitchen.local.yml", {
162
- 'common' => { 'thekey' => 'yep' }
163
- })
169
+ stub_yaml!(".kitchen.yml",
170
+ "common" => { "thekey" => "nope" }
171
+ )
172
+ stub_yaml!(".kitchen.local.yml",
173
+ "common" => { "thekey" => "yep" }
174
+ )
164
175
 
165
- loader.read.must_equal({ :common => { :thekey => 'yep' } })
176
+ loader.read.must_equal(:common => { :thekey => "yep" })
166
177
  end
167
178
 
168
- it "merges global config over both kitchen.local.yml and kitchen.yml" do
169
- stub_yaml!(".kitchen.yml", {
170
- 'common' => { 'thekey' => 'nope' }
171
- })
172
- stub_yaml!(".kitchen.local.yml", {
173
- 'common' => { 'thekey' => 'yep' }
174
- })
175
- stub_global!({
176
- 'common' => { 'thekey' => 'kinda' }
177
- })
179
+ it "merges kitchen.local.yml over both kitchen.yml and global config" do
180
+ stub_yaml!(".kitchen.yml",
181
+ "common" => { "thekey" => "nope" }
182
+ )
183
+ stub_yaml!(".kitchen.local.yml",
184
+ "common" => { "thekey" => "yep" }
185
+ )
186
+ stub_global!(
187
+ "common" => { "thekey" => "kinda" }
188
+ )
178
189
 
179
- loader.read.must_equal({ :common => { :thekey => 'kinda' } })
190
+ loader.read.must_equal(:common => { :thekey => "yep" })
180
191
  end
181
192
 
182
193
  NORMALIZED_KEYS = {
@@ -190,152 +201,152 @@ describe Kitchen::Loader::YAML do
190
201
  describe "normalizing #{key} config hashes" do
191
202
 
192
203
  it "merges local with #{key} string value over yaml with hash value" do
193
- stub_yaml!(".kitchen.yml", {
194
- key => { 'dakey' => 'ya' }
195
- })
196
- stub_yaml!(".kitchen.local.yml", {
197
- key => 'namey'
198
- })
199
-
200
- loader.read.must_equal({
201
- key.to_sym => { default_key.to_sym => "namey", :dakey => 'ya' }
202
- })
204
+ stub_yaml!(".kitchen.yml",
205
+ key => { "dakey" => "ya" }
206
+ )
207
+ stub_yaml!(".kitchen.local.yml",
208
+ key => "namey"
209
+ )
210
+
211
+ loader.read.must_equal(
212
+ key.to_sym => { default_key.to_sym => "namey", :dakey => "ya" }
213
+ )
203
214
  end
204
215
 
205
216
  it "merges local with #{key} hash value over yaml with string value" do
206
- stub_yaml!(".kitchen.yml", {
207
- key => 'namey'
208
- })
209
- stub_yaml!(".kitchen.local.yml", {
210
- key => { 'dakey' => 'ya' }
211
- })
212
-
213
- loader.read.must_equal({
214
- key.to_sym => { default_key.to_sym => "namey", :dakey => 'ya' }
215
- })
217
+ stub_yaml!(".kitchen.yml",
218
+ key => "namey"
219
+ )
220
+ stub_yaml!(".kitchen.local.yml",
221
+ key => { "dakey" => "ya" }
222
+ )
223
+
224
+ loader.read.must_equal(
225
+ key.to_sym => { default_key.to_sym => "namey", :dakey => "ya" }
226
+ )
216
227
  end
217
228
 
218
229
  it "merges local with #{key} nil value over yaml with hash value" do
219
- stub_yaml!(".kitchen.yml", {
220
- key => { 'dakey' => 'ya' }
221
- })
222
- stub_yaml!(".kitchen.local.yml", {
230
+ stub_yaml!(".kitchen.yml",
231
+ key => { "dakey" => "ya" }
232
+ )
233
+ stub_yaml!(".kitchen.local.yml",
223
234
  key => nil
224
- })
235
+ )
225
236
 
226
- loader.read.must_equal({
227
- key.to_sym => { :dakey => 'ya' }
228
- })
237
+ loader.read.must_equal(
238
+ key.to_sym => { :dakey => "ya" }
239
+ )
229
240
  end
230
241
 
231
242
  it "merges local with #{key} hash value over yaml with nil value" do
232
- stub_yaml!(".kitchen.yml", {
233
- key => 'namey'
234
- })
235
- stub_yaml!(".kitchen.local.yml", {
243
+ stub_yaml!(".kitchen.yml",
244
+ key => "namey"
245
+ )
246
+ stub_yaml!(".kitchen.local.yml",
236
247
  key => nil
237
- })
248
+ )
238
249
 
239
- loader.read.must_equal({
250
+ loader.read.must_equal(
240
251
  key.to_sym => { default_key.to_sym => "namey" }
241
- })
252
+ )
242
253
  end
243
254
 
244
255
  it "merges global with #{key} string value over yaml with hash value" do
245
- stub_yaml!(".kitchen.yml", {
246
- key => { 'dakey' => 'ya' }
247
- })
248
- stub_global!({
249
- key => 'namey'
250
- })
251
-
252
- loader.read.must_equal({
253
- key.to_sym => { default_key.to_sym => "namey", :dakey => 'ya' }
254
- })
256
+ stub_yaml!(".kitchen.yml",
257
+ key => { "dakey" => "ya" }
258
+ )
259
+ stub_global!(
260
+ key => "namey"
261
+ )
262
+
263
+ loader.read.must_equal(
264
+ key.to_sym => { default_key.to_sym => "namey", :dakey => "ya" }
265
+ )
255
266
  end
256
267
 
257
268
  it "merges global with #{key} hash value over yaml with string value" do
258
- stub_yaml!(".kitchen.yml", {
259
- key => 'namey'
260
- })
261
- stub_global!({
262
- key => { 'dakey' => 'ya' }
263
- })
264
-
265
- loader.read.must_equal({
266
- key.to_sym => { default_key.to_sym => "namey", :dakey => 'ya' }
267
- })
269
+ stub_yaml!(".kitchen.yml",
270
+ key => "namey"
271
+ )
272
+ stub_global!(
273
+ key => { "dakey" => "ya" }
274
+ )
275
+
276
+ loader.read.must_equal(
277
+ key.to_sym => { default_key.to_sym => "namey", :dakey => "ya" }
278
+ )
268
279
  end
269
280
 
270
281
  it "merges global with #{key} nil value over yaml with hash value" do
271
- stub_yaml!(".kitchen.yml", {
272
- key => { 'dakey' => 'ya' }
273
- })
274
- stub_global!({
282
+ stub_yaml!(".kitchen.yml",
283
+ key => { "dakey" => "ya" }
284
+ )
285
+ stub_global!(
275
286
  key => nil
276
- })
287
+ )
277
288
 
278
- loader.read.must_equal({
279
- key.to_sym => { :dakey => 'ya' }
280
- })
289
+ loader.read.must_equal(
290
+ key.to_sym => { :dakey => "ya" }
291
+ )
281
292
  end
282
293
 
283
294
  it "merges global with #{key} hash value over yaml with nil value" do
284
- stub_yaml!(".kitchen.yml", {
295
+ stub_yaml!(".kitchen.yml",
285
296
  key => nil
286
- })
287
- stub_global!({
288
- key => { 'dakey' => 'ya' }
289
- })
290
-
291
- loader.read.must_equal({
292
- key.to_sym => { :dakey => 'ya' }
293
- })
297
+ )
298
+ stub_global!(
299
+ key => { "dakey" => "ya" }
300
+ )
301
+
302
+ loader.read.must_equal(
303
+ key.to_sym => { :dakey => "ya" }
304
+ )
294
305
  end
295
306
 
296
307
  it "merges global, local, over yaml with mixed hash, string, nil values" do
297
- stub_yaml!(".kitchen.yml", {
308
+ stub_yaml!(".kitchen.yml",
298
309
  key => nil
299
- })
300
- stub_yaml!(".kitchen.local.yml", {
310
+ )
311
+ stub_yaml!(".kitchen.local.yml",
301
312
  key => "namey"
302
- })
303
- stub_global!({
304
- key => { 'dakey' => 'ya' }
305
- })
306
-
307
- loader.read.must_equal({
308
- key.to_sym => { default_key.to_sym => "namey", :dakey => 'ya' }
309
- })
313
+ )
314
+ stub_global!(
315
+ key => { "dakey" => "ya" }
316
+ )
317
+
318
+ loader.read.must_equal(
319
+ key.to_sym => { default_key.to_sym => "namey", :dakey => "ya" }
320
+ )
310
321
  end
311
322
  end
312
323
  end
313
324
 
314
325
  it "handles a kitchen.local.yml with no yaml elements" do
315
- stub_yaml!(".kitchen.yml", {
316
- 'a' => 'b'
317
- })
326
+ stub_yaml!(".kitchen.yml",
327
+ "a" => "b"
328
+ )
318
329
  stub_yaml!(".kitchen.local.yml", Hash.new)
319
330
 
320
- loader.read.must_equal({ :a => 'b' })
331
+ loader.read.must_equal(:a => "b")
321
332
  end
322
333
 
323
334
  it "handles a kitchen.yml with no yaml elements" do
324
335
  stub_yaml!(".kitchen.yml", Hash.new)
325
- stub_yaml!(".kitchen.local.yml", {
326
- 'a' => 'b'
327
- })
336
+ stub_yaml!(".kitchen.local.yml",
337
+ "a" => "b"
338
+ )
328
339
 
329
- loader.read.must_equal({ :a => 'b' })
340
+ loader.read.must_equal(:a => "b")
330
341
  end
331
342
 
332
343
  it "handles a kitchen.yml with yaml elements that parse as nil" do
333
344
  stub_yaml!(".kitchen.yml", nil)
334
- stub_yaml!(".kitchen.local.yml", {
335
- 'a' => 'b'
336
- })
345
+ stub_yaml!(".kitchen.local.yml",
346
+ "a" => "b"
347
+ )
337
348
 
338
- loader.read.must_equal({ :a => 'b' })
349
+ loader.read.must_equal(:a => "b")
339
350
  end
340
351
 
341
352
  it "raises an UserError if the config_file does not exist" do
@@ -345,7 +356,7 @@ describe Kitchen::Loader::YAML do
345
356
  it "arbitrary objects aren't deserialized in kitchen.yml" do
346
357
  FileUtils.mkdir_p "/tmp"
347
358
  File.open("/tmp/.kitchen.yml", "wb") do |f|
348
- f.write <<-YAML.gsub(/^ {10}/, '')
359
+ f.write <<-YAML.gsub(/^ {10}/, "")
349
360
  --- !ruby/object:Yamled
350
361
  foo: bar
351
362
  YAML
@@ -353,13 +364,13 @@ describe Kitchen::Loader::YAML do
353
364
 
354
365
  loader.read.class.wont_equal Yamled
355
366
  loader.read.class.must_equal Hash
356
- loader.read.must_equal({ :foo => 'bar' })
367
+ loader.read.must_equal(:foo => "bar")
357
368
  end
358
369
 
359
370
  it "arbitrary objects aren't deserialized in kitchen.local.yml" do
360
371
  FileUtils.mkdir_p "/tmp"
361
372
  File.open("/tmp/.kitchen.local.yml", "wb") do |f|
362
- f.write <<-YAML.gsub(/^ {10}/, '')
373
+ f.write <<-YAML.gsub(/^ {10}/, "")
363
374
  --- !ruby/object:Yamled
364
375
  wakka: boop
365
376
  YAML
@@ -368,12 +379,12 @@ describe Kitchen::Loader::YAML do
368
379
 
369
380
  loader.read.class.wont_equal Yamled
370
381
  loader.read.class.must_equal Hash
371
- loader.read.must_equal({ :wakka => 'boop' })
382
+ loader.read.must_equal(:wakka => "boop")
372
383
  end
373
384
 
374
385
  it "raises a UserError if kitchen.yml cannot be parsed" do
375
386
  FileUtils.mkdir_p "/tmp"
376
- File.open("/tmp/.kitchen.yml", "wb") { |f| f.write '&*%^*' }
387
+ File.open("/tmp/.kitchen.yml", "wb") { |f| f.write "&*%^*" }
377
388
 
378
389
  err = proc { loader.read }.must_raise Kitchen::UserError
379
390
  err.message.must_match Regexp.new(
@@ -382,7 +393,7 @@ describe Kitchen::Loader::YAML do
382
393
 
383
394
  it "raises a UserError if kitchen.yml cannot be parsed" do
384
395
  FileUtils.mkdir_p "/tmp"
385
- File.open("/tmp/.kitchen.yml", "wb") { |f| f.write 'uhoh' }
396
+ File.open("/tmp/.kitchen.yml", "wb") { |f| f.write "uhoh" }
386
397
 
387
398
  err = proc { loader.read }.must_raise Kitchen::UserError
388
399
  err.message.must_match Regexp.new(
@@ -398,7 +409,7 @@ describe Kitchen::Loader::YAML do
398
409
 
399
410
  it "raises a UserError if kitchen.local.yml cannot be parsed" do
400
411
  FileUtils.mkdir_p "/tmp"
401
- File.open("/tmp/.kitchen.local.yml", "wb") { |f| f.write '&*%^*' }
412
+ File.open("/tmp/.kitchen.local.yml", "wb") { |f| f.write "&*%^*" }
402
413
  stub_yaml!(".kitchen.yml", Hash.new)
403
414
 
404
415
  proc { loader.read }.must_raise Kitchen::UserError
@@ -407,19 +418,19 @@ describe Kitchen::Loader::YAML do
407
418
  it "evaluates kitchen.yml through erb before loading by default" do
408
419
  FileUtils.mkdir_p "/tmp"
409
420
  File.open("/tmp/.kitchen.yml", "wb") do |f|
410
- f.write <<-'YAML'.gsub(/^ {10}/, '')
421
+ f.write <<-'YAML'.gsub(/^ {10}/, "")
411
422
  ---
412
423
  name: <%= "AHH".downcase + "choo" %>
413
424
  YAML
414
425
  end
415
426
 
416
- loader.read.must_equal({ :name => "ahhchoo" })
427
+ loader.read.must_equal(:name => "ahhchoo")
417
428
  end
418
429
 
419
430
  it "raises a UserError if there is an ERB processing error" do
420
431
  FileUtils.mkdir_p "/tmp"
421
432
  File.open("/tmp/.kitchen.yml", "wb") do |f|
422
- f.write <<-'YAML'.gsub(/^ {10}/, '')
433
+ f.write <<-'YAML'.gsub(/^ {10}/, "")
423
434
  ---
424
435
  <%= poop %>: yep
425
436
  YAML
@@ -433,75 +444,75 @@ describe Kitchen::Loader::YAML do
433
444
  it "evaluates kitchen.local.yml through erb before loading by default" do
434
445
  FileUtils.mkdir_p "/tmp"
435
446
  File.open("/tmp/.kitchen.local.yml", "wb") do |f|
436
- f.write <<-'YAML'.gsub(/^ {10}/, '')
447
+ f.write <<-'YAML'.gsub(/^ {10}/, "")
437
448
  ---
438
449
  <% %w{noodle mushroom}.each do |kind| %>
439
450
  <%= kind %>: soup
440
451
  <% end %>
441
452
  YAML
442
453
  end
443
- stub_yaml!(".kitchen.yml", { 'spinach' => 'salad' })
454
+ stub_yaml!(".kitchen.yml", "spinach" => "salad")
444
455
 
445
- loader.read.must_equal({
446
- :spinach => 'salad',
447
- :noodle => 'soup',
448
- :mushroom => 'soup'
449
- })
456
+ loader.read.must_equal(
457
+ :spinach => "salad",
458
+ :noodle => "soup",
459
+ :mushroom => "soup"
460
+ )
450
461
  end
451
462
 
452
463
  it "skips evaluating kitchen.yml through erb if disabled" do
453
464
  loader = Kitchen::Loader::YAML.new(
454
- :project_config => '/tmp/.kitchen.yml', :process_erb => false)
465
+ :project_config => "/tmp/.kitchen.yml", :process_erb => false)
455
466
  FileUtils.mkdir_p "/tmp"
456
467
  File.open("/tmp/.kitchen.yml", "wb") do |f|
457
- f.write <<-'YAML'.gsub(/^ {10}/, '')
468
+ f.write <<-'YAML'.gsub(/^ {10}/, "")
458
469
  ---
459
470
  name: <%= "AHH".downcase %>
460
471
  YAML
461
472
  end
462
473
 
463
- loader.read.must_equal({ :name => '<%= "AHH".downcase %>' })
474
+ loader.read.must_equal(:name => '<%= "AHH".downcase %>')
464
475
  end
465
476
 
466
477
  it "skips evaluating kitchen.local.yml through erb if disabled" do
467
478
  loader = Kitchen::Loader::YAML.new(
468
- :project_config => '/tmp/.kitchen.yml', :process_erb => false)
479
+ :project_config => "/tmp/.kitchen.yml", :process_erb => false)
469
480
  FileUtils.mkdir_p "/tmp"
470
481
  File.open("/tmp/.kitchen.local.yml", "wb") do |f|
471
- f.write <<-'YAML'.gsub(/^ {10}/, '')
482
+ f.write <<-'YAML'.gsub(/^ {10}/, "")
472
483
  ---
473
484
  name: <%= "AHH".downcase %>
474
485
  YAML
475
486
  end
476
487
  stub_yaml!(".kitchen.yml", Hash.new)
477
488
 
478
- loader.read.must_equal({ :name => '<%= "AHH".downcase %>' })
489
+ loader.read.must_equal(:name => '<%= "AHH".downcase %>')
479
490
  end
480
491
 
481
492
  it "skips kitchen.local.yml if disabled" do
482
493
  loader = Kitchen::Loader::YAML.new(
483
- :project_config => '/tmp/.kitchen.yml', :process_local => false)
484
- stub_yaml!(".kitchen.yml", {
485
- 'a' => 'b'
486
- })
487
- stub_yaml!(".kitchen.local.yml", {
488
- 'superawesomesauceadditions' => 'enabled, yo'
489
- })
494
+ :project_config => "/tmp/.kitchen.yml", :process_local => false)
495
+ stub_yaml!(".kitchen.yml",
496
+ "a" => "b"
497
+ )
498
+ stub_yaml!(".kitchen.local.yml",
499
+ "superawesomesauceadditions" => "enabled, yo"
500
+ )
490
501
 
491
- loader.read.must_equal({ :a => 'b' })
502
+ loader.read.must_equal(:a => "b")
492
503
  end
493
504
 
494
505
  it "skips the global config if disabled" do
495
506
  loader = Kitchen::Loader::YAML.new(
496
- :project_config => '/tmp/.kitchen.yml', :process_global => false)
497
- stub_yaml!(".kitchen.yml", {
498
- 'a' => 'b'
499
- })
500
- stub_global!({
501
- 'superawesomesauceadditions' => 'enabled, yo'
502
- })
507
+ :project_config => "/tmp/.kitchen.yml", :process_global => false)
508
+ stub_yaml!(".kitchen.yml",
509
+ "a" => "b"
510
+ )
511
+ stub_global!(
512
+ "superawesomesauceadditions" => "enabled, yo"
513
+ )
503
514
 
504
- loader.read.must_equal({ :a => 'b' })
515
+ loader.read.must_equal(:a => "b")
505
516
  end
506
517
  end
507
518
 
@@ -522,7 +533,7 @@ describe Kitchen::Loader::YAML do
522
533
  it "contains erb processing information when false" do
523
534
  stub_yaml!(Hash.new)
524
535
  loader = Kitchen::Loader::YAML.new(
525
- :project_config => '/tmp/.kitchen.yml', :process_erb => false)
536
+ :project_config => "/tmp/.kitchen.yml", :process_erb => false)
526
537
 
527
538
  loader.diagnose[:process_erb].must_equal false
528
539
  end
@@ -536,7 +547,7 @@ describe Kitchen::Loader::YAML do
536
547
  it "contains local processing information when false" do
537
548
  stub_yaml!(Hash.new)
538
549
  loader = Kitchen::Loader::YAML.new(
539
- :project_config => '/tmp/.kitchen.yml', :process_local => false)
550
+ :project_config => "/tmp/.kitchen.yml", :process_local => false)
540
551
 
541
552
  loader.diagnose[:process_local].must_equal false
542
553
  end
@@ -550,7 +561,7 @@ describe Kitchen::Loader::YAML do
550
561
  it "contains global processing information when false" do
551
562
  stub_yaml!(Hash.new)
552
563
  loader = Kitchen::Loader::YAML.new(
553
- :project_config => '/tmp/.kitchen.yml', :process_global => false)
564
+ :project_config => "/tmp/.kitchen.yml", :process_global => false)
554
565
 
555
566
  loader.diagnose[:process_global].must_equal false
556
567
  end
@@ -558,18 +569,18 @@ describe Kitchen::Loader::YAML do
558
569
  describe "for yaml files" do
559
570
 
560
571
  before do
561
- stub_yaml!(".kitchen.yml", {
572
+ stub_yaml!(".kitchen.yml",
562
573
  "from_project" => "project",
563
574
  "common" => { "p" => "pretty" }
564
- })
565
- stub_yaml!(".kitchen.local.yml", {
575
+ )
576
+ stub_yaml!(".kitchen.local.yml",
566
577
  "from_local" => "local",
567
578
  "common" => { "l" => "looky" }
568
- })
569
- stub_global!({
579
+ )
580
+ stub_global!(
570
581
  "from_global" => "global",
571
582
  "common" => { "g" => "goody" }
572
- })
583
+ )
573
584
  end
574
585
 
575
586
  it "global config contains a filename" do
@@ -578,10 +589,10 @@ describe Kitchen::Loader::YAML do
578
589
  end
579
590
 
580
591
  it "global config contains raw data" do
581
- loader.diagnose[:global_config][:raw_data].must_equal({
592
+ loader.diagnose[:global_config][:raw_data].must_equal(
582
593
  "from_global" => "global",
583
594
  "common" => { "g" => "goody" }
584
- })
595
+ )
585
596
  end
586
597
 
587
598
  it "project config contains a filename" do
@@ -590,10 +601,10 @@ describe Kitchen::Loader::YAML do
590
601
  end
591
602
 
592
603
  it "project config contains raw data" do
593
- loader.diagnose[:project_config][:raw_data].must_equal({
604
+ loader.diagnose[:project_config][:raw_data].must_equal(
594
605
  "from_project" => "project",
595
606
  "common" => { "p" => "pretty" }
596
- })
607
+ )
597
608
  end
598
609
 
599
610
  it "local config contains a filename" do
@@ -602,10 +613,10 @@ describe Kitchen::Loader::YAML do
602
613
  end
603
614
 
604
615
  it "local config contains raw data" do
605
- loader.diagnose[:local_config][:raw_data].must_equal({
616
+ loader.diagnose[:local_config][:raw_data].must_equal(
606
617
  "from_local" => "local",
607
618
  "common" => { "l" => "looky" }
608
- })
619
+ )
609
620
  end
610
621
 
611
622
  it "combined config contains a nil filename" do
@@ -614,7 +625,7 @@ describe Kitchen::Loader::YAML do
614
625
  end
615
626
 
616
627
  it "combined config contains raw data" do
617
- loader.diagnose[:combined_config][:raw_data].must_equal({
628
+ loader.diagnose[:combined_config][:raw_data].must_equal(
618
629
  "from_global" => "global",
619
630
  "from_project" => "project",
620
631
  "from_local" => "local",
@@ -623,7 +634,7 @@ describe Kitchen::Loader::YAML do
623
634
  "p" => "pretty",
624
635
  "l" => "looky"
625
636
  }
626
- })
637
+ )
627
638
  end
628
639
 
629
640
  describe "for global on error" do
@@ -631,7 +642,7 @@ describe Kitchen::Loader::YAML do
631
642
  before do
632
643
  FileUtils.mkdir_p(File.join(ENV["HOME"], ".kitchen"))
633
644
  File.open(File.join(ENV["HOME"], ".kitchen/config.yml"), "wb") do |f|
634
- f.write '&*%^*'
645
+ f.write "&*%^*"
635
646
  end
636
647
  end
637
648
 
@@ -660,7 +671,7 @@ describe Kitchen::Loader::YAML do
660
671
 
661
672
  before do
662
673
  File.open("/tmp/.kitchen.yml", "wb") do |f|
663
- f.write '&*%^*'
674
+ f.write "&*%^*"
664
675
  end
665
676
  end
666
677
 
@@ -689,7 +700,7 @@ describe Kitchen::Loader::YAML do
689
700
 
690
701
  before do
691
702
  File.open("/tmp/.kitchen.local.yml", "wb") do |f|
692
- f.write '&*%^*'
703
+ f.write "&*%^*"
693
704
  end
694
705
  end
695
706
 
@@ -718,7 +729,7 @@ describe Kitchen::Loader::YAML do
718
729
 
719
730
  before do
720
731
  File.open("/tmp/.kitchen.yml", "wb") do |f|
721
- f.write '&*%^*'
732
+ f.write "&*%^*"
722
733
  end
723
734
  end
724
735