From 94ffdfa6993143ee1c58605ad04176f7af839897 Mon Sep 17 00:00:00 2001 From: Christoph Hartmann Date: Thu, 14 Jan 2016 16:07:08 -0500 Subject: [PATCH 1/6] add support for dokken transport --- lib/kitchen/verifier/inspec.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/lib/kitchen/verifier/inspec.rb b/lib/kitchen/verifier/inspec.rb index 99d1795..a621a7e 100644 --- a/lib/kitchen/verifier/inspec.rb +++ b/lib/kitchen/verifier/inspec.rb @@ -96,6 +96,8 @@ def runner_options(transport, state = {}) runner_options_for_ssh(transport_data) elsif transport.is_a?(Kitchen::Transport::Winrm) runner_options_for_winrm(transport_data) + elsif transport.is_a?(Kitchen::Transport::Dokken) + runner_options_for_docker(transport_data) else fail Kitchen::UserError, "Verifier #{name} does not support the #{transport.name} Transport" end.tap do |runner_options| @@ -154,6 +156,26 @@ def runner_options_for_winrm(config_data) opts end + + # Returns a configuration Hash that can be passed to a `Inspec::Runner`. + # + # @return [Hash] a configuration hash of string-based keys + # @api private + def runner_options_for_docker(config_data) + kitchen = instance.transport.send(:connection_options, config_data).dup + + opts = { + 'backend' => 'docker', + 'logger' => logger, + 'host' => kitchen[:data_container][:Id], + 'connection_timeout' => kitchen[:timeout], + 'connection_retries' => kitchen[:connection_retries], + 'connection_retry_sleep' => kitchen[:connection_retry_sleep], + 'max_wait_until_ready' => kitchen[:max_wait_until_ready], + } + + opts + end end end end From f6d233ae936adfb250f1f6767ab04d1119db058f Mon Sep 17 00:00:00 2001 From: Christoph Hartmann Date: Thu, 14 Jan 2016 16:07:33 -0500 Subject: [PATCH 2/6] add integration test --- .gitignore | 2 ++ .travis.yml | 26 ++++++++++++++++--- Gemfile | 5 +++- test/integration/.kitchen.yml | 24 +++++++++++++++++ test/integration/Berksfile | 3 +++ .../cookbooks/os_prepare/metadata.rb | 8 ++++++ .../cookbooks/os_prepare/recipes/default.rb | 5 ++++ .../test/integration/default/_debug_spec.rb | 1 + .../test/integration/default/os_spec.rb | 7 +++++ 9 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 test/integration/.kitchen.yml create mode 100644 test/integration/Berksfile create mode 100644 test/integration/cookbooks/os_prepare/metadata.rb create mode 100644 test/integration/cookbooks/os_prepare/recipes/default.rb create mode 100644 test/integration/test/integration/default/_debug_spec.rb create mode 100644 test/integration/test/integration/default/os_spec.rb diff --git a/.gitignore b/.gitignore index 0cb6eeb..f86e0c1 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ /pkg/ /spec/reports/ /tmp/ +test/integration/.kitchen +Berksfile.lock diff --git a/.travis.yml b/.travis.yml index effcf66..2607207 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,12 @@ +--- +sudo: required language: ruby +cache: bundler + +# necessary for docker to work +dist: trusty +services: + - docker rvm: - 2.2 @@ -7,11 +15,23 @@ rvm: - 1.9.3 - ruby-head -before_install: gem install bundler -v 1.10.6 -bundler_args: --without guard +bundler_args: --without guard integration -sudo: false +before_install: + - gem update --system 2.4.5 + - gem --version matrix: + include: + - rvm: 1.9.3 + gemfile: Gemfile + - rvm: 2.0 + gemfile: Gemfile + - rvm: 2.1 + gemfile: Gemfile + - rvm: 2.2 + gemfile: Gemfile + - rvm: ruby-head + gemfile: Gemfile allow_failures: - rvm: ruby-head diff --git a/Gemfile b/Gemfile index 0ed856f..effb7d0 100644 --- a/Gemfile +++ b/Gemfile @@ -15,6 +15,9 @@ group :tools do gem 'github_changelog_generator', '~> 1' end -group :development do +group :integration do + gem 'berkshelf', '~> 4.0' gem 'test-kitchen', '~> 1.4', :require => nil + gem 'kitchen-dokken' + gem 'kitchen-inspec', path: '.' end diff --git a/test/integration/.kitchen.yml b/test/integration/.kitchen.yml new file mode 100644 index 0000000..a4db971 --- /dev/null +++ b/test/integration/.kitchen.yml @@ -0,0 +1,24 @@ +--- +driver: + name: dokken + +transport: + name: dokken + +provisioner: + name: dokken + +verifier: + name: inspec + sudo: true + +platforms: +- name: ubuntu + driver: + image: ubuntu:14.04 + +suites: + - name: default + run_list: + - recipe[os_prepare] + attributes: diff --git a/test/integration/Berksfile b/test/integration/Berksfile new file mode 100644 index 0000000..24bb514 --- /dev/null +++ b/test/integration/Berksfile @@ -0,0 +1,3 @@ +source 'https://supermarket.chef.io' + +cookbook 'os_prepare', path: './cookbooks/os_prepare' diff --git a/test/integration/cookbooks/os_prepare/metadata.rb b/test/integration/cookbooks/os_prepare/metadata.rb new file mode 100644 index 0000000..a874318 --- /dev/null +++ b/test/integration/cookbooks/os_prepare/metadata.rb @@ -0,0 +1,8 @@ +# encoding: utf-8 +name 'os_prepare' +maintainer 'Chef Software, Inc.' +maintainer_email 'support@chef.io' +description 'This cookbook prepares the test operating systems' +version '1.0.0' +depends 'apt' +depends 'yum' diff --git a/test/integration/cookbooks/os_prepare/recipes/default.rb b/test/integration/cookbooks/os_prepare/recipes/default.rb new file mode 100644 index 0000000..72d1635 --- /dev/null +++ b/test/integration/cookbooks/os_prepare/recipes/default.rb @@ -0,0 +1,5 @@ +# encoding: utf-8 +# author: Christoph Hartmann +# author: Dominik Richter +# +# noop, do nothing diff --git a/test/integration/test/integration/default/_debug_spec.rb b/test/integration/test/integration/default/_debug_spec.rb new file mode 100644 index 0000000..cd3b41f --- /dev/null +++ b/test/integration/test/integration/default/_debug_spec.rb @@ -0,0 +1 @@ +p "You are currently running on OS family: #{os[:family] || 'unknown'}, OS release: #{os[:release] || 'unknown'}" diff --git a/test/integration/test/integration/default/os_spec.rb b/test/integration/test/integration/default/os_spec.rb new file mode 100644 index 0000000..d5503db --- /dev/null +++ b/test/integration/test/integration/default/os_spec.rb @@ -0,0 +1,7 @@ +# encoding: utf-8 + +family = os[:family] + +describe os[:family] do + it { should eq family } +end From a44533ef403212f98e8407870be61556178bf729 Mon Sep 17 00:00:00 2001 From: Christoph Hartmann Date: Wed, 20 Jan 2016 16:19:48 +0100 Subject: [PATCH 3/6] add rake script to run integration tests --- Rakefile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Rakefile b/Rakefile index a75062f..04ab755 100644 --- a/Rakefile +++ b/Rakefile @@ -118,3 +118,11 @@ task :bump_version, [:version] do |_, args| kitchen_inspec_version(v) Rake::Task['changelog'].invoke end + +namespace :test do + task :integration do + concurrency = ENV['CONCURRENCY'] || 1 + path = File.join(File.dirname(__FILE__), 'test', 'integration') + sh('sh', '-c', "cd #{path} && bundle exec kitchen test -c #{concurrency} -t .") + end +end From e3ddc4cd81aedb273d92536bdda1ea6c1fdc8b9d Mon Sep 17 00:00:00 2001 From: Christoph Hartmann Date: Wed, 20 Jan 2016 16:20:50 +0100 Subject: [PATCH 4/6] update gemfile and test matrix --- .travis.yml | 13 +++++-------- Gemfile | 19 ++++++++++++------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2607207..ac47c69 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,14 +8,7 @@ dist: trusty services: - docker -rvm: - - 2.2 - - 2.1 - - 2.0.0 - - 1.9.3 - - ruby-head - -bundler_args: --without guard integration +bundler_args: --without integration guard tools before_install: - gem update --system 2.4.5 @@ -33,5 +26,9 @@ matrix: gemfile: Gemfile - rvm: ruby-head gemfile: Gemfile + - rvm: 2.2 + gemfile: Gemfile + bundler_args: --without guard tools + script: bundle exec rake test:integration allow_failures: - rvm: ruby-head diff --git a/Gemfile b/Gemfile index effb7d0..d92627e 100644 --- a/Gemfile +++ b/Gemfile @@ -8,16 +8,21 @@ group :guard do end group :test do + gem 'bundler', '~> 1.5' + gem 'minitest', '~> 5.5' + gem 'rake', '~> 10' + gem 'rubocop', '~> 0.32' + gem 'concurrent-ruby', '~> 0.9' gem 'codeclimate-test-reporter', :require => nil -end - -group :tools do - gem 'github_changelog_generator', '~> 1' + gem 'test-kitchen', '~> 1.4', :require => nil end group :integration do - gem 'berkshelf', '~> 4.0' - gem 'test-kitchen', '~> 1.4', :require => nil + gem 'berkshelf' gem 'kitchen-dokken' - gem 'kitchen-inspec', path: '.' +end + +group :tools do + gem 'pry', '~> 0.10' + gem 'github_changelog_generator', '~> 1' end From e892a28bce4ec529936dc9fb34fda12f5ab1d40a Mon Sep 17 00:00:00 2001 From: Christoph Hartmann Date: Wed, 20 Jan 2016 16:44:15 +0100 Subject: [PATCH 5/6] make dokken transport optional --- lib/kitchen/verifier/inspec.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/kitchen/verifier/inspec.rb b/lib/kitchen/verifier/inspec.rb index a621a7e..86c1ea0 100644 --- a/lib/kitchen/verifier/inspec.rb +++ b/lib/kitchen/verifier/inspec.rb @@ -96,7 +96,8 @@ def runner_options(transport, state = {}) runner_options_for_ssh(transport_data) elsif transport.is_a?(Kitchen::Transport::Winrm) runner_options_for_winrm(transport_data) - elsif transport.is_a?(Kitchen::Transport::Dokken) + # optional transport which is not in core test-kitchen + elsif defined?(Kitchen::Transport::Dokken) && transport.is_a?(Kitchen::Transport::Dokken) runner_options_for_docker(transport_data) else fail Kitchen::UserError, "Verifier #{name} does not support the #{transport.name} Transport" From a46e2592a2be0b486d4ed11b98dca3147d434d77 Mon Sep 17 00:00:00 2001 From: Christoph Hartmann Date: Wed, 20 Jan 2016 17:47:29 +0100 Subject: [PATCH 6/6] optimize travis gem caching by using a different version for integration tests --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index ac47c69..acff8d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,8 +22,6 @@ matrix: gemfile: Gemfile - rvm: 2.1 gemfile: Gemfile - - rvm: 2.2 - gemfile: Gemfile - rvm: ruby-head gemfile: Gemfile - rvm: 2.2