#pragma once #define TEST_SERVER_HOST L"localhost" #define TEST_SERVER_PORT 11980 #define TEST_SERVER_AND_PORT TEST_SERVER_HOST, TEST_SERVER_PORT #define TEST_SERVER_VERSION L"1.1.0" using namespace Sia::Api; class Daemon { public: ~Daemon() { Stop(); } private: PROCESS_INFORMATION pi; STARTUPINFO si; private: void Cleanup() { ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); String szCmdline = L"cmd.exe /c del /s /q .\\data"; CreateProcess(nullptr, &szCmdline[0], nullptr, nullptr, TRUE, 0, nullptr, nullptr, &si, &pi); if (pi.hProcess) { WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); } public: void Start() { Cleanup(); String szCmdline = L"\"..\\..\\3rd-party\\Sia-v1.1.0-windows-amd64\\siad.exe\" -d .\\data --api-addr " + String(TEST_SERVER_HOST) + L":" + std::to_wstring(TEST_SERVER_PORT) + L" --no-bootstrap"; CreateProcess(nullptr, &szCmdline[0], nullptr, nullptr, TRUE, 0, nullptr, nullptr, &si, &pi); } void Stop() { if (pi.hProcess) { TerminateProcess(pi.hProcess, 0); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); Cleanup(); } } }; #define DAEMON_TEST() \ private:\ static Daemon _daemon; \ \ public:\ TEST_CLASS_INITIALIZE(StartDaemon)\ {\ _daemon.Start();\ }\ \ TEST_CLASS_CLEANUP(StopDaemon)\ {\ _daemon.Stop();\ } #define DEFINE_DAEMON(class) Daemon class::_daemon