Мы запускаем утилиту cli, которая может запускать несколько команд. Если вызывается с помощью конкретной команды c (cli background
), она должна работать как демон (это команда кобры).
В настоящее время мы делаем это следующим образом:
func (a *App) StartInBackground() error {
cmd := exec.Command(
os.Args[0],
"background",
)
if err := cmd.Start(); err != nil {
return err
}
//write PID to file so that it can be killed
}
Это нормально работает при нормальной работе командной строки.
Проблема заключается в том, что я пишу тест. Таким образом, при выполнении теста os.Args[0]
соответствует двоичному тесту, скомпилированному как часть выполнения теста. Таким образом, вместо нашего двоичного файла с командой (cobra) background
весь тест выполняется снова, а это не то, что нам нужно (в фоновом режиме двоичный файл начнет отправлять данные в службу. Было бы здорово, если бы способ проверить этот конец в конец).
Есть ли способ проверить этот поток?
Я думал собрать где-то двоичный файл в ioutil.TempDir()
, а затем передать двоичный файл путь к приложению как-то для нормальной и для тестовой работы.