knife-role-test 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d8b4ea2f3be86ab7bf63f90d41c2bdefca339583
4
+ data.tar.gz: 91ec54b4b680e5436ec3dda2c6d280554ecbd6ec
5
+ SHA512:
6
+ metadata.gz: c0c969a8d2de36569fbb7467c210a26afd298a6c848ad422b4d0e47cd0800c2556454a2a828fc802f5c632e52f039739d33a5e0f0af779e78107444f980aee10
7
+ data.tar.gz: 2dd26fbe7d84b7cac540702a8db1bc3e423f0bafdc7624d805b16d49a7cca685d2b261a36ae841dbcd198f773adc487775df9f9bbc781cc8e98dd98a35309a50
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ Gemfile.lock
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.0
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in knife-role-test.gemspec
4
+ gemspec
5
+
6
+ group :test do
7
+ gem 'rake', '~> 0.9'
8
+
9
+ # allow CI to override the version of Chef for matrix testing
10
+ gem 'chef', (ENV['CHEF_VERSION'] || '>= 11.8.2')
11
+ end
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Justin Kolberg
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,31 @@
1
+ # Knife::Role::Test
2
+
3
+ [![Build Status](https://travis-ci.org/amdprophet/knife-role-test.png?branch=master)](https://travis-ci.org/amdprophet/knife-role-test)
4
+
5
+ A Chef knife plugin to validate roles
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'knife-role-test'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install knife-role-test
20
+
21
+ ## Usage
22
+
23
+ TODO: Write usage instructions here
24
+
25
+ ## Contributing
26
+
27
+ 1. Fork it ( http://github.com/amdprophet/knife-role-test/fork )
28
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
29
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
30
+ 4. Push to the branch (`git push origin my-new-feature`)
31
+ 5. Create new Pull Request
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new("spec")
5
+
6
+ task :default => :spec
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'knife_role_test/version'
5
+ require 'knife_role_test/helpers'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "knife-role-test"
9
+ spec.version = KnifeRoleTest::VERSION
10
+ spec.authors = ["Justin Kolberg"]
11
+ spec.email = ["amd.prophet@gmail.com"]
12
+ spec.summary = %q{A Chef knife plugin to validate roles}
13
+ spec.description = spec.summary
14
+ spec.homepage = "http://github.com/amdprophet/knife-role-test"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.5"
23
+ spec.add_development_dependency "rake"
24
+ spec.add_development_dependency "rspec", "~> 2.14.0"
25
+ end
@@ -0,0 +1,46 @@
1
+ require 'chef/knife'
2
+ require 'open3'
3
+
4
+ class Chef
5
+ class Knife
6
+ class RoleTest < Chef::Knife
7
+
8
+ banner "knife role test [-a|ROLE...]"
9
+
10
+ option :all,
11
+ :short => "-a",
12
+ :long => "--all",
13
+ :description => "Test all roles",
14
+ :boolean => true
15
+
16
+ def test_pattern
17
+ name_args.map {|x| "^test_role_#{Regexp.escape(x)}$" }.join('|')
18
+ end
19
+
20
+ def test_args
21
+ if config[:all]
22
+ []
23
+ elsif name_args.size > 0
24
+ ['-n', "/#{test_pattern}/"]
25
+ else
26
+ ui.fatal "Must specify -a or some roles"
27
+ exit 1
28
+ end
29
+ end
30
+
31
+ def run
32
+ test_path = "#{::KnifeRoleTest.root}/lib/knife_role_test/roles.rb"
33
+ env_vars = {
34
+ "KRT_ROLE_PATH" => Chef::Config[:role_path]
35
+ }
36
+ Open3.popen3(env_vars, test_path, *test_args) do |stdin, stdout, stderr, wait_thr|
37
+ stderr_text = stderr.read
38
+ stdout_text = stdout.read
39
+ puts stderr_text
40
+ puts stdout_text
41
+ stdout_text
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,4 @@
1
+ require "knife_role_test/version"
2
+
3
+ module KnifeRoleTest
4
+ end
@@ -0,0 +1,5 @@
1
+ module KnifeRoleTest
2
+ def self.root
3
+ File.expand_path('../../..', __FILE__)
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'minitest/autorun'
5
+ require 'chef'
6
+ require 'chef/knife/core/object_loader'
7
+ require 'pathname'
8
+
9
+ class TestRoles < MiniTest::Unit::TestCase
10
+
11
+ @role_path = ENV['KRT_ROLE_PATH']
12
+
13
+ def setup
14
+ lib_dir = Pathname.new(ENV['KRT_ROLE_PATH']).realpath.parent.to_s + '/lib'
15
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
16
+ @loader = Chef::Knife::Core::ObjectLoader.new(Chef::Role, nil)
17
+ end
18
+
19
+ Dir.glob("#{@role_path}/*.rb") do |role_file|
20
+ define_method "test_role_#{File.basename(role_file).sub('.rb', '')}" do
21
+ assert @loader.load_from(@role_path, role_file)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,3 @@
1
+ module KnifeRoleTest
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,53 @@
1
+ require 'chef/knife/role_test'
2
+ require 'knife_role_test'
3
+
4
+ describe Chef::Knife::RoleTest do
5
+
6
+ before do
7
+ Chef::Log.logger = Logger.new(StringIO.new)
8
+ @spec_data = "#{::KnifeRoleTest.root}/spec/data"
9
+ Chef::Config[:role_path] = "#{@spec_data}/roles"
10
+ @knife = Chef::Knife::RoleTest.new
11
+ @knife.config[:all] = false
12
+ @knife.name_args = []
13
+ $stdout.stub(:write)
14
+ $stderr.stub(:write)
15
+ end
16
+
17
+ it "tests a single role" do
18
+ @knife.name_args = ["regular_role"]
19
+ expect(@knife.run).to include("1 tests, 1 assertions, 0 failures, 0 errors, 0 skips")
20
+ end
21
+
22
+ it "tests a role with a library dependency" do
23
+ @knife.name_args = ["library_role"]
24
+ expect(@knife.run).to include("1 tests, 1 assertions, 0 failures, 0 errors, 0 skips")
25
+ end
26
+
27
+ it "tests multiple roles" do
28
+ @knife.name_args = ["regular_role", "library_role"]
29
+ expect(@knife.run).to include("2 tests, 2 assertions, 0 failures, 0 errors, 0 skips")
30
+ end
31
+
32
+ it "tests all roles" do
33
+ @knife.config[:all] = true
34
+ expect(@knife.run).to include("3 tests, 3 assertions, 0 failures, 0 errors, 0 skips")
35
+ end
36
+
37
+ context "broken roles" do
38
+ before do
39
+ Chef::Config[:role_path] = "#{@spec_data}/broken_roles"
40
+ end
41
+
42
+ it "tests a broken role" do
43
+ @knife.name_args = ["regular_role"]
44
+ expect(@knife.run).to include("1 tests, 0 assertions, 0 failures, 1 errors, 0 skips")
45
+ end
46
+
47
+ it "tests a broken role" do
48
+ @knife.name_args = ["library_role"]
49
+ expect(@knife.run).to include("1 tests, 0 assertions, 0 failures, 1 errors, 0 skips")
50
+ end
51
+ end
52
+
53
+ end
@@ -0,0 +1,14 @@
1
+ require 'broken_library'
2
+
3
+ name "library_role"
4
+ description "A library role; grabbing data from a library"
5
+
6
+ run_list %w{
7
+ recipe[some_recipe]
8
+ recipe[another_recipe]
9
+ }
10
+
11
+ default_attributes :some_attribute => {
12
+ :some_sub_attribute => "some_value",
13
+ :some_other_sub_attribute => SomeCompany::SomeLibrary::SomeConstant
14
+ }
@@ -0,0 +1,12 @@
1
+ name "regular_role"
2
+ description "Just a regular role; nothing special
3
+
4
+ run_list %w{
5
+ recipe[some_recipe]
6
+ recipe[another_recipe]
7
+ }
8
+
9
+ default_attributes :some_attribute => {
10
+ :some_sub_attribute => "some_value",
11
+ :some_other_sub_attribute => "some_other_value"
12
+ }
@@ -0,0 +1,7 @@
1
+ module SomeCompany
2
+ module SomeLibrary
3
+ SomeConstant = {
4
+ 'some_key' => 'some_value';
5
+ }
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module SomeCompany
2
+ module SomeLibrary
3
+ SomeConstant = {
4
+ 'some_key' => 'some_value'
5
+ }
6
+ end
7
+ end
@@ -0,0 +1,12 @@
1
+ name "another_role"
2
+ description "Just another regular role; nothing special"
3
+
4
+ run_list %w{
5
+ recipe[some_recipe]
6
+ recipe[another_recipe]
7
+ }
8
+
9
+ default_attributes :some_attribute => {
10
+ :some_sub_attribute => "some_value",
11
+ :some_other_sub_attribute => "some_other_value"
12
+ }
@@ -0,0 +1,14 @@
1
+ require 'some_library'
2
+
3
+ name "library_role"
4
+ description "A library role; grabbing data from a library"
5
+
6
+ run_list %w{
7
+ recipe[some_recipe]
8
+ recipe[another_recipe]
9
+ }
10
+
11
+ default_attributes :some_attribute => {
12
+ :some_sub_attribute => "some_value",
13
+ :some_other_sub_attribute => SomeCompany::SomeLibrary::SomeConstant
14
+ }
@@ -0,0 +1,12 @@
1
+ name "regular_role"
2
+ description "Just a regular role; nothing special"
3
+
4
+ run_list %w{
5
+ recipe[some_recipe]
6
+ recipe[another_recipe]
7
+ }
8
+
9
+ default_attributes :some_attribute => {
10
+ :some_sub_attribute => "some_value",
11
+ :some_other_sub_attribute => "some_other_value"
12
+ }
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: knife-role-test
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Justin Kolberg
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.14.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.14.0
55
+ description: A Chef knife plugin to validate roles
56
+ email:
57
+ - amd.prophet@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".travis.yml"
64
+ - Gemfile
65
+ - LICENSE.txt
66
+ - README.md
67
+ - Rakefile
68
+ - knife-role-test.gemspec
69
+ - lib/chef/knife/role_test.rb
70
+ - lib/knife_role_test.rb
71
+ - lib/knife_role_test/helpers.rb
72
+ - lib/knife_role_test/roles.rb
73
+ - lib/knife_role_test/version.rb
74
+ - spec/chef/knife/role_test_spec.rb
75
+ - spec/data/broken_roles/library_role.rb
76
+ - spec/data/broken_roles/regular_role.rb
77
+ - spec/data/lib/broken_library.rb
78
+ - spec/data/lib/some_library.rb
79
+ - spec/data/roles/another_role.rb
80
+ - spec/data/roles/library_role.rb
81
+ - spec/data/roles/regular_role.rb
82
+ homepage: http://github.com/amdprophet/knife-role-test
83
+ licenses:
84
+ - MIT
85
+ metadata: {}
86
+ post_install_message:
87
+ rdoc_options: []
88
+ require_paths:
89
+ - lib
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ requirements: []
101
+ rubyforge_project:
102
+ rubygems_version: 2.2.1
103
+ signing_key:
104
+ specification_version: 4
105
+ summary: A Chef knife plugin to validate roles
106
+ test_files:
107
+ - spec/chef/knife/role_test_spec.rb
108
+ - spec/data/broken_roles/library_role.rb
109
+ - spec/data/broken_roles/regular_role.rb
110
+ - spec/data/lib/broken_library.rb
111
+ - spec/data/lib/some_library.rb
112
+ - spec/data/roles/another_role.rb
113
+ - spec/data/roles/library_role.rb
114
+ - spec/data/roles/regular_role.rb