class ChefDK::ComponentTest
Constants
- DEFAULT_TEST
Attributes
base_dir[RW]
name[R]
omnibus_root[W]
Public Class Methods
new(name)
click to toggle source
# File lib/chef-dk/component_test.rb, line 69 def initialize(name) @name = name @unit_test = DEFAULT_TEST @integration_test = DEFAULT_TEST @smoke_test = DEFAULT_TEST @base_dir = nil @gem_name_for_base_dir = nil end
Public Instance Methods
assert_present!()
click to toggle source
# File lib/chef-dk/component_test.rb, line 167 def assert_present! unless File.exist?( component_path ) raise MissingComponentError.new(name, "Could not find #{component_path}") end rescue Gem::LoadError => e raise MissingComponentError.new(name, e) end
bin(binary)
click to toggle source
# File lib/chef-dk/component_test.rb, line 102 def bin(binary) File.join(omnibus_bin_dir, binary) end
component_path()
click to toggle source
# File lib/chef-dk/component_test.rb, line 188 def component_path if base_dir File.join(omnibus_root, base_dir) elsif gem_base_dir gem_base_dir else raise "`base_dir` or `gem_base_dir` must be defined for component `#{name}`" end end
default_command_options()
click to toggle source
# File lib/chef-dk/component_test.rb, line 175 def default_command_options { cwd: component_path, env: { # Add the embedded/bin to the PATH so that bundle executable can # be found while running the tests. path_variable_key => omnibus_path, "CHEF_LICENSE" => "accept-no-persist", }, timeout: 3600, } end
embedded_bin(binary)
click to toggle source
# File lib/chef-dk/component_test.rb, line 106 def embedded_bin(binary) File.join(omnibus_embedded_bin_dir, binary) end
fail_if_exit_zero(cmd_string, failure_string = "")
click to toggle source
Run a command, if the command returns zero, raise an error, otherwise, if it returns non-zero or doesn't exist, return a passing command so that the test parser doesn't crash.
# File lib/chef-dk/component_test.rb, line 135 def fail_if_exit_zero(cmd_string, failure_string = "") result = sh(cmd_string) if result.status.exitstatus == 0 raise failure_string else sh("true") end rescue Errno::ENOENT sh("true") end
gem_base_dir()
click to toggle source
# File lib/chef-dk/component_test.rb, line 198 def gem_base_dir return nil if @gem_name_for_base_dir.nil? # There is no way to say "give me the latest prerelease OR normal version of this gem. # So we first ask if there is a normal version, and if there is not, we ask if there # is a prerelease version. ">= 0.a" is how we ask for a prerelease version, because a # prerelease version is defined as "any version with a letter in it." gem = Gem::Specification.find_by_name(@gem_name_for_base_dir) gem ||= Gem::Specification.find_by_name(@gem_name_for_base_dir, ">= 0.a") gem.gem_dir end
gem_base_dir=(gem_name)
click to toggle source
# File lib/chef-dk/component_test.rb, line 210 def gem_base_dir=(gem_name) @gem_name_for_base_dir = gem_name end
integration_test(&test_block)
click to toggle source
# File lib/chef-dk/component_test.rb, line 86 def integration_test(&test_block) @integration_test = test_block end
nix_platform_native_bin_dir()
click to toggle source
# File lib/chef-dk/component_test.rb, line 146 def nix_platform_native_bin_dir if /darwin/ =~ RUBY_PLATFORM "/usr/local/bin" else "/usr/bin" end end
omnibus_path()
click to toggle source
# File lib/chef-dk/component_test.rb, line 218 def omnibus_path [omnibus_bin_dir, omnibus_embedded_bin_dir, ENV["PATH"]].join(File::PATH_SEPARATOR) end
omnibus_root()
click to toggle source
# File lib/chef-dk/component_test.rb, line 214 def omnibus_root @omnibus_root || raise("`omnibus_root` must be set before running tests") end
path_variable_key()
click to toggle source
# File lib/chef-dk/component_test.rb, line 222 def path_variable_key ENV.keys.grep(/\Apath\Z/i).first end
run_in_tmpdir(command, options = {})
click to toggle source
# File lib/chef-dk/component_test.rb, line 154 def run_in_tmpdir(command, options = {}) tmpdir do |dir| options[:cwd] = dir sh(command, options) end end
run_integration_test()
click to toggle source
# File lib/chef-dk/component_test.rb, line 90 def run_integration_test instance_eval(&@integration_test) end
run_smoke_test()
click to toggle source
# File lib/chef-dk/component_test.rb, line 98 def run_smoke_test instance_eval(&@smoke_test) end
run_unit_test()
click to toggle source
# File lib/chef-dk/component_test.rb, line 82 def run_unit_test instance_eval(&@unit_test) end
sh(command, options = {})
click to toggle source
# File lib/chef-dk/component_test.rb, line 110 def sh(command, options = {}) combined_opts = default_command_options.merge(options) # Env is a hash, so it needs to be merged separately if options.key?(:env) combined_opts[:env] = default_command_options[:env].merge(options[:env]) end system_command(command, combined_opts) end
sh!(*args)
click to toggle source
Just like sh
but raises an error if the the command returns an unexpected exit code.
Most verification steps just run a single command, then ChefDK::Command::Verify#invoke_tests
handles the results by inspecting the return value of the test block. For tests that run a lot of commands, this is inconvenient so you can use sh!
instead.
# File lib/chef-dk/component_test.rb, line 127 def sh!(*args) sh(*args).tap(&:error!) end
smoke_test(&test_block)
click to toggle source
# File lib/chef-dk/component_test.rb, line 94 def smoke_test(&test_block) @smoke_test = test_block end
tmpdir() { |tmpdir| ... }
click to toggle source
# File lib/chef-dk/component_test.rb, line 161 def tmpdir Dir.mktmpdir do |tmpdir| yield tmpdir end end
unit_test(&test_block)
click to toggle source
# File lib/chef-dk/component_test.rb, line 78 def unit_test(&test_block) @unit_test = test_block end