GithubHelp home page GithubHelp logo

isabella232 / minitest-chef-handler Goto Github PK

View Code? Open in Web Editor NEW

This project forked from chef-boneyard/minitest-chef-handler

0.0 0.0 0.0 191 KB

Run minitest suites after your Chef recipes to check the status of your system.

License: Other

Ruby 100.00%

minitest-chef-handler's Introduction

Minitest Chef Handler

Run minitest suites after your Chef recipes to check the status of your system.

Build Status

DEPRECATION NOTICE

This software is only very lightly maintained, if at all. The only bugfixes likely to be worked on will be for chef-client compatibility issues for major breakages (i.e. issues like fails to work at all on chef-client 12.0.0 because of API changes within chef-client).

Community submitted PRs can be merged and the software can still get released, but it is not under active maintainership.

Users are urged to consider switching to using Inspec: http://inspec.io/

Installation

gem install minitest-chef-handler

Usage

Option 1: Add the report handler to your client.rb or solo.rb file:

require 'minitest-chef-handler'

report_handlers << MiniTest::Chef::Handler.new

Options 2: Using minitest-handler

# Vagrantfile
chef.run_list = [
  "your-recipes",
  "minitest-handler"
]

Test cases

Write your tests as normal MiniTest cases extending from MiniTest::Chef::TestCase:

class TestNginx < MiniTest::Chef::TestCase
  def test_config_file_exist
    assert File.exist?('/etc/nginx.conf')
  end
end

Inside your tests cases, you still have access to Chef's run_status, node and run_context:

class TestNginx < MiniTest::Chef::TestCase
  def test_succeed
    assert run_status.success?
  end
end

Spec cases

Wrap your descriptions with a class extending from MiniTest::Chef::Spec:

class NginxSpec < MiniTest::Chef::Spec
  describe 'configuration' do
    it 'creates nginx.conf'
  end
end

Use the prefix recipe:: in your descriptions:

describe "recipe::nginx::configuration" do
  it 'creates nginx.conf'
end

Or use describe_recipe to define your specs:

describe_recipe "nginx::configuration" do
  it 'creates nginx.conf'
end

Inside your specs, you still have access to Chef's run_status, node and run_context:

describe_recipe 'nginx:configuration' do
  it 'installs version 1.0.15' do
    node[:nginx][:version].should == '1.0.15'
  end
end

Custom assertions

By including MiniTest::Chef::Resources and MiniTest::Chef::Assertions you can also make assertions like these:

file("/etc/fstab").must_have(:mode, "644")
package("less").must_be_installed
service("chef-client").must_be_running
assert_directory "/etc", "root", "root", "755"
assert_file "/etc/fstab", "root", "root", "644"
assert_sh "ls /etc"
assert_logrotate "/etc/logrotate.d/mysql"

and many more

The resources supported are: cron, directory, file, group, ifconfig, link, mount, package, service and user.

For example usage see the tests under the examples/spec_examples directory.

Further configuration

These are the options the handler accepts:

  • :path => where your test files are, './test/test_*.rb' by default
  • :filter => filter test names on pattern
  • :seed => set random seed
  • :verbose => show progress processing files.
  • :ci_reports => path to write out the result of each test in a JUnit-compatible XML file, parseable by many CI platforms.

Example:

handler = MiniTest::Chef::Handler.new({
  :path    => './cookbooks/test/*_test.rb',
  :filter  => 'foo',
  :seed    => srand,
  :verbose => true})

report_handlers << handler

Automatic tests detection

MiniTest-chef-hander collects test paths based in the recipes ran. It loads the tests based on the name of the cookbook and the name of the recipe. The tests must be under the cookbooks directory.

Examples:

If the seen recipes includes the recipe "foo" we try to load tests from:

cookbooks/foo/tests/default_test.rb
cookbooks/foo/tests/default/*_test.rb

cookbooks/foo/specs/default_spec.rb
cookbooks/foo/specs/default/*_spec.rb

If the seen recipes includes the recipe "foo::install" we try to load tests from:

cookbooks/foo/tests/install_test.rb
cookbooks/foo/tests/install/*_test.rb

cookbooks/foo/specs/install_spec.rb
cookbooks/foo/specs/install/*_spec.rb

Automatic chef failure

If the tests detect any failure, the handler raises an error to abort the Chef execution. This error can be captured by any other exception handler and be treated like any other error in the Chef execution.

Chef server distribution

The instructions above have described how to use it in a Chef solo installation. If you want to distribute the handler to your Chef server check either the chef_handler cookbooks in the examples or minitest-handler-cookbook.

Development

bundle
bundle exec rake # unit tests
bundle exec vagrant up # integration tests (install virtualbox first and vagrant destroy -f afterwards to clean up)

Copyright

Copyright (c) 2012 David Calavera. See LICENSE for details.

minitest-chef-handler's People

Contributors

calavera avatar leftathome avatar grosser avatar lamont-granquist avatar matschaffer avatar gildegoma avatar haidangwa avatar fsimmend avatar juanje avatar mclazarus avatar mfischer-zd avatar mconigliaro avatar vinyar avatar walbenzi avatar dpetzel avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.