Ir al contenido

Motor de Conciliación

El motor de conciliacion es el nucleo algoritmico de Testform. Se encarga de construir el grafo de dependencias, comparar el estado deseado con el estado registrado y orquestar las mutaciones en orden topologico.

Cuando ejecutas testform plan o testform apply, el motor realiza las siguientes fases:

  1. Adquisicion de Bloqueo (Locking): Adquiere un mutex distribuido en el backend de estado para evitar ejecuciones simultaneas.
  2. Descubrimiento y Parsing: Lee y analiza todos los archivos .feature dentro de los directorios definidos en scopes.
  3. Carga del Ledger de Estado: Descarga y deserializa el archivo testform.state.
  4. Consulta Remota (Refresh Opcional): Si no se especifico -refresh=false, consulta las APIs remotas (GitHub, GitLab, Jira) para verificar si los recursos fueron modificados fuera de banda.
  5. Calculo de Diferencias (Diff Computation): Compara los hashes SHA-256 y atributos clave de cada recurso.
  6. Construccion del Grafo Aciclico Dirigido (DAG): Ordena las operaciones segun las relaciones de dependencia (depends_on, suite).
  7. Ejecucion y Commit: Aplica las operaciones en orden topologico y escribe el nuevo estado con un incremento en el numero de serial.
  8. Liberacion de Bloqueo: Libera el mutex distribuido garantizando la integridad del ledger.

Testform resuelve el orden de ejecucion construyendo un grafo dirigido sin ciclos:

[ testplan: @tp-release-v2.5 ]
|
+----------+----------+
| |
v v
[ testcase: @tc-auth ] [ testcase: @tc-checkout ]
| |
+----------+----------+
|
v
[ testrun: @tr-build-412 ]
  • Los testcase se concilian primero para garantizar que sus identidades y metadatos existan.
  • Los testplan se concilian despues, vinculando los casos de prueba incluidos.
  • Los testrun se registran al final, asociando los resultados de ejecucion a los casos existentes.

Si un usuario modifica un caso de prueba directamente en la interfaz web de Jira o GitHub sin pasar por Git:

  • Modo Deteccion (plan): Testform detectara que el hash remoto difiere del hash registrado en el ledger y mostrara un diff indicando la desviacion.
  • Modo Restauracion (apply): Testform sobrescribira la modificacion externa con la definicion autoritativa declarada en Git, eliminando la deriva y restaurando el estado deseado.