diff --git a/UnitTests/SiaApiTests.cpp b/UnitTests/SiaApiTests.cpp index 25289fc..6ba16f3 100644 --- a/UnitTests/SiaApiTests.cpp +++ b/UnitTests/SiaApiTests.cpp @@ -9,6 +9,8 @@ namespace UnitTests { TEST_CLASS(SiaApi) { + DAEMON_TEST() + private: const SiaHostConfig _hostConfig = { TEST_SERVER_AND_PORT, TEST_SERVER_VERSION }; @@ -19,4 +21,6 @@ namespace UnitTests Assert::IsTrue(api.GetServerVersion() == TEST_SERVER_VERSION); } }; + + Daemon SiaApi::_daemon; } \ No newline at end of file diff --git a/UnitTests/SiaCurlTests.cpp b/UnitTests/SiaCurlTests.cpp index d61a157..b078f42 100644 --- a/UnitTests/SiaCurlTests.cpp +++ b/UnitTests/SiaCurlTests.cpp @@ -9,6 +9,8 @@ namespace UnitTests { TEST_CLASS(SiaCurl) { + DAEMON_TEST() + public: TEST_METHOD(InvalidHostConfiguration) { @@ -69,6 +71,7 @@ namespace UnitTests SiaCurlError err = s.Get(L"~~~^**()Z&%$#daemon/version", result); Assert::IsTrue(err == SiaCurlError::InvalidRequestPath); } - }; + + Daemon SiaCurl::_daemon; } \ No newline at end of file diff --git a/UnitTests/SiaWalletApiTests.cpp b/UnitTests/SiaWalletApiTests.cpp index 5c47732..9a668e2 100644 --- a/UnitTests/SiaWalletApiTests.cpp +++ b/UnitTests/SiaWalletApiTests.cpp @@ -9,6 +9,8 @@ namespace UnitTests { TEST_CLASS(SiaWalletApi) { + DAEMON_TEST() + private: CSiaApi _api = CSiaApi({ TEST_SERVER_AND_PORT, TEST_SERVER_VERSION }); @@ -40,4 +42,6 @@ namespace UnitTests Assert::IsTrue(wallet->GetLocked()); } }; + + Daemon SiaWalletApi::_daemon; } \ No newline at end of file diff --git a/UnitTests/UnitTestConfig.h b/UnitTests/UnitTestConfig.h index 6965785..1ce3816 100644 --- a/UnitTests/UnitTestConfig.h +++ b/UnitTests/UnitTestConfig.h @@ -1,6 +1,70 @@ #pragma once -#define TEST_SERVER_AND_PORT L"localhost", 9980 +#define TEST_SERVER_AND_PORT L"localhost", 19980 #define TEST_SERVER_VERSION L"1.1.0" -using namespace Sia::Api; \ No newline at end of file +using namespace Sia::Api; + +class Daemon +{ +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); + } + } + +public: + void Start() + { + Cleanup(); + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + ZeroMemory(&pi, sizeof(pi)); + + String szCmdline = L"\"..\\..\\3rd-party\\Sia-v1.1.0-windows-amd64\\siad.exe\" -d .\\data --api-addr localhost:19980"; + 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();\ + } \ No newline at end of file