pdqtest 1.4.1 → 1.9.9beta2
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/.travis.yml +9 -3
- data/doc/acceptance_tests.md +100 -22
- data/doc/caching.md +5 -1
- data/doc/development.md +16 -5
- data/doc/emoji.md +20 -9
- data/doc/enabling_testing.md +15 -3
- data/doc/examples.md +25 -6
- data/doc/hiera.md +30 -11
- data/doc/installation.md +59 -8
- data/doc/pdk.md +334 -0
- data/doc/puppet_facts.md +45 -3
- data/doc/puppet_module_dependencies.md +34 -16
- data/doc/running_tests.md +35 -15
- data/doc/test_generation.md +11 -19
- data/doc/tips_and_tricks.md +17 -8
- data/doc/troubleshooting.md +19 -8
- data/doc/upgrading.md +125 -6
- data/doc/windows.md +51 -0
- data/docker_images/centos/Dockerfile +4 -3
- data/docker_images/centos/Makefile +1 -1
- data/docker_images/ubuntu/Dockerfile +3 -3
- data/docker_images/windows/Dockerfile +26 -0
- data/docker_images/windows/make.ps1 +2 -0
- data/exe/pdqtest +73 -28
- data/lib/pdqtest/core.rb +1 -1
- data/lib/pdqtest/docker.rb +143 -51
- data/lib/pdqtest/emoji.rb +33 -7
- data/lib/pdqtest/fastcheck.rb +19 -0
- data/lib/pdqtest/instance.rb +16 -15
- data/lib/pdqtest/logger.rb +35 -0
- data/lib/pdqtest/pdk.rb +98 -0
- data/lib/pdqtest/pdqtest1x.rb +115 -0
- data/lib/pdqtest/puppet.rb +277 -134
- data/lib/pdqtest/skeleton.rb +119 -39
- data/lib/pdqtest/upgrade.rb +42 -42
- data/lib/pdqtest/util.rb +82 -2
- data/lib/pdqtest/version.rb +1 -2
- data/pdqtest.gemspec +8 -13
- data/res/{skeleton → acceptance}/init.bats +0 -0
- data/res/{skeleton → acceptance}/init__before.bats +0 -0
- data/res/{skeleton → acceptance}/init__setup.sh +0 -0
- data/res/skeleton/.puppet-lint.rc +5 -0
- data/res/skeleton/{dot_travis.yml → .travis.yml} +0 -0
- data/res/skeleton/Makefile +20 -5
- data/res/skeleton/make.ps1 +66 -0
- data/res/skeleton/spec/fixtures/hiera.yaml +13 -0
- data/res/skeleton/spec/fixtures/hieradata/test.yaml +11 -0
- data/res/templates/examples_init.pp.erb +1 -1
- metadata +47 -115
- data/lib/pdqtest/lint.rb +0 -31
- data/lib/pdqtest/rspec.rb +0 -69
- data/lib/pdqtest/syntax.rb +0 -20
- data/res/skeleton/Gemfile +0 -7
- data/res/skeleton/Rakefile +0 -3
- data/res/skeleton/dot_gitignore +0 -9
- data/res/skeleton/dot_rspec +0 -2
- data/res/skeleton/hiera.yaml +0 -7
- data/res/skeleton/spec_helper.rb +0 -4
- data/res/skeleton/test.yaml +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 133ce9046197e77d059c3096f234f584869345117cc5bb4e390d4dadca28e0c8
|
4
|
+
data.tar.gz: e49e82c1178044f981dcfb4d07a7549918acbe0e04d9d96f58ead72031a529a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0be32828cc23fa885eb8876cb66bd8da89e5a2e18ba1f3173c7fd76bc7b32034011a723903533ec046f7af3dcd4f4b1f9d01f08d91bb0fef498169b8aaae37cc
|
7
|
+
data.tar.gz: 974ad82acd6cbeaf3f02df995eb422386a68843b9708f72b7ad610105e4fc06bafc8e9bb2f38967f931cb662d4aab3a598c44cec33985335ed59d2b5618dd00b
|
data/.travis.yml
CHANGED
@@ -3,6 +3,12 @@ language: ruby
|
|
3
3
|
services:
|
4
4
|
- docker
|
5
5
|
rvm:
|
6
|
-
- 2.
|
7
|
-
before_install:
|
8
|
-
|
6
|
+
- 2.5.1
|
7
|
+
before_install:
|
8
|
+
- wget https://apt.puppetlabs.com/puppet5-release-trusty.deb
|
9
|
+
- sudo dpkg -i puppet5-release-trusty.deb
|
10
|
+
- sudo apt-get update
|
11
|
+
- sudo apt install -y pdk
|
12
|
+
- gem install bundler
|
13
|
+
script:
|
14
|
+
- bundle exec pdqtest setup && bundle exec rake spec
|
data/doc/acceptance_tests.md
CHANGED
@@ -1,37 +1,65 @@
|
|
1
1
|
# Acceptance tests
|
2
2
|
* Acceptance tests run within a Docker container managed by PDQTest
|
3
3
|
* The Docker container breaks all the rules of Docker and runs a full version of Systemd to allow complete testing of Puppet code in the most portable way (basically treat docker as a high speed VM)... This is deliberate - PDQTest exists to get results, not be a perfect Docker app.
|
4
|
-
* There are
|
4
|
+
* There are three supported docker images:
|
5
|
+
* Centos 7
|
6
|
+
* Ubuntu 16.04
|
7
|
+
* Windows (microsoft/windowsservercore)
|
5
8
|
* Centos is used by default
|
6
9
|
* Ubuntu will be used if your `metadata.json` declares compatibility with Ubuntu
|
7
|
-
*
|
8
|
-
|
9
|
-
*
|
10
|
-
|
11
|
-
*
|
10
|
+
* Windows will be used if your `metadata.json` declares compatibility with
|
11
|
+
Windows
|
12
|
+
* Centos is great for mocking systems like AIX... if you replace OS binaries as
|
13
|
+
required in the `__setup.sh` scripts
|
14
|
+
* If you have a specific container you want to use, pass `--image-name` on the
|
15
|
+
command line, it accepts a comma delimited list of image names to test on
|
16
|
+
* The container will only be started if at least one example file is present
|
17
|
+
**and contains the correct magic marker**
|
18
|
+
* You can get a shell on the docker container if needed, see
|
19
|
+
[Debugging failed builds](#debugging-failed-builds)
|
12
20
|
* See the [docker_images](../docker_images) folder for examples
|
13
21
|
|
14
22
|
### Test workflow
|
15
|
-
1. Scan for all example files under `/examples`. Files must end in `.pp` and
|
23
|
+
1. Scan for all example files under `/examples`. Files must end in `.pp` and
|
24
|
+
contain the magic marker `#@PDQTest` or `#@PDQTestWin` to be processed
|
16
25
|
2. If example files are present, start the docker container
|
17
26
|
3. For each example file:
|
18
|
-
* Check for a file at `/spec/acceptance/EXAMPLE_NAME__setup.sh`,
|
19
|
-
|
20
|
-
|
21
|
-
|
27
|
+
* Check for a file at `/spec/acceptance/EXAMPLE_NAME__setup.(sh|ps1)`, If it
|
28
|
+
exists, run it inside the container. This is a useful place to install
|
29
|
+
preqrequisites, edit files, install mock services, clean up after other
|
30
|
+
tests, etc.
|
31
|
+
* Check for a file at `/spec/acceptance/EXAMPLE_NAME__before.(bats|pats)`, If
|
32
|
+
it exists run BATS or PATS against it. This is normally used to check the
|
33
|
+
system state is clean or that any test prerequisites have been setup
|
34
|
+
correctly
|
35
|
+
* Run `puppet apply` on the example file twice (to check idempotency)
|
36
|
+
* Check for a file at `/spec/acceptance/EXAMPLE_NAME.(bats|pats)`, If it
|
37
|
+
exists run BATS against it. This is normally used to check the state of the
|
38
|
+
system after running puppet. You can do things like check services are
|
39
|
+
running, check files edited correctly, or basically anything that you can
|
40
|
+
write in bash!
|
22
41
|
4. Destroy the container unless we were asked to keep it with `--keep-container`
|
23
42
|
|
24
|
-
Note: `EXAMPLE_NAME` is the example filename minus the directory and `.pp`, eg
|
43
|
+
Note: `EXAMPLE_NAME` is the example filename minus the directory and `.pp`, eg
|
44
|
+
the `EXAMPLE_NAME` for `examples/foo.pp` would just be `foo`.
|
25
45
|
|
26
46
|
### Example files
|
27
47
|
* Found inside `/examples`
|
28
48
|
* Regular puppet code
|
29
49
|
* Will be executed _twice_ (to check for idempotency) with `puppet apply`
|
30
|
-
* _MUST_ contain the magic marker `#@PDQTest` on a line at the
|
31
|
-
|
50
|
+
* _MUST_ contain the magic marker `#@PDQTest` or `#@PDQTestWin` on a line at the
|
51
|
+
top of the file to indicate that this test should be processed by PDQTest
|
52
|
+
* Basically the same as a regular puppet
|
53
|
+
[smoke test](https://docs.puppet.com/puppet/latest/tests_smoke.html#module-smoke-testing) but run automatically and with system state tests
|
32
54
|
|
33
55
|
### BATS tests
|
34
|
-
If you've never seen a BATS test
|
56
|
+
If you've never seen a [BATS](https://github.com/bats-core/bats-core) test
|
57
|
+
before and have previously been writing server spec code, you'll probably kick
|
58
|
+
youself when you see how simple they are.
|
59
|
+
|
60
|
+
BATS lets you run tests anywhere you can run BASH.
|
61
|
+
|
62
|
+
Here's an example:
|
35
63
|
|
36
64
|
```BASH
|
37
65
|
# Tests are really easy! just the exit status of running a command...
|
@@ -41,9 +69,13 @@ If you've never seen a BATS test before and have previously been writing server
|
|
41
69
|
}
|
42
70
|
```
|
43
71
|
|
44
|
-
Tests are all written in BASH and the testcase passes if the stanza returns
|
72
|
+
Tests are all written in BASH and the testcase passes if the stanza returns
|
73
|
+
zero. This means that basically any Linux/Unix sysadmin is now empowered to
|
74
|
+
write Testcases and do TDD - score!
|
45
75
|
|
46
|
-
Since our tests are written in BASH, there are of course all the usual bash
|
76
|
+
Since our tests are written in BASH, there are of course all the usual bash
|
77
|
+
quirks such as failing on incorrect spacing, bizzare variable quoting etc,
|
78
|
+
but given the simplicity gained its a worthwhile tradeoff.
|
47
79
|
|
48
80
|
Consider the following (real) test:
|
49
81
|
|
@@ -53,10 +85,43 @@ Consider the following (real) test:
|
|
53
85
|
}
|
54
86
|
```
|
55
87
|
|
56
|
-
Here, we have done exactly what it looks like we have done - checked for the
|
88
|
+
Here, we have done exactly what it looks like we have done - checked for the
|
89
|
+
value of a particular setting in a text file. Since our tests our plain old
|
90
|
+
BASH, it means we can do things like test daemons are running with `systemctl`,
|
91
|
+
test ports are open with `netstat` and do complete system tests `wget` and
|
92
|
+
`curl`. Cool!
|
93
|
+
|
94
|
+
### PATS tests
|
95
|
+
[PATS](https://github.com/declarativesystems/pats) is to testing with PowerShell
|
96
|
+
as BATS is to testing with BASH. PATS is currently experimental and lets you
|
97
|
+
write your tests using the same syntax as BATS but with the body of the tests
|
98
|
+
being executed with PowerShell. As always, the exit status of your PowerShell
|
99
|
+
fragment is the result of the test. Here's an example that tests the timezone
|
100
|
+
has been set as desired. In this case we have shelled out to run `cmd.exe` but
|
101
|
+
you could just run pure PowerShell if you like:
|
102
|
+
|
103
|
+
```
|
104
|
+
@test "sets the timezone correctly" {
|
105
|
+
cmd /C "tzutil /g | findstr /C:`"New Zealand Standard Time`" "
|
106
|
+
}
|
107
|
+
```
|
108
|
+
|
109
|
+
PATS is used for testing on Windows.
|
110
|
+
|
111
|
+
#### What if my project needs testing on Windows and Linux?
|
112
|
+
At present you would need to run `pdqtest` twice - once in a Windows environment
|
113
|
+
and again in Linux.
|
114
|
+
|
115
|
+
This is because Docker doesn't let us run Windows and Linux on the same platform
|
116
|
+
at the same time (Because it's not magic...).
|
117
|
+
|
118
|
+
This probably isn't as big an issue as it looks since most projects are going to
|
119
|
+
cater to one specific OS family.
|
57
120
|
|
58
121
|
#### Worked Example
|
59
|
-
Lets say you have two examples, `foo.pp` and `init.pp`. In this case, the full
|
122
|
+
Lets say you have two examples, `foo.pp` and `init.pp`. In this case, the full
|
123
|
+
range of files to create for acceptance testing would look like this:
|
124
|
+
|
60
125
|
```
|
61
126
|
mycoolmodule
|
62
127
|
├── examples
|
@@ -78,21 +143,34 @@ mycoolmodule
|
|
78
143
|
PDQTest makes it easy to debug failed builds:
|
79
144
|
|
80
145
|
```shell
|
146
|
+
# Centos
|
81
147
|
pdqtest shell
|
148
|
+
|
149
|
+
# Ubuntu
|
150
|
+
pdqtest --image-name declarativesystems/pdqtest-ubuntu:2018-08-29-0 shell
|
82
151
|
```
|
83
152
|
|
84
|
-
* Opens a shell inside the docker container that would be used to run
|
153
|
+
* Opens a shell inside the default docker container that would be used to run
|
154
|
+
tests
|
85
155
|
* Your code is available at `/testcase`
|
156
|
+
* Use `--image-name` to use a different image (Ubuntu)
|
157
|
+
|
86
158
|
|
87
159
|
```shell
|
88
160
|
pdqtest --keep-container all
|
89
161
|
```
|
90
162
|
* Runs all tests, report pass/fail status
|
91
163
|
* Keeps the container Running
|
92
|
-
* After testing, the container used to run tests will be left running and a
|
164
|
+
* After testing, the container used to run tests will be left running and a
|
165
|
+
message will be printed showing how to enter the container used for testing.
|
166
|
+
Your code is avaiable at `/testcase`
|
93
167
|
* User is responsible for cleaning up the containers created in this mode
|
168
|
+
* Shortcut: `make shell` or `.\make.ps1 shell`
|
94
169
|
|
95
170
|
### Docker privileged mode
|
96
|
-
Sometimes you need to run in Docker privileged mode to enable tests to work -
|
171
|
+
Sometimes you need to run in Docker privileged mode to enable tests to work -
|
172
|
+
not ideal and if anyone else has a better idea please open a ticket with the
|
173
|
+
details. When privileged mode is required, run `pdqtest --privileged` and you
|
174
|
+
will have access.
|
97
175
|
|
98
176
|
WARNING: This grants the container access to the host
|
data/doc/caching.md
CHANGED
@@ -3,4 +3,8 @@ PDQTest will attempt to cache:
|
|
3
3
|
* Puppet modules (via r10k) in `~/.r10k/cache`
|
4
4
|
* The yum cache in `~/.pdqtest/cache/yum`
|
5
5
|
|
6
|
-
Note that since the yum cache is writen to via a docker volume from the
|
6
|
+
Note that since the yum cache is writen to via a docker volume from the
|
7
|
+
container your running tests in, the files in this directory will be root owned.
|
8
|
+
If you need to clear your cache for whatever reason, delete the
|
9
|
+
`~/.pdqtest/cache` directory (you will likely need `sudo`) and PDQtest will
|
10
|
+
recreate it next time it runs.
|
data/doc/development.md
CHANGED
@@ -1,15 +1,26 @@
|
|
1
1
|
# Development
|
2
2
|
|
3
|
-
PRs welcome :) Please ensure suitable tests cover any new functionality and
|
3
|
+
PRs welcome :) Please ensure suitable tests cover any new functionality and
|
4
|
+
that all tests are passing before and after your development work.
|
4
5
|
|
5
6
|
## Support
|
6
|
-
Interested in commercial support of PDQTest? Please email
|
7
|
+
Interested in commercial support of PDQTest? Please email
|
8
|
+
sales@declarativesystems.com to discuss your needs.
|
9
|
+
|
10
|
+
## Debugging
|
11
|
+
* run with `--verbosity debug`
|
12
|
+
* Debug docker API calls: `export EXCON_DEBUG=debug` or `set EXCON_DEBUG=debug`
|
13
|
+
then run `pdqtest` as normal
|
7
14
|
|
8
15
|
## Contributing
|
9
|
-
Bug reports and pull requests are welcome on GitHub at
|
16
|
+
Bug reports and pull requests are welcome on GitHub at
|
17
|
+
https://github.com/declarativesystems/pdqtest.
|
10
18
|
|
11
19
|
### Running tests
|
12
|
-
* PDQTest includes a comprehensive tests for core library functions. Please
|
20
|
+
* PDQTest includes a comprehensive tests for core library functions. Please
|
21
|
+
ensure tests pass before and after any PRs
|
13
22
|
* Run all tests `bundle exec rake spec`
|
14
23
|
* Run specific test file `bundle exec rspec ./spec/SPEC/FILE/TO/RUN.rb`
|
15
|
-
* Run specific test case `bundle exec rspec ./spec/SPEC/FILE/TO/RUN.rb:99`
|
24
|
+
* Run specific test case `bundle exec rspec ./spec/SPEC/FILE/TO/RUN.rb:99`
|
25
|
+
(where 99 is the line number of the test)
|
26
|
+
* If your using RubyMine, you can just right-click -> debug
|
data/doc/emoji.md
CHANGED
@@ -1,22 +1,33 @@
|
|
1
1
|
# Emoji
|
2
2
|
|
3
|
-
Emoji are used within PDQTest to indicate progress and overall status at the
|
3
|
+
Emoji are used within PDQTest to indicate progress and overall status at the
|
4
|
+
request of PDQTest user. Emoji are great because by visually scanning for a
|
5
|
+
distinctive symbol, the user is able to understand the overall test status
|
6
|
+
without having to scan through all of the debug messages.
|
4
7
|
|
5
|
-
|
8
|
+
On windows, there is very limited support for Unicode in the terminal except in
|
9
|
+
PowerShell ISE which is not compatible with PDK
|
10
|
+
[PDK-1168](https://tickets.puppetlabs.com/browse/PDK-1168).
|
6
11
|
|
7
|
-
|
8
|
-
`😬` Test passed
|
12
|
+
On windows, we fallback to output emoticons instead of Emoji
|
9
13
|
|
10
|
-
|
14
|
+
## What do the emoji mean?
|
11
15
|
|
12
|
-
|
13
|
-
`😎` All tests passed
|
16
|
+
### Progress
|
14
17
|
|
15
|
-
|
18
|
+
| Symbol | Meaning | Platform |
|
19
|
+
| --- | --- | --- |
|
20
|
+
| Progress: Test passed | `😬` | `:-)` |
|
21
|
+
| Progress: Test failed | `💣` | `●~*` |
|
22
|
+
| Overall Status: All tests passed | `😎` | `=D` |
|
23
|
+
| Overall Status: One or more tests failed | `💩` | `><(((*>` |
|
24
|
+
| Slow operation | `🐌` | `(-_-)zzz` |
|
25
|
+
| Platform issue/limitation | - | `(-_-)` |
|
16
26
|
|
17
27
|
|
18
28
|
## Disabling emoji
|
19
|
-
In some cases it may be desirable to
|
29
|
+
In some cases it may be desirable to disable the emoji, in this case use the
|
30
|
+
argument:
|
20
31
|
|
21
32
|
```
|
22
33
|
--disable-emoji
|
data/doc/enabling_testing.md
CHANGED
@@ -3,9 +3,21 @@ To add PDQTest to a new or existing puppet module, run the commands:
|
|
3
3
|
|
4
4
|
```shell
|
5
5
|
pdqtest init
|
6
|
-
bundle install
|
6
|
+
pdk bundle install
|
7
7
|
```
|
8
8
|
|
9
|
-
From the top level directory of your puppet module. This will install PDQTest
|
9
|
+
From the top level directory of your puppet module. This will install PDQTest
|
10
|
+
into the `Gemfile.project` (for PDK's bundler), and generate an example set of
|
11
|
+
acceptance tests.
|
10
12
|
|
11
|
-
|
13
|
+
You **must** run `pdk bundle install` to install PDQTest into PDK's bundle and
|
14
|
+
you **must not* run `bundle install` (ever!).
|
15
|
+
|
16
|
+
For more info see (PDK-1172)[https://tickets.puppetlabs.com/browse/PDK-1172]
|
17
|
+
|
18
|
+
PDK must already be present on the system for this to work.
|
19
|
+
|
20
|
+
Note: Your puppet module *must* have a valid `metatadata.json` file. Create
|
21
|
+
one before running `pdqtest init` if you don't already have one. If your
|
22
|
+
creating a puppet module from scratch, try `pdk new module` to create a
|
23
|
+
complete module skeleton that includes a valid version of this file.
|
data/doc/examples.md
CHANGED
@@ -1,10 +1,29 @@
|
|
1
1
|
# Examples
|
2
2
|
|
3
3
|
Here are some projects that use PDQTest:
|
4
|
-
* https://github.com/geoffwilliams/puppet-motd
|
5
|
-
* https://github.com/declarativesystems/download_and_do
|
6
|
-
* https://github.com/GeoffWilliams/puppet-filemagic
|
7
|
-
* https://github.com/declarativesystems/ssh
|
8
|
-
* https://github.com/declarativesystems/puppet-chown_r/tree/master/spec/acceptance
|
9
4
|
|
10
|
-
|
5
|
+
## Linux projects
|
6
|
+
* [realmd](https://github.com/GeoffWilliams/puppet-realmd)
|
7
|
+
Features mock realmd command
|
8
|
+
* [sshkeys](https://github.com/GeoffWilliams/sshkeys)
|
9
|
+
Runs real SSH commands to test keys)
|
10
|
+
* [sysctl](https://github.com/geoffwilliams/puppet-sysctl)
|
11
|
+
Features mock sysctl command that saves state between puppet runs
|
12
|
+
* [motd](https://github.com/geoffwilliams/puppet-motd)
|
13
|
+
A basic module with testing
|
14
|
+
* [download_and_do](https://github.com/declarativesystems/download_and_do)
|
15
|
+
Test downloading files from local directory and running scripts
|
16
|
+
* [filemagic](https://github.com/GeoffWilliams/puppet-filemagic)
|
17
|
+
Complicated! and uses rspec tests on the ruby component of the module
|
18
|
+
* [ssh](https://github.com/declarativesystems/ssh)
|
19
|
+
Fires up a real SSH server and tests status
|
20
|
+
* [chown_r](https://github.com/declarativesystems/puppet-chown_r)
|
21
|
+
Checks permissions of files are correct after doing bulk operations with
|
22
|
+
`chown -r` in an exec
|
23
|
+
|
24
|
+
## Windows projects
|
25
|
+
* Coming soon!
|
26
|
+
|
27
|
+
|
28
|
+
Do you use PDQTest on your own projects? If you have a good public example let
|
29
|
+
me know!
|
data/doc/hiera.md
CHANGED
@@ -1,15 +1,25 @@
|
|
1
1
|
# Hiera
|
2
|
-
Under normal circumstances, only a `profile` module would be consuming Hiera
|
2
|
+
Under normal circumstances, only a `profile` module would be consuming Hiera
|
3
|
+
data directly using the `hiera()` function, and its suggested by many that these
|
4
|
+
too fall back to automatic data binding parameters rather then use the `hiera()`
|
5
|
+
function directly. In this case it makes more sense to use the excellent
|
6
|
+
[Onceover](https://github.com/dylanratcliffe/onceover) tool to perform
|
7
|
+
end-to-end testing of your Hiera data, puppet control repository and
|
8
|
+
roles/profile modules.
|
3
9
|
|
4
10
|
That said, there may be occasions where you need to mock hiera data:
|
5
|
-
* You have implemented Roles and Profiles as a namespace inside a team module
|
6
|
-
|
7
|
-
* You
|
11
|
+
* You have implemented Roles and Profiles as a namespace inside a team module
|
12
|
+
(for multi-tennanting)
|
13
|
+
* You have a module that performs `lookup()` lookups directly
|
14
|
+
* You intend to drive your module by adding data to hiera and including a class
|
15
|
+
to make something happen
|
8
16
|
* Your class fails to compile due to missing hiera data
|
9
|
-
* You have a separate git repository for your `profile` module and want to be
|
17
|
+
* You have a separate git repository for your `profile` module and want to be
|
18
|
+
able to test it
|
10
19
|
|
11
20
|
## Alternative method
|
12
|
-
In some cases where it may be easiest to directly inject strings in lieu of
|
21
|
+
In some cases where it may be easiest to directly inject strings in lieu of
|
22
|
+
setting up a fake hiera:
|
13
23
|
|
14
24
|
### RSpec Tests
|
15
25
|
```ruby
|
@@ -29,15 +39,24 @@ class { "foo":
|
|
29
39
|
}
|
30
40
|
```
|
31
41
|
|
32
|
-
Note that you would need to duplicate your hard-coded mock data between the
|
42
|
+
Note that you would need to duplicate your hard-coded mock data between the
|
43
|
+
rspec tests and any acceptance tests.
|
33
44
|
|
34
|
-
In the more complex cases it may instead be desireable to mock the hiera data in
|
45
|
+
In the more complex cases it may instead be desireable to mock the hiera data in
|
46
|
+
order to enable Puppet's regular lookup systems to work.
|
35
47
|
|
36
|
-
## Mocking
|
37
|
-
PDQTest
|
48
|
+
## Mocking Hiera (RSpec tests)
|
49
|
+
PDQTest fully delegates RSpec tests to PDK, so see
|
50
|
+
[RSpec docs](https://rspec-puppet.com/documentation/configuration/) for how to
|
51
|
+
do this.
|
52
|
+
|
53
|
+
## Mocking hiera (Acceptance tests)
|
54
|
+
PDQTest supports full mocking of Hiera acceptance tests and support for this is
|
55
|
+
enabled automatically when `pdqtest init` is run.
|
38
56
|
|
39
57
|
A basic one-level hierachy is created for you:
|
40
58
|
* Hiera configuration file at `spec/fixtures/hiera.yaml`
|
41
59
|
* Single hiera data file at `spec/fixtures/hieradata/test.yaml`
|
42
60
|
|
43
|
-
Any required hiera data can be added to `test.yaml` and will immediately show up
|
61
|
+
Any required hiera data can be added to `test.yaml` and will immediately show up
|
62
|
+
when lookups are made.
|
data/doc/installation.md
CHANGED
@@ -1,15 +1,66 @@
|
|
1
1
|
# Installation
|
2
|
-
PDQTest
|
2
|
+
PDQTest runs on Linux/MAC and Windows systems, with the caveat that:
|
3
|
+
* Windows acceptance tests can only be run on Windows
|
4
|
+
* Linux acceptance tests can only run on Linux
|
5
|
+
If you are using Windows and want to test Linux modules, the easiest way for you
|
6
|
+
to run PDQTest is to install virtualisation software and then use
|
7
|
+
[Vagrant](http://vagrantup.com/) to create a VM that shares a filesystem with
|
8
|
+
your main Windows desktop. This will allow you to edit your puppet code as you
|
9
|
+
please and have it instantly show up inside of a Linux VM where you can run
|
10
|
+
PDQTest and Docker.
|
3
11
|
|
4
|
-
|
12
|
+
**Do NOT run PDQTest on a managed Puppet node, you may damage the agent**
|
13
|
+
|
14
|
+
## Linux Instructions
|
15
|
+
|
16
|
+
1. Install Ruby - you will need a fairly new version of Ruby as Puppet requires
|
17
|
+
this. On linux you will probably need development libraries, eg
|
18
|
+
`yum groupinstall 'Development Tools'`. Once ruby is installed follow any
|
19
|
+
additional setup steps to activate the environment and then check it really
|
20
|
+
worked by running `ruby --version` before proceeding. Note that `pdqtest`
|
21
|
+
should not be run as `root`. Easy ways to install an up-to-date Ruby:
|
22
|
+
* [RVM](https://rvm.io/)
|
23
|
+
* [RBENV](https://github.com/rbenv/rbenv)
|
5
24
|
2. Make sure `git` is installed - `yum install git`
|
6
|
-
3. Install the
|
25
|
+
3. Install the [PDK OS package](https://puppet.com/docs/pdk/1.x/pdk_install.html)
|
7
26
|
4. Install PDQTest - `gem install pdqtest`
|
8
|
-
5. Install bundler (the only sane way to manage Ruby dependencies)
|
27
|
+
5. Install bundler (the only sane way to manage Ruby dependencies)
|
28
|
+
`gem install bundler`
|
9
29
|
6. Install [Docker CE](www.docker.com)
|
10
|
-
7. Start the `docker` daemon and make sure the user your running as is in the
|
11
|
-
|
30
|
+
7. Start the `docker` daemon and make sure the user your running as is in the
|
31
|
+
`docker` group. You will need to log out and back in again after doing this
|
32
|
+
8. Install the PDQTest docker images by typing `pdqtest setup`
|
33
|
+
|
34
|
+
## Windows Instructions
|
35
|
+
|
36
|
+
1. You will need Windows 10 (Windows 10 Enterprise, Professional, or Education)
|
37
|
+
and the system your running on must enable
|
38
|
+
[VTx](https://en.wikipedia.org/wiki/X86_virtualization#Intel_virtualization_(VT-x))
|
39
|
+
which is needed for
|
40
|
+
[Windows containers](https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/quick-start-windows-10)
|
41
|
+
running under
|
42
|
+
[Hyper-V](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/)
|
43
|
+
which we use for testing:
|
44
|
+
* Laptops/Desktops - enable VTx in BIOS/UEFI
|
45
|
+
* VMs - You **must** run under VMWare and enable VTx in VM settings (as well
|
46
|
+
as enabling on the host)
|
47
|
+
* Make sure to allocate plenty of CPU and memory
|
48
|
+
* Enable Hyper-V (The Hyper-V role cannot be installed on Windows 10 Home)
|
49
|
+
2. Install [Docker](http://docker.com/)
|
50
|
+
* [Docker for Windows](https://docs.docker.com/docker-for-windows/install)
|
51
|
+
installed and
|
52
|
+
[windows containers enabled](https://docs.docker.com/docker-for-windows/#switch-between-windows-and-linux-containers)
|
53
|
+
* [Docker API port enabled for localhost access](https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-docker/configure-docker-daemon)
|
54
|
+
```json
|
55
|
+
"hosts": ["tcp://127.0.0.1:2375"]
|
56
|
+
```
|
57
|
+
3. Install [Chocolatey](https://chocolatey.org/install)
|
58
|
+
4. Install Ruby 2.4 (Ruby 2.5 doesn't work yet
|
59
|
+
[PDK-1171](https://tickets.puppetlabs.com/browse/PDK-1171)):
|
60
|
+
`choco install ruby --version 2.4.3.1`
|
61
|
+
5. Install PDK: `choco install pdk`
|
62
|
+
6. Install bundler `gem install bundler`
|
12
63
|
|
13
|
-
|
64
|
+
**Be sure to read the [Windows notes](windows.md) for guidance on how to run tests
|
65
|
+
on Windows**
|
14
66
|
|
15
|
-
Note: Do *NOT* run PDQTest on a managed Puppet node, you may damage the agent.
|