rspec-puppet-facts 1.7.1 → 1.8.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +3 -0
- data/README.md +178 -152
- data/lib/rspec-puppet-facts.rb +20 -2
- data/lib/rspec-puppet-facts/version.rb +1 -1
- data/spec/rspec_puppet_facts_spec.rb +168 -0
- 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: 785242ffa008d8289d585447477c09447bda5d8b
|
4
|
+
data.tar.gz: 0f112311ebf40c1b3272e6276d1341eb1aa51eec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 017a8282b68844be3988ec6b514bff9311c0fe953474ba8db434a5f83481f6adcf981c1a15b2a87f9bb2855655de9f0eaed03f5cac839dd10808c990682bd644
|
7
|
+
data.tar.gz: e4f609545cfefa58d7b8779c1741f4db8ce8294a08bff965fc0a767895fa715d57f09b61ccb664bd5b78e2697aadc126772350b79a70202e3ac6ed1ab42a72eb
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -7,14 +7,79 @@ rspec-puppet-facts
|
|
7
7
|
[](https://rubygems.org/gems/rspec-puppet-facts)
|
8
8
|
[](https://coveralls.io/r/mcanevet/rspec-puppet-facts?branch=master)
|
9
9
|
|
10
|
-
Based on an original idea from [apenney](https://github.com/apenney/puppet_facts/).
|
10
|
+
Based on an original idea from [apenney](https://github.com/apenney/puppet_facts/), this gem provides a method of running your [rspec-puppet](https://github.com/rodjek/rspec-puppet) tests against the facts for all your supported operating systems (provided by [facterdb](https://github.com/camptocamp/facterdb). This simplifies unit testing because you don't need to specify the facts yourself.
|
11
11
|
|
12
|
-
|
12
|
+
## Installation
|
13
13
|
|
14
|
-
|
15
|
-
-------------------------
|
14
|
+
If you're using Bundler to manage gems in your module repository, install `rspec-puppet-facts` by adding it to the Gemfile.
|
16
15
|
|
17
|
-
|
16
|
+
1. Add the following line to your `Gemfile`:
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
gem 'rspec-puppet-facts', '~> 1.7', :require => false
|
20
|
+
```
|
21
|
+
|
22
|
+
2. Run `bundle install`.
|
23
|
+
|
24
|
+
If you're not using Bundler, install the `rspec-puppet-facts` manually.
|
25
|
+
|
26
|
+
1. On the command line, run:
|
27
|
+
|
28
|
+
```bash
|
29
|
+
$ gem install rspec-puppet-facts
|
30
|
+
```
|
31
|
+
|
32
|
+
After the gem is installed (using either method), make the gem available to rspec by adding the following lines in your `spec/spec_helper.rb` file. Place the lines after `require 'rspec-puppet'` and before the `RSpec.configure` block, if one exists.
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
require 'rspec-puppet-facts'
|
36
|
+
include RspecPuppetFacts
|
37
|
+
```
|
38
|
+
|
39
|
+
## Specifying the supported operating systems
|
40
|
+
|
41
|
+
To determine which facts to run your tests against, `rspec-puppet-facts` checks your module's `metadata.json` to find out what operating systems your module supports. The `metadata.json` file is located in the root of your module. To learn more about this file, see Puppet's [metatdata](https://docs.puppet.com/puppet/latest/modules_metadata.html) documentation.
|
42
|
+
|
43
|
+
By default, `rspec-puppet-facts` provides the facts only for `x86_64` architecture. However, you can override this default and the supported operating system list by passing a hash to `on_supported_os` in your tests. This hash must contain either or both of the following keys:
|
44
|
+
|
45
|
+
* `:hardwaremodels` - An array of hardware architecture names, as strings.
|
46
|
+
* `:supported_os` - An array of hashes representing the operating systems.
|
47
|
+
**Note: the keys of these hashes must be strings**
|
48
|
+
* `'operatingsystem'` - The name of the operating system, as a string.
|
49
|
+
* `'operatingsystemrelease'` - An array of version numbers, as strings.
|
50
|
+
|
51
|
+
This is particularly useful if your module is split into operating system subclasses. For example, if you had a class called `myclass::debian` that you wanted to test against Debian 6 and Debian 7 on both `x86_64` _and_ `i386` architectures, you could write the following test:
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
require 'spec_helper'
|
55
|
+
|
56
|
+
describe 'myclass::debian' do
|
57
|
+
test_on = {
|
58
|
+
:hardwaremodels => ['x86_64', 'i386'],
|
59
|
+
:supported_os => [
|
60
|
+
{
|
61
|
+
'operatingsystem' => 'Debian',
|
62
|
+
'operatingsystemrelease' => ['6', '7'],
|
63
|
+
},
|
64
|
+
],
|
65
|
+
}
|
66
|
+
|
67
|
+
on_supported_os(test_on).each do |os, facts|
|
68
|
+
it { is_expected.to compile.with_all_deps }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
```
|
72
|
+
|
73
|
+
## Usage
|
74
|
+
|
75
|
+
Use the `on_supported_os` iterator to loop through all of your module's supported operating systems. This allows you to simplify your tests and remove a lot of duplicate code.
|
76
|
+
|
77
|
+
Each iteration of `on_supported_os` provides two variables to your tests. (In the code examples below, these variables are specified by the values between the pipe (`|`) characters.)
|
78
|
+
|
79
|
+
* The first value is the name of the fact set. This is made from the values of the operatingsystem, operatingsystemmajrelease, and architecture facts separated by dashes (for example, 'debian-7-x86_64').
|
80
|
+
* The second value is the facts for that combination of operating system, release, and architecture.
|
81
|
+
|
82
|
+
For example, previously, you might have written a test that specified Debian 7 and Red Hat 6 as the supported modules:
|
18
83
|
|
19
84
|
```ruby
|
20
85
|
require 'spec_helper'
|
@@ -29,10 +94,10 @@ describe 'myclass' do
|
|
29
94
|
:operatingsystemmajrelease => '7',
|
30
95
|
...
|
31
96
|
}
|
32
|
-
|
33
|
-
it { is_expected.to compile.with_all_deps }
|
34
|
-
...
|
35
97
|
end
|
98
|
+
|
99
|
+
it { is_expected.to compile.with_all_deps }
|
100
|
+
...
|
36
101
|
end
|
37
102
|
|
38
103
|
context "on redhat-6-x86_64" do
|
@@ -43,17 +108,17 @@ describe 'myclass' do
|
|
43
108
|
:operatingsystemmajrelease => '6',
|
44
109
|
...
|
45
110
|
}
|
46
|
-
|
47
|
-
it { is_expected.to compile.with_all_deps }
|
48
|
-
...
|
49
111
|
end
|
112
|
+
|
113
|
+
it { is_expected.to compile.with_all_deps }
|
114
|
+
...
|
50
115
|
end
|
51
116
|
|
52
117
|
...
|
53
118
|
end
|
54
119
|
```
|
55
120
|
|
56
|
-
|
121
|
+
With `on_supported_os` iteration, you can rewrite this test to loop over each of the supported operating systems without explicitly specifying them:
|
57
122
|
|
58
123
|
```ruby
|
59
124
|
require 'spec_helper'
|
@@ -68,6 +133,8 @@ describe 'myclass' do
|
|
68
133
|
|
69
134
|
it { is_expected.to compile.with_all_deps }
|
70
135
|
...
|
136
|
+
|
137
|
+
# If you need any to specify any operating system specific tests
|
71
138
|
case facts[:osfamily]
|
72
139
|
when 'Debian'
|
73
140
|
...
|
@@ -79,55 +146,63 @@ describe 'myclass' do
|
|
79
146
|
end
|
80
147
|
```
|
81
148
|
|
82
|
-
Testing a type or provider
|
83
|
-
--------------------------
|
149
|
+
### Testing a type or provider
|
84
150
|
|
85
|
-
|
151
|
+
Use `on_supported_os` in the same way for your type and provider unit tests.
|
152
|
+
|
153
|
+
**Specifying each operating system**:
|
86
154
|
|
87
155
|
```ruby
|
88
156
|
require 'spec_helper'
|
89
157
|
|
90
|
-
describe
|
158
|
+
describe 'mytype' do
|
91
159
|
|
92
160
|
context "on debian-7-x86_64" do
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
161
|
+
let(:facts) do
|
162
|
+
{
|
163
|
+
:osfamily => 'Debian',
|
164
|
+
:operatingsystem => 'Debian',
|
165
|
+
:operatingsystemmajrelease => '7',
|
166
|
+
}
|
98
167
|
end
|
168
|
+
|
169
|
+
it { should be_valid_type }
|
99
170
|
...
|
100
171
|
end
|
101
172
|
|
102
173
|
context "on redhat-7-x86_64" do
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
174
|
+
let(:facts) do
|
175
|
+
{
|
176
|
+
:osfamily => 'RedHat',
|
177
|
+
:operatingsystem => 'RedHat',
|
178
|
+
:operatingsystemmajrelease => '7',
|
179
|
+
}
|
108
180
|
end
|
181
|
+
|
182
|
+
it { should be_valid_type }
|
109
183
|
...
|
110
184
|
end
|
111
185
|
end
|
112
186
|
|
113
187
|
```
|
114
188
|
|
115
|
-
|
189
|
+
**Looping with `on_supported_os` iterator**:
|
116
190
|
|
117
191
|
```ruby
|
118
192
|
require 'spec_helper'
|
119
193
|
|
120
|
-
describe
|
194
|
+
describe 'mytype' do
|
121
195
|
|
122
196
|
on_supported_os.each do |os, facts|
|
123
197
|
context "on #{os}" do
|
124
|
-
|
125
|
-
|
126
|
-
facts.each do |k, v|
|
127
|
-
Facter.stubs(:fact).with(k).returns Facter.add(k) { setcode { v } }
|
128
|
-
end
|
198
|
+
let(:facts) do
|
199
|
+
facts
|
129
200
|
end
|
201
|
+
|
202
|
+
it { should be_valid_type }
|
130
203
|
...
|
204
|
+
|
205
|
+
# If you need to specify any operating system specific tests
|
131
206
|
case facts[:osfamily]
|
132
207
|
when 'Debian'
|
133
208
|
...
|
@@ -141,115 +216,87 @@ end
|
|
141
216
|
|
142
217
|
```
|
143
218
|
|
144
|
-
Testing a function
|
145
|
-
------------------
|
219
|
+
### Testing a function
|
146
220
|
|
147
|
-
|
221
|
+
As with testing manifests, types, or providers, `on_supported_os` iteration simplifies your function unit tests.
|
222
|
+
|
223
|
+
**Specifying each operating system**:
|
148
224
|
|
149
225
|
```ruby
|
150
226
|
require 'spec_helper'
|
151
227
|
|
152
|
-
describe
|
153
|
-
let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
|
154
|
-
|
228
|
+
describe 'myfunction' do
|
155
229
|
context "on debian-7-x86_64" do
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
230
|
+
let(:facts) do
|
231
|
+
{
|
232
|
+
:osfamily => 'Debian',
|
233
|
+
:operatingsystem => 'Debian',
|
234
|
+
...
|
235
|
+
}
|
162
236
|
end
|
163
|
-
...
|
164
|
-
end
|
165
237
|
|
166
|
-
|
167
|
-
before :each do
|
168
|
-
scope.stubs(:lookupvar).with('::osfamily').returns('RedHat')
|
169
|
-
scope.stubs(:lookupvar).with('osfamily').returns('RedHat')
|
170
|
-
scope.stubs(:lookupvar).with('::operatingsystem').returns('RedHat')
|
171
|
-
scope.stubs(:lookupvar).with('operatingsystem').returns('RedHat')
|
172
|
-
...
|
173
|
-
end
|
238
|
+
it { should run.with_params('something').and_return('a value') }
|
174
239
|
...
|
175
240
|
end
|
176
|
-
end
|
177
|
-
```
|
178
|
-
|
179
|
-
### After
|
180
|
-
|
181
|
-
```ruby
|
182
|
-
require 'spec_helper'
|
183
241
|
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
scope.stubs(:lookupvar).with("::#{k}").returns(v)
|
192
|
-
scope.stubs(:lookupvar).with(k).returns(v)
|
193
|
-
end
|
194
|
-
end
|
242
|
+
context "on redhat-7-x86_64" do
|
243
|
+
let(:facts) do
|
244
|
+
{
|
245
|
+
:osfamily => 'RedHat',
|
246
|
+
:operatingsystem => 'RedHat',
|
247
|
+
...
|
248
|
+
}
|
195
249
|
end
|
196
250
|
|
251
|
+
it { should run.with_params('something').and_return('a value') }
|
197
252
|
...
|
198
|
-
|
199
253
|
end
|
200
254
|
end
|
201
255
|
```
|
202
256
|
|
203
|
-
|
257
|
+
**Looping with `on_supported_os` iterator**:
|
204
258
|
|
205
259
|
```ruby
|
206
260
|
require 'spec_helper'
|
207
261
|
|
208
|
-
describe '
|
262
|
+
describe 'myfunction' do
|
209
263
|
|
210
|
-
on_supported_os
|
211
|
-
:hardwaremodels => ['i386', 'x86_64'],
|
212
|
-
:supported_os => [
|
213
|
-
{
|
214
|
-
"operatingsystem" => "Debian",
|
215
|
-
"operatingsystemrelease" => [
|
216
|
-
"6",
|
217
|
-
"7"
|
218
|
-
]
|
219
|
-
},
|
220
|
-
{
|
221
|
-
"operatingsystem" => "RedHat",
|
222
|
-
"operatingsystemrelease" => [
|
223
|
-
"5",
|
224
|
-
"6"
|
225
|
-
]
|
226
|
-
}
|
227
|
-
],
|
228
|
-
}).each do |os, facts|
|
264
|
+
on_supported_os.each do |os, facts|
|
229
265
|
context "on #{os}" do
|
230
266
|
let(:facts) do
|
231
267
|
facts
|
232
268
|
end
|
233
269
|
|
234
|
-
it {
|
270
|
+
it { should run.with_params('something').and_return('a value') }
|
235
271
|
...
|
236
272
|
end
|
237
273
|
end
|
238
274
|
end
|
239
275
|
```
|
240
276
|
|
241
|
-
|
242
|
-
|
277
|
+
### Adding custom fact values
|
278
|
+
|
279
|
+
By adding custom fact values, you can:
|
280
|
+
|
281
|
+
* Override fact values
|
282
|
+
* Include additional facts in your tests.
|
283
|
+
* Add global custom facts for all of your unit tests
|
284
|
+
* Add custom facts to only certain operating systems
|
285
|
+
* Add custom facts to all operating systems _except_ specific operating systems
|
286
|
+
* Create dynamic values for custom facts by setting a lambda as the value.
|
243
287
|
|
244
|
-
|
288
|
+
#### Override and add facts
|
289
|
+
|
290
|
+
To override fact values and include additional facts in your tests, merge values with the facts hash provided by each iteration of `on_supported_os`.
|
245
291
|
|
246
292
|
```ruby
|
247
293
|
require 'spec_helper'
|
248
294
|
|
249
295
|
describe 'myclass' do
|
250
|
-
|
251
296
|
on_supported_os.each do |os, facts|
|
252
297
|
context "on #{os}" do
|
298
|
+
|
299
|
+
# Add the 'foo' fact with the value 'bar' to the tests
|
253
300
|
let(:facts) do
|
254
301
|
facts.merge({
|
255
302
|
:foo => 'bar',
|
@@ -263,78 +310,57 @@ describe 'myclass' do
|
|
263
310
|
end
|
264
311
|
```
|
265
312
|
|
266
|
-
|
313
|
+
#### Set global custom facts
|
267
314
|
|
268
|
-
|
315
|
+
Set global custom fact values in your `spec/spec_helper.rb` file so that they are automatically available to all of your unit tests using `on_supported_os`.
|
269
316
|
|
270
|
-
|
271
|
-
add_custom_fact :concat_basedir, '/doesnotexist'
|
272
|
-
```
|
317
|
+
Pass the fact name and value to the `add_custom_fact` function:
|
273
318
|
|
274
|
-
|
319
|
+
```ruby
|
320
|
+
require 'rspec-puppet'
|
321
|
+
require 'rspec-puppet-facts'
|
322
|
+
include RspecPuppetFacts
|
275
323
|
|
276
|
-
|
277
|
-
|
278
|
-
```
|
324
|
+
# Add the 'concat_basedir' fact to all tests
|
325
|
+
add_custom_fact :concat_basedir, '/doesnotexist'
|
279
326
|
|
280
|
-
|
327
|
+
RSpec.configure do |config|
|
328
|
+
# normal rspec-puppet configuration
|
329
|
+
...
|
330
|
+
end
|
331
|
+
```
|
281
332
|
|
282
|
-
|
283
|
-
add_custom_fact :root_home, '/root', :exclude => 'redhat-7-x86_64'
|
284
|
-
```
|
285
|
-
* Call a proc to get a value:
|
333
|
+
#### Confine custom facts
|
286
334
|
|
287
|
-
|
288
|
-
add_custom_fact :root_home, ->(_os,facts) { "/tmp/#{facts['hostname']}" }
|
289
|
-
```
|
335
|
+
To add custom facts for only certain operating systems, set `confine` with the operating system as a string value:
|
290
336
|
|
291
|
-
|
292
|
-
|
337
|
+
```ruby
|
338
|
+
add_custom_fact :root_home, '/root', :confine => 'redhat-7-x86_64'
|
339
|
+
```
|
293
340
|
|
294
|
-
|
341
|
+
To add custom facts for all operating systems _except_ specific ones, set `exclude` with the operating system as a string value:
|
295
342
|
|
296
343
|
```ruby
|
297
|
-
|
344
|
+
add_custom_fact :root_home, '/root', :exclude => 'redhat-7-x86_64'
|
298
345
|
```
|
299
346
|
|
300
|
-
|
347
|
+
#### Create dynamic facts
|
348
|
+
|
349
|
+
In addition to the static fact values shown in the previous examples, you can create dynamic values.
|
350
|
+
|
351
|
+
To do this, pass a lambda as the value for the custom fact. The lambda is passed the same values for operating system name and fact values that your tests are provided by `on_supported_os`.
|
301
352
|
|
302
353
|
```ruby
|
303
|
-
|
304
|
-
include RspecPuppetFacts
|
354
|
+
add_custom_fact :root_home, lambda { |os,facts| "/tmp/#{facts['hostname']" }
|
305
355
|
```
|
306
356
|
|
307
|
-
|
357
|
+
Running your tests
|
358
|
+
------------------
|
308
359
|
|
309
|
-
|
310
|
-
rake spec
|
311
|
-
```
|
360
|
+
For most cases, there is no change to how you run your tests. Running `rake spec` will run all the tests against the facts for all the supported operating systems.
|
312
361
|
|
313
|
-
|
362
|
+
If you want to run the tests against the facts for specific operating systems, you can provide a filter in the `SPEC_FACTS_OS` environment variable and only the supported operating systems whose name starts with the specified filter will be used.
|
314
363
|
|
315
364
|
```bash
|
316
365
|
SPEC_FACTS_OS='ubuntu-14' rake spec
|
317
366
|
```
|
318
|
-
|
319
|
-
Finaly, Add some `facter` version to test in your .travis.yml
|
320
|
-
|
321
|
-
```yaml
|
322
|
-
...
|
323
|
-
matrix:
|
324
|
-
fast_finish: true
|
325
|
-
include:
|
326
|
-
- rvm: 1.8.7
|
327
|
-
env: PUPPET_GEM_VERSION="~> 2.7.0" FACTER_GEM_VERSION="~> 1.6.0"
|
328
|
-
- rvm: 1.8.7
|
329
|
-
env: PUPPET_GEM_VERSION="~> 2.7.0" FACTER_GEM_VERSION="~> 1.7.0"
|
330
|
-
- rvm: 1.9.3
|
331
|
-
env: PUPPET_GEM_VERSION="~> 3.0" FACTER_GEM_VERSION="~> 2.1.0"
|
332
|
-
- rvm: 1.9.3
|
333
|
-
env: PUPPET_GEM_VERSION="~> 3.0" FACTER_GEM_VERSION="~> 2.2.0"
|
334
|
-
- rvm: 2.0.0
|
335
|
-
env: PUPPET_GEM_VERSION="~> 3.0"
|
336
|
-
allow_failures:
|
337
|
-
- rvm: 1.8.7
|
338
|
-
env: PUPPET_GEM_VERSION="~> 2.7.0" FACTER_GEM_VERSION="~> 1.6.0"
|
339
|
-
...
|
340
|
-
```
|
data/lib/rspec-puppet-facts.rb
CHANGED
@@ -23,12 +23,22 @@ module RspecPuppetFacts
|
|
23
23
|
# @param [Hash] opts
|
24
24
|
# @option opts [String,Array<String>] :hardwaremodels The OS architecture names, i.e. x86_64
|
25
25
|
# @option opts [Array<Hash>] :supported_os If this options is provided the data
|
26
|
+
# @option opts [String] :facterversion the facter version of which to
|
27
|
+
# select facts from, e.g.: '3.6'
|
26
28
|
# will be used instead of the "operatingsystem_support" section if the metadata file
|
27
29
|
# even if the file is missing.
|
28
30
|
def on_supported_os(opts = {})
|
29
31
|
opts[:hardwaremodels] ||= ['x86_64']
|
30
32
|
opts[:hardwaremodels] = [opts[:hardwaremodels]] unless opts[:hardwaremodels].is_a? Array
|
31
33
|
opts[:supported_os] ||= RspecPuppetFacts.meta_supported_os
|
34
|
+
opts[:facterversion] ||= Facter.version
|
35
|
+
|
36
|
+
unless (facterversion = opts[:facterversion]) =~ /\A\d+\.\d+(?:\.\d+)*\z/
|
37
|
+
raise ArgumentError, ":facterversion must be in the format 'n.n' or " \
|
38
|
+
"'n.n.n' (n is numeric), not '#{facterversion}'"
|
39
|
+
end
|
40
|
+
|
41
|
+
facter_version_filter = RspecPuppetFacts.facter_version_to_filter(facterversion)
|
32
42
|
|
33
43
|
filter = []
|
34
44
|
opts[:supported_os].map do |os_sup|
|
@@ -45,7 +55,7 @@ module RspecPuppetFacts
|
|
45
55
|
end
|
46
56
|
|
47
57
|
filter << {
|
48
|
-
:facterversion =>
|
58
|
+
:facterversion => facter_version_filter,
|
49
59
|
:operatingsystem => os_sup['operatingsystem'],
|
50
60
|
:operatingsystemrelease => "/^#{operatingsystemmajrelease.split(' ')[0]}/",
|
51
61
|
:hardwaremodel => hardwaremodel,
|
@@ -55,7 +65,7 @@ module RspecPuppetFacts
|
|
55
65
|
else
|
56
66
|
opts[:hardwaremodels].each do |hardwaremodel|
|
57
67
|
filter << {
|
58
|
-
:facterversion =>
|
68
|
+
:facterversion => facter_version_filter,
|
59
69
|
:operatingsystem => os_sup['operatingsystem'],
|
60
70
|
:hardwaremodel => hardwaremodel,
|
61
71
|
}
|
@@ -220,4 +230,12 @@ module RspecPuppetFacts
|
|
220
230
|
@metadata = nil
|
221
231
|
end
|
222
232
|
|
233
|
+
# Generates a JGrep statement expression for a specific facter version
|
234
|
+
# @return [String] JGrep statement expression
|
235
|
+
# @param version [String] the Facter version
|
236
|
+
# @api private
|
237
|
+
def self.facter_version_to_filter(version)
|
238
|
+
major, minor = version.split('.')
|
239
|
+
"/\\A#{major}\\.#{minor}\\./"
|
240
|
+
end
|
223
241
|
end
|
@@ -370,6 +370,109 @@ describe RspecPuppetFacts do
|
|
370
370
|
)
|
371
371
|
end
|
372
372
|
end
|
373
|
+
|
374
|
+
context 'Without a custom facterversion in the options hash' do
|
375
|
+
subject do
|
376
|
+
on_supported_os(
|
377
|
+
supported_os: [
|
378
|
+
{ 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }
|
379
|
+
]
|
380
|
+
)
|
381
|
+
end
|
382
|
+
|
383
|
+
it 'returns facts from the loaded facter version' do
|
384
|
+
major, minor = Facter.version.split('.')
|
385
|
+
is_expected.to match(
|
386
|
+
'centos-7-x86_64' => include(
|
387
|
+
facterversion: /\A#{major}\.#{minor}\./
|
388
|
+
)
|
389
|
+
)
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
393
|
+
context 'With a custom facterversion (3.1) in the options hash' do
|
394
|
+
subject do
|
395
|
+
on_supported_os(
|
396
|
+
supported_os: [
|
397
|
+
{ 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }
|
398
|
+
],
|
399
|
+
facterversion: '3.1'
|
400
|
+
)
|
401
|
+
end
|
402
|
+
|
403
|
+
it 'returns facts from a facter version matching 3.1' do
|
404
|
+
is_expected.to match(
|
405
|
+
'centos-7-x86_64' => include(facterversion: '3.1.6')
|
406
|
+
)
|
407
|
+
end
|
408
|
+
end
|
409
|
+
|
410
|
+
context 'With a custom facterversion (3.1.2) in the options hash' do
|
411
|
+
subject do
|
412
|
+
on_supported_os(
|
413
|
+
supported_os: [
|
414
|
+
{ 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }
|
415
|
+
],
|
416
|
+
facterversion: '3.1.2'
|
417
|
+
)
|
418
|
+
end
|
419
|
+
|
420
|
+
it 'returns facts from a facter version matching 3.1' do
|
421
|
+
is_expected.to match(
|
422
|
+
'centos-7-x86_64' => include(facterversion: '3.1.6')
|
423
|
+
)
|
424
|
+
end
|
425
|
+
end
|
426
|
+
|
427
|
+
context 'With a custom facterversion (3.3) in the options hash' do
|
428
|
+
subject do
|
429
|
+
on_supported_os(
|
430
|
+
supported_os: [
|
431
|
+
{ 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }
|
432
|
+
],
|
433
|
+
facterversion: '3.3'
|
434
|
+
)
|
435
|
+
end
|
436
|
+
|
437
|
+
it 'returns facts from a facter version matching 3.3' do
|
438
|
+
is_expected.to match(
|
439
|
+
'centos-7-x86_64' => include(facterversion: '3.3.0')
|
440
|
+
)
|
441
|
+
end
|
442
|
+
end
|
443
|
+
|
444
|
+
context 'With a custom facterversion (3.3.2) in the options hash' do
|
445
|
+
subject do
|
446
|
+
on_supported_os(
|
447
|
+
supported_os: [
|
448
|
+
{ 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }
|
449
|
+
],
|
450
|
+
facterversion: '3.3.2'
|
451
|
+
)
|
452
|
+
end
|
453
|
+
|
454
|
+
it 'returns facts from a facter version matching 3.3' do
|
455
|
+
is_expected.to match(
|
456
|
+
'centos-7-x86_64' => include(facterversion: '3.3.0')
|
457
|
+
)
|
458
|
+
end
|
459
|
+
end
|
460
|
+
|
461
|
+
context 'With an invalid facterversion in the options hash' do
|
462
|
+
let(:method_call) do
|
463
|
+
on_supported_os(
|
464
|
+
supported_os: [
|
465
|
+
{ 'operatingsystem' => 'CentOS', 'operatingsystemrelease' => %w[7] }
|
466
|
+
],
|
467
|
+
facterversion: '3'
|
468
|
+
)
|
469
|
+
end
|
470
|
+
|
471
|
+
it 'raises an error' do
|
472
|
+
expect { method_call }.to raise_error(ArgumentError,
|
473
|
+
/:facterversion must be in the /)
|
474
|
+
end
|
475
|
+
end
|
373
476
|
end
|
374
477
|
|
375
478
|
context '#add_custom_fact' do
|
@@ -451,4 +554,69 @@ describe RspecPuppetFacts do
|
|
451
554
|
end
|
452
555
|
end
|
453
556
|
|
557
|
+
describe '.facter_version_to_filter' do
|
558
|
+
context 'when passed a version that is major.minor (1)' do
|
559
|
+
subject { RspecPuppetFacts.facter_version_to_filter('1.2') }
|
560
|
+
|
561
|
+
it 'returns the correct JGrep statement expression' do
|
562
|
+
is_expected.to eq('/\A1\.2\./')
|
563
|
+
end
|
564
|
+
end
|
565
|
+
|
566
|
+
context 'when passed a version that is major.minor (2)' do
|
567
|
+
subject { RspecPuppetFacts.facter_version_to_filter('10.2') }
|
568
|
+
|
569
|
+
it 'returns the correct JGrep statement expression' do
|
570
|
+
is_expected.to eq('/\A10\.2\./')
|
571
|
+
end
|
572
|
+
end
|
573
|
+
|
574
|
+
context 'when passed a version that is major.minor (3)' do
|
575
|
+
subject { RspecPuppetFacts.facter_version_to_filter('1.20') }
|
576
|
+
|
577
|
+
it 'returns the correct JGrep statement expression' do
|
578
|
+
is_expected.to eq('/\A1\.20\./')
|
579
|
+
end
|
580
|
+
end
|
581
|
+
|
582
|
+
context 'when passed a version that is major.minor (4)' do
|
583
|
+
subject { RspecPuppetFacts.facter_version_to_filter('10.20') }
|
584
|
+
|
585
|
+
it 'returns the correct JGrep statement expression' do
|
586
|
+
is_expected.to eq('/\A10\.20\./')
|
587
|
+
end
|
588
|
+
end
|
589
|
+
|
590
|
+
context 'when passed a version that is major.minor.patch (1)' do
|
591
|
+
subject { RspecPuppetFacts.facter_version_to_filter('1.2.3') }
|
592
|
+
|
593
|
+
it 'returns the correct JGrep statement expression' do
|
594
|
+
is_expected.to eq('/\A1\.2\./')
|
595
|
+
end
|
596
|
+
end
|
597
|
+
|
598
|
+
context 'when passed a version that is major.minor.patch (2)' do
|
599
|
+
subject { RspecPuppetFacts.facter_version_to_filter('10.2.3') }
|
600
|
+
|
601
|
+
it 'returns the correct JGrep statement expression' do
|
602
|
+
is_expected.to eq('/\A10\.2\./')
|
603
|
+
end
|
604
|
+
end
|
605
|
+
|
606
|
+
context 'when passed a version that is major.minor.patch (3)' do
|
607
|
+
subject { RspecPuppetFacts.facter_version_to_filter('1.20.3') }
|
608
|
+
|
609
|
+
it 'returns the correct JGrep statement expression' do
|
610
|
+
is_expected.to eq('/\A1\.20\./')
|
611
|
+
end
|
612
|
+
end
|
613
|
+
|
614
|
+
context 'when passed a version that is major.minor.patch (4)' do
|
615
|
+
subject { RspecPuppetFacts.facter_version_to_filter('10.20.3') }
|
616
|
+
|
617
|
+
it 'returns the correct JGrep statement expression' do
|
618
|
+
is_expected.to eq('/\A10\.20\./')
|
619
|
+
end
|
620
|
+
end
|
621
|
+
end
|
454
622
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-puppet-facts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mickaël Canévet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mime-types
|