Como puedo añadir test STI simple para un paquete

Prueba una instrucción única

Tarea

Esto es un paquete algúnpquete, el cual contiene un binario: /usr/bin/algúnbinario

La manera más simple y obvia para probar este binario es ejecutarlo: algúnbinario --help y compruebe el estado de salida del resultado.

¿Como añadir este test para el paquete?

Roles de Test Estándar framework proporciona solución para la tarea. Está completamente soportado en Fedora Rawhide.

Solución

Crea un archivo tests/tests.yml dentro del dist-git del paquete:

rpms/algún-paquete.git:
.
├── 0001-algo.patch
├── algún-paquete.spec
├── fuente
└── pruebas
    └── tests.yml

tests.yml es un playbook ansible, donde describe prueba de entoro y pasos para ejecutar sus pruebas.

Hay muchas opciones y ejemplos disponibles, pero enfoque en la tarea a mano: queremos ejecutar tan solo una instrucción.

Para este caso el contenido del archivo aparecería como sigue:

rpms/algún-paquete.git:tests/tests.yml
- hospedaje: localhost
  roles:
  - rol: standard-test-basic                         (1)
    etiquetas:
    - clásico
    pruebas:
    - simple:
        dir: .
        ejecute: "algo binario --help"                      (2)
1 esto es un rol de prueba estándar, tenga cuidado del entorno de prueba, bitácora, resultados archivados, etc
2 esto es su instrucción de prueba, esto sale con código que define la extracción de la prueba

Envíe su cambio como una petición de pull para ver los resultados del test en el interfaz Pagure, o lo ponga directamente a dist-git y obtenga resultados de pruebas nuevas cada vez que construya el paquete en Koji.

Pruebas serán ejecutadas en un modo sin-bloqueo hasta que configure la puerta de acceso.

Pruebas en un (sub)paquete

Tarea

Hay un paquete algún-paquete, y hay una suite de pruebas de integración para ello empaquetado en un paquete alguna-prueba separada, la cual proporciona el binario de run_some_tes en la ruta del sistema.

Su logro es disparar este binario como una prueba para un paquete principal.

Solución

Lo mismo que arriba, necesita crear un archivo de configuración tests.yml con el contenido siguiente:

rpms/algún-paquete.git:tests/tests.yml
---
- hosts: localhost
  roles:
    - rol: prueba-estándar-básica
      etiquetas:
        - clasico
      paquetes_requeridos:
        - alguna-prueba            (1)

      tests:
        - integration_tests:            (2)
            dir: .
            ejecutar: ejecutar_alguna_pruebas         (3)
1 paquete adicional el cual necesita ser instalado en el entorno de pruebas
2 cualquier cadena, será utilizada como identificador para artefactos y resultados de pruebas
3 instrucción de ejecución de prueba

Pruebas en la pelota de fuente

Pruebas en repositorio externo

Tarea

Ahora miraremos en configuración ligeramente más complicada.

Suponga hay un paquete algúnpaquete el cual vamos a probar. Hay una suite de pruebas de integración para esto, el cual está (tristemente) aún no empaquetado y localizado en un repositorio git separado https://dondesea/algunaprueba.git. La suite de pruebas tiene una dependencia en alguna herramienta empaquetada alguna-hherramientas. Y en el repositorio de pruebas hay un guion ejecuta_alguna_prueba el cual dispara la ejecución de pruebas.

El objetivo es para disparador de la ejecución de la suite de pruebas para un paquete.

Solución

Necesitamos crear un archivo tests.yml de configuración con el siguiente contenido:

rpms/algún-paquete.git:tests/tests.yml
---
- hosts: localhost
  roles:
    - rol: standard-test-basic                        (1)
      etiquetas:
        - clasico

      required_packages:
        - alguna herramienta                                     (2)

      repositorios:
        - repo: "https://dondesea/algunaprueba.git"      (3)
          dest: "alguna-prueba"                            (4)

      tests:
        - integration_tests:                           (5)
            dir: "algunaspruebas"                           (6)
            run: "run_some_tests --all"                (7)
1 el mismo rol de la prueba como usual
2 paquete adicional el cual necesita ser instalado en el entorno de pruebas
3 ruta para repositorio git remoto
4 ruta local donde el repositorio será comprobado
5 cualquier cadena, será utilizada como identificador para artefactos y resultados de pruebas
6 la misma carpeta que en <4>, contiene el repositorio externo fuera de lo comprobado
7 instrucción de ejecución de prueba

Preguntas

¿Que si quiero ejecutar no uno sino una secuencia de instrucciones?

Ponga un guion de bash en la carpeta tests/scripts/ y lo ejecuta desde el playbook.

rpms/algún-paquete.git:
.
├── 0001-algo.patch
├── algún-paquete.spec
├── sources
└── tests
    ├── scripts
    │   └── run_tests.sh      (1)
    └── tests.yml
1 su escenario de pruebas personales

Configura prueba de dist-git para ejecutar este guion:

- hosts: localhost
  roles:
  - role: standard-test-basic      (1)
    tags:
    - classic
    tests:
    - simple:
        dir: scripts               (2)
        run: ./run_tests.sh        (3)
1 mismo rol estándar
2 intercambia a subcarpeta (ruta es relativo para carpeta tests/)
3 esto es el test de guion, su código de salida es el resultado del test

¿Qué está debajo de la cobertura?

Para probar construcción:

  • comprobar repo dist-git

  • toma última imagen qcow de Fedora Rawhide

  • instala últimos paquetes desde la compilación koji sobre ello

  • ejecuta reproductor ansible definido en tests.yml

¿Como verifico mi configuración?

Es posible ejecutar y depurar localmente funciones de prueba estándar. Pero recomendamos intensivamente utilizar el flujo de trabajo de solicitud de extracción de él. simplemente cree una solicitud de extracción y espere para CI para reactivarlo.

Disparamos casi el mismo IC de maquinaria para pruebas PR como es utilizado para las nuevas construcciones.

Y tan pronto como resultado de la prueba está ya. aparecerá sobre la petición del tirador de la página en Fedora Pagure

Para reiniciar la prueba añada un comentario para PR en Pagure, con el contenido siguiente: [citest]