diff --git a/.kitchen.docker.yml b/.kitchen.docker.yml new file mode 100644 index 0000000..03cc54b --- /dev/null +++ b/.kitchen.docker.yml @@ -0,0 +1,3 @@ +--- +driver: + name: docker diff --git a/.travis.yml b/.travis.yml index 6564966..f9c5139 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,9 +5,53 @@ cache: bundler: true directories: - tmp/rubocop_cache -sudo: false +sudo: true env: + global: + - KITCHEN_LOCAL_YAML=.kitchen.docker.yml matrix: - - TASK='rubocop' - - TASK='foodcritic' -script: bundle exec rake $TASK + - TASK='rake rubocop' + - TASK='rake foodcritic' + - TASK='kitchen test nrsysmond-default-ubuntu-1204' + - TASK='kitchen test plugin-agent-default-ubuntu-1204' + - TASK='kitchen test generic-agent-default-ubuntu-1204' + - TASK='kitchen test php-agent-default-ubuntu-1204' + - TASK='kitchen test php-external-default-ubuntu-1204' + - TASK='kitchen test nrsysmond-default-ubuntu-1404' + - TASK='kitchen test plugin-agent-default-ubuntu-1404' + - TASK='kitchen test generic-agent-default-ubuntu-1404' + - TASK='kitchen test php-agent-default-ubuntu-1404' + - TASK='kitchen test php-external-default-ubuntu-1404' + - TASK='kitchen test nrsysmond-default-ubuntu-1604' + - TASK='kitchen test plugin-agent-default-ubuntu-1604' + - TASK='kitchen test generic-agent-default-ubuntu-1604' + - TASK='kitchen test php-agent-default-ubuntu-1604' + - TASK='kitchen test php-external-default-ubuntu-1604' + - TASK='kitchen test nrsysmond-default-debian-79' + - TASK='kitchen test plugin-agent-default-debian-79' + - TASK='kitchen test generic-agent-default-debian-79' + - TASK='kitchen test php-agent-default-debian-79' + - TASK='kitchen test php-external-default-debian-79' + - TASK='kitchen test nrsysmond-default-debian-84' + - TASK='kitchen test plugin-agent-default-debian-84' + - TASK='kitchen test generic-agent-default-debian-84' + - TASK='kitchen test php-agent-default-debian-84' + - TASK='kitchen test php-external-default-debian-84' + - TASK='kitchen test nrsysmond-default-centos-67' + - TASK='kitchen test plugin-agent-default-centos-67' + - TASK='kitchen test generic-agent-default-centos-67' + - TASK='kitchen test php-agent-default-centos-67' + - TASK='kitchen test php-external-default-centos-67' + - TASK='kitchen test nrsysmond-default-centos-72' + - TASK='kitchen test plugin-agent-default-centos-72' + - TASK='kitchen test generic-agent-default-centos-72' + - TASK='kitchen test php-agent-default-centos-72' + - TASK='kitchen test php-external-default-centos-72' + +before_script: +- source <(curl -sL https://raw.githubusercontent.com/zuazo/kitchen-in-travis/0.5.0/scripts/start_docker.sh) + +script: +- bundle exec $TASK + +after_failure: cat docker_daemon.log diff --git a/Gemfile b/Gemfile index 1501f53..3765e68 100644 --- a/Gemfile +++ b/Gemfile @@ -4,6 +4,10 @@ gem 'berkshelf' group :integration do gem 'test-kitchen' +end + +group :vagrant do + gem 'vagrant-wrapper' gem 'kitchen-vagrant' end @@ -12,3 +16,7 @@ group :development, :test do gem 'rubocop' gem 'foodcritic' end + +group :docker do + gem 'kitchen-docker', '~> 2.1.0' +end diff --git a/Rakefile b/Rakefile index b18123c..76454cc 100644 --- a/Rakefile +++ b/Rakefile @@ -33,3 +33,41 @@ def prepare_foodcritic_sandbox(sandbox) cp_r Dir.glob("{#{files.join(',')}}"), sandbox puts "\n\n" end + +desc 'Run Test Kitchen integration tests' +namespace :integration do + # Gets a collection of instances. + # + # @param regexp [String] regular expression to match against instance names. + # @param config [Hash] configuration values for the `Kitchen::Config` class. + # @return [Collection] all instances. + def kitchen_instances(regexp, config) + instances = Kitchen::Config.new(config).instances + return instances if regexp.nil? || regexp == 'all' + instances.get_all(Regexp.new(regexp)) + end + + # Runs a test kitchen action against some instances. + # + # @param action [String] kitchen action to run (defaults to `'test'`). + # @param regexp [String] regular expression to match against instance names. + # @param loader_config [Hash] loader configuration options. + # @return void + def run_kitchen(action, regexp, loader_config = {}) + action = 'test' if action.nil? + require 'kitchen' + Kitchen.logger = Kitchen.default_file_logger + config = { loader: Kitchen::Loader::YAML.new(loader_config) } + kitchen_instances(regexp, config).each { |i| i.send(action) } + end + + desc 'Run integration tests with kitchen-vagrant' + task :vagrant, [:regexp, :action] do |_t, args| + run_kitchen(args.action, args.regexp) + end + + desc 'Run integration tests with kitchen-docker' + task :docker, [:regexp, :action] do |_t, args| + run_kitchen(args.action, args.regexp, local_config: '.kitchen.docker.yml') + end +end