Skip to content
Snippets Groups Projects
Commit da015907 authored by Martin Killenberg's avatar Martin Killenberg
Browse files

added test that is sensitive on scalars and arrays (here spectra) really being...

added test that is sensitive on scalars and arrays (here spectra) really being read and written in a server. Currently failing because the syncutil is not worling with the new DoocsSpectrum implementation. The adapter currently really is broken
parent 2226ba36
No related branches found
No related tags found
No related merge requests found
eq_conf:
oper_uid: -1
oper_gid: 405
xpert_uid: 1000
xpert_gid: 1000
ring_buffer: 10000
memory_buffer: 500
eq_fct_name: "PLAIN_VARIABLE_CREATION_TEST._SVR"
eq_fct_type: 1
{
SVR.RPC_NUMBER: 610498009
SVR.NAME: "PLAIN_VARIABLE_CREATION_TEST._SVR"
SVR.RATE: 57005 48879 0 0
SVR.BPN: 6000
}
eq_fct_name: "INT"
eq_fct_type: 10
{
NAME: "INT"
}
eq_fct_name: "SHORT"
eq_fct_type: 10
{
NAME: "SHORT"
}
eq_fct_name: "FLOAT"
eq_fct_type: 10
{
NAME: "FLOAT"
}
eq_fct_name: "DOUBLE"
eq_fct_type: 10
{
NAME: "DOUBLE"
}
eq_fct_name: "UINT"
eq_fct_type: 10
{
NAME: "UINT"
}
eq_fct_name: "USHORT"
eq_fct_type: 10
{
NAME: "USHORT"
}
eq_fct_name: "CHAR"
eq_fct_type: 10
{
NAME: "CHAR"
}
eq_fct_name: "UCHAR"
eq_fct_type: 10
{
NAME: "UCHAR"
}
#include <boost/test/included/unit_test.hpp>
//#include <boost/test/test_case_template.hpp>
//#include <boost/mpl/list.hpp>
#include <ChimeraTK/ControlSystemAdapter/Testing/ReferenceTestApplication.h>
#include <doocs-server-test-helper/doocsServerTestHelper.h>
#include <thread>
ReferenceTestApplication referenceTestApplication("serverTestReadWrite");
// declare that we have some thing like a doocs server. is is linked from the doocs lib, but there is no header.
extern int eq_server(int, char **);
//#include <limits>
//#include <sstream>
using namespace boost::unit_test_framework;
using namespace ChimeraTK;
// use boost meta-programming to use test case templates
// The list of types is an mpl type
//typedef boost::mpl::list<int32_t, uint32_t,
// int16_t, uint16_t,
// int8_t, uint8_t,
// float, double> simple_test_types;
/// Check that all expected variables are there.
void testReadWrite(){
// halt the test application tread
referenceTestApplication.initialiseManualLoopControl();
std::cout << "got the application main lock" << std::endl;
// run update once to make sure the server is up and running
std::cout << "running update once " << std::endl;
DoocsServerTestHelper::runUpdate();
std::cout << "ran update once, let's test " << std::endl;
// just a few tests before we start
BOOST_CHECK( DoocsServerTestHelper::doocsGet<int>("//INT/DATA_TYPE_CONSTANT") == -4 );
BOOST_CHECK( DoocsServerTestHelper::doocsGet<int>("//CHAR/DATA_TYPE_CONSTANT") == -1 );
BOOST_CHECK( DoocsServerTestHelper::doocsGet<int>("//INT/FROM_DEVICE_SCALAR") == 0 );
BOOST_CHECK( DoocsServerTestHelper::doocsGet<int>("//CHAR/FROM_DEVICE_SCALAR") == 0 );
DoocsServerTestHelper::doocsSet<int>("//INT/TO_DEVICE_SCALAR", 42 );
DoocsServerTestHelper::doocsSet<int>("//CHAR/TO_DEVICE_SCALAR", 44 );
DoocsServerTestHelper::doocsSet<int>("//INT/TO_DEVICE_ARRAY", {140, 141, 142, 143, 144, 145, 146, 147, 148, 149} );
// running update now does not change anything, the application has not acted yet
DoocsServerTestHelper::runUpdate();
BOOST_CHECK( DoocsServerTestHelper::doocsGet<int>("//INT/FROM_DEVICE_SCALAR") == 0 );
BOOST_CHECK( DoocsServerTestHelper::doocsGet<int>("//CHAR/FROM_DEVICE_SCALAR") == 0 );
// run the application loop. Still no changes until we run the doocs server update
referenceTestApplication.runMainLoopOnce();
BOOST_CHECK( DoocsServerTestHelper::doocsGet<int>("//INT/FROM_DEVICE_SCALAR") == 0 );
BOOST_CHECK( DoocsServerTestHelper::doocsGet<int>("//CHAR/FROM_DEVICE_SCALAR") == 0 );
// now finally after the next update we should see the new data in doocs
DoocsServerTestHelper::runUpdate();
BOOST_CHECK( DoocsServerTestHelper::doocsGet<int>("//INT/FROM_DEVICE_SCALAR") == 42 );
BOOST_CHECK( DoocsServerTestHelper::doocsGet<int>("//CHAR/FROM_DEVICE_SCALAR") == 44 );
// we have to get stuff as float in order to work with spectra
auto intArray = DoocsServerTestHelper::doocsGetArray<float>("//INT/FROM_DEVICE_ARRAY");
int testVal = 410;
for (auto val : intArray){
BOOST_CHECK( (val - testVal++) < 0.001);
}
auto constArray = DoocsServerTestHelper::doocsGetArray<float>("//INT/CONSTANT_ARRAY");
for (int i =0; i < int(constArray.size()); ++i){
std::cout << "constArray["<<i<<"] " << constArray[i] << std::endl;
BOOST_CHECK( constArray[i] - (-4*i*i) < 0.001); // float check to compensate binary roundings errors
}
for (auto const location : { "CHAR", "DOUBLE", "FLOAT", "INT", "SHORT", "UCHAR", "UINT", "USHORT"} ){
for (auto const property : { "CONSTANT_ARRAY", "FROM_DEVICE_ARRAY", "TO_DEVICE_ARRAY "} ){
// if this throws the property does not exist. we should always be able to read"
BOOST_CHECK_NO_THROW( DoocsServerTestHelper::doocsGetArray<int>( (std::string("//")+location+"/"+ property).c_str() ));
}
for (auto const property : { "DATA_TYPE_CONSTANT", "FROM_DEVICE_SCALAR", "TO_DEVICE_SCALAR"} ){
// if this throws the property does not exist. we should always be able to read"
BOOST_CHECK_NO_THROW( DoocsServerTestHelper::doocsGet<int>( (std::string("//")+location+"/"+ property).c_str() ));
}
}
}
// due to the doocs server thread you can only have one test suite
class DoocsServerTestSuite : public test_suite {
public:
DoocsServerTestSuite(int argc, char* argv[])
: test_suite("Read write test suite") ,
doocsServerThread(eq_server, argc, argv)
{
doocsServerThread.detach();
add( BOOST_TEST_CASE( &testReadWrite ) );
}
virtual ~DoocsServerTestSuite(){
referenceTestApplication.releaseManualLoopControl();
}
protected:
std::thread doocsServerThread;
};
test_suite*
init_unit_test_suite( int argc, char* argv[] )
{
framework::master_test_suite().p_name.value = "Read write server test suite";
return new DoocsServerTestSuite(argc, argv);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment