diff --git a/tests/src/serverTestDataMatching.cpp b/tests/src/serverTestDataMatching.cpp index 2cdfc4228d64017d5a8ec935e03c1b61f59f7e3d..8df1947e5cc7ac9604b9880c05b7a785d1a540d7 100644 --- a/tests/src/serverTestDataMatching.cpp +++ b/tests/src/serverTestDataMatching.cpp @@ -6,65 +6,13 @@ #include <ChimeraTK/ControlSystemAdapter/Testing/ReferenceTestApplication.h> //#include <doocs-server-test-helper/ThreadedDoocsServer.h> #include <doocs-server-test-helper/doocsServerTestHelper.h> -#include <eq_client.h> +#include <doocs-server-test-helper/ThreadedDoocsServer.h> -#include <vector> using namespace boost::unit_test_framework; using namespace ChimeraTK; -//DOOCS_ADAPTER_DEFAULT_FIXTURE_STATIC_APPLICATION -static ReferenceTestApplication referenceTestApplication("serverTestDataMatching"); - -extern int eq_server(int, char**); - -struct DoocsLauncher { - DoocsLauncher() { - // choose random RPC number - std::random_device rd; - std::uniform_int_distribution<int> dist(620000000, 999999999); - rpc_no = std::to_string(dist(rd)); - // update config file with the RPC number - std::string command = "sed -i serverTestDataMatching.conf -e " - "'s/^SVR.RPC_NUMBER:.*$/SVR.RPC_NUMBER: " + - rpc_no + "/'"; - auto rc = std::system(command.c_str()); - (void)rc; - - // start the server - doocsServerThread = std::thread(eq_server, boost::unit_test::framework::master_test_suite().argc, - boost::unit_test::framework::master_test_suite().argv); - // wait until server has started (both the update thread and the rpc thread) - EqCall eq; - EqAdr ea; - EqData src, dst; - ea.adr("doocs://localhost:" + rpc_no + "/F/D/UINT/FROM_DEVICE_SCALAR"); - while(eq.get(&ea, &src, &dst)) usleep(100000); - referenceTestApplication.initialiseManualLoopControl(); - } - - /** - * @brief For compatibility with older DOOCS versions declare our own eq_exit - * - * Can be removed once a new doocs server version is released. - */ - void eq_exit() { - auto nativeHandle = doocsServerThread.native_handle(); - if(nativeHandle != 0) pthread_kill(nativeHandle, SIGTERM); - } - - ~DoocsLauncher() { - referenceTestApplication.releaseManualLoopControl(); - eq_exit(); - doocsServerThread.join(); - } - - std::thread doocsServerThread; - static std::string rpc_no; -}; -std::string DoocsLauncher::rpc_no; - -BOOST_GLOBAL_FIXTURE(DoocsLauncher) +DOOCS_ADAPTER_DEFAULT_FIXTURE_STATIC_APPLICATION /**********************************************************************************************************************/ @@ -76,12 +24,12 @@ BOOST_GLOBAL_FIXTURE(DoocsLauncher) BOOST_AUTO_TEST_CASE(testProcessScalar) { std::cout << "testProcessScalar" << std::endl; - auto appPVmanager = referenceTestApplication.getPVManager(); + auto appPVmanager = GlobalFixture::referenceTestApplication.getPVManager(); // We need data consistency between macro pulse number and the data // Everything from now on will get the same version number, until we manually // set a new one. - referenceTestApplication.versionNumber = ChimeraTK::VersionNumber(); + GlobalFixture::referenceTestApplication.versionNumber = ChimeraTK::VersionNumber(); int macroPulseNumber = 12345; DoocsServerTestHelper::doocsSet<int>("//UNMAPPED/INT.TO_DEVICE_SCALAR", macroPulseNumber); @@ -91,7 +39,7 @@ BOOST_AUTO_TEST_CASE(testProcessScalar) { DoocsServerTestHelper::doocsSet<unsigned int>("//UINT/TO_DEVICE_SCALAR", expectedUnsignedInt); DoocsServerTestHelper::doocsSet<float>("//UNMAPPED/FLOAT.TO_DEVICE_SCALAR", expectedFloat); - referenceTestApplication.runMainLoopOnce(); + GlobalFixture::referenceTestApplication.runMainLoopOnce(); CHECK_WITH_TIMEOUT( DoocsServerTestHelper::doocsGet<unsigned int>("//UINT/FROM_DEVICE_SCALAR") - expectedUnsignedInt < 1e-6); @@ -99,17 +47,17 @@ BOOST_AUTO_TEST_CASE(testProcessScalar) { DoocsServerTestHelper::doocsGet<float>("//UNMAPPED/FLOAT.FROM_DEVICE_SCALAR") - expectedFloat < 1e-6); // Send MPN and values with different version numbers - referenceTestApplication.versionNumber = ChimeraTK::VersionNumber(); - referenceTestApplication.runMainLoopOnce(); + GlobalFixture::referenceTestApplication.versionNumber = ChimeraTK::VersionNumber(); + GlobalFixture::referenceTestApplication.runMainLoopOnce(); - referenceTestApplication.versionNumber = ChimeraTK::VersionNumber(); + GlobalFixture::referenceTestApplication.versionNumber = ChimeraTK::VersionNumber(); auto lastExpectedUnsignedInt = expectedUnsignedInt; expectedUnsignedInt = 2U; expectedFloat = 2.42f; DoocsServerTestHelper::doocsSet<unsigned int>("//UINT/TO_DEVICE_SCALAR", expectedUnsignedInt); DoocsServerTestHelper::doocsSet<float>("//UNMAPPED/FLOAT.TO_DEVICE_SCALAR", expectedFloat); - referenceTestApplication.runMainLoopOnce(); + GlobalFixture::referenceTestApplication.runMainLoopOnce(); // Unsigned int value must not be updated because it has data matching exact // FIXME Better way to check this? @@ -123,12 +71,12 @@ BOOST_AUTO_TEST_CASE(testProcessScalar) { DoocsServerTestHelper::doocsGet<float>("//UNMAPPED/FLOAT.FROM_DEVICE_SCALAR") - expectedFloat < 1e-6); // Another iteration, now back to consistent version number - referenceTestApplication.versionNumber = ChimeraTK::VersionNumber(); + GlobalFixture::referenceTestApplication.versionNumber = ChimeraTK::VersionNumber(); ++macroPulseNumber; DoocsServerTestHelper::doocsSet<int>("//UNMAPPED/INT.TO_DEVICE_SCALAR", macroPulseNumber); expectedFloat = 12.42f; DoocsServerTestHelper::doocsSet<float>("//UNMAPPED/FLOAT.TO_DEVICE_SCALAR", expectedFloat); - referenceTestApplication.runMainLoopOnce(); + GlobalFixture::referenceTestApplication.runMainLoopOnce(); CHECK_WITH_TIMEOUT( DoocsServerTestHelper::doocsGet<float>("//UNMAPPED/FLOAT.FROM_DEVICE_SCALAR") - expectedFloat < 1e-6); }