Making Tests Pass

So, let’s start the process of iterating over the steps, and making them pass. Open up the step definitions in your favorite editor, and locate the steps that correspond to our first scenario. Let’s remind ourselves of the scenario:

Scenario: Users can connect to server via ssh key
  Given a newly bootstrapped server
  When the technical users recipe is applied
  Then a user should be able to ssh to the server

In an ideal world, I’d take you through each step one fail at a time, iterating over the development of the step definitions. On account of space and time constraints, this time I’m going to show you how I’d write the tests, and talk you through it:

Given /^a newly bootstrapped server$/ do
  create_server("teamserver", "192.168.20.20")
end

When /^the technical users recipe is applied$/ do
  set_run_list('teamserver', 'recipe[users::techies]')
  run_chef('teamserver')
end

When /^the technical users recipe is applied$/ do
  set_run_list('teamserver', 'recipe[users::techies]')
  run_chef('teamserver')
end

Let’s look at them one at a time:

Given /^a newly bootstrapped server$/ do
  create_server("teamserver", "192.168.20.20")
end

We’re using some Cucumber-Chef helper code here—create_server() is a method that is always available that will spin up a new Linux container, managed by Chef. At the time of writing, it’s necessary to specify the IP of the machine, but in a future release I anticipate that the test lab will provide DHCP services. For now, you need to specify an IP in the 192.168.20.0/24 ...

Get Test-Driven Infrastructure with Chef now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.