Выполнение скрипта bash в gradle

Я провожу функциональное тестирование с помощью geb.

Мое приложение развернуто с помощью virgo и использует HSQLDB для хранения данных. Я хотел бы выполнить тесты на этой рабочей версии приложения, но я хотел бы начинать с пустой базы данных каждый раз, когда я запускаю веб-тесты.

Я написал простой bash-скрипт

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

, который удаляет базу данных и перезапускает virgo.

Однако, когда я добавляю его в мою задачу build.gradle, выполнение команды никогда не заканчивается.

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

Почему так? Когда я запускаю этот скрипт в консоли, он быстро возвращается (но virgo все еще пишет в консоль).

Я попытался запустить его в отдельном потоке, но столкнулся со следующей ошибкой:

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.

Я также попытался установить «create-drop» в конфигурации гибернации, но это также требует перезапуска virgo. Даже переразвертывание приложения не помогает.

Что мне делать, чтобы запускать веб-тесты с пустой базой данных?

14
задан tkowal 29 May 2012 в 06:38
поделиться