27#include "AppContext.h"
28#include "ConsoleApp.hpp"
38inline constexpr insitech::config::FieldSpec<const char*>
K_APP_NAME{
39 "app_name",
"test app name",
"test-console-app"};
41 "app_description",
"test app description",
"test-console-app"};
42inline constexpr insitech::config::FieldSpec<const char*>
K_APP_DIR{
43 "app_dir",
"test app dir",
"/tmp"};
45 "bus_multicast_group",
"test multicast group",
"239.255.19.40"};
47 "bus_multicast_port",
"test multicast port", 47800};
49 "shared_bus_address",
"test shared bus address", 100};
50inline constexpr insitech::config::FieldSpec<const char*>
K_LOG_DIR{
51 "log_dir",
"test log dir",
"/tmp"};
53 "log_min_level",
"test log min level", 1};
69 using ConsoleApp::ConsoleApp;
107 if (
const char* crash_mode = std::getenv(
"TEST_CONSOLE_APP_CRASH_MODE");
108 crash_mode !=
nullptr) {
109 const std::string mode(crash_mode);
110 const char* marker_path = std::getenv(
"TEST_CONSOLE_APP_CRASH_MARKER");
111 bool should_crash =
true;
112 if (mode !=
"always" && marker_path !=
nullptr) {
113 if (std::filesystem::exists(marker_path)) {
114 should_crash =
false;
116 std::ofstream(marker_path) <<
"crashed";
120 if (mode ==
"segv") {
128 int*
volatile bad =
nullptr;
131 }
else if (mode ==
"throw") {
132 std::thread([]() ->
void {
133 throw std::runtime_error(
134 "TestConsoleApp: deliberate uncaught exception (crash test)");
140 constexpr auto throw_settle_time = std::chrono::seconds(5);
141 std::this_thread::sleep_for(throw_settle_time);
148 constexpr auto idle_poll_interval = std::chrono::milliseconds(20);
149 while (m_running.load(std::memory_order_relaxed)) {
150 std::this_thread::sleep_for(idle_poll_interval);
173 const std::string& log_dir,
174 const int port_offset)
175 -> std::unique_ptr<insitech::config::ConfigStore<>> {
177 static insitech::config::JsonConfigCodec codec;
178 auto config = std::make_unique<insitech::config::ConfigStore<>>(
constexpr int K_TEST_CONSOLE_APP_BASE_MULTICAST_PORT
auto make_test_console_app_config(const std::string &app_name, const std::string &log_dir, const int port_offset) -> std::unique_ptr< insitech::config::ConfigStore<> >
Строит ConfigStore только со схемой (без файла — см.
auto run_impl() const -> int
Используется ТОЛЬКО ConsoleAppCrashTest.cpp, чтобы прогнать собственный механизм ConsoleApp по логиро...
void user_signal_handler(int) override
Минимальная самодостаточная схема, объявляющая ровно собственные REQUIRED FIELDS AppContext (см.
constexpr insitech::config::FieldSpec< const char * > K_APP_DESCRIPTION
constexpr insitech::config::FieldSpec< const char * > K_APP_DIR
constexpr insitech::config::FieldSpec< const char * > K_BUS_MULTICAST_GROUP
constexpr insitech::config::FieldSpec< const char * > K_LOG_DIR
constexpr insitech::config::FieldSpec< int64_t > K_BUS_MULTICAST_PORT
constexpr auto K_ALL_FIELDS
constexpr insitech::config::FieldSpec< int64_t > K_SHARED_BUS_ADDRESS
constexpr insitech::config::FieldSpec< int64_t > K_LOG_MIN_LEVEL
constexpr insitech::config::FieldSpec< const char * > K_APP_NAME