Pruebas de caja negra -> "outside-in"
1. Se crea el recetario
1.1. $ chef generate cookbook cookbooks/httpd
2. GIT
Ficheros temporales no sería necesario subirlos: .kintchen...
2.1. $ git init
2.2. $ git config --edit --global
2.3. $ git remote -v
Lo ideal es usar las claves SSH propias de cada usuario, o si no, crear unas nuevas con ssh-keygen.
2.4. Se crea un nuevo repositorio en [github]
- 2.4.5
$ git remote add origin git@github.com:danielpardorus/httpd.git
2.5$ git add .
2.6.$ git commit -m "Initial commit"
2.7.$ git push
3. Tests Caja Negra (Integración)
3.1. Se crea el test con los requisitos obtenidos
3.2. Pruebas de caja negra (Integración), siguiendo TDD:
En este tipo de pruebas solo se realizan pruebas que se van a ver desde fuera, NO si se ha creado un fichero, si un packete instalado...
- 3.2.1
$ kitchen list
- 3.2.2 Se modifica el fichero .kitchen.yml
- 3.2.3
$ kitchen create
(Se crean las máquinas de prueba) - 3.2.4
$ kitchen converge
( Se preparan los tests) - 3.2.4
$ kitchen verify
( Se lanzan los tests)
Nota!
$ kitchen login
Lanza una conexión ssh a la máquina de pruebas.
- 3.2.5
$ kitchen destroy
3.3. Se crea la receta que satisfaga los tests y se vuelve al paso de prueba.
3.4. $ fodcritic .
3.5. $ rubocop
3.6. [Arreglar fallos dados por las 2 herramientas anteriores.]
4. Mutation Tests
Consiste en ir creando mutaciones, es decir, provocar fallos y ver si de verdad falla.
4.1. Por ejemplo: comentar un include_recipe.
4.2. $ kitchen converge
4.3. $ kitchen verify
4.4. Las pasa porque sigue ejecutandose en la misma máquina.
4.5. $ kitchen destroy
4.6. $ kitchen test
5. Unit Tests
5.1. Se crea un Spec Helper, definiendo que se ejecuta, formatos, estilo...
- 5.1.1 cookbooks/motd/spec/spec_helper.rb
5.2. Se crean los tests unitarios (caja blanca) en .\spec\unit\recipes\default_spec.rb
5.3. chef exec rspec .\spec\unit\recipes\default_spec.rb
5.4. Se vuelven a ejecutar las mutaciones.
5.5. $ fodcritic .
5.6. $ rubocop
5.7. [Arreglar fallos dados por las 2 herramientas anteriores.]
En ChefSpec se simula el funcionamiento mientras que en InSpec se levanta una máquina y se ejecuta todo paso a paso.
6. Refactorizar
6.1 1º Se hace modular
6.2. $ chef generate recipe install
6.3. $ chef generate recipe configuration
6.4. $ chef generate recipe service
6.5. [Eliminar los tests que genera por defecto] $ rm .\test\recipes\xxxx.rb
6.6. Ahora llamamos desde default.rb las otras recetas
6.7. $ foodcritic .
6.8. $ rubocop
6.9. $ kitchen converge
6.10. $ kitchen verify
6.11. 2º Se modifican atributos: $ chef generate attribute default
6.12. Se hace 3º Multiplataforma, pero siguiendo TDD y modificando el .kitchen.yml.
6.13. Se vuelven a ejecutar los tests
Nota! Se puede lanzar un depurador añadiendo al fichero las líneas :
require 'pry' y binding.pry
en las recetas.