chef-umami 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +14 -7
- data/lib/chef-umami/test/integration.rb +3 -3
- data/lib/chef-umami/test/unit.rb +14 -2
- data/lib/chef-umami/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 332bd1c06e4c1ef37879026cb156036d17c0ab9f
|
4
|
+
data.tar.gz: 0af958230fbe4ba6ee6ad8bc548a4cd724b6b23f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9bb516181d9d2fc958e79827fe1cf9fc60c8b122aacaa03404239d6b4bd2e97a1f6cd3a22f9f7cc175297ae815d0428a42bcdd56b2636b3014c8155b43860fa1
|
7
|
+
data.tar.gz: 38ef2f48e5172497dd44c76dbab69fe437dc6dc54db8420e16fed2ca1b497ae1aa14157371d38533d90549f03d7499d81a9482db1e1f8efd93b474fcac798eba
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,15 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [0.0.4]
|
4
|
+
- Fixes a bug where two methods have the same name. Thanks @HarryYC.
|
5
|
+
- Adds `spec_helper.rb` for unit tests, cutting down on boilerplate in each unit test.
|
6
|
+
- Includes test coverage report.
|
7
|
+
|
8
|
+
## [0.0.3]
|
9
|
+
- I have no recollection.
|
10
|
+
|
11
|
+
## [0.0.2]
|
12
|
+
- My dog ate my homework.
|
13
|
+
|
3
14
|
## [0.0.1] - 2017-08-07
|
4
15
|
- Initial release.
|
data/README.md
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
A tool that attempts to write unit and integration tests for Chef cookbooks and
|
4
4
|
policies, making it easier to do the right thing and test code.
|
5
5
|
|
6
|
+
Let's see it in action!
|
7
|
+
|
8
|
+
[![asciicast](https://asciinema.org/a/138816.png)](https://asciinema.org/a/138816)
|
9
|
+
|
6
10
|
## How does it Work?
|
7
11
|
|
8
12
|
`umami` loads up one or more cookbooks in a `chef-zero` instance, executes the
|
@@ -19,8 +23,7 @@ write by matching the current directory to resources derived from that cookbook.
|
|
19
23
|
|
20
24
|
### Integration Tests
|
21
25
|
|
22
|
-
|
23
|
-
tests for all the resources it has found.
|
26
|
+
`umami` writes Inspec-type integration tests for all the resources it has found.
|
24
27
|
|
25
28
|
### Spec Files
|
26
29
|
|
@@ -35,7 +38,7 @@ and I have the following recipes:
|
|
35
38
|
│ └── stocks.rb
|
36
39
|
```
|
37
40
|
|
38
|
-
`umami` will write tests as follows:
|
41
|
+
`umami` will write tests as follows (assuming the recipes are defined in the run list):
|
39
42
|
|
40
43
|
```
|
41
44
|
├── spec/
|
@@ -97,8 +100,8 @@ test file, like so:
|
|
97
100
|
|
98
101
|
It's preferred to use `kitchen verify` to execute all integration tests.
|
99
102
|
Teach `kitchen` to run `umami`'s tests by updating `.kitchen.yml`. Specify
|
100
|
-
the appropriate `verifier` (`inspec`
|
101
|
-
|
103
|
+
the appropriate `verifier` (`inspec`) and, if needed, direct `kitchen` where
|
104
|
+
the tests are located:
|
102
105
|
|
103
106
|
```
|
104
107
|
verifier:
|
@@ -132,12 +135,16 @@ without worrying about what the resulting indentation will be.
|
|
132
135
|
|
133
136
|
`umami` depends on ChefDK to do the bulk of the work resolving cookbooks and
|
134
137
|
their dependencies. Further, `umami` assumes you're using Policyfile to manage
|
135
|
-
|
138
|
+
the run list.
|
136
139
|
|
137
140
|
## Caveats
|
138
141
|
|
139
142
|
`umami` is still in early and rapid development. Expect to see lots of activity.
|
140
143
|
|
144
|
+
`umami` **always overwrites the contents of `spec/umami` on each run.** This may
|
145
|
+
change in the future. Until then, you may want to move the generated tests
|
146
|
+
into a different subdirectory (i.e. `test/`).
|
147
|
+
|
141
148
|
`umami` is not aware of any context. For example, if a recipe includes another
|
142
149
|
recipe based on some condition (i.e. operating system), `umami` won't know about
|
143
150
|
it and therefore won't write a relevant test. `umami` knows about the resources
|
@@ -147,7 +154,7 @@ anything, you want to use.
|
|
147
154
|
|
148
155
|
`umami`'s goal is to help get you started writing and using tests in your
|
149
156
|
development cycle. It tries its best to provide a useful set of tests that you
|
150
|
-
can build on.
|
157
|
+
can build on. **Do NOT depend solely on `umami` to provide test coverage!**
|
151
158
|
|
152
159
|
## Inspiration and Thanks
|
153
160
|
|
@@ -35,12 +35,12 @@ module Umami
|
|
35
35
|
"inspec"
|
36
36
|
end
|
37
37
|
|
38
|
-
def
|
38
|
+
def test_file_path(cookbook = '', recipe = '')
|
39
39
|
"#{test_root}/#{cookbook}_#{recipe}_spec.rb"
|
40
40
|
end
|
41
41
|
|
42
42
|
def preamble(cookbook = '', recipe = '')
|
43
|
-
"# #{
|
43
|
+
"# #{test_file_path(cookbook, recipe)} - Originally written by Umami!"
|
44
44
|
end
|
45
45
|
|
46
46
|
# Call on the apprpriate method from the Umami::Helper::InSpec
|
@@ -73,7 +73,7 @@ module Umami
|
|
73
73
|
resources.each do |resource|
|
74
74
|
content << write_test(resource)
|
75
75
|
end
|
76
|
-
test_file_name =
|
76
|
+
test_file_name = test_file_path(cookbook, recipe)
|
77
77
|
test_file_content = content.join("\n") + "\n"
|
78
78
|
write_file(test_file_name, test_file_content)
|
79
79
|
test_files_written << test_file_name
|
data/lib/chef-umami/test/unit.rb
CHANGED
@@ -39,16 +39,26 @@ module Umami
|
|
39
39
|
"#{test_root}/#{recipe}_spec.rb"
|
40
40
|
end
|
41
41
|
|
42
|
+
def spec_helper_path
|
43
|
+
File.join(test_root, '..', 'spec_helper.rb')
|
44
|
+
end
|
45
|
+
|
42
46
|
def preamble(cookbook = '', recipe = '')
|
43
47
|
"# #{test_file(recipe)} - Originally written by Umami!\n" \
|
44
48
|
"\n" \
|
45
|
-
"
|
46
|
-
"require '#{framework}/policyfile'\n" \
|
49
|
+
"require_relative '../spec_helper'\n" \
|
47
50
|
"\n" \
|
48
51
|
"describe '#{cookbook}::#{recipe}' do\n" \
|
49
52
|
"let(:chef_run) { ChefSpec::ServerRunner.new(platform: '#{os[:platform]}', version: '#{os[:version]}').converge(described_recipe) }"
|
50
53
|
end
|
51
54
|
|
55
|
+
def write_spec_helper
|
56
|
+
content = ["require '#{framework}'"]
|
57
|
+
content << "require '#{framework}/policyfile'"
|
58
|
+
content << "at_exit { ChefSpec::Coverage.report! }\n"
|
59
|
+
write_file(spec_helper_path, content.join("\n"))
|
60
|
+
end
|
61
|
+
|
52
62
|
def write_test(resource = nil)
|
53
63
|
state_attrs = [] # Attribute hash to be used with #with()
|
54
64
|
resource.state.each do |attr, value|
|
@@ -93,6 +103,8 @@ module Umami
|
|
93
103
|
end
|
94
104
|
|
95
105
|
enforce_styling(test_root)
|
106
|
+
write_spec_helper
|
107
|
+
test_files_written << spec_helper_path
|
96
108
|
|
97
109
|
unless test_files_written.empty?
|
98
110
|
puts "Wrote the following unit test files:"
|
data/lib/chef-umami/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-umami
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Frantz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef
|