2015-06-16 2 views
1

У меня есть сервер Unfiltered Netty, который мне нужно отключить и перезапустить после каждого теста.Как получить уведомление, когда нефильтрованный сервер Netty фактически завершает работу?

val mockService = unfiltered.netty.Server.http(mockServicePort).handler(mockServicePlan) 

before { 
    proxyServer.start() 
} 

after { 
    proxyServer.stop() 
} 

В настоящее время это не работает, и я абсолютно уверен, что это потому, что функция stop() неблокирующая и поэтому следующий start() функция вызывается в начале.

Я искал способ заблокировать или получить уведомление о закрытии сервера, но он не появился бы через текущий API.

Есть ли лучший способ достичь того, чего я пытаюсь достичь?

ответ

1

Простой ответ: замените ваш сервер Unfiltered Netty сервером HTTP4S Blaze.

var server: org.http4s.server.Server = null 

val go: Task[Server] = org.http4s.server.blaze.BlazeBuilder 
    .bindHttp(mockServicePort) 
    .mountService(mockService) 
    .start 

before { 
    server = go.run 
} 

after { 
    server.shutdown.run 
} 

Существует также awaitShutdown, который блокируется до тех пор, пока сервер не выключится. Но так как shutdown - это Task, его можно легко получить, когда он закончит. Просто flatMap что дерьмо.

+0

Это смешно, я обсуждал это с Гийомом Массе прошлой ночью, и он предложил то же самое. Я никогда не работал с http4s раньше, но, взглянув на него, он выглядит довольно красиво. Собирался запустить его командой сегодня утром и сделать переключатель, если кто-то не убедил меня в другом, но я думаю, вы свели меня к удару! – jedesah

+1

Я не думаю, что Натан все равно не фильтрует. – jedesah

Смежные вопросы