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,36 +1,36 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- require "tmpdir"
4
- require "pathname"
5
-
6
- Given(/^a sandboxed GEM_HOME directory named "(.*?)"$/) do |name|
7
- backup_envvar("GEM_HOME")
8
- backup_envvar("GEM_PATH")
9
-
10
- @aruba_timeout_seconds = 30
11
-
12
- gem_home = Pathname.new(Dir.mktmpdir(name))
13
- aruba.environment["GEM_HOME"] = gem_home.to_s
14
- aruba.environment["GEM_PATH"] = [gem_home.to_s, ENV["GEM_PATH"]].join(":")
15
- @cleanup_dirs << gem_home
16
- end
17
-
18
- Then(/^a gem named "(.*?)" is installed with version "(.*?)"$/) do |name, version|
19
- unbundlerize do
20
- run_simple(
21
- sanitize_text("gem list #{name} --version #{version} -i"),
22
- :fail_on_error => true,
23
- :exit_timeout => nil
24
- )
25
- end
26
- end
27
-
28
- Then(/^a gem named "(.*?)" is installed$/) do |name|
29
- unbundlerize do
30
- run_simple(
31
- sanitize_text("gem list #{name} -i"),
32
- :fail_on_error => true,
33
- :exit_timeout => nil
34
- )
35
- end
36
- end
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require "tmpdir"
4
+ require "pathname"
5
+
6
+ Given(/^a sandboxed GEM_HOME directory named "(.*?)"$/) do |name|
7
+ backup_envvar("GEM_HOME")
8
+ backup_envvar("GEM_PATH")
9
+
10
+ @aruba_timeout_seconds = 30
11
+
12
+ gem_home = Pathname.new(Dir.mktmpdir(name))
13
+ aruba.environment["GEM_HOME"] = gem_home.to_s
14
+ aruba.environment["GEM_PATH"] = [gem_home.to_s, ENV["GEM_PATH"]].join(":")
15
+ @cleanup_dirs << gem_home
16
+ end
17
+
18
+ Then(/^a gem named "(.*?)" is installed with version "(.*?)"$/) do |name, version|
19
+ unbundlerize do
20
+ run_simple(
21
+ sanitize_text("gem list #{name} --version #{version} -i"),
22
+ :fail_on_error => true,
23
+ :exit_timeout => nil
24
+ )
25
+ end
26
+ end
27
+
28
+ Then(/^a gem named "(.*?)" is installed$/) do |name|
29
+ unbundlerize do
30
+ run_simple(
31
+ sanitize_text("gem list #{name} -i"),
32
+ :fail_on_error => true,
33
+ :exit_timeout => nil
34
+ )
35
+ end
36
+ end
@@ -1,5 +1,5 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- Given(/I have a git repository/) do
4
- create_directory(".git")
5
- end
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Given(/I have a git repository/) do
4
+ create_directory(".git")
5
+ end
@@ -1,5 +1,5 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- Then(/^the stdout should match \/([^\/]*)\/$/) do |expected|
4
- expect(last_command_started).to have_output_on_stdout(Regexp.new(expected))
5
- end
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Then(/^the stdout should match \/([^\/]*)\/$/) do |expected|
4
+ expect(last_command_started).to have_output_on_stdout(Regexp.new(expected))
5
+ end
@@ -1,75 +1,75 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- # Set up the environment for testing
4
- require "aruba/cucumber"
5
- require "aruba/in_process"
6
- require "aruba/spawn_process"
7
- require "kitchen"
8
- require "kitchen/cli"
9
-
10
- class ArubaHelper
11
-
12
- def initialize(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel)
13
- @argv = argv
14
- @stdin = stdin
15
- @stdout = stdout
16
- @stderr = stderr
17
- @kernel = kernel
18
- end
19
-
20
- def execute!
21
- $stdout = @stdout
22
- $stdin = @stdin
23
-
24
- kitchen_cli = Kitchen::CLI
25
- kitchen_cli.start(@argv)
26
- @kernel.exit(0)
27
- end
28
- end
29
-
30
- Before do
31
- @aruba_timeout_seconds = 15
32
- @cleanup_dirs = []
33
-
34
- aruba.config.command_launcher = :in_process
35
- aruba.config.main_class = ArubaHelper
36
- end
37
-
38
- Before("@spawn") do
39
- aruba.config.command_launcher = :spawn
40
- end
41
-
42
- After do |s|
43
- # Tell Cucumber to quit after this scenario is done - if it failed.
44
- # This is useful to inspect the 'tmp/aruba' directory before any other
45
- # steps are executed and clear it out.
46
- Cucumber.wants_to_quit = true if s.failed?
47
-
48
- # Restore environment variables to their original settings, if they have
49
- # been saved off
50
- env = aruba.environment
51
- env.to_h.keys.select { |key| key =~ /^_CUKE_/ }.
52
- each do |backup_key|
53
- env[backup_key.sub(/^_CUKE_/, "")] = env[backup_key]
54
- env.delete(backup_key)
55
- end
56
-
57
- @cleanup_dirs.each { |dir| FileUtils.rm_rf(dir) }
58
- end
59
-
60
- def backup_envvar(key)
61
- aruba.environment["_CUKE_#{key}"] = aruba.environment[key]
62
- end
63
-
64
- def restore_envvar(key)
65
- aruba.environment[key] = aruba.environment["_CUKE_#{key}"]
66
- aruba.environment.delete("_CUKE_#{key}")
67
- end
68
-
69
- def unbundlerize
70
- keys = %w[BUNDLER_EDITOR BUNDLE_BIN_PATH BUNDLE_GEMFILE RUBYOPT]
71
-
72
- keys.each { |key| backup_envvar(key); aruba.environment.delete(key) }
73
- yield
74
- keys.each { |key| restore_envvar(key) }
75
- end
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # Set up the environment for testing
4
+ require "aruba/cucumber"
5
+ require "aruba/in_process"
6
+ require "aruba/spawn_process"
7
+ require "kitchen"
8
+ require "kitchen/cli"
9
+
10
+ class ArubaHelper
11
+
12
+ def initialize(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel)
13
+ @argv = argv
14
+ @stdin = stdin
15
+ @stdout = stdout
16
+ @stderr = stderr
17
+ @kernel = kernel
18
+ end
19
+
20
+ def execute!
21
+ $stdout = @stdout
22
+ $stdin = @stdin
23
+
24
+ kitchen_cli = Kitchen::CLI
25
+ kitchen_cli.start(@argv)
26
+ @kernel.exit(0)
27
+ end
28
+ end
29
+
30
+ Before do
31
+ @aruba_timeout_seconds = 15
32
+ @cleanup_dirs = []
33
+
34
+ aruba.config.command_launcher = :in_process
35
+ aruba.config.main_class = ArubaHelper
36
+ end
37
+
38
+ Before("@spawn") do
39
+ aruba.config.command_launcher = :spawn
40
+ end
41
+
42
+ After do |s|
43
+ # Tell Cucumber to quit after this scenario is done - if it failed.
44
+ # This is useful to inspect the 'tmp/aruba' directory before any other
45
+ # steps are executed and clear it out.
46
+ Cucumber.wants_to_quit = true if s.failed?
47
+
48
+ # Restore environment variables to their original settings, if they have
49
+ # been saved off
50
+ env = aruba.environment
51
+ env.to_h.keys.select { |key| key =~ /^_CUKE_/ }.
52
+ each do |backup_key|
53
+ env[backup_key.sub(/^_CUKE_/, "")] = env[backup_key]
54
+ env.delete(backup_key)
55
+ end
56
+
57
+ @cleanup_dirs.each { |dir| FileUtils.rm_rf(dir) }
58
+ end
59
+
60
+ def backup_envvar(key)
61
+ aruba.environment["_CUKE_#{key}"] = aruba.environment[key]
62
+ end
63
+
64
+ def restore_envvar(key)
65
+ aruba.environment[key] = aruba.environment["_CUKE_#{key}"]
66
+ aruba.environment.delete("_CUKE_#{key}")
67
+ end
68
+
69
+ def unbundlerize
70
+ keys = %w[BUNDLER_EDITOR BUNDLE_BIN_PATH BUNDLE_GEMFILE RUBYOPT]
71
+
72
+ keys.each { |key| backup_envvar(key); aruba.environment.delete(key) }
73
+ yield
74
+ keys.each { |key| restore_envvar(key) }
75
+ end
data/lib/kitchen.rb CHANGED
@@ -1,150 +1,150 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
- # Author:: Fletcher Nichol (<fnichol@nichol.ca>)
4
- #
5
- # Copyright (C) 2012, 2013, 2014 Fletcher Nichol
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
-
19
- require "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/color"
32
- require "kitchen/collection"
33
- require "kitchen/config"
34
- require "kitchen/data_munger"
35
- require "kitchen/driver"
36
- require "kitchen/driver/base"
37
- require "kitchen/driver/ssh_base"
38
- require "kitchen/driver/proxy"
39
- require "kitchen/instance"
40
- require "kitchen/transport"
41
- require "kitchen/transport/base"
42
- require "kitchen/loader/yaml"
43
- require "kitchen/metadata_chopper"
44
- require "kitchen/platform"
45
- require "kitchen/state_file"
46
- require "kitchen/ssh"
47
- require "kitchen/suite"
48
- require "kitchen/verifier"
49
- require "kitchen/verifier/base"
50
- require "kitchen/version"
51
-
52
- # Test Kitchen base module.
53
- #
54
- # @author Fletcher Nichol <fnichol@nichol.ca>
55
- module Kitchen
56
-
57
- class << self
58
-
59
- # @return [Logger] the common Kitchen logger
60
- attr_accessor :logger
61
-
62
- # @return [Mutex] a common mutex for global coordination
63
- attr_accessor :mutex
64
-
65
- # Returns the root path of the Kitchen gem source code.
66
- #
67
- # @return [Pathname] root path of gem
68
- def source_root
69
- @source_root ||= Pathname.new(File.expand_path("../../", __FILE__))
70
- end
71
-
72
- # Returns a default logger which emits on standard output.
73
- #
74
- # @return [Logger] a logger
75
- def default_logger
76
- Logger.new(:stdout => $stdout, :level => Util.to_logger_level(env_log))
77
- end
78
-
79
- # Returns a default file logger which emits on standard output and to a
80
- # log file.
81
- #
82
- # @param [Symbol] level logging level
83
- # @param [Boolean] log_overwrite logging level
84
- # @return [Logger] a logger
85
- def default_file_logger(level = nil, log_overwrite = nil)
86
- level ||= env_log
87
- log_overwrite = log_overwrite.nil? ? env_log_overwrite : log_overwrite
88
- log_location = File.expand_path(File.join(DEFAULT_LOG_DIR, "kitchen.log"))
89
- log_location = log_location.to_s
90
-
91
- Logger.new(
92
- :stdout => $stdout,
93
- :logdev => log_location,
94
- :level => Util.to_logger_level(level),
95
- :log_overwrite => log_overwrite
96
- )
97
- end
98
-
99
- # Returns whether or not standard output is associated with a terminal
100
- # device (tty).
101
- #
102
- # @return [true,false] is there a tty?
103
- def tty?
104
- $stdout.tty?
105
- end
106
-
107
- # Determine the default log level from an environment variable, if it is
108
- # set.
109
- #
110
- # @return [Symbol,nil] a log level or nil if not set
111
- # @api private
112
- def env_log
113
- ENV["KITCHEN_LOG"] && ENV["KITCHEN_LOG"].downcase.to_sym
114
- end
115
-
116
- # Determine the log overwriting logic from an environment variable,
117
- # if it is set.
118
- #
119
- # @return [Boolean,nil]
120
- # @api private
121
- def env_log_overwrite
122
- case ENV["KITCHEN_LOG_OVERWRITE"] && ENV["KITCHEN_LOG_OVERWRITE"].downcase
123
- when nil, ""
124
- nil
125
- when "false", "f", "no"
126
- false
127
- else
128
- true
129
- end
130
- end
131
- end
132
-
133
- # Default log level verbosity
134
- DEFAULT_LOG_LEVEL = :info
135
-
136
- # Overwrite the log file when Test Kitchen runs
137
- DEFAULT_LOG_OVERWRITE = true
138
-
139
- # Default base directory for integration tests, fixtures, etc.
140
- DEFAULT_TEST_DIR = "test/integration".freeze
141
-
142
- # Default base directory for instance and common log files
143
- DEFAULT_LOG_DIR = ".kitchen/logs".freeze
144
- end
145
-
146
- # Initialize the base logger
147
- Kitchen.logger = Kitchen.default_logger
148
-
149
- # Setup a collection of instance crash exceptions for error reporting
150
- Kitchen.mutex = Mutex.new
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Author:: Fletcher Nichol (<fnichol@nichol.ca>)
4
+ #
5
+ # Copyright (C) 2012, 2013, 2014 Fletcher Nichol
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require "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/color"
32
+ require "kitchen/collection"
33
+ require "kitchen/config"
34
+ require "kitchen/data_munger"
35
+ require "kitchen/driver"
36
+ require "kitchen/driver/base"
37
+ require "kitchen/driver/ssh_base"
38
+ require "kitchen/driver/proxy"
39
+ require "kitchen/instance"
40
+ require "kitchen/transport"
41
+ require "kitchen/transport/base"
42
+ require "kitchen/loader/yaml"
43
+ require "kitchen/metadata_chopper"
44
+ require "kitchen/platform"
45
+ require "kitchen/state_file"
46
+ require "kitchen/ssh"
47
+ require "kitchen/suite"
48
+ require "kitchen/verifier"
49
+ require "kitchen/verifier/base"
50
+ require "kitchen/version"
51
+
52
+ # Test Kitchen base module.
53
+ #
54
+ # @author Fletcher Nichol <fnichol@nichol.ca>
55
+ module Kitchen
56
+
57
+ class << self
58
+
59
+ # @return [Logger] the common Kitchen logger
60
+ attr_accessor :logger
61
+
62
+ # @return [Mutex] a common mutex for global coordination
63
+ attr_accessor :mutex
64
+
65
+ # Returns the root path of the Kitchen gem source code.
66
+ #
67
+ # @return [Pathname] root path of gem
68
+ def source_root
69
+ @source_root ||= Pathname.new(File.expand_path("../../", __FILE__))
70
+ end
71
+
72
+ # Returns a default logger which emits on standard output.
73
+ #
74
+ # @return [Logger] a logger
75
+ def default_logger
76
+ Logger.new(:stdout => $stdout, :level => Util.to_logger_level(env_log))
77
+ end
78
+
79
+ # Returns a default file logger which emits on standard output and to a
80
+ # log file.
81
+ #
82
+ # @param [Symbol] level logging level
83
+ # @param [Boolean] log_overwrite logging level
84
+ # @return [Logger] a logger
85
+ def default_file_logger(level = nil, log_overwrite = nil)
86
+ level ||= env_log
87
+ log_overwrite = log_overwrite.nil? ? env_log_overwrite : log_overwrite
88
+ log_location = File.expand_path(File.join(DEFAULT_LOG_DIR, "kitchen.log"))
89
+ log_location = log_location.to_s
90
+
91
+ Logger.new(
92
+ :stdout => $stdout,
93
+ :logdev => log_location,
94
+ :level => Util.to_logger_level(level),
95
+ :log_overwrite => log_overwrite
96
+ )
97
+ end
98
+
99
+ # Returns whether or not standard output is associated with a terminal
100
+ # device (tty).
101
+ #
102
+ # @return [true,false] is there a tty?
103
+ def tty?
104
+ $stdout.tty?
105
+ end
106
+
107
+ # Determine the default log level from an environment variable, if it is
108
+ # set.
109
+ #
110
+ # @return [Symbol,nil] a log level or nil if not set
111
+ # @api private
112
+ def env_log
113
+ ENV["KITCHEN_LOG"] && ENV["KITCHEN_LOG"].downcase.to_sym
114
+ end
115
+
116
+ # Determine the log overwriting logic from an environment variable,
117
+ # if it is set.
118
+ #
119
+ # @return [Boolean,nil]
120
+ # @api private
121
+ def env_log_overwrite
122
+ case ENV["KITCHEN_LOG_OVERWRITE"] && ENV["KITCHEN_LOG_OVERWRITE"].downcase
123
+ when nil, ""
124
+ nil
125
+ when "false", "f", "no"
126
+ false
127
+ else
128
+ true
129
+ end
130
+ end
131
+ end
132
+
133
+ # Default log level verbosity
134
+ DEFAULT_LOG_LEVEL = :info
135
+
136
+ # Overwrite the log file when Test Kitchen runs
137
+ DEFAULT_LOG_OVERWRITE = true
138
+
139
+ # Default base directory for integration tests, fixtures, etc.
140
+ DEFAULT_TEST_DIR = "test/integration".freeze
141
+
142
+ # Default base directory for instance and common log files
143
+ DEFAULT_LOG_DIR = ".kitchen/logs".freeze
144
+ end
145
+
146
+ # Initialize the base logger
147
+ Kitchen.logger = Kitchen.default_logger
148
+
149
+ # Setup a collection of instance crash exceptions for error reporting
150
+ Kitchen.mutex = Mutex.new