This guide will help you start a test process for organizational module code and public shared code. Part of writing modules is writing and automating tests. We recommend that you plan and design module testing and (ultimately) automate deployment. If you’re a Forge contributor, having a plan to test code can also help you improve your quality score and get the approved tag.
We’ll give you a list of tools that you can use, and some concrete steps for how to start testing with them.
Tools to test Puppet code
The time to complete each type of test increases as you go down the list. The tests that are quickest to complete are at the top, and the tests that take the longest to complete are at the bottom.
Validate syntax:
puppet parser validate
pdk validate
Check style:
pdk validate
- Puppet-lint to validate Puppet code style
- Rubocop to validate Ruby code style
Unit test:
System/Integration testing:
Start testing
When you start testing, keep it simple and build on your success. The order of these tests (like the list above) goes from less time consuming to more time-consuming and from less complex to more complex.
Syntax and linting
Start by using your organization’s version control tooling to validate syntax and lint code before or during code pushes. This helps ensure that code committed to the repo can be compiled.
Examples:
- Instructions on how to set up and use Git hooks
- Using Git hooks with the Puppet Development Kit (PDK).
Use the Puppet Development Kit (PDK)
We recommend that you convert your modules to be compatible with PDK. Use PDK to validate syntax, check style, and do Rspec-Puppet unit tests on any compatible module to ensure that your code functions and meets structural guidelines.
Unit testing with Rspec-Puppet
Testing in Rspec-Puppet is not done on an agent or by applying code. Rspec-Puppet compiles a catalog and evaluates the catalog’s content against expected test results. When planning and preparing to write or extend unit test code with Rspec, use PDK. The pdk test unit
command compiles a catalog and runs all valid Rspec-Puppet unit tests against it.
We recommend that you set up a continuous integration pipeline to do Puppet unit testing, with your tooling, for example, Travis CI, Jenkins, or Gitlab-CI.
This example file (.gitlab-ci.yml
), runs linting and syntax tests with the command pdk validate
and Rspec-Puppet unit tests with the command pdk test unit
in the Puppet PDK Docker image:
‘.gitlab-ci.yml’
stages:
- syntax
- unit
cache:
paths:
- vendor/bundle
PDK validate:
stage: syntax
image: puppet/pdk:1.16.0.2
script:
- pdk validate
PDK test unit:
stage: syntax
image: puppet/pdk:1.16.0.2
script:
- pdk test unit
More information on Rspec Puppet
System/Integration testing
Puppet System/Integration tests evaluate an enforced node to ensure that the node is configured correctly using a set of tests. We recommend that you use Puppet Litmus and/or Serverspec for system/integration testing. This testing requires infrastructure and communication with a container server or a virtual machine deployment API. It requires more research, access, and planning than the testing previously described in this article.
Litmus deploys a container or virtual machine, enforces the code, and runs the system/integration tests. If you’d like to configure and implement Litmus, learn more by reading a step by step guide for MoTD.
If you can’t use Litmus at your organization, you can use Serverspec. Serverspec is a testing framework. You can write tests and add them to a repo, but the automation to deploy a target node and enforce the code onto it must come from organizational infrastructure processes. Once a target node is deployed and configured, you can use Serverspec to test the target node configuration.
Learn more from this example of Serverspec testing with Vagrant.
Comments
0 comments
Please sign in to leave a comment.