Skip to content

Instantly share code, notes, and snippets.

@danielpardorus
Last active June 30, 2017 09:10
Show Gist options
  • Save danielpardorus/7e31d24952f862db53cf7b48015c2790 to your computer and use it in GitHub Desktop.
Save danielpardorus/7e31d24952f862db53cf7b48015c2790 to your computer and use it in GitHub Desktop.

Tests en Chef

CHEF TDD (TEST DRIVEN DEVELOPER)

enter image description here

CHEF BDD

Pruebas de caja negra -> "outside-in"

Caso de uso:

Testeos a realizar:

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

Ejemplos de tests unitarios:

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

enter image description here

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment