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.
- 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
|
|