Kill server early on worker error (#2610)
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
import logging
|
||||
import os
|
||||
|
||||
from asyncio import AbstractEventLoop
|
||||
from asyncio import AbstractEventLoop, sleep
|
||||
from string import ascii_lowercase
|
||||
|
||||
import httpcore
|
||||
@@ -179,6 +179,7 @@ async def client(app: Sanic, loop: AbstractEventLoop):
|
||||
assert r.status_code == 200
|
||||
assert r.text == os.path.abspath(SOCKPATH)
|
||||
finally:
|
||||
await sleep(0.2)
|
||||
app.stop()
|
||||
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ from unittest.mock import Mock, call, patch
|
||||
|
||||
import pytest
|
||||
|
||||
from sanic.exceptions import ServerKilled
|
||||
from sanic.worker.manager import WorkerManager
|
||||
|
||||
|
||||
@@ -76,7 +77,8 @@ def test_kill(os_mock: Mock):
|
||||
(Mock(), Mock()),
|
||||
{},
|
||||
)
|
||||
manager.kill()
|
||||
with pytest.raises(ServerKilled):
|
||||
manager.kill()
|
||||
os_mock.kill.assert_called_once_with(1234, SIGKILL)
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import logging
|
||||
|
||||
from os import environ
|
||||
from unittest.mock import Mock, patch
|
||||
|
||||
@@ -37,7 +39,7 @@ def test_config_app(mock_app: Mock):
|
||||
mock_app.update_config.assert_called_once_with({"FOO": "BAR"})
|
||||
|
||||
|
||||
def test_bad_process(mock_app: Mock):
|
||||
def test_bad_process(mock_app: Mock, caplog):
|
||||
environ["SANIC_WORKER_NAME"] = "FOO"
|
||||
|
||||
message = "No restart publisher found in worker process"
|
||||
@@ -45,8 +47,12 @@ def test_bad_process(mock_app: Mock):
|
||||
worker_serve(**args(mock_app))
|
||||
|
||||
message = "No worker state found in worker process"
|
||||
with pytest.raises(RuntimeError, match=message):
|
||||
worker_serve(**args(mock_app, monitor_publisher=Mock()))
|
||||
publisher = Mock()
|
||||
with caplog.at_level(logging.ERROR):
|
||||
worker_serve(**args(mock_app, monitor_publisher=publisher))
|
||||
|
||||
assert ("sanic.error", logging.ERROR, message) in caplog.record_tuples
|
||||
publisher.send.assert_called_once_with("__TERMINATE_EARLY__")
|
||||
|
||||
del environ["SANIC_WORKER_NAME"]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user