У меня есть скрипт ccm.py
, который запускает кластер Cassandra
на локальной машине. Я могу запустить команду с помощью командной строки Windows. Но я получаю ошибку, если пытаюсь сделать это, используя Process
класс в Scala
.
Я хочу запустить его перед началом моих тестовых случаев. Поэтому я звоню Process
в beforeAll
.
override def beforeAll():Unit = {
println("starting cassandra cluster locally")
val ccmCommand = Process("ccm.py start").!
}
Я получаю ошибку
An exception or error caused a run to abort: Cannot run program "ccm.py": CreateProcess error=193, %1 is not a valid Win32 application
java.io.IOException: Cannot run program "ccm.py": CreateProcess error=193, %1 is not a valid Win32 application
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
Я также пытался использовать команду cassandra -f
(которая также работает из приглашения cmd
), но я получил ошибку
An exception or error caused a run to abort: Cannot run program "cassandra": CreateProcess error=2, The system cannot find the file specified
java.io.IOException: Cannot run program "cassandra": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
Как мне решить проблему?
Обновление
Благодаря Алексу Отту я добился некоторого прогресса, но я думаю, что должен быть лучший и более надежный способ тестирования кода, а также сделать код более переносимым
Код, который пока работает,
override def beforeAll():Unit = {
println("starting cassandra cluster locally")
val ccmCommand = Process("python",Seq("C:\\Users\\manu\\Documents\\manu\\ccm-3.1.4.tar\\dist\\ccm-3.1.4\\ccm.py","start")).run //NOT GOOD. Using hardcoded path!!
println(s"ccm returned ${ccmCommand}")
Thread.sleep(30000) //the wait is too long and there is no guarantee that the cluster will be up properly
}
Есть ли лучший (надежный w.r.t без жесткого кодирования пути) запуск кластера до выполнения тестов.