Having learned the benefits of applying TDD to application code, my team decided to apply the same technique to infrastructure code. There isn’t quite as much literature available, and we faced many challenges, but we ended up with a rewarding result: a continuous integration server that runs tests at several levels, including acceptance tests. The technology stack involves Chef, Test Kitchen, Vagrant, KVM, Serverspec and Jenkins. Although each one of these parties has at least a good level of maturity, integrating all the blocks has been the interesting part. We discuss how to put together virtualization solutions, configuration management and BDD specs to converge into a fully automated continuous integration system that can and, in our opinion, should become part of the workflow for DevOp teams.