onceover 3.16.0 β†’ 3.18.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57310f1e8ec36d6e3351a76138baf7c0e548cf76a78de52accf4f0a19af89bb8
4
- data.tar.gz: 69038c881071e8a0f3db773363b06e2f0fd99b9b62f7eb8b9311eed547a45bd7
3
+ metadata.gz: 994971aad52879b6500defdb15dd34f2959d1ec86112712e3fb9c02f1b25ff27
4
+ data.tar.gz: 9de0f213683ad7c635f6bde6e233de5c0b7a5a52e9947f8ccf7ae8fdb78b3819
5
5
  SHA512:
6
- metadata.gz: c9565bd5f7002ff26528dd080cb1c5de2ea7a7c2579a80036bde8764a7be92351e8006ccf6e97e44e97e57936d48628bc67d4e5e2515b49d1733f062bccfc2c0
7
- data.tar.gz: 4042c79024be1863c725e97a88e7812320a3aa5a010e2cea47cc687e59397c1cdac384722c9f4832d79c101fb3b0fff4f0a64e4193ada4a0cfaf402ed959bc81
6
+ metadata.gz: d078f45a54c3ec3df4a76907979c460825ccf5436be101524640f6e523272196564fb138431e7e96c7c67a3b291640f35f1de237edf952083a1e2e494c95bcf3
7
+ data.tar.gz: edc3120fab568247708a2810fe01074ee6f00c87bf894fa74cdfa3e5478c8a8a21312a60d7f6862b0c615cb377df71eea7506a84aa997a2529c349f0f2b260e7
data/README.md CHANGED
@@ -2,7 +2,9 @@
2
2
 
3
3
  *The gateway drug to automated infrastructure testing with Puppet*
4
4
 
5
- Onceover is a tool to automatically run basic tests on an entire Puppet controlrepo. It includes automatic parsing of the `Puppetfile`, `environment.conf` and others in order to run stop silly mistakes ever reaching your Puppet Master!
5
+ Onceover is a tool to automatically run basic tests on an entire Puppet controlrepo. It includes automatic parsing of the `Puppetfile`, `environment.conf` and others in order to stop silly mistakes ever reaching your Puppet Master!
6
+
7
+ **🍺πŸ₯³ New in v3.17.1: Heaps more Windows fixes! Windows code is now more likely to compile on Non-Windows.**
6
8
 
7
9
  ## Table of Contents
8
10
 
@@ -14,6 +16,7 @@ Onceover is a tool to automatically run basic tests on an entire Puppet controlr
14
16
  - [factsets](#factsets)
15
17
  - [Hiera Data](#hiera-data)
16
18
  - [r10k](#r10k)
19
+ - [r10k Config](#r10k-config)
17
20
  - [Spec testing](#spec-testing)
18
21
  - [Adding your own spec tests](#adding-your-own-spec-tests)
19
22
  - [Using Workarounds](#using-workarounds)
@@ -228,13 +231,20 @@ It's important to note that in order to reference a group using the *include/exc
228
231
 
229
232
  One or many tags that tests in this group should be tagged with. This allows you to run only certain tests using the `--tags` command line parameter. **NOTE:** Custom spec tests will always be run as they are not subject to tags
230
233
 
234
+ **include_spec_files** *Default: [**/*]*
235
+
236
+ Glob to select additionnal files to be run during `onceover` spec tests.
237
+
238
+ Default is to select all files located in the repo spec directory, usually `spec/`.
239
+ If you have some RSpec tests that depend on a different RSpec configuration than `onceover` or want, for example, to have a different job in your CI to run your own unit tests, you can use this option to select which spec files to run during `onceover` spec tests.
240
+
231
241
  ### factsets
232
242
 
233
243
  This gem comes with a few pre-canned factsets. These are listed under the `nodes` sections of `onceover.yaml` when you run `onceover init`. You can also add your own factsets by putting them in:
234
244
 
235
245
  `spec/factsets/*.json`
236
246
 
237
- Factsets are used by the controlrepo gem to generate spec tests, which compile a given class against a certain set of facts. To create these factsets all we need to do is log onto a real machine that has puppet installed and run:
247
+ Factsets are used by the onceover gem to generate spec tests, which compile a given class against a certain set of facts. To create these factsets all we need to do is log onto a real machine that has puppet installed and run:
238
248
 
239
249
  `puppet facts`
240
250
 
@@ -275,6 +285,51 @@ It is also worth noting that any hiera hierarchies that are based on custom fact
275
285
 
276
286
  ### r10k
277
287
 
288
+ Organisations often reference modules from their own git servers in the `Puppetfile`, like this:
289
+
290
+ ```
291
+ mod "puppetlabs-apache",
292
+ :git => "https://git.megacorp.com/pup/puppetlabs-apache.git",
293
+ :tag => "v5.4.0"
294
+ ```
295
+
296
+ Under the hood, Onceover uses r10k to download the modules in your `Puppetfile`. If you get errors downloading modules from Git, its because `r10k`'s call to your underlying `git` command has failed. Onceover tells you the command that `r10k` tried to run, so if you get an error like this:
297
+
298
+ ```
299
+ INFO -> Updating module /Users/dylan/control-repo/.onceover/etc/puppetlabs/code/environments
300
+ /production/modules/apache
301
+ ERROR -> Command exited with non-zero exit code:
302
+ Command: git --git-dir /Users/dylan/.r10k/git/ssh---git.megacorp.com-pup-puppetlabs_apache.git fetch origin --prune
303
+ Stderr:
304
+ ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory
305
+ Host key verification failed.
306
+
307
+ fatal: Could not read from remote repository.
308
+
309
+ Please make sure you have the correct access rights
310
+ and the repository exists.
311
+ Exit code: 128
312
+ ```
313
+
314
+ Then the approach to debug it would be to run the command that Onceover suggested:
315
+
316
+ ```
317
+ git --git-dir /Users/dylan/.r10k/git/ssh---git.megacorp.com-pup-puppetlabs_apache.git fetch origin --prune
318
+ ```
319
+
320
+ In this case, running the command interactively gives us a prompt to add the server to our `~/.ssh/known_hosts` file, which fixes the problem permanently:
321
+
322
+ ```
323
+ $ git --git-dir /Users/dylan/.r10k/git/ssh---git.megacorp.com-pup-puppetlabs_apache.git fetch origin --prune
324
+ The authenticity of host 'git.megacorp.com (123.456.789.101)' can't be established.
325
+ ...
326
+ Warning: Permanently added 'git.megacorp.com,123.456.789.101' (RSA) to the list of known hosts.
327
+ ```
328
+
329
+ The other way to resolve this would have been to install the `ssh_askpass` program, but this can spam the screen with modal dialogs on some platforms.
330
+
331
+ #### r10k Config
332
+
278
333
  If you have custom r10k config that you want to use, place the `r10k.yaml` file in one of the following locations:
279
334
 
280
335
  - `{repo root}/r10k.yaml`
@@ -652,4 +707,7 @@ Cheers to all of those who helped out:
652
707
  - @raphink
653
708
  - @tequeter
654
709
  - @alexjfisher
710
+ - @smortex
711
+ - @16c7x
712
+ - @neomilium
655
713
 
@@ -0,0 +1,556 @@
1
+ {
2
+ "name": "ubuntu-bionic.lan.asio",
3
+ "values": {
4
+ "aio_agent_version": "6.14.0",
5
+ "architecture": "amd64",
6
+ "augeas": {
7
+ "version": "1.12.0"
8
+ },
9
+ "augeasversion": "1.12.0",
10
+ "bios_release_date": "12/01/2006",
11
+ "bios_vendor": "innotek GmbH",
12
+ "bios_version": "VirtualBox",
13
+ "blockdevice_sda_model": "HARDDISK",
14
+ "blockdevice_sda_size": 10737418240,
15
+ "blockdevice_sda_vendor": "VBOX",
16
+ "blockdevice_sdb_model": "HARDDISK",
17
+ "blockdevice_sdb_size": 10485760,
18
+ "blockdevice_sdb_vendor": "VBOX",
19
+ "blockdevices": "sdb,sda",
20
+ "boardmanufacturer": "Oracle Corporation",
21
+ "boardproductname": "VirtualBox",
22
+ "boardserialnumber": "0",
23
+ "chassistype": "Other",
24
+ "dhcp_servers": {
25
+ "enp0s3": "10.0.2.2",
26
+ "system": "10.0.2.2"
27
+ },
28
+ "disks": {
29
+ "sda": {
30
+ "model": "HARDDISK",
31
+ "size": "10.00 GiB",
32
+ "size_bytes": 10737418240,
33
+ "vendor": "VBOX"
34
+ },
35
+ "sdb": {
36
+ "model": "HARDDISK",
37
+ "size": "10.00 MiB",
38
+ "size_bytes": 10485760,
39
+ "vendor": "VBOX"
40
+ }
41
+ },
42
+ "dmi": {
43
+ "bios": {
44
+ "release_date": "12/01/2006",
45
+ "vendor": "innotek GmbH",
46
+ "version": "VirtualBox"
47
+ },
48
+ "board": {
49
+ "manufacturer": "Oracle Corporation",
50
+ "product": "VirtualBox",
51
+ "serial_number": "0"
52
+ },
53
+ "chassis": {
54
+ "type": "Other"
55
+ },
56
+ "manufacturer": "innotek GmbH",
57
+ "product": {
58
+ "name": "VirtualBox",
59
+ "serial_number": "0",
60
+ "uuid": "2C7D24ED-FB7D-4B4C-BC4B-B9FC32C8BDC3"
61
+ }
62
+ },
63
+ "domain": "lan.asio",
64
+ "facterversion": "3.14.9",
65
+ "filesystems": "btrfs,ext2,ext3,ext4,iso9660,squashfs,vfat",
66
+ "fips_enabled": false,
67
+ "fqdn": "ubuntu-bionic.lan.asio",
68
+ "gid": "root",
69
+ "hardwareisa": "x86_64",
70
+ "hardwaremodel": "x86_64",
71
+ "hostname": "ubuntu-bionic",
72
+ "hypervisors": {
73
+ "virtualbox": {
74
+ "revision": "133895",
75
+ "version": "6.0.14"
76
+ }
77
+ },
78
+ "id": "root",
79
+ "identity": {
80
+ "gid": 0,
81
+ "group": "root",
82
+ "privileged": true,
83
+ "uid": 0,
84
+ "user": "root"
85
+ },
86
+ "interfaces": "enp0s3,lo",
87
+ "ipaddress": "10.0.2.15",
88
+ "ipaddress6": "fe80::bb:7dff:fee8:e923",
89
+ "ipaddress6_enp0s3": "fe80::bb:7dff:fee8:e923",
90
+ "ipaddress6_lo": "::1",
91
+ "ipaddress_enp0s3": "10.0.2.15",
92
+ "ipaddress_lo": "127.0.0.1",
93
+ "is_virtual": true,
94
+ "kernel": "Linux",
95
+ "kernelmajversion": "4.15",
96
+ "kernelrelease": "4.15.0-54-generic",
97
+ "kernelversion": "4.15.0",
98
+ "load_averages": {
99
+ "15m": 0.1,
100
+ "1m": 0.31,
101
+ "5m": 0.23
102
+ },
103
+ "lsbdistcodename": "bionic",
104
+ "lsbdistdescription": "Ubuntu 18.04.2 LTS",
105
+ "lsbdistid": "Ubuntu",
106
+ "lsbdistrelease": "18.04",
107
+ "lsbmajdistrelease": "18.04",
108
+ "macaddress": "02:bb:7d:e8:e9:23",
109
+ "macaddress_enp0s3": "02:bb:7d:e8:e9:23",
110
+ "manufacturer": "innotek GmbH",
111
+ "memory": {
112
+ "system": {
113
+ "available": "776.53 MiB",
114
+ "available_bytes": 814247936,
115
+ "capacity": "21.19%",
116
+ "total": "985.26 MiB",
117
+ "total_bytes": 1033121792,
118
+ "used": "208.73 MiB",
119
+ "used_bytes": 218873856
120
+ }
121
+ },
122
+ "memoryfree": "776.53 MiB",
123
+ "memoryfree_mb": 776.52734375,
124
+ "memorysize": "985.26 MiB",
125
+ "memorysize_mb": 985.26171875,
126
+ "mountpoints": {
127
+ "/": {
128
+ "available": "8.14 GiB",
129
+ "available_bytes": 8742756352,
130
+ "capacity": "15.32%",
131
+ "device": "/dev/sda1",
132
+ "filesystem": "ext4",
133
+ "options": [
134
+ "rw",
135
+ "relatime",
136
+ "data=ordered"
137
+ ],
138
+ "size": "9.63 GiB",
139
+ "size_bytes": 10340794368,
140
+ "used": "1.47 GiB",
141
+ "used_bytes": 1581260800
142
+ },
143
+ "/dev": {
144
+ "available": "480.22 MiB",
145
+ "available_bytes": 503545856,
146
+ "capacity": "0%",
147
+ "device": "udev",
148
+ "filesystem": "devtmpfs",
149
+ "options": [
150
+ "rw",
151
+ "nosuid",
152
+ "relatime",
153
+ "size=491744k",
154
+ "nr_inodes=122936",
155
+ "mode=755"
156
+ ],
157
+ "size": "480.22 MiB",
158
+ "size_bytes": 503545856,
159
+ "used": "0 bytes",
160
+ "used_bytes": 0
161
+ },
162
+ "/dev/hugepages": {
163
+ "available": "0 bytes",
164
+ "available_bytes": 0,
165
+ "capacity": "100%",
166
+ "device": "hugetlbfs",
167
+ "filesystem": "hugetlbfs",
168
+ "options": [
169
+ "rw",
170
+ "relatime",
171
+ "pagesize=2M"
172
+ ],
173
+ "size": "0 bytes",
174
+ "size_bytes": 0,
175
+ "used": "0 bytes",
176
+ "used_bytes": 0
177
+ },
178
+ "/dev/mqueue": {
179
+ "available": "0 bytes",
180
+ "available_bytes": 0,
181
+ "capacity": "100%",
182
+ "device": "mqueue",
183
+ "filesystem": "mqueue",
184
+ "options": [
185
+ "rw",
186
+ "relatime"
187
+ ],
188
+ "size": "0 bytes",
189
+ "size_bytes": 0,
190
+ "used": "0 bytes",
191
+ "used_bytes": 0
192
+ },
193
+ "/dev/pts": {
194
+ "available": "0 bytes",
195
+ "available_bytes": 0,
196
+ "capacity": "100%",
197
+ "device": "devpts",
198
+ "filesystem": "devpts",
199
+ "options": [
200
+ "rw",
201
+ "nosuid",
202
+ "noexec",
203
+ "relatime",
204
+ "gid=5",
205
+ "mode=620",
206
+ "ptmxmode=000"
207
+ ],
208
+ "size": "0 bytes",
209
+ "size_bytes": 0,
210
+ "used": "0 bytes",
211
+ "used_bytes": 0
212
+ },
213
+ "/dev/shm": {
214
+ "available": "492.63 MiB",
215
+ "available_bytes": 516558848,
216
+ "capacity": "0%",
217
+ "device": "tmpfs",
218
+ "filesystem": "tmpfs",
219
+ "options": [
220
+ "rw",
221
+ "nosuid",
222
+ "nodev"
223
+ ],
224
+ "size": "492.63 MiB",
225
+ "size_bytes": 516558848,
226
+ "used": "0 bytes",
227
+ "used_bytes": 0
228
+ },
229
+ "/run": {
230
+ "available": "97.93 MiB",
231
+ "available_bytes": 102690816,
232
+ "capacity": "0.60%",
233
+ "device": "tmpfs",
234
+ "filesystem": "tmpfs",
235
+ "options": [
236
+ "rw",
237
+ "nosuid",
238
+ "noexec",
239
+ "relatime",
240
+ "size=100892k",
241
+ "mode=755"
242
+ ],
243
+ "size": "98.53 MiB",
244
+ "size_bytes": 103313408,
245
+ "used": "608.00 KiB",
246
+ "used_bytes": 622592
247
+ },
248
+ "/run/lock": {
249
+ "available": "5.00 MiB",
250
+ "available_bytes": 5242880,
251
+ "capacity": "0%",
252
+ "device": "tmpfs",
253
+ "filesystem": "tmpfs",
254
+ "options": [
255
+ "rw",
256
+ "nosuid",
257
+ "nodev",
258
+ "noexec",
259
+ "relatime",
260
+ "size=5120k"
261
+ ],
262
+ "size": "5.00 MiB",
263
+ "size_bytes": 5242880,
264
+ "used": "0 bytes",
265
+ "used_bytes": 0
266
+ },
267
+ "/run/user/1000": {
268
+ "available": "98.52 MiB",
269
+ "available_bytes": 103309312,
270
+ "capacity": "0%",
271
+ "device": "tmpfs",
272
+ "filesystem": "tmpfs",
273
+ "options": [
274
+ "rw",
275
+ "nosuid",
276
+ "nodev",
277
+ "relatime",
278
+ "size=100888k",
279
+ "mode=700",
280
+ "uid=1000",
281
+ "gid=1000"
282
+ ],
283
+ "size": "98.52 MiB",
284
+ "size_bytes": 103309312,
285
+ "used": "0 bytes",
286
+ "used_bytes": 0
287
+ },
288
+ "/sys/fs/cgroup": {
289
+ "available": "492.63 MiB",
290
+ "available_bytes": 516558848,
291
+ "capacity": "0%",
292
+ "device": "tmpfs",
293
+ "filesystem": "tmpfs",
294
+ "options": [
295
+ "ro",
296
+ "nosuid",
297
+ "nodev",
298
+ "noexec",
299
+ "mode=755"
300
+ ],
301
+ "size": "492.63 MiB",
302
+ "size_bytes": 516558848,
303
+ "used": "0 bytes",
304
+ "used_bytes": 0
305
+ },
306
+ "/vagrant": {
307
+ "available": "122.93 GiB",
308
+ "available_bytes": 131996221440,
309
+ "capacity": "85.01%",
310
+ "device": "vagrant",
311
+ "filesystem": "vboxsf",
312
+ "options": [
313
+ "rw",
314
+ "nodev",
315
+ "relatime",
316
+ "iocharset=utf8",
317
+ "uid=1000",
318
+ "gid=1000"
319
+ ],
320
+ "size": "820.33 GiB",
321
+ "size_bytes": 880824786944,
322
+ "used": "697.40 GiB",
323
+ "used_bytes": 748828565504
324
+ },
325
+ "/var/lib/lxcfs": {
326
+ "available": "0 bytes",
327
+ "available_bytes": 0,
328
+ "capacity": "100%",
329
+ "device": "lxcfs",
330
+ "filesystem": "fuse.lxcfs",
331
+ "options": [
332
+ "rw",
333
+ "nosuid",
334
+ "nodev",
335
+ "relatime",
336
+ "user_id=0",
337
+ "group_id=0",
338
+ "allow_other"
339
+ ],
340
+ "size": "0 bytes",
341
+ "size_bytes": 0,
342
+ "used": "0 bytes",
343
+ "used_bytes": 0
344
+ }
345
+ },
346
+ "mtu_enp0s3": 1500,
347
+ "mtu_lo": 65536,
348
+ "netmask": "255.255.255.0",
349
+ "netmask6": "ffff:ffff:ffff:ffff::",
350
+ "netmask6_enp0s3": "ffff:ffff:ffff:ffff::",
351
+ "netmask6_lo": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
352
+ "netmask_enp0s3": "255.255.255.0",
353
+ "netmask_lo": "255.0.0.0",
354
+ "network": "10.0.2.0",
355
+ "network6": "fe80::",
356
+ "network6_enp0s3": "fe80::",
357
+ "network6_lo": "::1",
358
+ "network_enp0s3": "10.0.2.0",
359
+ "network_lo": "127.0.0.0",
360
+ "networking": {
361
+ "dhcp": "10.0.2.2",
362
+ "domain": "lan.asio",
363
+ "fqdn": "ubuntu-bionic.lan.asio",
364
+ "hostname": "ubuntu-bionic",
365
+ "interfaces": {
366
+ "enp0s3": {
367
+ "bindings": [
368
+ {
369
+ "address": "10.0.2.15",
370
+ "netmask": "255.255.255.0",
371
+ "network": "10.0.2.0"
372
+ }
373
+ ],
374
+ "bindings6": [
375
+ {
376
+ "address": "fe80::bb:7dff:fee8:e923",
377
+ "netmask": "ffff:ffff:ffff:ffff::",
378
+ "network": "fe80::"
379
+ }
380
+ ],
381
+ "dhcp": "10.0.2.2",
382
+ "ip": "10.0.2.15",
383
+ "ip6": "fe80::bb:7dff:fee8:e923",
384
+ "mac": "02:bb:7d:e8:e9:23",
385
+ "mtu": 1500,
386
+ "netmask": "255.255.255.0",
387
+ "netmask6": "ffff:ffff:ffff:ffff::",
388
+ "network": "10.0.2.0",
389
+ "network6": "fe80::",
390
+ "scope6": "link"
391
+ },
392
+ "lo": {
393
+ "bindings": [
394
+ {
395
+ "address": "127.0.0.1",
396
+ "netmask": "255.0.0.0",
397
+ "network": "127.0.0.0"
398
+ }
399
+ ],
400
+ "bindings6": [
401
+ {
402
+ "address": "::1",
403
+ "netmask": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
404
+ "network": "::1"
405
+ }
406
+ ],
407
+ "ip": "127.0.0.1",
408
+ "ip6": "::1",
409
+ "mtu": 65536,
410
+ "netmask": "255.0.0.0",
411
+ "netmask6": "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff",
412
+ "network": "127.0.0.0",
413
+ "network6": "::1",
414
+ "scope6": "host"
415
+ }
416
+ },
417
+ "ip": "10.0.2.15",
418
+ "ip6": "fe80::bb:7dff:fee8:e923",
419
+ "mac": "02:bb:7d:e8:e9:23",
420
+ "mtu": 1500,
421
+ "netmask": "255.255.255.0",
422
+ "netmask6": "ffff:ffff:ffff:ffff::",
423
+ "network": "10.0.2.0",
424
+ "network6": "fe80::",
425
+ "primary": "enp0s3",
426
+ "scope6": "link"
427
+ },
428
+ "operatingsystem": "Ubuntu",
429
+ "operatingsystemmajrelease": "18.04",
430
+ "operatingsystemrelease": "18.04",
431
+ "os": {
432
+ "architecture": "amd64",
433
+ "distro": {
434
+ "codename": "bionic",
435
+ "description": "Ubuntu 18.04.2 LTS",
436
+ "id": "Ubuntu",
437
+ "release": {
438
+ "full": "18.04",
439
+ "major": "18.04"
440
+ }
441
+ },
442
+ "family": "Debian",
443
+ "hardware": "x86_64",
444
+ "name": "Ubuntu",
445
+ "release": {
446
+ "full": "18.04",
447
+ "major": "18.04"
448
+ },
449
+ "selinux": {
450
+ "enabled": false
451
+ }
452
+ },
453
+ "osfamily": "Debian",
454
+ "partitions": {
455
+ "/dev/sda1": {
456
+ "filesystem": "ext4",
457
+ "label": "cloudimg-rootfs",
458
+ "mount": "/",
459
+ "partuuid": "654c6dc7-01",
460
+ "size": "10.00 GiB",
461
+ "size_bytes": 10736352768,
462
+ "uuid": "8de716dd-d9b2-477f-b818-bb0b1eb036ce"
463
+ }
464
+ },
465
+ "path": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/opt/puppetlabs/bin",
466
+ "physicalprocessorcount": 1,
467
+ "processor0": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz",
468
+ "processor1": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz",
469
+ "processorcount": 2,
470
+ "processors": {
471
+ "count": 2,
472
+ "isa": "x86_64",
473
+ "models": [
474
+ "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz",
475
+ "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz"
476
+ ],
477
+ "physicalcount": 1
478
+ },
479
+ "productname": "VirtualBox",
480
+ "puppetversion": "6.14.0",
481
+ "ruby": {
482
+ "platform": "x86_64-linux",
483
+ "sitedir": "/opt/puppetlabs/puppet/lib/ruby/site_ruby/2.5.0",
484
+ "version": "2.5.7"
485
+ },
486
+ "rubyplatform": "x86_64-linux",
487
+ "rubysitedir": "/opt/puppetlabs/puppet/lib/ruby/site_ruby/2.5.0",
488
+ "rubyversion": "2.5.7",
489
+ "scope6": "link",
490
+ "scope6_enp0s3": "link",
491
+ "scope6_lo": "host",
492
+ "selinux": false,
493
+ "serialnumber": "0",
494
+ "ssh": {
495
+ "dsa": {
496
+ "fingerprints": {
497
+ "sha1": "SSHFP 2 1 7024118ae71eead4750a74d458472e89e38c7e7c",
498
+ "sha256": "SSHFP 2 2 e5606c7ee1cf32f5591b42c98a9bc87d27cef4bc75c7802cd3f22bcb39333656"
499
+ },
500
+ "key": "AAAAB3NzaC1kc3MAAACBAPemHtx92WDon/zDA0oaO5wWOXCUx45+6X9QxJugdryqG3RV0J/ZkKhayANq7NO1GeC3/3EC8celhsHyZFILEEJpFPzW32053dVnOZ6JyQCGb4JKFaCH7DjVnZLlTPyqvraykF3beEhp7dArSpsgsIURJLDRvE3PJdd9DDNtOapXAAAAFQC27/RqfyRjrjSOjNrfsqLm6GoT0QAAAIAJm6rGXMlZ+xNfPfVHsugGNP7BdcFLSWnUGaBQ+51FGkRdVesun6HF5A9/TNBfQ6U2k1BE8Qtc3H8uHrwenIQKyWuhVejvpYVD3NA6hztMWYiidiQ7Ji0O3qkPv4CY5QhlmyPit1gR4aly/fG1H8p+J/XbwrJXMtfR6ND3OXbeYwAAAIEAzDOkrJJgq5f+oPSVaOOmvbNdJ0B003fTyJEH+2yCm3q41O7vakoWv9Qt9mH7T/ivqwMK3yzk1eIpozx8TPU1aOQC3OyehoEXXFY6U5Jcgp0K8WUvVgnC47hAKBkf562aGdWftWNu4GkjI6wcNtZqkeVN/wyazilHRF9GyPdsvHg=",
501
+ "type": "ssh-dss"
502
+ },
503
+ "ecdsa": {
504
+ "fingerprints": {
505
+ "sha1": "SSHFP 3 1 aa6b8ac4bccb5afded59e2bf680cc151bbb27ef9",
506
+ "sha256": "SSHFP 3 2 4ee2dc2ded938a37ef44de4fd3f3add478abfe272f0a50dc7dbb1f9a4839ca99"
507
+ },
508
+ "key": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF02SaI3oPW6CVWEvzDuf/XqaUF+OAr4RKNW3hAR8RRBSDEjQGdoejQEYP8lEFa1KeVlkJYnvgrPYwxVSUI6hUA=",
509
+ "type": "ecdsa-sha2-nistp256"
510
+ },
511
+ "ed25519": {
512
+ "fingerprints": {
513
+ "sha1": "SSHFP 4 1 a20e01cf434a802607e1aff21e621dd3ada6499f",
514
+ "sha256": "SSHFP 4 2 569917b95c5299fe3cdd1cc4a37166d1e81106a22bb75a15b99bb8694b2ac8c4"
515
+ },
516
+ "key": "AAAAC3NzaC1lZDI1NTE5AAAAIHmh1Z/od2mbHDUkAL2bXswdwp43dPXQOKo9DA8AUDO1",
517
+ "type": "ssh-ed25519"
518
+ },
519
+ "rsa": {
520
+ "fingerprints": {
521
+ "sha1": "SSHFP 1 1 3bc833bc8e3e259da03d37aa0c0244ae98f30622",
522
+ "sha256": "SSHFP 1 2 f27f0e09326c1c8abc2b0691bc6444b77781c0a21e9d99933492f269e5163346"
523
+ },
524
+ "key": "AAAAB3NzaC1yc2EAAAADAQABAAABAQCw+QuEhOY+IrmAaG1/PgO0nyxYY0VYilhjcM5daSKb61z+XBmBuAsgVxWaQ815OxlwYQunPJZlKnaXZ8yTlnjk8eekxvWnoSLtqKZWW1+RfMyy6n6MyXdno1mwez+5HG3tThC63xE4EWbmKH+fsWuNT2ZpQ49fuWnG8sObv/66QLyCjt+KHMpy9ClHjpYli+0hFhdHTwxGo9H/r4I2En9rBcTy3nQZhZGm1FFh6xnHxnSGm02r2fhsk2x0kw9K1pA7IFtr31hBOu5Po5CJBVJQBd1TEozmNELl2ZISmT0HK3sIV4AG/FmFEsd9+63ST5BbeurlcOEzvxudDJmuroZX",
525
+ "type": "ssh-rsa"
526
+ }
527
+ },
528
+ "sshdsakey": "AAAAB3NzaC1kc3MAAACBAPemHtx92WDon/zDA0oaO5wWOXCUx45+6X9QxJugdryqG3RV0J/ZkKhayANq7NO1GeC3/3EC8celhsHyZFILEEJpFPzW32053dVnOZ6JyQCGb4JKFaCH7DjVnZLlTPyqvraykF3beEhp7dArSpsgsIURJLDRvE3PJdd9DDNtOapXAAAAFQC27/RqfyRjrjSOjNrfsqLm6GoT0QAAAIAJm6rGXMlZ+xNfPfVHsugGNP7BdcFLSWnUGaBQ+51FGkRdVesun6HF5A9/TNBfQ6U2k1BE8Qtc3H8uHrwenIQKyWuhVejvpYVD3NA6hztMWYiidiQ7Ji0O3qkPv4CY5QhlmyPit1gR4aly/fG1H8p+J/XbwrJXMtfR6ND3OXbeYwAAAIEAzDOkrJJgq5f+oPSVaOOmvbNdJ0B003fTyJEH+2yCm3q41O7vakoWv9Qt9mH7T/ivqwMK3yzk1eIpozx8TPU1aOQC3OyehoEXXFY6U5Jcgp0K8WUvVgnC47hAKBkf562aGdWftWNu4GkjI6wcNtZqkeVN/wyazilHRF9GyPdsvHg=",
529
+ "sshecdsakey": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBF02SaI3oPW6CVWEvzDuf/XqaUF+OAr4RKNW3hAR8RRBSDEjQGdoejQEYP8lEFa1KeVlkJYnvgrPYwxVSUI6hUA=",
530
+ "sshed25519key": "AAAAC3NzaC1lZDI1NTE5AAAAIHmh1Z/od2mbHDUkAL2bXswdwp43dPXQOKo9DA8AUDO1",
531
+ "sshfp_dsa": "SSHFP 2 1 7024118ae71eead4750a74d458472e89e38c7e7c\nSSHFP 2 2 e5606c7ee1cf32f5591b42c98a9bc87d27cef4bc75c7802cd3f22bcb39333656",
532
+ "sshfp_ecdsa": "SSHFP 3 1 aa6b8ac4bccb5afded59e2bf680cc151bbb27ef9\nSSHFP 3 2 4ee2dc2ded938a37ef44de4fd3f3add478abfe272f0a50dc7dbb1f9a4839ca99",
533
+ "sshfp_ed25519": "SSHFP 4 1 a20e01cf434a802607e1aff21e621dd3ada6499f\nSSHFP 4 2 569917b95c5299fe3cdd1cc4a37166d1e81106a22bb75a15b99bb8694b2ac8c4",
534
+ "sshfp_rsa": "SSHFP 1 1 3bc833bc8e3e259da03d37aa0c0244ae98f30622\nSSHFP 1 2 f27f0e09326c1c8abc2b0691bc6444b77781c0a21e9d99933492f269e5163346",
535
+ "sshrsakey": "AAAAB3NzaC1yc2EAAAADAQABAAABAQCw+QuEhOY+IrmAaG1/PgO0nyxYY0VYilhjcM5daSKb61z+XBmBuAsgVxWaQ815OxlwYQunPJZlKnaXZ8yTlnjk8eekxvWnoSLtqKZWW1+RfMyy6n6MyXdno1mwez+5HG3tThC63xE4EWbmKH+fsWuNT2ZpQ49fuWnG8sObv/66QLyCjt+KHMpy9ClHjpYli+0hFhdHTwxGo9H/r4I2En9rBcTy3nQZhZGm1FFh6xnHxnSGm02r2fhsk2x0kw9K1pA7IFtr31hBOu5Po5CJBVJQBd1TEozmNELl2ZISmT0HK3sIV4AG/FmFEsd9+63ST5BbeurlcOEzvxudDJmuroZX",
536
+ "system_uptime": {
537
+ "days": 0,
538
+ "hours": 0,
539
+ "seconds": 336,
540
+ "uptime": "0:05 hours"
541
+ },
542
+ "timezone": "UTC",
543
+ "uptime": "0:05 hours",
544
+ "uptime_days": 0,
545
+ "uptime_hours": 0,
546
+ "uptime_seconds": 336,
547
+ "uuid": "2C7D24ED-FB7D-4B4C-BC4B-B9FC32C8BDC3",
548
+ "virtual": "virtualbox",
549
+ "clientcert": "ubuntu-bionic.lan.asio",
550
+ "clientversion": "6.14.0",
551
+ "clientnoop": false
552
+ },
553
+ "timestamp": "2020-04-29T09:42:42.131094744+00:00",
554
+ "expiration": "2020-04-29T10:12:42.131454548+00:00"
555
+ }
556
+
@@ -162,6 +162,7 @@
162
162
  "staging_http_get": "powershell",
163
163
  "staging_windir": "C:\\ProgramData\\staging",
164
164
  "system32": "C:\\Windows\\system32",
165
+ "choco_install_path": "C:\\ProgramData\\chocolatey",
165
166
  "system_uptime": {
166
167
  "days": 0,
167
168
  "hours": 0,
@@ -143,6 +143,7 @@
143
143
  "rubyversion": "2.1.7",
144
144
  "serialnumber": "0",
145
145
  "system32": "C:\\Windows\\system32",
146
+ "choco_install_path": "C:\\ProgramData\\chocolatey",
146
147
  "system_uptime": {
147
148
  "days": 0,
148
149
  "hours": 0,
@@ -83,6 +83,7 @@
83
83
  "rubysitedir": "C:/tools/ruby24/lib/ruby/site_ruby/2.4.0",
84
84
  "rubyversion": "2.4.3",
85
85
  "system32": "C:\\Windows\\system32",
86
+ "choco_install_path": "C:\\ProgramData\\chocolatey",
86
87
  "system_uptime": {
87
88
  "seconds": 1113359,
88
89
  "hours": 309,
@@ -100,4 +101,4 @@
100
101
  },
101
102
  "timestamp": "2018-12-10T21:43:07.468533000+00:00",
102
103
  "expiration": "2018-12-10T22:13:07.468533000+00:00"
103
- }
104
+ }
@@ -37,6 +37,17 @@ When(/^I run onceover command "([^"]*)" with class "([^"]*)"$/) do |command, cl
37
37
  @cmd.run
38
38
  end
39
39
 
40
+ # The below can be used to skip tests if they only work on one os
41
+ When(/^test osfamily is "(\w*)"$/) do |osfamily|
42
+ require 'facter'
43
+ pending unless Facter.value(:os)['family'] == osfamily
44
+ end
45
+
46
+ When(/^test osfamily is not "(\w*)"$/) do |osfamily|
47
+ require 'facter'
48
+ pending if Facter.value(:os)['family'] == osfamily
49
+ end
50
+
40
51
  Then(/^I see help for commands: "([^"]*)"$/) do |commands|
41
52
  # Get chunk of output between COMMANDS and OPTION, there should be help section
42
53
  commands_help = @cmd.output[/COMMANDS(.*)OPTIONS/m, 1]
@@ -0,0 +1,30 @@
1
+ @windows
2
+ Feature: Run onceover with windows
3
+ Onceover should allow to run rspec and acceptance test for all profvile and role classes
4
+ or for any part of them. Use should set if he wants to see only summary of tests or full
5
+ log info.
6
+
7
+ Background:
8
+ Given onceover executable
9
+
10
+ Scenario: Run with common Windows code
11
+ Given control repo "windows"
12
+ When I run onceover command "run spec" with class "role::users"
13
+ Then I should not see any errors
14
+
15
+ Scenario: Run with common Windows code without workarounds
16
+ Given existing control repo "windows"
17
+ When I run onceover command "run spec --no_workarounds" with class "role::users"
18
+ And test osfamily is not "windows"
19
+ Then Onceover should exit 1
20
+
21
+ Scenario: Compiling a windows role with groups that is valid should compile
22
+ Given control repo "windows"
23
+ When I run onceover command "run spec" with class "role::groups"
24
+ Then I should not see any errors
25
+
26
+ Scenario: Compiling a windows role with users that is valid should compile
27
+ Given control repo "windows"
28
+ When I run onceover command "run spec" with class "role::users"
29
+ Then I should not see any errors
30
+
@@ -42,6 +42,7 @@ This includes deploying using r10k and running all custom tests.
42
42
 
43
43
  optional :p, :parallel, 'Runs spec tests in parallel. This increases speed at the cost of poorly formatted logs and irrelevant junit output.'
44
44
  optional nil, :format, 'Which RSpec formatter to use, valid options are: documentation, progress, FailureCollector, OnceoverFormatter. You also specify this multiple times', multiple: true, default: :defaults
45
+ optional nil, :no_workarounds, 'Disables workarounds that have been added for convenience to get around common RSPec issues such as https://github.com/rodjek/rspec-puppet/issues/665'
45
46
 
46
47
  run do |opts, args, cmd|
47
48
  repo = Onceover::Controlrepo.new(opts)
@@ -206,7 +206,7 @@ class Onceover
206
206
  end
207
207
 
208
208
  def print_puppetfile_table
209
- require 'table_print'
209
+ require 'terminal-table'
210
210
  require 'versionomy'
211
211
  require 'colored'
212
212
  require 'r10k/puppetfile'
@@ -221,48 +221,44 @@ class Onceover
221
221
  threads = []
222
222
  puppetfile.modules.each do |mod|
223
223
  threads << Thread.new do
224
- return_hash = {}
224
+ row = []
225
225
  logger.debug "Loading data for #{mod.full_name}"
226
- return_hash[:full_name] = mod.full_name
226
+ row << mod.full_name
227
227
  if mod.is_a?(R10K::Module::Forge)
228
- return_hash[:current_version] = mod.expected_version
229
- return_hash[:latest_version] = mod.v3_module.current_release.version
230
- return_hash[:endorsement] = mod.v3_module.endorsement
228
+ row << mod.expected_version
229
+ row << mod.v3_module.current_release.version
230
+
231
+ current = Versionomy.parse(mod.expected_version)
232
+ latest = Versionomy.parse(mod.v3_module.current_release.version)
233
+ row << if current.major < latest.major
234
+ "Major".red
235
+ elsif current.minor < latest.minor
236
+ "Minor".yellow
237
+ elsif current.tiny < latest.tiny
238
+ "Tiny".green
239
+ else
240
+ "No".green
241
+ end
242
+
243
+ row << mod.v3_module.endorsement
231
244
  superseded_by = mod.v3_module.superseded_by
232
- return_hash[:superseded_by] = superseded_by.nil? ? '' : superseded_by[:slug]
233
- current = Versionomy.parse(return_hash[:current_version])
234
- latest = Versionomy.parse(return_hash[:latest_version])
235
- if current.major < latest.major
236
- return_hash[:out_of_date] = "Major".red
237
- elsif current.minor < latest.minor
238
- return_hash[:out_of_date] = "Minor".yellow
239
- elsif current.tiny < latest.tiny
240
- return_hash[:out_of_date] = "Tiny".green
241
- else
242
- return_hash[:out_of_date] = "No".green
243
- end
245
+ row << (superseded_by.nil? ? '' : superseded_by[:slug])
244
246
  else
245
- return_hash[:current_version] = "N/A"
246
- return_hash[:latest_version] = "N/A"
247
- return_hash[:out_of_date] = "N/A"
248
- return_hash[:endorsement] = "N/A"
249
- return_hash[:superseded_by] = "N/A"
247
+ row << "N/A"
248
+ row << "N/A"
249
+ row << "N/A"
250
+ row << "N/A"
251
+ row << "N/A"
250
252
  end
251
- output_array << return_hash
253
+ output_array << row
252
254
  end
253
255
  end
254
256
 
255
257
  threads.map(&:join)
256
258
 
257
- tp(
258
- output_array,
259
- {:full_name => {:display_name => "Full Name"}},
260
- {:current_version => {:display_name => "Current Version"}},
261
- {:latest_version => {:display_name => "Latest Version"}},
262
- {:out_of_date => {:display_name => "Out of Date?"}},
263
- {:endorsement => {:display_name => "Endorsement"}},
264
- {:superseded_by => {:display_name => "Superseded by"}}
265
- )
259
+ output_array.sort_by! { |line| line[0] }
260
+
261
+ puts Terminal::Table.new(headings: ["Full Name", "Current Version", "Latest Version", "Out of Date?", "Endorsement", "Superseded by"], rows: output_array)
266
262
  end
267
263
 
268
264
  def update_puppetfile
@@ -24,8 +24,8 @@ class Onceover
24
24
  FileUtils.mkdir_p("#{@repo.tempdir}/spec/classes")
25
25
  FileUtils.mkdir_p("#{@repo.tempdir}/spec/acceptance/nodesets")
26
26
 
27
- # Copy our entire spec directory over
28
- FileUtils.cp_r("#{@repo.spec_dir}", "#{@repo.tempdir}")
27
+ # Copy specified spec files over
28
+ @config.copy_spec_files(@repo)
29
29
 
30
30
  # Create the Rakefile so that we can take advantage of the existing tasks
31
31
  @config.write_rakefile(@repo.tempdir, "spec/classes/**/*_spec.rb")
@@ -87,10 +87,11 @@ class Onceover
87
87
  #`bin/rake spec_standalone`
88
88
  if @config.opts[:parallel]
89
89
  logger.debug "Running #{@command_prefix}rake parallel_spec from #{@repo.tempdir}"
90
- result = Backticks::Runner.new(interactive:true).run(@command_prefix.strip.split, 'rake', 'parallel_spec').join
90
+ result = run_command(@command_prefix.strip.split, 'rake', 'parallel_spec')
91
91
  else
92
+ require 'io/console'
92
93
  logger.debug "Running #{@command_prefix}rake spec_standalone from #{@repo.tempdir}"
93
- result = Backticks::Runner.new(interactive:true).run(@command_prefix.strip.split, 'rake', 'spec_standalone').join
94
+ result = run_command(@command_prefix.strip.split, 'rake', 'spec_standalone')
94
95
  end
95
96
 
96
97
  # Reset env to previous state if we modified it
@@ -117,11 +118,20 @@ class Onceover
117
118
  #`bundle install --binstubs`
118
119
  #`bin/rake spec_standalone`
119
120
  logger.debug "Running #{@command_prefix}rake acceptance from #{@repo.tempdir}"
120
- result = Backticks::Runner.new(interactive:true).run(@command_prefix.strip.split, 'rake', 'acceptance').join
121
+ result = run_command(@command_prefix.strip.split, 'rake', 'acceptance')
121
122
  end
122
123
 
123
124
  # Finally exit and preserve the exit code
124
125
  exit result.status.exitstatus
125
126
  end
127
+
128
+ def run_command(*args)
129
+ begin
130
+ STDERR.raw! if STDERR.isatty
131
+ result = Backticks::Runner.new(interactive: true).run(args.flatten).join
132
+ ensure
133
+ STDERR.cooked! if STDERR.isatty
134
+ end
135
+ end
126
136
  end
127
137
  end
@@ -47,9 +47,10 @@ class Onceover
47
47
  @acceptance_tests = []
48
48
  @opts = opts
49
49
  @mock_functions = config['functions']
50
- @before_conditions = config['before']
50
+ @before_conditions = config['before'] || []
51
51
  @after_conditions = config['after']
52
52
  @strict_variables = opts[:strict_variables] ? 'yes' : 'no'
53
+ @included_specs = [config['include_spec_files'] || ['**/*']].flatten
53
54
 
54
55
  # Set dynamic defaults for format
55
56
  if Array(opts[:format]) == [:defaults]
@@ -236,6 +237,19 @@ class Onceover
236
237
  )
237
238
  end
238
239
 
240
+ def copy_spec_files(repo)
241
+ source_files = @included_specs.map { |glob| Dir.glob "#{repo.spec_dir}/#{glob}" }.flatten.uniq
242
+ source_files.each do |source_file|
243
+ target_file = File.join(repo.tempdir, 'spec', source_file.sub(/^#{repo.spec_dir}/, ''))
244
+ if File.directory?(source_file)
245
+ FileUtils.cp_r source_file, target_file unless File.exists? target_file
246
+ else
247
+ FileUtils.mkdir_p File.dirname target_file
248
+ FileUtils.cp source_file, target_file
249
+ end
250
+ end
251
+ end
252
+
239
253
  def create_fixtures_symlinks(repo)
240
254
  logger.debug "Creating fixtures symlinks"
241
255
  FileUtils.rm_rf("#{repo.tempdir}/spec/fixtures/modules")
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "onceover"
7
- s.version = "3.16.0"
7
+ s.version = "3.18.0"
8
8
  s.authors = ["Dylan Ratcliffe"]
9
9
  s.email = ["dylan.ratcliffe@puppet.com"]
10
10
  s.homepage = "https://github.com/dylanratcliffe/onceover"
@@ -34,7 +34,7 @@ Gem::Specification.new do |s|
34
34
  s.add_runtime_dependency 'rspec', '>= 3.0.0'
35
35
  s.add_runtime_dependency 'rspec-puppet', ">= 2.4.0"
36
36
  s.add_runtime_dependency 'rspec_junit_formatter', '>= 0.2.0'
37
- s.add_runtime_dependency 'table_print', '>= 1.0.0'
37
+ s.add_runtime_dependency 'terminal-table', '>= 1.8.0'
38
38
  s.add_runtime_dependency 'versionomy', '>= 0.5.0'
39
39
 
40
40
  end
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'onceover'
@@ -0,0 +1,3 @@
1
+ forge "http://forge.puppetlabs.com"
2
+
3
+ mod 'puppetlabs-acl', '3.1.1'
@@ -0,0 +1 @@
1
+ modulepath = site-modules:modules:$basemodulepath
@@ -0,0 +1,12 @@
1
+ class role::acl {
2
+ # ACL often causes failures such as this:
3
+ # https://github.com/rodjek/rspec-puppet/issues/665
4
+ #
5
+ # Onceover should handle this out of the box
6
+ acl { 'L:\\SQLBackup':
7
+ inherit_parent_permissions => false,
8
+ permissions => [
9
+ { 'identity' => 'foo', 'rights' => ['read'] }
10
+ ],
11
+ }
12
+ }
@@ -0,0 +1,8 @@
1
+ # Class: role::groups
2
+ #
3
+ #
4
+ class role::groups {
5
+ group {'Administrators':
6
+ members => ['foo'],
7
+ }
8
+ }
@@ -0,0 +1,9 @@
1
+ # Class: role::users
2
+ #
3
+ #
4
+ class role::users {
5
+ user { 'dylan':
6
+ ensure => 'present',
7
+ groups => ['Administrators'],
8
+ }
9
+ }
@@ -0,0 +1,8 @@
1
+ # Class: role::groups
2
+ #
3
+ #
4
+ class role::groups {
5
+ group {'Administrators':
6
+ members => ['foo'],
7
+ }
8
+ }
@@ -0,0 +1,9 @@
1
+ # Class: role::users
2
+ #
3
+ #
4
+ class role::users {
5
+ user { 'dylan':
6
+ ensure => 'present',
7
+ groups => ['Administrators'],
8
+ }
9
+ }
@@ -0,0 +1,24 @@
1
+ # Classes to be tested
2
+ classes:
3
+ - /role::/
4
+
5
+ # Nodes to tests classes on, this refers to a 'factset' or 'nodeset'
6
+ # depending on whether you are running 'spec' or 'acceptance' tests
7
+ nodes:
8
+ - Windows_Server-2012r2-64
9
+ - windows-10-64
10
+ - Windows_Server-2008r2-64
11
+
12
+ # You can group classes here to save typing
13
+ class_groups:
14
+
15
+ # You can group nodes here to save typing
16
+ # We have created a 'non_windows_nodes' group because we can't
17
+ # give you Windows vagrant boxes to test with because licensing,
18
+ # we can give you fact sets though so go crazy with spec testing!
19
+ node_groups:
20
+
21
+ test_matrix:
22
+ - all_nodes:
23
+ classes: "all_classes"
24
+ tests: "spec"
@@ -29,6 +29,7 @@ describe "<%= cls.name %>" do
29
29
  end
30
30
  <% end -%>
31
31
 
32
+ <% unless opts[:no_workarounds] -%>
32
33
  before :each do
33
34
  # Curtrently there is some code within Puppet that will try to execute
34
35
  # commands when compiling a catalog even though it shouldn't. One example is
@@ -41,7 +42,66 @@ describe "<%= cls.name %>" do
41
42
  unless File.exist? expected_null_file
42
43
  allow(Puppet::Util::Execution).to receive(:execute).and_raise(Puppet::ExecutionFailure.new("Onceover caused this"))
43
44
  end
45
+
46
+ # The windows ACL module causes issues when compiled on other platforms
47
+ # These are detailed in the following ticket:
48
+ # https://github.com/rodjek/rspec-puppet/issues/665
49
+ #
50
+ # The below should work around this common issue
51
+ if Puppet::Type.type(:acl)
52
+ allow_any_instance_of(Puppet::Type.type(:acl).provider(:windows)).to receive(:validate)
53
+ allow_any_instance_of(Puppet::Type.type(:acl).provider(:windows)).to receive(:respond_to?).with(:get_account_name).and_return(false)
54
+ allow_any_instance_of(Puppet::Type.type(:acl).provider(:windows)).to receive(:respond_to?).with(:get_group_name).and_return(false)
55
+ allow_any_instance_of(Puppet::Type.type(:acl).provider(:windows)).to receive(:respond_to?).with(:validate).and_return(true)
56
+ end
57
+
58
+ # The windows_adsi provider also has an issue where the contructor takes
59
+ # a different number of arguments depending on whether the ADSI
60
+ # underlying connectivity exists. This causes the following error:
61
+ #
62
+ # wrong number of arguments (given 1, expected 0)
63
+ #
64
+ # This fixes that if we aren't using Windows
65
+ begin
66
+ # Test to see if this works without modification
67
+ require 'puppet/util/windows'
68
+ require 'puppet/util/windows/adsi'
69
+ Puppet::Util::Windows::ADSI.computer_name
70
+ rescue LoadError, StandardError
71
+ # Declare an entire mocked module because for some reason we can't load it unless we are on Windows
72
+ module Puppet::Util::Windows
73
+ module ADSI
74
+ class ADSIObject; end
75
+ class User < ADSIObject; end
76
+ class UserProfile; end
77
+ class Group < ADSIObject; end
78
+ end
79
+ module File; end
80
+ module Registry
81
+ end
82
+ module SID
83
+ class Principal; end
84
+ end
85
+ class EventLog; end
86
+ end
87
+
88
+ # Mock commonly used things
89
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_sid).and_return('S-1-5-32-544')
90
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).and_return(nil)
91
+
92
+ allow_any_instance_of(Puppet::Util::Windows::ADSI::User).to receive(:initialize)
93
+ allow_any_instance_of(Puppet::Util::Windows::ADSI::User).to receive(:groups).and_return([])
94
+ allow_any_instance_of(Puppet::Util::Windows::ADSI::User).to receive(:name_sid_hash).and_return({})
95
+
96
+ # Group instance methods
97
+ allow_any_instance_of(Puppet::Util::Windows::ADSI::Group).to receive(:members).and_return([])
98
+ allow_any_instance_of(Puppet::Util::Windows::ADSI::Group).to receive(:members_sids).and_return([])
99
+
100
+ # Class methods
101
+ allow(Puppet::Util::Windows::ADSI::Group).to receive(:name_sid_hash).and_return({})
102
+ end
44
103
  end
104
+ <% end -%>
45
105
 
46
106
  <% if @after_conditions -%>
47
107
  after :each do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onceover
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.16.0
4
+ version: 3.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dylan Ratcliffe
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-21 00:00:00.000000000 Z
11
+ date: 2020-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backticks
@@ -235,19 +235,19 @@ dependencies:
235
235
  - !ruby/object:Gem::Version
236
236
  version: 0.2.0
237
237
  - !ruby/object:Gem::Dependency
238
- name: table_print
238
+ name: terminal-table
239
239
  requirement: !ruby/object:Gem::Requirement
240
240
  requirements:
241
241
  - - ">="
242
242
  - !ruby/object:Gem::Version
243
- version: 1.0.0
243
+ version: 1.8.0
244
244
  type: :runtime
245
245
  prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
247
247
  requirements:
248
248
  - - ">="
249
249
  - !ruby/object:Gem::Version
250
- version: 1.0.0
250
+ version: 1.8.0
251
251
  - !ruby/object:Gem::Dependency
252
252
  name: versionomy
253
253
  requirement: !ruby/object:Gem::Requirement
@@ -299,6 +299,7 @@ files:
299
299
  - factsets/Ubuntu-12.04-64.json
300
300
  - factsets/Ubuntu-14.04-32.json
301
301
  - factsets/Ubuntu-14.04-64.json
302
+ - factsets/Ubuntu-18.04-64.json
302
303
  - factsets/Windows_Server-2008r2-64.json
303
304
  - factsets/Windows_Server-2012r2-64.json
304
305
  - factsets/solaris-10_u9-sparc-64.json
@@ -309,7 +310,6 @@ files:
309
310
  - features/formatting.feature
310
311
  - features/help.feature
311
312
  - features/init.feature
312
- - features/run.feature
313
313
  - features/show.feature
314
314
  - features/step_definitions/cache.rb
315
315
  - features/step_definitions/common.rb
@@ -320,6 +320,8 @@ files:
320
320
  - features/support/command_helper.rb
321
321
  - features/support/controlrepo_helper.rb
322
322
  - features/support/env.rb
323
+ - features/windows.feature
324
+ - features/zzz_run.feature
323
325
  - lib/onceover/beaker.rb
324
326
  - lib/onceover/beaker/spec_helper.rb
325
327
  - lib/onceover/class.rb
@@ -388,6 +390,15 @@ files:
388
390
  - spec/fixtures/controlrepos/function_mocking/site/role/manifests/test_new_functions.pp
389
391
  - spec/fixtures/controlrepos/function_mocking/spec/onceover.yaml
390
392
  - spec/fixtures/controlrepos/minimal/environment.conf
393
+ - spec/fixtures/controlrepos/windows/Gemfile
394
+ - spec/fixtures/controlrepos/windows/Puppetfile
395
+ - spec/fixtures/controlrepos/windows/environment.conf
396
+ - spec/fixtures/controlrepos/windows/site-modules/role/manifests/acl.pp
397
+ - spec/fixtures/controlrepos/windows/site-modules/role/manifests/groups.pp
398
+ - spec/fixtures/controlrepos/windows/site-modules/role/manifests/users.pp
399
+ - spec/fixtures/controlrepos/windows/site/role/manifests/groups.pp
400
+ - spec/fixtures/controlrepos/windows/site/role/manifests/users.pp
401
+ - spec/fixtures/controlrepos/windows/spec/onceover.yaml
391
402
  - spec/onceover/controlrepo_spec.rb
392
403
  - spec/spec_helper.rb
393
404
  - templates/.fixtures.yml.erb
@@ -407,7 +418,7 @@ homepage: https://github.com/dylanratcliffe/onceover
407
418
  licenses:
408
419
  - Apache-2.0
409
420
  metadata: {}
410
- post_install_message:
421
+ post_install_message:
411
422
  rdoc_options: []
412
423
  require_paths:
413
424
  - lib
@@ -422,9 +433,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
422
433
  - !ruby/object:Gem::Version
423
434
  version: '0'
424
435
  requirements: []
425
- rubyforge_project:
436
+ rubyforge_project:
426
437
  rubygems_version: 2.7.6.2
427
- signing_key:
438
+ signing_key:
428
439
  specification_version: 4
429
440
  summary: Testing tools for Puppet controlrepos
430
441
  test_files: []