test-kitchen 1.2.1 → 1.3.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.
- checksums.yaml +4 -4
- data/.cane +1 -1
- data/.rubocop.yml +3 -0
- data/.travis.yml +20 -9
- data/CHANGELOG.md +219 -108
- data/Gemfile +10 -6
- data/Guardfile +38 -9
- data/README.md +11 -1
- data/Rakefile +21 -37
- data/bin/kitchen +4 -4
- data/features/kitchen_action_commands.feature +161 -0
- data/features/kitchen_console_command.feature +34 -0
- data/features/kitchen_diagnose_command.feature +64 -0
- data/features/kitchen_init_command.feature +29 -17
- data/features/kitchen_list_command.feature +2 -2
- data/features/kitchen_login_command.feature +56 -0
- data/features/{sink_command.feature → kitchen_sink_command.feature} +0 -0
- data/features/kitchen_test_command.feature +88 -0
- data/features/step_definitions/gem_steps.rb +8 -6
- data/features/step_definitions/git_steps.rb +4 -2
- data/features/step_definitions/output_steps.rb +5 -0
- data/features/support/env.rb +12 -9
- data/lib/kitchen.rb +60 -38
- data/lib/kitchen/base64_stream.rb +55 -0
- data/lib/kitchen/busser.rb +124 -58
- data/lib/kitchen/cli.rb +121 -38
- data/lib/kitchen/collection.rb +3 -3
- data/lib/kitchen/color.rb +4 -4
- data/lib/kitchen/command.rb +78 -11
- data/lib/kitchen/command/action.rb +3 -2
- data/lib/kitchen/command/console.rb +12 -5
- data/lib/kitchen/command/diagnose.rb +17 -3
- data/lib/kitchen/command/driver_discover.rb +26 -7
- data/lib/kitchen/command/exec.rb +41 -0
- data/lib/kitchen/command/list.rb +44 -14
- data/lib/kitchen/command/login.rb +2 -1
- data/lib/kitchen/command/sink.rb +2 -1
- data/lib/kitchen/command/test.rb +5 -4
- data/lib/kitchen/config.rb +146 -14
- data/lib/kitchen/configurable.rb +314 -0
- data/lib/kitchen/data_munger.rb +522 -18
- data/lib/kitchen/diagnostic.rb +43 -4
- data/lib/kitchen/driver.rb +4 -4
- data/lib/kitchen/driver/base.rb +80 -115
- data/lib/kitchen/driver/dummy.rb +34 -6
- data/lib/kitchen/driver/proxy.rb +14 -3
- data/lib/kitchen/driver/ssh_base.rb +61 -7
- data/lib/kitchen/errors.rb +109 -9
- data/lib/kitchen/generator/driver_create.rb +39 -5
- data/lib/kitchen/generator/init.rb +130 -45
- data/lib/kitchen/instance.rb +162 -28
- data/lib/kitchen/lazy_hash.rb +79 -7
- data/lib/kitchen/loader/yaml.rb +159 -27
- data/lib/kitchen/logger.rb +267 -21
- data/lib/kitchen/logging.rb +30 -3
- data/lib/kitchen/login_command.rb +11 -2
- data/lib/kitchen/metadata_chopper.rb +2 -2
- data/lib/kitchen/provisioner.rb +4 -4
- data/lib/kitchen/provisioner/base.rb +107 -103
- data/lib/kitchen/provisioner/chef/berkshelf.rb +36 -8
- data/lib/kitchen/provisioner/chef/librarian.rb +40 -11
- data/lib/kitchen/provisioner/chef_base.rb +206 -167
- data/lib/kitchen/provisioner/chef_solo.rb +25 -7
- data/lib/kitchen/provisioner/chef_zero.rb +105 -29
- data/lib/kitchen/provisioner/dummy.rb +1 -1
- data/lib/kitchen/provisioner/shell.rb +21 -6
- data/lib/kitchen/rake_tasks.rb +8 -3
- data/lib/kitchen/shell_out.rb +15 -18
- data/lib/kitchen/ssh.rb +122 -27
- data/lib/kitchen/state_file.rb +24 -7
- data/lib/kitchen/thor_tasks.rb +9 -4
- data/lib/kitchen/util.rb +43 -118
- data/lib/kitchen/version.rb +1 -1
- data/lib/vendor/hash_recursive_merge.rb +10 -2
- data/spec/kitchen/base64_stream_spec.rb +77 -0
- data/spec/kitchen/busser_spec.rb +490 -0
- data/spec/kitchen/collection_spec.rb +10 -10
- data/spec/kitchen/color_spec.rb +2 -2
- data/spec/kitchen/config_spec.rb +234 -62
- data/spec/kitchen/configurable_spec.rb +490 -0
- data/spec/kitchen/data_munger_spec.rb +1070 -862
- data/spec/kitchen/diagnostic_spec.rb +79 -0
- data/spec/kitchen/driver/base_spec.rb +80 -85
- data/spec/kitchen/driver/dummy_spec.rb +43 -14
- data/spec/kitchen/driver/proxy_spec.rb +134 -0
- data/spec/kitchen/driver/ssh_base_spec.rb +644 -0
- data/spec/kitchen/driver_spec.rb +15 -15
- data/spec/kitchen/errors_spec.rb +309 -0
- data/spec/kitchen/instance_spec.rb +143 -46
- data/spec/kitchen/lazy_hash_spec.rb +36 -9
- data/spec/kitchen/loader/yaml_spec.rb +237 -226
- data/spec/kitchen/logger_spec.rb +419 -0
- data/spec/kitchen/logging_spec.rb +59 -0
- data/spec/kitchen/login_command_spec.rb +49 -0
- data/spec/kitchen/metadata_chopper_spec.rb +82 -0
- data/spec/kitchen/platform_spec.rb +4 -4
- data/spec/kitchen/provisioner/base_spec.rb +65 -125
- data/spec/kitchen/provisioner/chef_base_spec.rb +798 -0
- data/spec/kitchen/provisioner/chef_solo_spec.rb +316 -0
- data/spec/kitchen/provisioner/chef_zero_spec.rb +624 -0
- data/spec/kitchen/provisioner/shell_spec.rb +269 -0
- data/spec/kitchen/provisioner_spec.rb +6 -6
- data/spec/kitchen/shell_out_spec.rb +143 -0
- data/spec/kitchen/ssh_spec.rb +683 -0
- data/spec/kitchen/state_file_spec.rb +28 -21
- data/spec/kitchen/suite_spec.rb +7 -7
- data/spec/kitchen/util_spec.rb +68 -10
- data/spec/kitchen_spec.rb +107 -0
- data/spec/spec_helper.rb +18 -13
- data/support/chef-client-zero.rb +10 -9
- data/support/chef_helpers.sh +16 -0
- data/support/download_helpers.sh +109 -0
- data/test-kitchen.gemspec +42 -33
- metadata +107 -33
@@ -36,8 +36,14 @@ Feature: Add Test Kitchen support to an existing project
|
|
36
36
|
Scenario: Running init that creates a Gemfile
|
37
37
|
When I successfully run `kitchen init --create-gemfile`
|
38
38
|
Then the file "Gemfile" should contain "https://rubygems.org"
|
39
|
-
And the file "Gemfile" should contain
|
40
|
-
|
39
|
+
And the file "Gemfile" should contain:
|
40
|
+
"""
|
41
|
+
gem "test-kitchen"
|
42
|
+
"""
|
43
|
+
And the file "Gemfile" should contain:
|
44
|
+
"""
|
45
|
+
gem "kitchen-vagrant"
|
46
|
+
"""
|
41
47
|
And the output should contain "You must run `bundle install'"
|
42
48
|
|
43
49
|
Scenario: Running init with an existing Gemfile appends to the Gemfile
|
@@ -52,8 +58,8 @@ Feature: Add Test Kitchen support to an existing project
|
|
52
58
|
"""
|
53
59
|
source "https://rubygems.org"
|
54
60
|
|
55
|
-
gem
|
56
|
-
gem
|
61
|
+
gem "test-kitchen"
|
62
|
+
gem "kitchen-vagrant"
|
57
63
|
|
58
64
|
"""
|
59
65
|
And the output should contain "You must run `bundle install'"
|
@@ -64,7 +70,7 @@ Feature: Add Test Kitchen support to an existing project
|
|
64
70
|
"""
|
65
71
|
source "https://rubygems.org"
|
66
72
|
|
67
|
-
gem
|
73
|
+
gem 'test-kitchen'
|
68
74
|
|
69
75
|
"""
|
70
76
|
When I successfully run `kitchen init`
|
@@ -72,8 +78,8 @@ Feature: Add Test Kitchen support to an existing project
|
|
72
78
|
"""
|
73
79
|
source "https://rubygems.org"
|
74
80
|
|
75
|
-
gem
|
76
|
-
gem
|
81
|
+
gem 'test-kitchen'
|
82
|
+
gem "kitchen-vagrant"
|
77
83
|
|
78
84
|
"""
|
79
85
|
And the output should contain "You must run `bundle install'"
|
@@ -84,8 +90,8 @@ Feature: Add Test Kitchen support to an existing project
|
|
84
90
|
"""
|
85
91
|
source "https://rubygems.org"
|
86
92
|
|
87
|
-
gem
|
88
|
-
gem
|
93
|
+
gem 'test-kitchen'
|
94
|
+
gem 'kitchen-ec2'
|
89
95
|
|
90
96
|
"""
|
91
97
|
When I successfully run `kitchen init --driver=kitchen-ec2`
|
@@ -93,8 +99,8 @@ Feature: Add Test Kitchen support to an existing project
|
|
93
99
|
"""
|
94
100
|
source "https://rubygems.org"
|
95
101
|
|
96
|
-
gem
|
97
|
-
gem
|
102
|
+
gem 'test-kitchen'
|
103
|
+
gem 'kitchen-ec2'
|
98
104
|
|
99
105
|
"""
|
100
106
|
And the output should not contain "You must run `bundle install'"
|
@@ -102,8 +108,14 @@ Feature: Add Test Kitchen support to an existing project
|
|
102
108
|
Scenario: Running init with multiple drivers appends to the Gemfile
|
103
109
|
Given an empty file named "Gemfile"
|
104
110
|
When I successfully run `kitchen init --driver=kitchen-bluebox kitchen-wakka`
|
105
|
-
Then the file "Gemfile" should contain
|
106
|
-
|
111
|
+
Then the file "Gemfile" should contain:
|
112
|
+
"""
|
113
|
+
gem "kitchen-bluebox"
|
114
|
+
"""
|
115
|
+
And the file "Gemfile" should contain:
|
116
|
+
"""
|
117
|
+
gem "kitchen-wakka"
|
118
|
+
"""
|
107
119
|
And the output should contain "You must run `bundle install'"
|
108
120
|
|
109
121
|
Scenario: Running init with multiple driver sets the plugin_driver to the
|
@@ -152,10 +164,10 @@ Feature: Add Test Kitchen support to an existing project
|
|
152
164
|
Then the file "Rakefile" should contain:
|
153
165
|
"""
|
154
166
|
begin
|
155
|
-
require
|
167
|
+
require "kitchen/rake_tasks"
|
156
168
|
Kitchen::RakeTasks.new
|
157
169
|
rescue LoadError
|
158
|
-
puts ">>>>> Kitchen gem not loaded, omitting tasks" unless ENV[
|
170
|
+
puts ">>>>> Kitchen gem not loaded, omitting tasks" unless ENV["CI"]
|
159
171
|
end
|
160
172
|
"""
|
161
173
|
|
@@ -171,10 +183,10 @@ Feature: Add Test Kitchen support to an existing project
|
|
171
183
|
Then the file "Thorfile" should contain:
|
172
184
|
"""
|
173
185
|
begin
|
174
|
-
require
|
186
|
+
require "kitchen/thor_tasks"
|
175
187
|
Kitchen::ThorTasks.new
|
176
188
|
rescue LoadError
|
177
|
-
puts ">>>>> Kitchen gem not loaded, omitting tasks" unless ENV[
|
189
|
+
puts ">>>>> Kitchen gem not loaded, omitting tasks" unless ENV["CI"]
|
178
190
|
end
|
179
191
|
"""
|
180
192
|
|
@@ -22,8 +22,8 @@ Feature: Listing Test Kitchen instances
|
|
22
22
|
Scenario: Listing instances
|
23
23
|
When I run `kitchen list`
|
24
24
|
Then the exit status should be 0
|
25
|
-
And the output should
|
26
|
-
And the output should
|
25
|
+
And the output should match /^foobar-ubuntu-1304\s+Dummy\s+ChefSolo\s+\<Not Created\>$/
|
26
|
+
And the output should match /^foobar-centos-64\s+Dummy\s+ChefSolo\s+\<Not Created\>$/
|
27
27
|
|
28
28
|
Scenario: Listing instances with the --bare option
|
29
29
|
When I run `kitchen list --bare`
|
@@ -0,0 +1,56 @@
|
|
1
|
+
Feature: Logging into a Kitchen instance
|
2
|
+
In order to iterate, explore, and debug
|
3
|
+
As a crafty developer
|
4
|
+
I want to run a command that will give me a terminal session
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a file named ".kitchen.yml" with:
|
8
|
+
"""
|
9
|
+
---
|
10
|
+
driver:
|
11
|
+
name: dummy
|
12
|
+
|
13
|
+
provisioner:
|
14
|
+
name: dummy
|
15
|
+
|
16
|
+
platforms:
|
17
|
+
- name: flebian
|
18
|
+
|
19
|
+
suites:
|
20
|
+
- name: default
|
21
|
+
- name: full
|
22
|
+
"""
|
23
|
+
And I successfully run `kitchen create default-flebian`
|
24
|
+
|
25
|
+
@spawn
|
26
|
+
Scenario: Logging in to an instance
|
27
|
+
When I run `kitchen login default-flebian`
|
28
|
+
Then the output should contain "Remote login is not supported in this driver."
|
29
|
+
And the exit status should not be 0
|
30
|
+
|
31
|
+
@spawn
|
32
|
+
Scenario: Attempting to log into a non-created instance
|
33
|
+
When I run `kitchen login full-flebian`
|
34
|
+
Then the output should contain:
|
35
|
+
"""
|
36
|
+
Instance <full-flebian> has not yet been created
|
37
|
+
"""
|
38
|
+
And the exit status should not be 0
|
39
|
+
|
40
|
+
@spawn
|
41
|
+
Scenario: Attempting to log into a non-existent instance
|
42
|
+
When I run `kitchen login nope`
|
43
|
+
Then the output should contain "No instances for regex `nope'"
|
44
|
+
And the exit status should not be 0
|
45
|
+
|
46
|
+
@spawn
|
47
|
+
Scenario: Attempting to log into an instance with an overly fuzzy match
|
48
|
+
When I run `kitchen login flebian`
|
49
|
+
Then the output should contain:
|
50
|
+
"""
|
51
|
+
Argument `flebian' returned multiple results:
|
52
|
+
* default-flebian
|
53
|
+
* full-flebian
|
54
|
+
"""
|
55
|
+
And the exit status should not be 0
|
56
|
+
|
File without changes
|
@@ -0,0 +1,88 @@
|
|
1
|
+
Feature: Running a full test instance test
|
2
|
+
In order to "fire-and-forget" or run help setup a CI job
|
3
|
+
As an operator or CI script
|
4
|
+
I want to run a command that will fully test one or more instances
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a file named ".kitchen.yml" with:
|
8
|
+
"""
|
9
|
+
---
|
10
|
+
driver:
|
11
|
+
name: dummy
|
12
|
+
|
13
|
+
provisioner:
|
14
|
+
name: dummy
|
15
|
+
|
16
|
+
platforms:
|
17
|
+
- name: cool
|
18
|
+
- name: beans
|
19
|
+
|
20
|
+
suites:
|
21
|
+
- name: client
|
22
|
+
- name: server
|
23
|
+
"""
|
24
|
+
|
25
|
+
@spawn
|
26
|
+
Scenario: Running a single instance
|
27
|
+
When I run `kitchen test client-beans`
|
28
|
+
Then the output should contain "Starting Kitchen"
|
29
|
+
Then the output should contain "Cleaning up any prior instances of <client-beans>"
|
30
|
+
Then the output should contain "Testing <client-beans>"
|
31
|
+
Then the output should contain "Finished testing <client-beans>"
|
32
|
+
Then the output should contain "Kitchen is finished."
|
33
|
+
And the exit status should be 0
|
34
|
+
|
35
|
+
@spawn
|
36
|
+
Scenario: Running a single instance never destroying an instance
|
37
|
+
When I successfully run `kitchen test client-beans --destroy=never`
|
38
|
+
And I successfully run `kitchen list client-beans`
|
39
|
+
Then the output should match /^client-beans\s+.+\s+Verified$/
|
40
|
+
|
41
|
+
@spawn
|
42
|
+
Scenario: Running a single instance always destroying an instance
|
43
|
+
Given a file named ".kitchen.local.yml" with:
|
44
|
+
"""
|
45
|
+
---
|
46
|
+
driver:
|
47
|
+
fail_converge: true
|
48
|
+
"""
|
49
|
+
When I run `kitchen test client-beans --destroy=always`
|
50
|
+
Then the exit status should not be 0
|
51
|
+
When I successfully run `kitchen list client-beans`
|
52
|
+
Then the output should match /^client-beans\s+.+\s+\<Not Created\>$/
|
53
|
+
|
54
|
+
@spawn
|
55
|
+
Scenario: Running a single instance not destroying an instance on failure
|
56
|
+
Given a file named ".kitchen.local.yml" with:
|
57
|
+
"""
|
58
|
+
---
|
59
|
+
driver:
|
60
|
+
fail_converge: true
|
61
|
+
"""
|
62
|
+
When I run `kitchen test client-beans --destroy=passing`
|
63
|
+
Then the exit status should not be 0
|
64
|
+
When I successfully run `kitchen list client-beans`
|
65
|
+
Then the output should match /^client-beans\s+.+\s+Created$/
|
66
|
+
|
67
|
+
@spawn
|
68
|
+
Scenario: Running a single instance destroying an instance on success
|
69
|
+
When I run `kitchen test client-beans --destroy=passing`
|
70
|
+
Then the exit status should be 0
|
71
|
+
When I successfully run `kitchen list client-beans`
|
72
|
+
Then the output should match /^client-beans\s+.+\s+\<Not Created\>$/
|
73
|
+
|
74
|
+
@spawn
|
75
|
+
Scenario: Running all instances
|
76
|
+
When I run `kitchen test`
|
77
|
+
Then the output should contain "Starting Kitchen"
|
78
|
+
Then the output should contain "Finished testing <client-cool>"
|
79
|
+
Then the output should contain "Finished testing <client-beans>"
|
80
|
+
Then the output should contain "Finished testing <server-cool>"
|
81
|
+
Then the output should contain "Finished testing <server-beans>"
|
82
|
+
Then the output should contain "Kitchen is finished."
|
83
|
+
And the exit status should be 0
|
84
|
+
When I successfully run `kitchen list`
|
85
|
+
Then the output should match /^client-cool\s+.+\s+\<Not Created\>$/
|
86
|
+
Then the output should match /^client-beans\s+.+\s+\<Not Created\>$/
|
87
|
+
Then the output should match /^server-cool\s+.+\s+\<Not Created\>$/
|
88
|
+
Then the output should match /^server-beans\s+.+\s+\<Not Created\>$/
|
@@ -1,15 +1,17 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require "tmpdir"
|
4
|
+
require "pathname"
|
3
5
|
|
4
6
|
Given(/^a sandboxed GEM_HOME directory named "(.*?)"$/) do |name|
|
5
|
-
backup_envvar(
|
6
|
-
backup_envvar(
|
7
|
+
backup_envvar("GEM_HOME")
|
8
|
+
backup_envvar("GEM_PATH")
|
7
9
|
|
8
10
|
@aruba_timeout_seconds = 30
|
9
11
|
|
10
12
|
gem_home = Pathname.new(Dir.mktmpdir(name))
|
11
|
-
ENV[
|
12
|
-
ENV[
|
13
|
+
ENV["GEM_HOME"] = gem_home.to_s
|
14
|
+
ENV["GEM_PATH"] = [gem_home.to_s, ENV["GEM_PATH"]].join(":")
|
13
15
|
@cleanup_dirs << gem_home
|
14
16
|
end
|
15
17
|
|
data/features/support/env.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
1
3
|
# Set up the environment for testing
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
4
|
+
require "aruba/cucumber"
|
5
|
+
require "aruba/in_process"
|
6
|
+
require "aruba/spawn_process"
|
7
|
+
require "kitchen"
|
8
|
+
require "kitchen/cli"
|
7
9
|
|
8
10
|
class ArubaHelper
|
9
|
-
|
11
|
+
|
12
|
+
def initialize(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel)
|
10
13
|
@argv, @stdin, @stdout, @stderr, @kernel = argv, stdin, stdout, stderr, kernel
|
11
14
|
end
|
12
15
|
|
@@ -28,7 +31,7 @@ Before do
|
|
28
31
|
Aruba.process = Aruba::InProcess
|
29
32
|
end
|
30
33
|
|
31
|
-
Before(
|
34
|
+
Before("@spawn") do
|
32
35
|
Aruba.process = Aruba::SpawnProcess
|
33
36
|
end
|
34
37
|
|
@@ -41,7 +44,7 @@ After do |s|
|
|
41
44
|
# Restore environment variables to their original settings, if they have
|
42
45
|
# been saved off
|
43
46
|
ENV.keys.select { |key| key =~ /^_CUKE_/ }.each do |backup_key|
|
44
|
-
ENV[backup_key.sub(/^_CUKE_/,
|
47
|
+
ENV[backup_key.sub(/^_CUKE_/, "")] = ENV.delete(backup_key)
|
45
48
|
end
|
46
49
|
|
47
50
|
@cleanup_dirs.each { |dir| FileUtils.rm_rf(dir) }
|
@@ -58,7 +61,7 @@ end
|
|
58
61
|
def unbundlerize
|
59
62
|
keys = %w[BUNDLER_EDITOR BUNDLE_BIN_PATH BUNDLE_GEMFILE RUBYOPT]
|
60
63
|
|
61
|
-
keys.each { |key| backup_envvar(key)
|
64
|
+
keys.each { |key| backup_envvar(key); ENV.delete(key) }
|
62
65
|
yield
|
63
66
|
keys.each { |key| restore_envvar(key) }
|
64
67
|
end
|
data/lib/kitchen.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
#
|
3
3
|
# Author:: Fletcher Nichol (<fnichol@nichol.ca>)
|
4
4
|
#
|
5
|
-
# Copyright (C) 2012, Fletcher Nichol
|
5
|
+
# Copyright (C) 2012, 2013, 2014 Fletcher Nichol
|
6
6
|
#
|
7
7
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
8
|
# you may not use this file except in compliance with the License.
|
@@ -16,34 +16,35 @@
|
|
16
16
|
# See the License for the specific language governing permissions and
|
17
17
|
# limitations under the License.
|
18
18
|
|
19
|
-
require
|
20
|
-
require
|
21
|
-
|
22
|
-
require
|
23
|
-
require
|
24
|
-
require
|
25
|
-
require
|
26
|
-
require
|
27
|
-
|
28
|
-
|
29
|
-
require
|
30
|
-
require
|
31
|
-
require
|
32
|
-
require
|
33
|
-
require
|
34
|
-
require
|
35
|
-
require
|
36
|
-
require
|
37
|
-
require
|
38
|
-
require
|
39
|
-
require
|
40
|
-
require
|
41
|
-
require
|
42
|
-
require
|
43
|
-
require
|
44
|
-
require
|
45
|
-
require
|
46
|
-
require
|
19
|
+
require "pathname"
|
20
|
+
require "thread"
|
21
|
+
|
22
|
+
require "kitchen/errors"
|
23
|
+
require "kitchen/logger"
|
24
|
+
require "kitchen/logging"
|
25
|
+
require "kitchen/shell_out"
|
26
|
+
require "kitchen/configurable"
|
27
|
+
require "kitchen/util"
|
28
|
+
|
29
|
+
require "kitchen/provisioner"
|
30
|
+
require "kitchen/provisioner/base"
|
31
|
+
require "kitchen/busser"
|
32
|
+
require "kitchen/color"
|
33
|
+
require "kitchen/collection"
|
34
|
+
require "kitchen/config"
|
35
|
+
require "kitchen/data_munger"
|
36
|
+
require "kitchen/driver"
|
37
|
+
require "kitchen/driver/base"
|
38
|
+
require "kitchen/driver/ssh_base"
|
39
|
+
require "kitchen/driver/proxy"
|
40
|
+
require "kitchen/instance"
|
41
|
+
require "kitchen/loader/yaml"
|
42
|
+
require "kitchen/metadata_chopper"
|
43
|
+
require "kitchen/platform"
|
44
|
+
require "kitchen/state_file"
|
45
|
+
require "kitchen/ssh"
|
46
|
+
require "kitchen/suite"
|
47
|
+
require "kitchen/version"
|
47
48
|
|
48
49
|
# Test Kitchen base module.
|
49
50
|
#
|
@@ -52,43 +53,64 @@ module Kitchen
|
|
52
53
|
|
53
54
|
class << self
|
54
55
|
|
56
|
+
# @return [Logger] the common Kitchen logger
|
55
57
|
attr_accessor :logger
|
56
|
-
|
58
|
+
|
59
|
+
# @return [Mutex] a common mutex for global coordination
|
57
60
|
attr_accessor :mutex
|
58
61
|
|
59
62
|
# Returns the root path of the Kitchen gem source code.
|
60
63
|
#
|
61
64
|
# @return [Pathname] root path of gem
|
62
65
|
def source_root
|
63
|
-
@source_root ||= Pathname.new(File.expand_path(
|
64
|
-
end
|
65
|
-
|
66
|
-
def crashes?
|
67
|
-
! crashes.empty?
|
66
|
+
@source_root ||= Pathname.new(File.expand_path("../../", __FILE__))
|
68
67
|
end
|
69
68
|
|
69
|
+
# Returns a default logger which emits on standard output.
|
70
|
+
#
|
71
|
+
# @return [Logger] a logger
|
70
72
|
def default_logger
|
71
|
-
Logger.new(:stdout =>
|
73
|
+
Logger.new(:stdout => $stdout, :level => env_log)
|
72
74
|
end
|
73
75
|
|
76
|
+
# Returns a default file logger which emits on standard output and to a
|
77
|
+
# log file.
|
78
|
+
#
|
79
|
+
# @return [Logger] a logger
|
74
80
|
def default_file_logger
|
75
81
|
logfile = File.expand_path(File.join(".kitchen", "logs", "kitchen.log"))
|
76
|
-
Logger.new(:stdout =>
|
82
|
+
Logger.new(:stdout => $stdout, :logdev => logfile, :level => env_log)
|
83
|
+
end
|
84
|
+
|
85
|
+
# Returns whether or not standard output is associated with a terminal
|
86
|
+
# device (tty).
|
87
|
+
#
|
88
|
+
# @return [true,false] is there a tty?
|
89
|
+
def tty?
|
90
|
+
$stdout.tty?
|
77
91
|
end
|
78
92
|
|
79
93
|
private
|
80
94
|
|
95
|
+
# Determine the default log level from an environment variable, if it is
|
96
|
+
# set.
|
97
|
+
#
|
98
|
+
# @return [Integer,nil] a log level or nil if not set
|
99
|
+
# @api private
|
81
100
|
def env_log
|
82
|
-
level = ENV[
|
101
|
+
level = ENV["KITCHEN_LOG"] && ENV["KITCHEN_LOG"].downcase.to_sym
|
83
102
|
level = Util.to_logger_level(level) unless level.nil?
|
103
|
+
level
|
84
104
|
end
|
85
105
|
end
|
86
106
|
|
87
107
|
# Default log level verbosity
|
88
108
|
DEFAULT_LOG_LEVEL = :info
|
89
109
|
|
110
|
+
# Default base directory for integration tests, fixtures, etc.
|
90
111
|
DEFAULT_TEST_DIR = "test/integration".freeze
|
91
112
|
|
113
|
+
# Default base directory for instance and common log files
|
92
114
|
DEFAULT_LOG_DIR = ".kitchen/logs".freeze
|
93
115
|
end
|
94
116
|
|