Skip to content

Commit 5bcfaae

Browse files
author
lexeyo
committed
cc core/server/http: refactor http graceful shutdown test
commit_hash:539953cf62bf481f59ac46e5fda1e09ecc69da98
1 parent 407c685 commit 5bcfaae

5 files changed

Lines changed: 46 additions & 12 deletions

File tree

.mapping.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -805,6 +805,7 @@
805805
"core/functional_tests/early_monitor_port_open/tests/conftest.py":"taxi/uservices/userver/core/functional_tests/early_monitor_port_open/tests/conftest.py",
806806
"core/functional_tests/early_monitor_port_open/tests/test_boot.py":"taxi/uservices/userver/core/functional_tests/early_monitor_port_open/tests/test_boot.py",
807807
"core/functional_tests/graceful_shutdown/CMakeLists.txt":"taxi/uservices/userver/core/functional_tests/graceful_shutdown/CMakeLists.txt",
808+
"core/functional_tests/graceful_shutdown/delaying_handler.hpp":"taxi/uservices/userver/core/functional_tests/graceful_shutdown/delaying_handler.hpp",
808809
"core/functional_tests/graceful_shutdown/main.cpp":"taxi/uservices/userver/core/functional_tests/graceful_shutdown/main.cpp",
809810
"core/functional_tests/graceful_shutdown/static_config.yaml":"taxi/uservices/userver/core/functional_tests/graceful_shutdown/static_config.yaml",
810811
"core/functional_tests/graceful_shutdown/tests/conftest.py":"taxi/uservices/userver/core/functional_tests/graceful_shutdown/tests/conftest.py",
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#pragma once
2+
3+
#include <userver/engine/sleep.hpp>
4+
#include <userver/server/handlers/http_handler_base.hpp>
5+
#include <userver/utils/string_to_duration.hpp>
6+
7+
USERVER_NAMESPACE_BEGIN
8+
9+
namespace server::handlers::testing {
10+
11+
class DelayingServerHandler final : public server::handlers::HttpHandlerBase {
12+
public:
13+
static constexpr std::string_view kName = "handler-delaying";
14+
15+
DelayingServerHandler(const components::ComponentConfig& config, const components::ComponentContext& context)
16+
: HttpHandlerBase(config, context)
17+
{}
18+
19+
std::string HandleRequestThrow(const server::http::HttpRequest& request, server::request::RequestContext&)
20+
const override {
21+
const auto& delay_arg = request.GetArg("delay");
22+
const auto delay = !delay_arg.empty() ? utils::StringToDuration(delay_arg) : std::chrono::milliseconds::zero();
23+
if (delay > std::chrono::milliseconds::zero()) {
24+
LOG_INFO() << "Delaying response for " << delay << " ms";
25+
engine::InterruptibleSleepFor(delay);
26+
}
27+
return "OK";
28+
}
29+
};
30+
31+
} // namespace server::handlers::testing
32+
33+
USERVER_NAMESPACE_END

core/functional_tests/graceful_shutdown/main.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#include "delaying_handler.hpp"
2+
13
#include <userver/clients/dns/component.hpp>
24
#include <userver/clients/http/component_list.hpp>
35
#include <userver/components/minimal_server_component_list.hpp>
@@ -18,6 +20,6 @@ int main(int argc, char* argv[]) {
1820
.Append<server::handlers::TestsControl>()
1921
.Append<components::TestsuiteSupport>()
2022
.Append<server::handlers::Ping>()
21-
.Append<server::handlers::LogLevel>();
23+
.Append<server::handlers::testing::DelayingServerHandler>();
2224
return utils::DaemonMain(argc, argv, component_list);
2325
}

core/functional_tests/graceful_shutdown/static_config.yaml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,9 @@ components_manager:
6060
task_processor: main-task-processor
6161
throttling_enabled: false
6262

63-
handler-log-level:
64-
monitor-handler: true
65-
path: /log-level/{level}
63+
handler-delaying:
6664
method: GET
65+
path: /test
6766
task_processor: main-task-processor
6867

6968
tests-control:

core/functional_tests/graceful_shutdown/tests/test_graceful_shutdown.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
from signal import SIGTERM
33

44
import pytest
5+
import pytest_userver.utils.sync as sync
56

67

78
@pytest.mark.uservice_oneshot
89
async def test_graceful_shutdown_timer_and_header(
910
service_daemon_instance,
1011
service_client,
11-
monitor_client,
1212
dynamic_config,
1313
):
1414
params = [
@@ -25,25 +25,24 @@ async def test_graceful_shutdown_timer_and_header(
2525
dynamic_config.set_values({'GRACEFUL_SHUTDOWN_HEADERS': {'enabled': headers_enabled, 'headers': headers}})
2626
await service_client.update_server_state()
2727

28-
response = await monitor_client.get('/log-level/')
28+
response = await service_client.get('/test')
2929
assert response.status == 200
3030
for header, _ in headers.items():
3131
assert response.headers.get(header) is None
3232

3333
service_daemon_instance.process.send_signal(SIGTERM)
3434

35-
status = 200
36-
while status == 200:
37-
await asyncio.sleep(0.1)
35+
async def is_failing():
3836
response = await service_client.get('/ping')
39-
status = response.status
40-
assert status == 500
37+
return response.status == 500
38+
39+
await sync.wait(is_failing, relax_period_seconds=0.1)
4140

4241
for headers_enabled, headers in params:
4342
dynamic_config.set_values({'GRACEFUL_SHUTDOWN_HEADERS': {'enabled': headers_enabled, 'headers': headers}})
4443
await service_client.update_server_state()
4544

46-
response = await monitor_client.get('/log-level/')
45+
response = await service_client.get('/test')
4746
assert response.status == 200
4847
if headers_enabled:
4948
for header, values in headers.items():

0 commit comments

Comments
 (0)