You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.7 KiB
61 lines
1.7 KiB
4 years ago
|
require "bento/common"
|
||
|
require "mixlib/shellout" unless defined?(Mixlib::ShellOut)
|
||
|
require "erb" unless defined?(Erb)
|
||
|
|
||
|
class TestRunner
|
||
|
include Common
|
||
|
|
||
|
attr_reader :shared_folder, :boxname, :provider, :box_url, :no_shared, :provisioner
|
||
|
|
||
|
def initialize(opts)
|
||
|
@debug = opts.debug
|
||
|
@no_shared = opts.no_shared
|
||
|
@provisioner = opts.provisioner.nil? ? "shell" : opts.provisioner
|
||
|
end
|
||
|
|
||
|
def start
|
||
|
banner("Starting testing...")
|
||
|
time = Benchmark.measure do
|
||
|
metadata_files.each do |metadata_file|
|
||
|
destroy_all_bento
|
||
|
test_box(metadata_file)
|
||
|
destroy_all_bento
|
||
|
end
|
||
|
end
|
||
|
banner("Testing finished in #{duration(time.real)}.")
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def destroy_all_bento
|
||
|
cmd = Mixlib::ShellOut.new("vagrant box list | grep 'bento-'")
|
||
|
cmd.run_command
|
||
|
boxes = cmd.stdout.split("\n")
|
||
|
|
||
|
boxes.each do |box|
|
||
|
b = box.split(" ")
|
||
|
rm_cmd = Mixlib::ShellOut.new("vagrant box remove --force #{b[0]} --provider #{b[1].to_s.gsub(/(,|\()/, "")}")
|
||
|
banner("Removing #{b[0]} for provider #{b[1].to_s.gsub(/(,|\()/, "")}")
|
||
|
rm_cmd.run_command
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def test_box(md_json)
|
||
|
md = box_metadata(md_json)
|
||
|
@boxname = md["name"]
|
||
|
@providers = md["providers"]
|
||
|
@share_disabled = no_shared || /(bsd|opensuse)/.match(boxname) ? true : false
|
||
|
|
||
|
dir = "#{File.expand_path("../../", File.dirname(__FILE__))}/templates"
|
||
|
%w{.kitchen.yml bootstrap.sh}.each do |file|
|
||
|
t = file =~ /kitchen/ ? "kitchen.yml.erb" : "#{file}.erb"
|
||
|
erb = ERB.new(File.read(dir + "/#{t}"), nil, "-").result(binding)
|
||
|
File.open(file, "w") { |f| f.puts erb }
|
||
|
end
|
||
|
|
||
|
test = Mixlib::ShellOut.new("kitchen test", timeout: 900, live_stream: STDOUT)
|
||
|
test.run_command
|
||
|
test.error!
|
||
|
end
|
||
|
end
|