Condividi Codice di Test

Motivazione

Per rendere il flusso di lavoro della CI affidabile ed efficiente, è cruciale mantenere la copertura dei test sempre in buono stato. Condividere il codice di test tra diversi pacchetti (anche tra più rami dello stesso pacchetto) può aiutare in modo significativo a:

  • Prevenire la duplicazione del codice di test

  • Minimizzare la manutenzione dei test

  • Rilevare le incompatibilità in anticipo

In generale, i test definiscono come funziona il software e la funzionalità di base di molti pacchetti non cambia così spesso. Ci sforziamo di mantenere la compatibilità all’indietro dove possibile. Pertanto, sembra naturale che, per tali componenti, i test che proteggono la specifica possano cambiare a un ritmo più lento rispetto ai rami di distribuzione.

Vedi l’intera discussione sulla ci-list per ulteriori dettagli sul contesto.

Attuazione

Memorizza il codice dei test nel tuo repository preferito e fai riferimento ai test dal file yaml di dist-git. Esiste anche un namespace speciale tests dedicato alla memorizzazione dei test di integrazione di Fedora CI:

Usa fedpkg per clonare rapidamente i repository dal namespace tests:

fedpkg clone tests/shell

tmt

Abilitare i test da un repository remoto utilizzando tmt è semplicissimo:

discover:
    how: fmf
    url: https://src.fedoraproject.org/tests/shell.git

Vedi la documentazione della fase discover per maggiori dettagli.

Esempi

Ecco alcuni esempi reali in cui la condivisione del codice dei test può aumentare l’efficienza a lungo termine.

SELinux

Diversi componenti dello spazio utente di SELinux condividono la copertura dei test in un unico repository di test selinux:

Ruby

Un altro esempio è Ruby: con circa 80 pacchetti relativi a Ruby on Rails, sarebbe utile ed efficiente avere un unico punto per i test di integrazione che verifichino che il framework funzioni correttamente dopo l’aggiornamento di uno qualsiasi di questi pacchetti. Al contrario, mantenere tali test in 80 repository sarebbe un compito noioso.

Attualmente il repository condiviso tests/ruby ospita questi tre test di integrazione di Ruby:

  • systemtap-static-probes-in-ruby - esercizio dell’api systemtap di ruby

  • tls-minimal-version - ensure Ruby OpenSSL respects crypto-policies

  • run-basic-rails-application - esecuzione di una semplice applicazione rails

Shell

Ci sono diverse shell che implementano la specifica POSIX:

  • bash

  • ksh

  • mksh

  • zsh

  • dash

Tutti condividono una quantità significativa di copertura dei test e non ha senso eseguire il commit e mantenere test identici in cinque repository diversi (+ eventuali branch).

Repository dei test per le shell:

summary:
    Run relevant tests from the shell tests repository
discover:
    how: fmf
    url: https://src.fedoraproject.org/tests/shell
    filter: component:bash
execute:
    how: tmt
environment:
    PACKAGES: bash
    SH_BIN: bash

Avvia

Per creare un nuovo repository nel namespace tests, usa il comando request-tests-repo di fedpkg. Ad esempio, per creare un repository di test condiviso con il nome foo, che sarà disponibile su [https://src.fedoraproject.org/tests/foo.git](https://src.fedoraproject.org/tests/foo.git)

  • Configura l’autenticazione su pagure in base alla guida del comando request-repo

    fedpkg request-repo -h
  • Richiedi un nuovo repository con una descrizione sensata

    fedpkg request-tests-repo foo "Descrizione del repository"