minitest-chef-handler 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +8 -1
- data/LICENSE +1 -0
- data/README.md +58 -2
- data/Rakefile +15 -0
- data/examples/{cookbooks → chef-handler-cookbook/cookbooks}/chef_handler/README.md +0 -0
- data/examples/{cookbooks → chef-handler-cookbook/cookbooks}/chef_handler/attributes/default.rb +0 -0
- data/examples/{cookbooks → chef-handler-cookbook/cookbooks}/chef_handler/files/default/handlers/README +0 -0
- data/examples/{cookbooks → chef-handler-cookbook/cookbooks}/chef_handler/metadata.json +0 -0
- data/examples/{cookbooks → chef-handler-cookbook/cookbooks}/chef_handler/metadata.rb +0 -0
- data/examples/{cookbooks → chef-handler-cookbook/cookbooks}/chef_handler/providers/default.rb +0 -0
- data/examples/{cookbooks → chef-handler-cookbook/cookbooks}/chef_handler/recipes/default.rb +0 -0
- data/examples/{cookbooks → chef-handler-cookbook/cookbooks}/chef_handler/recipes/json_file.rb +0 -0
- data/examples/{cookbooks → chef-handler-cookbook/cookbooks}/chef_handler/recipes/minitest.rb +0 -0
- data/examples/{cookbooks → chef-handler-cookbook/cookbooks}/chef_handler/resources/default.rb +0 -0
- data/examples/{cookbooks → simple-solo/cookbooks}/foo/recipes/default.rb +0 -0
- data/examples/{cookbooks → simple-solo/cookbooks}/foo/test/test_foo.rb +0 -0
- data/examples/{dna.json → simple-solo/dna.json} +0 -0
- data/examples/simple-solo/solo.rb +6 -0
- data/examples/simple-solo/spec/foo_spec.rb +9 -0
- data/examples/{test → simple-solo/test}/test_foo.rb +0 -0
- data/examples/spec_examples/attributes/default.rb +8 -0
- data/examples/spec_examples/files/default/tests/minitest/example_test.rb +232 -0
- data/examples/spec_examples/metadata.rb +5 -0
- data/examples/spec_examples/recipes/default.rb +68 -0
- data/examples/spec_examples/templates/default/foo.erb +3 -0
- data/lib/minitest-chef-handler.rb +8 -23
- data/lib/minitest-chef-handler/assertions.rb +129 -0
- data/lib/minitest-chef-handler/context.rb +16 -0
- data/lib/minitest-chef-handler/infections.rb +37 -0
- data/lib/minitest-chef-handler/resources.rb +54 -0
- data/lib/minitest-chef-handler/runner.rb +12 -0
- data/lib/minitest-chef-handler/spec.rb +19 -0
- data/lib/minitest-chef-handler/unit.rb +11 -0
- data/minitest-chef-handler.gemspec +3 -1
- data/spec/minitest-chef-handler/assertions_spec.rb +293 -0
- data/spec/minitest-chef-handler/infections_spec.rb +31 -0
- data/spec/minitest-chef-handler/resources_spec.rb +51 -0
- data/spec/spec_helper.rb +16 -0
- metadata +65 -22
- data/examples/solo.rb +0 -4
@@ -1,4 +1,11 @@
|
|
1
|
-
require 'minitest/
|
1
|
+
require 'minitest-chef-handler/context'
|
2
|
+
require 'minitest-chef-handler/resources'
|
3
|
+
require 'minitest-chef-handler/unit'
|
4
|
+
require 'minitest-chef-handler/spec'
|
5
|
+
require 'minitest-chef-handler/runner'
|
6
|
+
|
7
|
+
require 'minitest-chef-handler/assertions'
|
8
|
+
require 'minitest-chef-handler/infections'
|
2
9
|
|
3
10
|
module MiniTest
|
4
11
|
module Chef
|
@@ -42,27 +49,5 @@ module MiniTest
|
|
42
49
|
Gem::Version.new(MiniTest::Unit::VERSION) >= Gem::Version.new('2.1.0')
|
43
50
|
end
|
44
51
|
end
|
45
|
-
|
46
|
-
class Runner < MiniTest::Unit
|
47
|
-
attr_reader :run_status
|
48
|
-
|
49
|
-
def initialize(run_status)
|
50
|
-
@run_status = run_status
|
51
|
-
super()
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
class TestCase < MiniTest::Unit::TestCase
|
56
|
-
attr_reader :run_status, :node, :run_context
|
57
|
-
|
58
|
-
def run(runner)
|
59
|
-
if runner.respond_to?(:run_status)
|
60
|
-
@run_status = runner.run_status
|
61
|
-
@node = @run_status.node
|
62
|
-
@run_context = @run_status.run_context
|
63
|
-
end
|
64
|
-
super(runner)
|
65
|
-
end
|
66
|
-
end
|
67
52
|
end
|
68
53
|
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
module MiniTest
|
2
|
+
module Chef
|
3
|
+
module Assertions
|
4
|
+
|
5
|
+
def self.resource_exists(name, options)
|
6
|
+
options[:description] = name unless options[:description]
|
7
|
+
define_method("assert_#{name}_exists") do |resource|
|
8
|
+
refute resource.send(options[:field]).nil?,
|
9
|
+
"Expected #{options[:description]} '#{resource.name}' to exist"
|
10
|
+
resource
|
11
|
+
end
|
12
|
+
define_method("refute_#{name}_exists") do |resource|
|
13
|
+
assert resource.send(options[:field]).nil?,
|
14
|
+
"Expected #{options[:description]} '#{resource.name}' to not exist"
|
15
|
+
resource
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
resource_exists :cron, :field => :command, :description => 'cron entry'
|
20
|
+
resource_exists :group, :field => :gid
|
21
|
+
resource_exists :ifconfig, :field => :device, :description => 'network interface'
|
22
|
+
resource_exists :link, :field => :to
|
23
|
+
resource_exists :user, :field => :uid
|
24
|
+
|
25
|
+
def assert_enabled(service)
|
26
|
+
assert service.enabled, "Expected service '#{service.name}' to be enabled"
|
27
|
+
service
|
28
|
+
end
|
29
|
+
|
30
|
+
def refute_enabled(service)
|
31
|
+
refute service.enabled, "Expected service '#{service.name}' to not be enabled"
|
32
|
+
service
|
33
|
+
end
|
34
|
+
|
35
|
+
def assert_group_includes(members, group)
|
36
|
+
members = [members] unless members.respond_to?(:&)
|
37
|
+
assert group.members & members == members, "Expected group '#{group.name}' to include members: #{members.join(', ')}"
|
38
|
+
group
|
39
|
+
end
|
40
|
+
|
41
|
+
def refute_group_includes(members, group)
|
42
|
+
members = [members] unless members.respond_to?(:&)
|
43
|
+
refute group.members & members == members, "Expected group '#{group.name}' not to include members: #{members.join(', ')}"
|
44
|
+
group
|
45
|
+
end
|
46
|
+
|
47
|
+
def assert_includes_content(file, content)
|
48
|
+
assert File.read(file.path).include?(content), "Expected file '#{file.path}' to include the specified content"
|
49
|
+
file
|
50
|
+
end
|
51
|
+
|
52
|
+
def refute_includes_content(file, content)
|
53
|
+
refute File.read(file.path).include?(content), "Expected file '#{file.path}' not to include the specified content"
|
54
|
+
file
|
55
|
+
end
|
56
|
+
|
57
|
+
def assert_installed(package)
|
58
|
+
refute package.version.nil?, "Expected package '#{package.name}' to be installed"
|
59
|
+
package
|
60
|
+
end
|
61
|
+
|
62
|
+
def refute_installed(package)
|
63
|
+
assert package.version.nil?, "Expected package '#{package.name}' to not be installed"
|
64
|
+
package
|
65
|
+
end
|
66
|
+
|
67
|
+
def assert_matches_content(file, regexp)
|
68
|
+
assert File.read(file.path).match(regexp), "Expected the contents of file '#{file.path}' to match the regular expression '#{regexp}'"
|
69
|
+
file
|
70
|
+
end
|
71
|
+
|
72
|
+
def refute_matches_content(file, regexp)
|
73
|
+
refute File.read(file.path).match(regexp), "Expected the contents of file '#{file.path}' not to match the regular expression '#{regexp}'"
|
74
|
+
file
|
75
|
+
end
|
76
|
+
|
77
|
+
def assert_modified_after(file_or_dir, time)
|
78
|
+
assert File.mtime(file_or_dir.path).to_i >= time.to_i, "Expected the file '#{file_or_dir.path}' to have been modified after '#{time}'"
|
79
|
+
file_or_dir
|
80
|
+
end
|
81
|
+
|
82
|
+
def refute_modified_after(file_or_dir, time)
|
83
|
+
refute File.mtime(file_or_dir.path) >= time, "Expected the file '#{file_or_dir.path}' not to have been modified after '#{time}'"
|
84
|
+
file_or_dir
|
85
|
+
end
|
86
|
+
|
87
|
+
def assert_mounted(mount)
|
88
|
+
assert mount.mounted, "Expected mount point '#{mount.name}' to be mounted"
|
89
|
+
mount
|
90
|
+
end
|
91
|
+
|
92
|
+
def refute_mounted(mount)
|
93
|
+
refute mount.mounted, "Expected mount point '#{mount.name}' to not be mounted"
|
94
|
+
mount
|
95
|
+
end
|
96
|
+
|
97
|
+
def assert_mount_enabled(mount)
|
98
|
+
assert mount.enabled, "Expected mount point '#{mount.name}' to be enabled"
|
99
|
+
mount
|
100
|
+
end
|
101
|
+
|
102
|
+
def refute_mount_enabled(mount)
|
103
|
+
refute mount.enabled, "Expected mount point '#{mount.name}' to not be enabled"
|
104
|
+
mount
|
105
|
+
end
|
106
|
+
|
107
|
+
def assert_path_exists(file_or_dir)
|
108
|
+
assert File.exists?(file_or_dir.path), "Expected path '#{file_or_dir.path}' to exist"
|
109
|
+
file_or_dir
|
110
|
+
end
|
111
|
+
|
112
|
+
def refute_path_exists(file_or_dir)
|
113
|
+
refute File.exists?(file_or_dir.path), "Expected path '#{file_or_dir.path}' not to exist"
|
114
|
+
file_or_dir
|
115
|
+
end
|
116
|
+
|
117
|
+
def assert_running(service)
|
118
|
+
assert service.running, "Expected service '#{service.name}' to be running"
|
119
|
+
service
|
120
|
+
end
|
121
|
+
|
122
|
+
def refute_running(service)
|
123
|
+
refute service.running, "Expected service '#{service.name}' not to be running"
|
124
|
+
service
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module MiniTest
|
2
|
+
module Chef
|
3
|
+
module Context
|
4
|
+
attr_reader :run_status, :node, :run_context
|
5
|
+
|
6
|
+
def run(runner)
|
7
|
+
if runner.respond_to?(:run_status)
|
8
|
+
@run_status = runner.run_status
|
9
|
+
@node = @run_status.node
|
10
|
+
@run_context = @run_status.run_context
|
11
|
+
end
|
12
|
+
super(runner)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'chef'
|
2
|
+
|
3
|
+
module MiniTest
|
4
|
+
module Chef
|
5
|
+
module Infections extend ::Chef::Mixin::ConvertToClassName
|
6
|
+
|
7
|
+
def self.infect_resource(resource, meth, new_name)
|
8
|
+
clazz = ::Chef::Resource.const_get(convert_to_class_name(resource.to_s))
|
9
|
+
clazz.infect_an_assertion "assert_#{meth}".to_sym,
|
10
|
+
"must_#{new_name}".to_sym, :only_one_argument
|
11
|
+
clazz.infect_an_assertion "refute_#{meth}".to_sym,
|
12
|
+
"wont_#{new_name}".to_sym, :only_one_argument
|
13
|
+
end
|
14
|
+
|
15
|
+
infect_resource :cron, :cron_exists, :exist
|
16
|
+
infect_resource :directory, :modified_after, :be_modified_after
|
17
|
+
infect_resource :directory, :path_exists, :exist
|
18
|
+
infect_resource :file, :includes_content, :include
|
19
|
+
infect_resource :file, :matches_content, :match
|
20
|
+
infect_resource :file, :modified_after, :be_modified_after
|
21
|
+
infect_resource :file, :path_exists, :exist
|
22
|
+
infect_resource :group, :group_exists, :exist
|
23
|
+
infect_resource :ifconfig, :ifconfig_exists, :exist
|
24
|
+
infect_resource :link, :link_exists, :exist
|
25
|
+
infect_resource :mount, :mounted, :be_mounted
|
26
|
+
infect_resource :mount, :mount_enabled, :be_enabled
|
27
|
+
infect_resource :service, :enabled, :be_enabled
|
28
|
+
infect_resource :service, :running, :be_running
|
29
|
+
infect_resource :package, :installed, :be_installed
|
30
|
+
infect_resource :user, :user_exists, :exist
|
31
|
+
|
32
|
+
::Chef::Resource::Group.infect_an_assertion :assert_group_includes, :must_include
|
33
|
+
::Chef::Resource::Group.infect_an_assertion :refute_group_includes, :wont_include
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'chef'
|
2
|
+
require 'etc'
|
3
|
+
require 'minitest/unit'
|
4
|
+
|
5
|
+
module MiniTest
|
6
|
+
module Chef
|
7
|
+
module Resources
|
8
|
+
include ::Chef::Mixin::ConvertToClassName
|
9
|
+
|
10
|
+
def self.register_resource(resource, *required_args)
|
11
|
+
define_method(resource) do |name, *options|
|
12
|
+
clazz = ::Chef::Resource.const_get(convert_to_class_name(resource.to_s))
|
13
|
+
res = clazz.new(name, run_context)
|
14
|
+
required_args.each do |arg|
|
15
|
+
res.send(arg, options.first[arg])
|
16
|
+
end
|
17
|
+
provider = ::Chef::Platform.provider_for_resource(res)
|
18
|
+
provider.load_current_resource
|
19
|
+
provider.current_resource
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
[:cron, :directory, :file, :group,
|
24
|
+
:link, :package, :service, :user].each{ |r| register_resource(r) }
|
25
|
+
|
26
|
+
register_resource(:ifconfig, :device)
|
27
|
+
register_resource(:mount, :device)
|
28
|
+
|
29
|
+
::Chef::Resource.class_eval do
|
30
|
+
include MiniTest::Assertions
|
31
|
+
def with(attribute, values)
|
32
|
+
actual_values = resource_value(attribute, values)
|
33
|
+
assert_equal values, actual_values,
|
34
|
+
"The #{resource_name} does not have the expected #{attribute}"
|
35
|
+
self
|
36
|
+
end
|
37
|
+
alias :and :with
|
38
|
+
alias :must_have :with
|
39
|
+
private
|
40
|
+
|
41
|
+
def resource_value(attribute, values)
|
42
|
+
case attribute
|
43
|
+
when :mode then mode.kind_of?(Integer) ? mode.to_s(8) : mode.to_s
|
44
|
+
when :owner || :user then Etc.getpwuid(owner).name
|
45
|
+
when :group then Etc.getgrgid(group).name
|
46
|
+
else send(attribute)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module MiniTest
|
2
|
+
module Chef
|
3
|
+
require 'minitest/spec'
|
4
|
+
|
5
|
+
class Spec < MiniTest::Spec
|
6
|
+
include Assertions
|
7
|
+
include Context
|
8
|
+
include Resources
|
9
|
+
end
|
10
|
+
|
11
|
+
MiniTest::Spec.register_spec_type(/\Arecipe::/, MiniTest::Chef::Spec)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module Kernel
|
16
|
+
def describe_recipe(desc, additional_desc = nil, &block)
|
17
|
+
describe('recipe::' + desc, additional_desc, &block)
|
18
|
+
end
|
19
|
+
end
|
@@ -11,7 +11,9 @@ Gem::Specification.new do |gem|
|
|
11
11
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
12
12
|
gem.name = "minitest-chef-handler"
|
13
13
|
gem.require_paths = ["lib"]
|
14
|
-
gem.version = '0.
|
14
|
+
gem.version = '0.4.0'
|
15
15
|
|
16
|
+
gem.add_dependency('chef')
|
16
17
|
gem.add_development_dependency('rake')
|
18
|
+
gem.add_development_dependency('rspec')
|
17
19
|
end
|
@@ -0,0 +1,293 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe MiniTest::Chef::Assertions do
|
4
|
+
|
5
|
+
include MiniTest::Chef::Assertions
|
6
|
+
|
7
|
+
def resource_for(hash)
|
8
|
+
Class.new do
|
9
|
+
hash.each_pair do |key,value|
|
10
|
+
define_method(key) { value }
|
11
|
+
end
|
12
|
+
end.new
|
13
|
+
end
|
14
|
+
|
15
|
+
module MiniTest::Chef::Assertions
|
16
|
+
class File
|
17
|
+
def self.read(path)
|
18
|
+
'# Generated by Chef'
|
19
|
+
end
|
20
|
+
def self.mtime(path)
|
21
|
+
Time.now.utc
|
22
|
+
end
|
23
|
+
def self.exists?(path)
|
24
|
+
path == '/etc/foo'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "verifies that cron entries exist" do
|
30
|
+
cron = resource_for({:name => 'foo', :command => 'ls'})
|
31
|
+
assert_cron_exists(cron).must_equal cron
|
32
|
+
assert_triggered "Expected cron entry 'foo' to exist" do
|
33
|
+
assert_cron_exists(resource_for({:name => 'foo', :command => nil}))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it "verifies that cron entries do not exist" do
|
38
|
+
cron = resource_for({:name => 'foo', :command => nil})
|
39
|
+
refute_cron_exists(cron).must_equal cron
|
40
|
+
assert_triggered "Expected cron entry 'foo' to not exist" do
|
41
|
+
refute_cron_exists(resource_for({:name => 'foo', :command => 'ls'}))
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it "verifies that groups exist" do
|
46
|
+
group = resource_for({:name => 'foo', :gid => 100})
|
47
|
+
assert_group_exists(group).must_equal group
|
48
|
+
assert_triggered "Expected group 'foo' to exist" do
|
49
|
+
assert_group_exists(resource_for({:name => 'foo', :gid => nil}))
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
it "verifies that groups do not exist" do
|
54
|
+
group = resource_for({:name => 'foo', :gid => nil})
|
55
|
+
refute_group_exists(group).must_equal group
|
56
|
+
assert_triggered "Expected group 'foo' to not exist" do
|
57
|
+
refute_group_exists(resource_for({:name => 'foo', :gid => 100}))
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
it "verifies that network interfaces exist" do
|
62
|
+
ifconfig = resource_for({:name => 'foo', :device => '/dev/eth0'})
|
63
|
+
assert_ifconfig_exists(ifconfig).must_equal ifconfig
|
64
|
+
assert_triggered "Expected network interface 'foo' to exist" do
|
65
|
+
assert_ifconfig_exists(resource_for({:name => 'foo', :device => nil}))
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
it "verifies that network interfaces do not exist" do
|
70
|
+
ifconfig = resource_for({:name => 'foo', :device => nil})
|
71
|
+
refute_ifconfig_exists(ifconfig).must_equal ifconfig
|
72
|
+
assert_triggered "Expected network interface 'foo' to not exist" do
|
73
|
+
refute_ifconfig_exists(resource_for({:name => 'foo', :device => '/dev/eth0'}))
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
it "verifies that filesystem links exist" do
|
78
|
+
link = resource_for({:name => 'foo', :to => 'bar'})
|
79
|
+
assert_link_exists(link).must_equal link
|
80
|
+
assert_triggered "Expected link 'foo' to exist" do
|
81
|
+
assert_link_exists(resource_for({:name => 'foo', :to => nil}))
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
it "verifies that filesystem links do not exist" do
|
86
|
+
link = resource_for({:name => 'foo', :to => nil})
|
87
|
+
refute_link_exists(link).must_equal link
|
88
|
+
assert_triggered "Expected link 'foo' to not exist" do
|
89
|
+
refute_link_exists(resource_for({:name => 'foo', :to => 'bar'}))
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
it "verifies that users exist" do
|
94
|
+
user = resource_for({:name => 'foo', :uid => 200})
|
95
|
+
assert_user_exists(user).must_equal user
|
96
|
+
assert_triggered "Expected user 'foo' to exist" do
|
97
|
+
assert_user_exists(resource_for({:name => 'foo', :uid => nil}))
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
it "verifies that users do not exist" do
|
102
|
+
user = resource_for({:name => 'foo', :uid => nil})
|
103
|
+
refute_user_exists(user).must_equal user
|
104
|
+
assert_triggered "Expected user 'foo' to not exist" do
|
105
|
+
refute_user_exists(resource_for({:name => 'foo', :uid => 200}))
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
it "verifies that services are enabled" do
|
110
|
+
service = resource_for({:name => 'bar', :enabled => true})
|
111
|
+
assert_enabled(service).must_equal service
|
112
|
+
assert_triggered "Expected service 'bar' to be enabled" do
|
113
|
+
assert_enabled(resource_for({:name => 'bar', :enabled => false}))
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
it "verifies that services are not enabled" do
|
118
|
+
service = resource_for({:name => 'bar', :enabled => false})
|
119
|
+
refute_enabled(service).must_equal service
|
120
|
+
assert_triggered "Expected service 'bar' to not be enabled" do
|
121
|
+
refute_enabled(resource_for({:name => 'bar', :enabled => true}))
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
it "verifies that a group contains the expected members" do
|
126
|
+
group = resource_for({:name => 'foo', :members => ['bar', 'baz']})
|
127
|
+
assert_group_includes('bar', group).must_equal group
|
128
|
+
assert_group_includes(['bar'], group).must_equal group
|
129
|
+
assert_group_includes(['bar', 'baz'], group).must_equal group
|
130
|
+
assert_triggered "Expected group 'foo' to include members: bar" do
|
131
|
+
assert_group_includes('bar',
|
132
|
+
resource_for({:name => 'foo', :members => ['baz']}))
|
133
|
+
end
|
134
|
+
assert_triggered "Expected group 'foo' to include members: bar, bert" do
|
135
|
+
assert_group_includes(['bar', 'bert'],
|
136
|
+
resource_for({:name => 'foo', :members => ['baz']}))
|
137
|
+
end
|
138
|
+
assert_triggered "Expected group 'foo' to include members: bar, bert" do
|
139
|
+
assert_group_includes(['bar', 'bert'],
|
140
|
+
resource_for({:name => 'foo', :members => ['bar', 'baz']}))
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
it "verifies that a group does not contain the expected members" do
|
145
|
+
group = resource_for({:name => 'foo', :members => ['bar', 'baz']})
|
146
|
+
refute_group_includes('fum', group).must_equal group
|
147
|
+
refute_group_includes(['fum'], group).must_equal group
|
148
|
+
refute_group_includes(['fum', 'baz'], group).must_equal group
|
149
|
+
assert_triggered "Expected group 'foo' not to include members: bar" do
|
150
|
+
refute_group_includes('bar',
|
151
|
+
resource_for({:name => 'foo', :members => ['bar']}))
|
152
|
+
end
|
153
|
+
assert_triggered "Expected group 'foo' not to include members: bar" do
|
154
|
+
refute_group_includes(['bar'],
|
155
|
+
resource_for({:name => 'foo', :members => ['bar', 'bert']}))
|
156
|
+
end
|
157
|
+
assert_triggered "Expected group 'foo' not to include members: bar, bert" do
|
158
|
+
refute_group_includes(['bar', 'bert'],
|
159
|
+
resource_for({:name => 'foo', :members => ['bar', 'bert']}))
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
it "verifies that a file includes the specified content" do
|
164
|
+
file = resource_for({:path => '/etc/bar'})
|
165
|
+
assert_includes_content(file, 'Chef').must_equal file
|
166
|
+
assert_triggered "Expected file '/etc/bar' to include the specified content" do
|
167
|
+
assert_includes_content(resource_for({:path => '/etc/bar'}), 'chef')
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
it "verifies that a file does not include the specified content" do
|
172
|
+
file = resource_for({:path => '/etc/bar'})
|
173
|
+
refute_includes_content(file, 'chef').must_equal file
|
174
|
+
assert_triggered "Expected file '/etc/bar' not to include the specified content" do
|
175
|
+
refute_includes_content(resource_for({:path => '/etc/bar'}), 'Chef')
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
it "verifies that a package is installed" do
|
180
|
+
package = resource_for({:name => 'bash', :version => '4.2-0ubuntu4'})
|
181
|
+
assert_installed(package).must_equal package
|
182
|
+
assert_triggered "Expected package 'bash' to be installed" do
|
183
|
+
assert_installed(resource_for({:name => 'bash', :version => nil}))
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
it "verifies that a package is not installed" do
|
188
|
+
package = resource_for({:name => 'bash', :version => nil})
|
189
|
+
refute_installed(package).must_equal package
|
190
|
+
assert_triggered "Expected package 'bash' to not be installed" do
|
191
|
+
refute_installed(resource_for({:name => 'bash', :version => '4.2-0ubuntu4'}))
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
it "verifies that a file matches the specified content" do
|
196
|
+
file = resource_for({:path => '/etc/bar'})
|
197
|
+
assert_matches_content(file, /Chef$/).must_equal file
|
198
|
+
assert_triggered "Expected the contents of file '/etc/bar' to match the regular expression '^Chef'" do
|
199
|
+
assert_matches_content(resource_for({:path => '/etc/bar'}), '^Chef')
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
it "verifies that a file does not match the specified content" do
|
204
|
+
file = resource_for({:path => '/etc/bar'})
|
205
|
+
refute_matches_content(file, /^Chef/).must_equal file
|
206
|
+
assert_triggered "Expected the contents of file '/etc/bar' not to match the regular expression 'Chef$'" do
|
207
|
+
refute_matches_content(resource_for({:path => '/etc/bar'}), 'Chef$')
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
it "verifies that a file was modified after the specified time" do
|
212
|
+
file = resource_for({:path => '/etc/bar'})
|
213
|
+
the_distant_future = Time.utc(Time.now.utc.year + 30)
|
214
|
+
assert_modified_after(file, Time.at(0).utc).must_equal file
|
215
|
+
assert_triggered "Expected the file '/etc/bar' to have been modified after '#{the_distant_future}'" do
|
216
|
+
assert_modified_after(resource_for({:path => '/etc/bar'}), the_distant_future)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
it "verifies that a file was not modified after the specified time" do
|
221
|
+
file = resource_for({:path => '/etc/bar'})
|
222
|
+
the_distant_future = Time.utc(Time.now.utc.year + 30)
|
223
|
+
refute_modified_after(file, the_distant_future).must_equal file
|
224
|
+
assert_triggered "Expected the file '/etc/bar' not to have been modified after '#{Time.at(0).utc}'" do
|
225
|
+
refute_modified_after(resource_for({:path => '/etc/bar'}), Time.at(0).utc)
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
it "verifies that a mount point is mounted" do
|
230
|
+
mount = resource_for({:name => '/mnt/foo', :mounted => true})
|
231
|
+
assert_mounted(mount).must_equal mount
|
232
|
+
assert_triggered "Expected mount point '/mnt/foo' to be mounted" do
|
233
|
+
assert_mounted(resource_for({:name => '/mnt/foo', :mounted => false}))
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
it "verifies that a mount point is not mounted" do
|
238
|
+
mount = resource_for({:name => '/mnt/foo', :mounted => false})
|
239
|
+
refute_mounted(mount).must_equal mount
|
240
|
+
assert_triggered "Expected mount point '/mnt/foo' to not be mounted" do
|
241
|
+
refute_mounted(resource_for({:name => '/mnt/foo', :mounted => true}))
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
it "verifies that a mount point is enabled" do
|
246
|
+
mount = resource_for({:name => '/mnt/foo', :enabled => true})
|
247
|
+
assert_mount_enabled(mount).must_equal mount
|
248
|
+
assert_triggered "Expected mount point '/mnt/foo' to be enabled" do
|
249
|
+
assert_mount_enabled(resource_for({:name => '/mnt/foo', :enabled => false}))
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
it "verifies that a mount point is not enabled" do
|
254
|
+
mount = resource_for({:name => '/mnt/foo', :enabled => false})
|
255
|
+
refute_mount_enabled(mount).must_equal mount
|
256
|
+
assert_triggered "Expected mount point '/mnt/foo' to not be enabled" do
|
257
|
+
refute_mount_enabled(resource_for({:name => '/mnt/foo', :enabled => true}))
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
it "verifies that a file path exists" do
|
262
|
+
file = resource_for({:path => '/etc/foo'})
|
263
|
+
assert_path_exists(file).must_equal file
|
264
|
+
assert_triggered "Expected path '/etc/bar' to exist" do
|
265
|
+
assert_path_exists(resource_for({:path => '/etc/bar'}))
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
it "verifies that a file path does not exist" do
|
270
|
+
file = resource_for({:path => '/etc/bar'})
|
271
|
+
refute_path_exists(file).must_equal file
|
272
|
+
assert_triggered "Expected path '/etc/foo' not to exist" do
|
273
|
+
refute_path_exists(resource_for({:path => '/etc/foo'}))
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
it "verifies that a service is running" do
|
278
|
+
service = resource_for({:name => 'httpd', :running => true})
|
279
|
+
assert_running(service).must_equal service
|
280
|
+
assert_triggered "Expected service 'httpd' to be running" do
|
281
|
+
assert_running(resource_for({:name => 'httpd', :running => false}))
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
it "verifies that a service is not running" do
|
286
|
+
service = resource_for({:name => 'httpd', :running => false})
|
287
|
+
refute_running(service).must_equal service
|
288
|
+
assert_triggered "Expected service 'httpd' not to be running" do
|
289
|
+
refute_running(resource_for({:name => 'httpd', :running => true}))
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
end
|