Codebase list itamae / fresh-snapshots/upstream Rakefile
fresh-snapshots/upstream

Tree @fresh-snapshots/upstream (Download .tar.gz)

Rakefile @fresh-snapshots/upstreamraw · history · blame

require "bundler/gem_tasks"
require 'rspec/core/rake_task'
require 'tempfile'
require 'net/ssh'

Dir['tasks/*.rb'].each do |file|
  require_relative file
end

desc 'Run unit and integration specs.'
task :spec => ['spec:unit', 'spec:integration:all']

TEST_IMAGE = ENV["TEST_IMAGE"] || "ubuntu:trusty"

namespace :spec do
  RSpec::Core::RakeTask.new("unit") do |task|
    task.ruby_opts = '-I ./spec/unit'
    task.pattern = "./spec/unit{,/*/**}/*_spec.rb"
  end

  namespace :integration do
    container_name = 'itamae'

    task :all => ['spec:integration:docker', 'spec:integration:local']

    desc "Run provision and specs"
    task :docker => ["docker:boot", "docker:provision", "docker:serverspec", 'docker:clean_docker_container']

    namespace :docker do
      desc "Run docker"
      task :boot do
        sh "docker run --privileged -d --name #{container_name} #{TEST_IMAGE} /sbin/init"
      end

      desc "Run itamae"
      task :provision do
        suites = [
          [
            "spec/integration/recipes/default.rb",
            "spec/integration/recipes/default2.rb",
            "spec/integration/recipes/redefine.rb",
            "spec/integration/recipes/docker.rb",
          ],
          [
            "--dry-run",
            "spec/integration/recipes/dry_run.rb",
          ],
        ]
        suites.each do |suite|
          cmd = %w!bundle exec ruby -w bin/itamae docker!
          cmd << "-l" << (ENV['LOG_LEVEL'] || 'debug')
          cmd << "-j" << "spec/integration/recipes/node.json"
          cmd << "--container" << container_name
          cmd << "--tag" << "itamae:latest"
          cmd << "--tmp-dir" << (ENV['ITAMAE_TMP_DIR'] || '/tmp/itamae_tmp')
          cmd += suite

          p cmd
          unless system(*cmd)
            raise "#{cmd} failed"
          end
        end
      end

      desc "Run serverspec tests"
      RSpec::Core::RakeTask.new(:serverspec) do |t|
        ENV['DOCKER_CONTAINER'] = container_name
        t.ruby_opts = '-I ./spec/integration'
        t.pattern = "spec/integration/{default,docker}_spec.rb"
      end

      desc 'Clean a docker container for test'
      task :clean_docker_container do
        sh('docker', 'rm', '-f', container_name)
      end
    end
  end
end

task :default => :spec