inspec/test/docker_test.rb

59 lines
1.3 KiB
Ruby
Raw Normal View History

# encoding: utf-8
2015-10-06 16:55:44 +00:00
# author: Dominik Richter
require_relative 'docker_run'
2015-10-26 03:04:18 +00:00
require_relative '../lib/inspec'
#
# BUGON: These requires are to get around concurrency issues with
# autoloading in Ruby
#
require 'train'
require 'train/plugins'
require 'train/plugins/transport'
require 'train/transports/docker'
tests = ARGV
if tests.empty?
puts 'Nothing to do.'
exit 0
end
class DockerTester
def initialize(tests)
@tests = tests
@docker = DockerRunner.new
end
def run
puts ['Running tests:', @tests].flatten.join("\n- ")
puts ''
conf = RSpec.configuration
reporter = conf.reporter
results = nil
# start reporting loop
reporter.report(0) do |report|
results = @docker.run_all do |name, container|
status = test_container(container, report)
status.all? ? nil : "Failed to run tests on #{name}"
end
end
# check if we were successful
failures = results.compact
failures.each { |f| puts "\033[31;1m#{f}\033[0m\n\n" }
failures.empty? or fail 'Test failures'
end
def test_container(container, report)
puts "--> run test on docker #{container.id}"
opts = { 'target' => "docker://#{container.id}" }
2015-10-26 03:04:18 +00:00
runner = Inspec::Runner.new(opts)
@tests.each { |test| runner.add_target(test) }
runner.tests.map { |g| g.run(report) }
end
end
DockerTester.new(tests).run