2012-05-29 13 views
11

Sto eseguendo test funzionali con geb.Esecuzione di script bash in gradle

La mia applicazione viene distribuita utilizzando virgo e utilizza HSQLDB per archiviare i dati. Vorrei eseguire dei test su questa versione di applicazione funzionante, ma vorrei iniziare con un database vuoto, ogni volta che eseguo webtest.

Ho scritto un semplice script bash

#!/bin/sh 
rm -rf $VIRGO_HOME/aresdb* 
$VIRGO_HOME/bin/shutdown.sh & 
sleep 10 
$VIRGO_HOME/bin/startup.sh & 

che rimuove il database e riavvia virgo.

Tuttavia, quando lo aggiungo al comando build.gradle il comando di esecuzione non termina mai.

task cleanDB(type: Exec) { 
    commandLine './clean.sh' 
} 

Perché è così? Quando eseguo questo script in console, restituisce rapidamente (ma vergine scrive ancora nella console).

ho cercato di eseguirlo in thread separato, ma incontrato seguente errore:

task cleanDBThread()<<{ 
    def cleanDBThread1 = Thread.start { 
     cleanDB.execute() 
    } 
    sleep 10000 
    println "wake up!" 
} 

Exception in thread "Thread-32" java.lang.IllegalStateException: 
Cannot start long running operation, as the task artifact state cache 
(/home/tomasz/ares/.gradle/1.0-milestone-9/taskArtifacts) has not been locked. 

Ho anche provato modificando 'creare-drop' in configurazione di sospensione, ma richiede anche il riavvio vergine. Anche ridistribuire l'applicazione non aiuta.

Cosa devo fare per eseguire test Web con database vuoto?

+1

Cosa succede se rimuovi i simboli & dalla fine dei tuoi comandi? Non vedo la necessità che tu esegua i tuoi comandi in background. Questo risolve questo. – Jared

risposta

11

Che strano

ho creato un compito

task callCL(type: Exec) { 
    commandLine './cl.sh' 
} 

che richiama il file cl.sh

#!/bin/sh 
echo "starting " 
./acl.sh & 
sleep 10 
./acl.sh & 

che chiamano acl.sh

#!/bin/sh 
echo "I am not doing anything" 

e ha funzionato! ma una cosa però, quando aggiungi ./acl.sh carattere e commerciale & stai chiamando l'attività da un thread diverso che ha iniziato gradle, e sembra un pò come se fosse appeso. Vorrei rimuovere il & dalle vostre chiamate per spegnere e iniziare in questo modo

#!/bin/sh 
rm -rf $VIRGO_HOME/aresdb* 
$VIRGO_HOME/bin/shutdown.sh 
$VIRGO_HOME/bin/startup.sh 

comunque si desidera attendere nello stesso thread da arresto per iniziare, e non c'è bisogno di chiamare il sonno troppo!