test-kitchen 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. checksums.yaml +4 -4
  2. data/.cane +8 -7
  3. data/.github/ISSUE_TEMPLATE.md +56 -0
  4. data/.gitignore +28 -27
  5. data/.kitchen.ci.yml +23 -0
  6. data/.kitchen.proxy.yml +27 -0
  7. data/.rubocop.yml +3 -3
  8. data/.travis.yml +70 -53
  9. data/.yardopts +3 -3
  10. data/Berksfile +3 -0
  11. data/CHANGELOG.md +1083 -1051
  12. data/CONTRIBUTING.md +14 -14
  13. data/Gemfile +19 -14
  14. data/Gemfile.proxy_tests +4 -5
  15. data/Guardfile +42 -42
  16. data/LICENSE +15 -15
  17. data/MAINTAINERS.md +23 -24
  18. data/README.md +135 -135
  19. data/Rakefile +61 -76
  20. data/appveyor.yml +44 -34
  21. data/features/kitchen_action_commands.feature +164 -164
  22. data/features/kitchen_command.feature +16 -16
  23. data/features/kitchen_console_command.feature +34 -34
  24. data/features/kitchen_defaults.feature +38 -38
  25. data/features/kitchen_diagnose_command.feature +96 -96
  26. data/features/kitchen_driver_create_command.feature +64 -64
  27. data/features/kitchen_driver_discover_command.feature +25 -25
  28. data/features/kitchen_help_command.feature +16 -16
  29. data/features/kitchen_init_command.feature +274 -274
  30. data/features/kitchen_list_command.feature +104 -104
  31. data/features/kitchen_login_command.feature +62 -62
  32. data/features/kitchen_sink_command.feature +30 -30
  33. data/features/kitchen_test_command.feature +88 -88
  34. data/features/step_definitions/gem_steps.rb +36 -36
  35. data/features/step_definitions/git_steps.rb +5 -5
  36. data/features/step_definitions/output_steps.rb +5 -5
  37. data/features/support/env.rb +75 -75
  38. data/lib/kitchen.rb +150 -150
  39. data/lib/kitchen/base64_stream.rb +55 -55
  40. data/lib/kitchen/cli.rb +419 -419
  41. data/lib/kitchen/collection.rb +55 -55
  42. data/lib/kitchen/color.rb +65 -65
  43. data/lib/kitchen/command.rb +185 -185
  44. data/lib/kitchen/command/action.rb +45 -45
  45. data/lib/kitchen/command/console.rb +58 -58
  46. data/lib/kitchen/command/diagnose.rb +92 -92
  47. data/lib/kitchen/command/driver_discover.rb +105 -105
  48. data/lib/kitchen/command/exec.rb +41 -41
  49. data/lib/kitchen/command/list.rb +119 -119
  50. data/lib/kitchen/command/login.rb +43 -43
  51. data/lib/kitchen/command/sink.rb +54 -54
  52. data/lib/kitchen/command/test.rb +51 -51
  53. data/lib/kitchen/config.rb +322 -322
  54. data/lib/kitchen/configurable.rb +529 -529
  55. data/lib/kitchen/data_munger.rb +959 -960
  56. data/lib/kitchen/diagnostic.rb +141 -141
  57. data/lib/kitchen/driver.rb +56 -56
  58. data/lib/kitchen/driver/base.rb +134 -134
  59. data/lib/kitchen/driver/dummy.rb +108 -108
  60. data/lib/kitchen/driver/proxy.rb +72 -72
  61. data/lib/kitchen/driver/ssh_base.rb +357 -357
  62. data/lib/kitchen/errors.rb +229 -229
  63. data/lib/kitchen/generator/driver_create.rb +177 -177
  64. data/lib/kitchen/generator/init.rb +296 -296
  65. data/lib/kitchen/instance.rb +662 -662
  66. data/lib/kitchen/lazy_hash.rb +142 -142
  67. data/lib/kitchen/loader/yaml.rb +349 -349
  68. data/lib/kitchen/logger.rb +423 -423
  69. data/lib/kitchen/logging.rb +56 -56
  70. data/lib/kitchen/login_command.rb +52 -52
  71. data/lib/kitchen/metadata_chopper.rb +52 -52
  72. data/lib/kitchen/platform.rb +67 -67
  73. data/lib/kitchen/provisioner.rb +54 -54
  74. data/lib/kitchen/provisioner/base.rb +236 -236
  75. data/lib/kitchen/provisioner/chef/berkshelf.rb +114 -114
  76. data/lib/kitchen/provisioner/chef/common_sandbox.rb +322 -322
  77. data/lib/kitchen/provisioner/chef/librarian.rb +112 -112
  78. data/lib/kitchen/provisioner/chef_apply.rb +124 -125
  79. data/lib/kitchen/provisioner/chef_base.rb +341 -294
  80. data/lib/kitchen/provisioner/chef_solo.rb +88 -89
  81. data/lib/kitchen/provisioner/chef_zero.rb +245 -245
  82. data/lib/kitchen/provisioner/dummy.rb +79 -79
  83. data/lib/kitchen/provisioner/shell.rb +138 -138
  84. data/lib/kitchen/rake_tasks.rb +63 -63
  85. data/lib/kitchen/shell_out.rb +93 -93
  86. data/lib/kitchen/ssh.rb +276 -276
  87. data/lib/kitchen/state_file.rb +120 -120
  88. data/lib/kitchen/suite.rb +51 -51
  89. data/lib/kitchen/thor_tasks.rb +66 -66
  90. data/lib/kitchen/transport.rb +54 -54
  91. data/lib/kitchen/transport/base.rb +176 -176
  92. data/lib/kitchen/transport/dummy.rb +79 -79
  93. data/lib/kitchen/transport/ssh.rb +364 -364
  94. data/lib/kitchen/transport/winrm.rb +486 -486
  95. data/lib/kitchen/util.rb +147 -147
  96. data/lib/kitchen/verifier.rb +55 -55
  97. data/lib/kitchen/verifier/base.rb +235 -235
  98. data/lib/kitchen/verifier/busser.rb +277 -277
  99. data/lib/kitchen/verifier/dummy.rb +79 -79
  100. data/lib/kitchen/verifier/shell.rb +101 -101
  101. data/lib/kitchen/version.rb +21 -21
  102. data/lib/vendor/hash_recursive_merge.rb +82 -82
  103. data/spec/kitchen/base64_stream_spec.rb +77 -77
  104. data/spec/kitchen/cli_spec.rb +56 -56
  105. data/spec/kitchen/collection_spec.rb +80 -80
  106. data/spec/kitchen/color_spec.rb +54 -54
  107. data/spec/kitchen/config_spec.rb +408 -408
  108. data/spec/kitchen/configurable_spec.rb +1095 -1062
  109. data/spec/kitchen/data_munger_spec.rb +2694 -2383
  110. data/spec/kitchen/diagnostic_spec.rb +129 -129
  111. data/spec/kitchen/driver/base_spec.rb +121 -121
  112. data/spec/kitchen/driver/dummy_spec.rb +199 -199
  113. data/spec/kitchen/driver/proxy_spec.rb +138 -138
  114. data/spec/kitchen/driver/ssh_base_spec.rb +1115 -1115
  115. data/spec/kitchen/driver_spec.rb +112 -112
  116. data/spec/kitchen/errors_spec.rb +309 -309
  117. data/spec/kitchen/instance_spec.rb +1419 -1419
  118. data/spec/kitchen/lazy_hash_spec.rb +117 -117
  119. data/spec/kitchen/loader/yaml_spec.rb +774 -774
  120. data/spec/kitchen/logger_spec.rb +429 -429
  121. data/spec/kitchen/logging_spec.rb +59 -59
  122. data/spec/kitchen/login_command_spec.rb +68 -68
  123. data/spec/kitchen/metadata_chopper_spec.rb +82 -82
  124. data/spec/kitchen/platform_spec.rb +89 -89
  125. data/spec/kitchen/provisioner/base_spec.rb +386 -386
  126. data/spec/kitchen/provisioner/chef_apply_spec.rb +136 -136
  127. data/spec/kitchen/provisioner/chef_base_spec.rb +1161 -1067
  128. data/spec/kitchen/provisioner/chef_solo_spec.rb +557 -557
  129. data/spec/kitchen/provisioner/chef_zero_spec.rb +1001 -1001
  130. data/spec/kitchen/provisioner/dummy_spec.rb +99 -99
  131. data/spec/kitchen/provisioner/shell_spec.rb +566 -566
  132. data/spec/kitchen/provisioner_spec.rb +107 -107
  133. data/spec/kitchen/shell_out_spec.rb +150 -150
  134. data/spec/kitchen/ssh_spec.rb +693 -693
  135. data/spec/kitchen/state_file_spec.rb +129 -129
  136. data/spec/kitchen/suite_spec.rb +62 -62
  137. data/spec/kitchen/transport/base_spec.rb +89 -89
  138. data/spec/kitchen/transport/ssh_spec.rb +1255 -1255
  139. data/spec/kitchen/transport/winrm_spec.rb +1143 -1143
  140. data/spec/kitchen/transport_spec.rb +112 -112
  141. data/spec/kitchen/util_spec.rb +165 -165
  142. data/spec/kitchen/verifier/base_spec.rb +362 -362
  143. data/spec/kitchen/verifier/busser_spec.rb +610 -610
  144. data/spec/kitchen/verifier/dummy_spec.rb +99 -99
  145. data/spec/kitchen/verifier/shell_spec.rb +160 -158
  146. data/spec/kitchen/verifier_spec.rb +120 -120
  147. data/spec/kitchen_spec.rb +114 -114
  148. data/spec/spec_helper.rb +85 -85
  149. data/spec/support/powershell_max_size_spec.rb +40 -40
  150. data/support/busser_install_command.ps1 +14 -14
  151. data/support/busser_install_command.sh +14 -14
  152. data/support/chef-client-zero.rb +77 -77
  153. data/support/chef_base_init_command.ps1 +18 -18
  154. data/support/chef_base_init_command.sh +2 -2
  155. data/support/chef_base_install_command.ps1 +85 -85
  156. data/support/chef_base_install_command.sh +229 -229
  157. data/support/chef_zero_prepare_command_legacy.ps1 +9 -9
  158. data/support/chef_zero_prepare_command_legacy.sh +10 -10
  159. data/support/download_helpers.sh +109 -109
  160. data/support/dummy-validation.pem +27 -27
  161. data/templates/driver/CHANGELOG.md.erb +3 -3
  162. data/templates/driver/Gemfile.erb +3 -3
  163. data/templates/driver/README.md.erb +64 -64
  164. data/templates/driver/Rakefile.erb +21 -21
  165. data/templates/driver/driver.rb.erb +23 -23
  166. data/templates/driver/gemspec.erb +29 -29
  167. data/templates/driver/gitignore.erb +17 -17
  168. data/templates/driver/license_apachev2.erb +15 -15
  169. data/templates/driver/license_lgplv3.erb +16 -16
  170. data/templates/driver/license_mit.erb +22 -22
  171. data/templates/driver/license_reserved.erb +5 -5
  172. data/templates/driver/tailor.erb +4 -4
  173. data/templates/driver/travis.yml.erb +11 -11
  174. data/templates/driver/version.rb.erb +12 -12
  175. data/templates/init/chefignore.erb +1 -1
  176. data/templates/init/kitchen.yml.erb +18 -18
  177. data/test-kitchen.gemspec +62 -62
  178. data/test/integration/default/default_spec.rb +3 -0
  179. data/testing_windows.md +37 -37
  180. metadata +23 -11
@@ -1,25 +1,25 @@
1
- Feature: Search RubyGems to discover new Test Kitchen Driver gems
2
- In order to periodically check for new/updated Kitchen drivers
3
- As a Test Kitchen user
4
- I want to run a command which returns candidate Kitchen drivers
5
-
6
- @spawn
7
- Scenario: Displaying help
8
- When I run `kitchen help driver discover`
9
- Then the output should contain:
10
- """
11
- Usage:
12
- kitchen driver discover
13
- """
14
- And the exit status should be 0
15
-
16
- Scenario: Running driver discover returns live results
17
- When I run `kitchen driver discover`
18
- Then the exit status should be 0
19
- And the output should contain "kitchen-bluebox"
20
-
21
- Scenario: Running driver discover with the --chef-config-path parameter loads the chef config
22
- Given an empty file named "kitchen_client.rb"
23
- When I run `kitchen driver discover --chef-config-path=kitchen_client.rb`
24
- Then the exit status should be 0
25
- And the output should contain "kitchen-bluebox"
1
+ Feature: Search RubyGems to discover new Test Kitchen Driver gems
2
+ In order to periodically check for new/updated Kitchen drivers
3
+ As a Test Kitchen user
4
+ I want to run a command which returns candidate Kitchen drivers
5
+
6
+ @spawn
7
+ Scenario: Displaying help
8
+ When I run `kitchen help driver discover`
9
+ Then the output should contain:
10
+ """
11
+ Usage:
12
+ kitchen driver discover
13
+ """
14
+ And the exit status should be 0
15
+
16
+ Scenario: Running driver discover returns live results
17
+ When I run `kitchen driver discover`
18
+ Then the exit status should be 0
19
+ And the output should contain "kitchen-bluebox"
20
+
21
+ Scenario: Running driver discover with the --chef-config-path parameter loads the chef config
22
+ Given an empty file named "kitchen_client.rb"
23
+ When I run `kitchen driver discover --chef-config-path=kitchen_client.rb`
24
+ Then the exit status should be 0
25
+ And the output should contain "kitchen-bluebox"
@@ -1,16 +1,16 @@
1
- Feature: Using Test Kitchen CLI help
2
- In order to access the self describing documentation
3
- As a user of Test Kitchen
4
- I want to run a command help help for kitchen commands
5
-
6
- @spawn
7
- Scenario: Printing help
8
- When I run `kitchen help`
9
- Then the exit status should be 0
10
- And the output should contain "kitchen help [COMMAND]"
11
-
12
- @spawn
13
- Scenario: Bad arugments should exit nonzero
14
- When I run `kitchen help -d always -c`
15
- Then the exit status should not be 0
16
- And the output should contain "Usage: "
1
+ Feature: Using Test Kitchen CLI help
2
+ In order to access the self describing documentation
3
+ As a user of Test Kitchen
4
+ I want to run a command help help for kitchen commands
5
+
6
+ @spawn
7
+ Scenario: Printing help
8
+ When I run `kitchen help`
9
+ Then the exit status should be 0
10
+ And the output should contain "kitchen help [COMMAND]"
11
+
12
+ @spawn
13
+ Scenario: Bad arugments should exit nonzero
14
+ When I run `kitchen help -d always -c`
15
+ Then the exit status should not be 0
16
+ And the output should contain "Usage: "
@@ -1,274 +1,274 @@
1
- Feature: Add Test Kitchen support to an existing project
2
- In order to add Test Kitchen to a project with minimal effort
3
- As an operator
4
- I want to run a command to initialize my project
5
-
6
- Background:
7
- Given a sandboxed GEM_HOME directory named "kitchen-init"
8
-
9
- @spawn
10
- Scenario: Displaying help
11
- When I run `kitchen help init`
12
- Then the output should contain:
13
- """
14
- Usage:
15
- kitchen init
16
- """
17
- And the exit status should be 0
18
-
19
- @spawn
20
- Scenario: Running init with default values
21
- Given I have a git repository
22
- When I run `kitchen init`
23
- Then the exit status should be 0
24
- And a directory named "test/integration/default" should exist
25
- And the file ".gitignore" should contain ".kitchen/"
26
- And the file ".gitignore" should contain ".kitchen.local.yml"
27
- And the file ".kitchen.yml" should contain:
28
- """
29
- driver:
30
- name: vagrant
31
- """
32
- And a file named "Gemfile" should not exist
33
- And a file named "Rakefile" should not exist
34
- And a file named "Thorfile" should not exist
35
- And a gem named "kitchen-vagrant" is installed
36
- And a file named "chefignore" should exist
37
- And the file "chefignore" should contain ".kitchen"
38
-
39
- Scenario: Running init that creates a Gemfile
40
- When I successfully run `kitchen init --create-gemfile`
41
- Then the file "Gemfile" should contain "https://rubygems.org"
42
- And the file "Gemfile" should contain:
43
- """
44
- gem "test-kitchen"
45
- """
46
- And the file "Gemfile" should contain:
47
- """
48
- gem "kitchen-vagrant"
49
- """
50
- And the output should contain "You must run `bundle install'"
51
-
52
- Scenario: Running init with an existing Gemfile appends to the Gemfile
53
- Given a file named "Gemfile" with:
54
- """
55
- source "https://rubygems.org"
56
-
57
-
58
- """
59
- When I successfully run `kitchen init`
60
- Then the file "Gemfile" should contain exactly:
61
- """
62
- source "https://rubygems.org"
63
-
64
- gem "test-kitchen"
65
- gem "kitchen-vagrant"
66
-
67
- """
68
- And the output should contain "You must run `bundle install'"
69
-
70
- Scenario: Running init with a Gemfile containing test-kitchen does not
71
- re-append
72
- Given a file named "Gemfile" with:
73
- """
74
- source "https://rubygems.org"
75
-
76
- gem 'test-kitchen'
77
-
78
- """
79
- When I successfully run `kitchen init`
80
- Then the file "Gemfile" should contain exactly:
81
- """
82
- source "https://rubygems.org"
83
-
84
- gem 'test-kitchen'
85
- gem "kitchen-vagrant"
86
-
87
- """
88
- And the output should contain "You must run `bundle install'"
89
-
90
- Scenario: Running init with a Gemfile containing the driver gem does not
91
- re-append
92
- Given a file named "Gemfile" with:
93
- """
94
- source "https://rubygems.org"
95
-
96
- gem 'test-kitchen'
97
- gem 'kitchen-ec2'
98
-
99
- """
100
- When I successfully run `kitchen init --driver=kitchen-ec2`
101
- Then the file "Gemfile" should contain exactly:
102
- """
103
- source "https://rubygems.org"
104
-
105
- gem 'test-kitchen'
106
- gem 'kitchen-ec2'
107
-
108
- """
109
- And the output should not contain "You must run `bundle install'"
110
-
111
- Scenario: Running init with multiple drivers appends to the Gemfile
112
- Given an empty file named "Gemfile"
113
- When I successfully run `kitchen init --driver=kitchen-bluebox kitchen-wakka`
114
- Then the file "Gemfile" should contain:
115
- """
116
- gem "kitchen-bluebox"
117
- """
118
- And the file "Gemfile" should contain:
119
- """
120
- gem "kitchen-wakka"
121
- """
122
- And the output should contain "You must run `bundle install'"
123
-
124
- Scenario: Running init with multiple driver sets the plugin_driver to the
125
- first driver given
126
- Given an empty file named "Gemfile"
127
- When I successfully run `kitchen init --driver=kitchen-bluebox kitchen-wakka`
128
- Then the file ".kitchen.yml" should contain:
129
- """
130
- driver:
131
- name: bluebox
132
- """
133
-
134
- Scenario: Running init with no drivers sets the plugin_driver to the
135
- dummy driver
136
- Given an empty file named "Gemfile"
137
- When I successfully run `kitchen init --no-driver`
138
- Then the file ".kitchen.yml" should contain:
139
- """
140
- driver:
141
- name: dummy
142
- """
143
-
144
- Scenario: Running init without a provisioner sets the default provisioner
145
- to chef_solo in .kitchen.yml
146
- Given an empty file named "Gemfile"
147
- When I successfully run `kitchen init --no-driver`
148
- Then the file ".kitchen.yml" should contain:
149
- """
150
- provisioner:
151
- name: chef_solo
152
- """
153
-
154
- Scenario: Running init with a provisioner sets the provisioner in .kitchen.yml
155
- Given an empty file named "Gemfile"
156
- When I successfully run `kitchen init --no-driver --provisioner=chef_zero`
157
- Then the file ".kitchen.yml" should contain:
158
- """
159
- provisioner:
160
- name: chef_zero
161
- """
162
-
163
- Scenario: Running with a Rakefile file appends Kitchen tasks
164
- Given an empty file named "Gemfile"
165
- And an empty file named "Rakefile"
166
- When I successfully run `kitchen init`
167
- Then the file "Rakefile" should contain:
168
- """
169
- begin
170
- require 'kitchen/rake_tasks'
171
- Kitchen::RakeTasks.new
172
- rescue LoadError
173
- puts '>>>>> Kitchen gem not loaded, omitting tasks' unless ENV['CI']
174
- end
175
- """
176
-
177
- Scenario: Running without git doesn't make a .gitignore
178
- When I successfully run `kitchen init --no-driver`
179
- Then the exit status should be 0
180
- And a file named ".gitignore" should not exist
181
-
182
- Scenario: Running with a Thorfile file appends Kitchen tasks
183
- Given an empty file named "Gemfile"
184
- Given an empty file named "Thorfile"
185
- When I successfully run `kitchen init`
186
- Then the file "Thorfile" should contain:
187
- """
188
- begin
189
- require 'kitchen/thor_tasks'
190
- Kitchen::ThorTasks.new
191
- rescue LoadError
192
- puts '>>>>> Kitchen gem not loaded, omitting tasks' unless ENV['CI']
193
- end
194
- """
195
-
196
- Scenario: Running init with a name in metadata.rb sets a run list
197
- Given an empty file named "Gemfile"
198
- Given a file named "metadata.rb" with:
199
- """
200
- name "ntp"
201
- license "Apache 2.0"
202
- description "Installs and configures ntp as a client or server"
203
- version "0.1.0"
204
-
205
- support "ubuntu"
206
- support "centos"
207
- """
208
- When I successfully run `kitchen init`
209
- Then the file ".kitchen.yml" should contain exactly:
210
- """
211
- ---
212
- driver:
213
- name: vagrant
214
-
215
- provisioner:
216
- name: chef_solo
217
-
218
- platforms:
219
- - name: ubuntu-14.04
220
- - name: centos-7.1
221
-
222
- suites:
223
- - name: default
224
- run_list:
225
- - recipe[ntp::default]
226
- attributes:
227
-
228
- """
229
-
230
- Scenario: Running init with an empty file metadata.rb sets an empty run list
231
- Given an empty file named "metadata.rb"
232
- When I successfully run `kitchen init`
233
- Then the file ".kitchen.yml" should contain exactly:
234
- """
235
- ---
236
- driver:
237
- name: vagrant
238
-
239
- provisioner:
240
- name: chef_solo
241
-
242
- platforms:
243
- - name: ubuntu-14.04
244
- - name: centos-7.1
245
-
246
- suites:
247
- - name: default
248
- run_list:
249
- attributes:
250
-
251
- """
252
-
253
- Scenario: Running init with no metadata.rb file sets an empty run list
254
- Given a file named "metadata.rb" does not exist
255
- When I successfully run `kitchen init`
256
- Then the file ".kitchen.yml" should contain exactly:
257
- """
258
- ---
259
- driver:
260
- name: vagrant
261
-
262
- provisioner:
263
- name: chef_solo
264
-
265
- platforms:
266
- - name: ubuntu-14.04
267
- - name: centos-7.1
268
-
269
- suites:
270
- - name: default
271
- run_list:
272
- attributes:
273
-
274
- """
1
+ Feature: Add Test Kitchen support to an existing project
2
+ In order to add Test Kitchen to a project with minimal effort
3
+ As an operator
4
+ I want to run a command to initialize my project
5
+
6
+ Background:
7
+ Given a sandboxed GEM_HOME directory named "kitchen-init"
8
+
9
+ @spawn
10
+ Scenario: Displaying help
11
+ When I run `kitchen help init`
12
+ Then the output should contain:
13
+ """
14
+ Usage:
15
+ kitchen init
16
+ """
17
+ And the exit status should be 0
18
+
19
+ @spawn
20
+ Scenario: Running init with default values
21
+ Given I have a git repository
22
+ When I run `kitchen init`
23
+ Then the exit status should be 0
24
+ And a directory named "test/integration/default" should exist
25
+ And the file ".gitignore" should contain ".kitchen/"
26
+ And the file ".gitignore" should contain ".kitchen.local.yml"
27
+ And the file ".kitchen.yml" should contain:
28
+ """
29
+ driver:
30
+ name: vagrant
31
+ """
32
+ And a file named "Gemfile" should not exist
33
+ And a file named "Rakefile" should not exist
34
+ And a file named "Thorfile" should not exist
35
+ And a gem named "kitchen-vagrant" is installed
36
+ And a file named "chefignore" should exist
37
+ And the file "chefignore" should contain ".kitchen"
38
+
39
+ Scenario: Running init that creates a Gemfile
40
+ When I successfully run `kitchen init --create-gemfile`
41
+ Then the file "Gemfile" should contain "https://rubygems.org"
42
+ And the file "Gemfile" should contain:
43
+ """
44
+ gem "test-kitchen"
45
+ """
46
+ And the file "Gemfile" should contain:
47
+ """
48
+ gem "kitchen-vagrant"
49
+ """
50
+ And the output should contain "You must run `bundle install'"
51
+
52
+ Scenario: Running init with an existing Gemfile appends to the Gemfile
53
+ Given a file named "Gemfile" with:
54
+ """
55
+ source "https://rubygems.org"
56
+
57
+
58
+ """
59
+ When I successfully run `kitchen init`
60
+ Then the file "Gemfile" should contain exactly:
61
+ """
62
+ source "https://rubygems.org"
63
+
64
+ gem "test-kitchen"
65
+ gem "kitchen-vagrant"
66
+
67
+ """
68
+ And the output should contain "You must run `bundle install'"
69
+
70
+ Scenario: Running init with a Gemfile containing test-kitchen does not
71
+ re-append
72
+ Given a file named "Gemfile" with:
73
+ """
74
+ source "https://rubygems.org"
75
+
76
+ gem 'test-kitchen'
77
+
78
+ """
79
+ When I successfully run `kitchen init`
80
+ Then the file "Gemfile" should contain exactly:
81
+ """
82
+ source "https://rubygems.org"
83
+
84
+ gem 'test-kitchen'
85
+ gem "kitchen-vagrant"
86
+
87
+ """
88
+ And the output should contain "You must run `bundle install'"
89
+
90
+ Scenario: Running init with a Gemfile containing the driver gem does not
91
+ re-append
92
+ Given a file named "Gemfile" with:
93
+ """
94
+ source "https://rubygems.org"
95
+
96
+ gem 'test-kitchen'
97
+ gem 'kitchen-ec2'
98
+
99
+ """
100
+ When I successfully run `kitchen init --driver=kitchen-ec2`
101
+ Then the file "Gemfile" should contain exactly:
102
+ """
103
+ source "https://rubygems.org"
104
+
105
+ gem 'test-kitchen'
106
+ gem 'kitchen-ec2'
107
+
108
+ """
109
+ And the output should not contain "You must run `bundle install'"
110
+
111
+ Scenario: Running init with multiple drivers appends to the Gemfile
112
+ Given an empty file named "Gemfile"
113
+ When I successfully run `kitchen init --driver=kitchen-bluebox kitchen-wakka`
114
+ Then the file "Gemfile" should contain:
115
+ """
116
+ gem "kitchen-bluebox"
117
+ """
118
+ And the file "Gemfile" should contain:
119
+ """
120
+ gem "kitchen-wakka"
121
+ """
122
+ And the output should contain "You must run `bundle install'"
123
+
124
+ Scenario: Running init with multiple driver sets the plugin_driver to the
125
+ first driver given
126
+ Given an empty file named "Gemfile"
127
+ When I successfully run `kitchen init --driver=kitchen-bluebox kitchen-wakka`
128
+ Then the file ".kitchen.yml" should contain:
129
+ """
130
+ driver:
131
+ name: bluebox
132
+ """
133
+
134
+ Scenario: Running init with no drivers sets the plugin_driver to the
135
+ dummy driver
136
+ Given an empty file named "Gemfile"
137
+ When I successfully run `kitchen init --no-driver`
138
+ Then the file ".kitchen.yml" should contain:
139
+ """
140
+ driver:
141
+ name: dummy
142
+ """
143
+
144
+ Scenario: Running init without a provisioner sets the default provisioner
145
+ to chef_solo in .kitchen.yml
146
+ Given an empty file named "Gemfile"
147
+ When I successfully run `kitchen init --no-driver`
148
+ Then the file ".kitchen.yml" should contain:
149
+ """
150
+ provisioner:
151
+ name: chef_solo
152
+ """
153
+
154
+ Scenario: Running init with a provisioner sets the provisioner in .kitchen.yml
155
+ Given an empty file named "Gemfile"
156
+ When I successfully run `kitchen init --no-driver --provisioner=chef_zero`
157
+ Then the file ".kitchen.yml" should contain:
158
+ """
159
+ provisioner:
160
+ name: chef_zero
161
+ """
162
+
163
+ Scenario: Running with a Rakefile file appends Kitchen tasks
164
+ Given an empty file named "Gemfile"
165
+ And an empty file named "Rakefile"
166
+ When I successfully run `kitchen init`
167
+ Then the file "Rakefile" should contain:
168
+ """
169
+ begin
170
+ require 'kitchen/rake_tasks'
171
+ Kitchen::RakeTasks.new
172
+ rescue LoadError
173
+ puts '>>>>> Kitchen gem not loaded, omitting tasks' unless ENV['CI']
174
+ end
175
+ """
176
+
177
+ Scenario: Running without git doesn't make a .gitignore
178
+ When I successfully run `kitchen init --no-driver`
179
+ Then the exit status should be 0
180
+ And a file named ".gitignore" should not exist
181
+
182
+ Scenario: Running with a Thorfile file appends Kitchen tasks
183
+ Given an empty file named "Gemfile"
184
+ Given an empty file named "Thorfile"
185
+ When I successfully run `kitchen init`
186
+ Then the file "Thorfile" should contain:
187
+ """
188
+ begin
189
+ require 'kitchen/thor_tasks'
190
+ Kitchen::ThorTasks.new
191
+ rescue LoadError
192
+ puts '>>>>> Kitchen gem not loaded, omitting tasks' unless ENV['CI']
193
+ end
194
+ """
195
+
196
+ Scenario: Running init with a name in metadata.rb sets a run list
197
+ Given an empty file named "Gemfile"
198
+ Given a file named "metadata.rb" with:
199
+ """
200
+ name "ntp"
201
+ license "Apache 2.0"
202
+ description "Installs and configures ntp as a client or server"
203
+ version "0.1.0"
204
+
205
+ support "ubuntu"
206
+ support "centos"
207
+ """
208
+ When I successfully run `kitchen init`
209
+ Then the file ".kitchen.yml" should contain exactly:
210
+ """
211
+ ---
212
+ driver:
213
+ name: vagrant
214
+
215
+ provisioner:
216
+ name: chef_solo
217
+
218
+ platforms:
219
+ - name: ubuntu-14.04
220
+ - name: centos-7.2
221
+
222
+ suites:
223
+ - name: default
224
+ run_list:
225
+ - recipe[ntp::default]
226
+ attributes:
227
+
228
+ """
229
+
230
+ Scenario: Running init with an empty file metadata.rb sets an empty run list
231
+ Given an empty file named "metadata.rb"
232
+ When I successfully run `kitchen init`
233
+ Then the file ".kitchen.yml" should contain exactly:
234
+ """
235
+ ---
236
+ driver:
237
+ name: vagrant
238
+
239
+ provisioner:
240
+ name: chef_solo
241
+
242
+ platforms:
243
+ - name: ubuntu-14.04
244
+ - name: centos-7.2
245
+
246
+ suites:
247
+ - name: default
248
+ run_list:
249
+ attributes:
250
+
251
+ """
252
+
253
+ Scenario: Running init with no metadata.rb file sets an empty run list
254
+ Given a file named "metadata.rb" does not exist
255
+ When I successfully run `kitchen init`
256
+ Then the file ".kitchen.yml" should contain exactly:
257
+ """
258
+ ---
259
+ driver:
260
+ name: vagrant
261
+
262
+ provisioner:
263
+ name: chef_solo
264
+
265
+ platforms:
266
+ - name: ubuntu-14.04
267
+ - name: centos-7.2
268
+
269
+ suites:
270
+ - name: default
271
+ run_list:
272
+ attributes:
273
+
274
+ """