2014-01-04 1 views
10

Я использую плагин ГЭБ 0.9.2 для Грааль 2.3.4Grails вариант ГЭБА -baseUrl не работает для удаленных служб

Я хочу, чтобы запустить функциональные тесты отдельно от службы, на два отдельных хостах.

Я наблюдал следующее:

Если я запустить службу на том же хосте, и выполнить:

grails test-app functional: -baseUrl=http://localhost:8080/foo/ --non-интерактивный

тогда тесты работать с этой уже запущенной службой и проходить.

Если служба не запущена, и я выполняю ту же самую команду, то новый запуск экземпляра службы запускается внутри grails test-app, и тесты выполняются против этого. (Это неожиданно для меня)

Если служба работает на другом хосте, при сказать http://other:16060/foo/ и я бегу:

grails test-app functional: -baseUrl=http://other:16060/foo/ --non-интерактивный

. .. затем запускается локальная служба, и тесты выполняются против этого, а не против указанной удаленной службы. Опять это неожиданно для меня.

Не могу найти документацию, объясняющую это поведение.

Возможно ли запустить test-app на удаленном ходу?

(я помню, хотя я не проверял, в последнее время такое поведения было и в случае с Грааль 2.2.2)

ответ

1

Это, как представляется Grails ошибка (? Функция).

Grails проверяет, работает ли служба, подключившись к служебному порту.

Если услуга не запущена, она начинает обслуживание.

Неисправность: проверка того, работает ли служба, всегда выполняется против localhost/127.0.0.1, даже если baseUrl указывает на другой хост.

Я работал вокруг него, создав поддельный сервер 127.0.0.1, используя инструмент unix nc. Этого достаточно, чтобы кризировать, что служба уже запущена, а не запускает новую. Затем он уважает baseUrl и тестирует удаленный.

Ugh.

0

пропусканием BaseUrl аргумента то, как вы запустите его на удаленный сервер, так что вы все делаете правильно там. Единственная причина, по которой это не так, - это вы также передать флаг -inline или -war.

Попробуйте отключить разветвленное выполнение в ваших тестах и ​​посмотреть, не устраняет проблему, возможно, аргумент не передается разветвленной JVM.

http://grails.org/doc/2.3.x/guide/commandLine.html#forkedMode

+0

Я установил это: grails.project.fork = [ тест: ложные ], и это выглядит, из pstree, что его работает один процесс Java с кучей нитей. Он по-прежнему запускает локальный JVM Tomcat с приложением в нем. Я не понимаю, где в исходном коде Grails это «не работает» предполагается (не). Насколько я могу видеть из FunctionalTestPhaseConfigurer, он всегда начнет что-то? –

+0

Если я запускаю nc -l -p 8080 на localhost и запускаю команду grails test, она не запускает новый контейнер и вместо этого пытается запустить тест против не-веб-сервера, который является nc. Я вижу, что первый HTTP-запрос входит в nc. Поэтому, возможно, он полностью игнорирует baseUrl. –

+1

Это может быть ваша проблема - http://jira.grails.org/browse/GRAILS-8651. –