From e29b770f2000553286b67369f1fe643ec0cd8485 Mon Sep 17 00:00:00 2001 From: Andres Montalban Date: Fri, 28 Oct 2016 19:59:34 -0300 Subject: [PATCH] Initial configuration of automated tests --- .gitignore | 2 ++ .kitchen.docker.yml | 6 ++++++ .kitchen.yml | 32 ++++++++++++++++++++++++++++++++ .travis.yml | 27 +++++++++++++++++++++++++++ Gemfile | 18 ++++++++++++++++++ Rakefile | 31 +++++++++++++++++++++++++++++++ pillar.example | 10 +++++----- 7 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 .kitchen.docker.yml create mode 100644 .kitchen.yml create mode 100644 .travis.yml create mode 100644 Gemfile create mode 100644 Rakefile diff --git a/.gitignore b/.gitignore index f3d74a9..7715275 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ *.pyc *~ +Gemfile.lock +.kitchen/ diff --git a/.kitchen.docker.yml b/.kitchen.docker.yml new file mode 100644 index 0000000..f6c458a --- /dev/null +++ b/.kitchen.docker.yml @@ -0,0 +1,6 @@ +--- +driver: + name: docker + hostname: salt-formula.ci.local + use_sudo: true + require_chef_omnibus: false diff --git a/.kitchen.yml b/.kitchen.yml new file mode 100644 index 0000000..89ecf32 --- /dev/null +++ b/.kitchen.yml @@ -0,0 +1,32 @@ +<% +require 'yaml' + +formula = YAML.load_file('FORMULA') +formula_name = formula['name'] +%> +--- +verifier: + name: inspec + +platforms: + - name: ubuntu-12.04 + - name: ubuntu-14.04 + - name: ubuntu-16.04 + - name: debian-7 + - name: debian-8 + +provisioner: + name: salt_solo + salt_install: bootstrap + salt_bootstrap_url: https://bootstrap.saltstack.com + salt_version: latest + salt_pillar_root: pillar.example + log_level: <%= ENV['SALT_DEBUG_LEVEL'] || 'info' %> + formula: <%= formula_name %> + state_top: + base: + '*': + - <%= formula_name %> + +suites: + - name: default diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..188dbfc --- /dev/null +++ b/.travis.yml @@ -0,0 +1,27 @@ +language: ruby + +rvm: + - 2.2.5 + +sudo: required +services: docker + +env: + matrix: + - INSTANCE=default-ubuntu-1204 + - INSTANCE=default-ubuntu-1404 + - INSTANCE=default-ubuntu-1604 + - INSTANCE=default-debian-7 + - INSTANCE=default-debian-8 + +# https://github.com/zuazo/kitchen-in-travis-native/issues/1#issuecomment-142455888 +before_script: sudo iptables -L DOCKER || sudo iptables -N DOCKER + +install: + # setup ci for test formula + - export BUNDLE_GEMFILE=$PWD/Gemfile + - bundle install + +script: + # Run unit tests + - KITCHEN_LOCAL_YAML=.kitchen.docker.yml bundle exec kitchen verify ${INSTANCE} diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..f74e267 --- /dev/null +++ b/Gemfile @@ -0,0 +1,18 @@ +source 'https://rubygems.org' + +gem 'codeclimate-test-reporter', group: :test, require: nil +gem 'rake' +gem 'berkshelf', '~> 4.0' + +group :integration do + gem 'test-kitchen' + gem 'kitchen-salt' + gem 'kitchen-inspec' +end + +group :docker do + gem 'kitchen-docker' +end + +# vi: set ft=ruby : +gem "kitchen-vagrant" diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..2a6eafb --- /dev/null +++ b/Rakefile @@ -0,0 +1,31 @@ +require 'rake' +require 'rake/testtask' +require 'bundler/setup' + +Rake::TestTask.new do |t| + t.libs << 'lib' + t.pattern = 'test/**/*_test.rb' + t.verbose = false +end + +desc 'Run Test Kitchen integration tests' +namespace :integration do + desc 'Run integration tests with kitchen-docker' + task :docker do + require 'kitchen' + Kitchen.logger = Kitchen.default_file_logger + @loader = Kitchen::Loader::YAML.new(local_config: '.kitchen.docker.yml') + Kitchen::Config.new(loader: @loader).instances.each do |instance| + instance.test(:always) + end + end +end + +task default: :test + +begin + require 'kitchen/rake_tasks' + Kitchen::RakeTasks.new +rescue LoadError + puts '>>>>> Kitchen gem not loaded, omitting tasks' unless ENV['CI'] +end diff --git a/pillar.example b/pillar.example index 7a1aee5..2b50a81 100644 --- a/pillar.example +++ b/pillar.example @@ -117,11 +117,11 @@ mysql: grants: ['select', 'insert', 'update'] # Override any names defined in map.jinja - lookup: - server: mysql-server - client: mysql-client - service: mysql-service - python: python-mysqldb +# lookup: +# server: mysql-server +# client: mysql-client +# service: mysql-service +# python: python-mysqldb # Install MySQL headers dev: