4#define BOOST_TEST_DYN_LINK
5#define BOOST_TEST_MODULE SharedDummyBackendTest
13#include <boost/filesystem.hpp>
14#include <boost/interprocess/managed_shared_memory.hpp>
15#include <boost/test/unit_test.hpp>
30 using namespace boost::unit_test_framework;
32 static TestLocker testLocker(
"shareddummyTest.dmap");
35 bool testRegisterNotInCatalogue(
const std::string& registerPath) {
39 auto catalogue = backendInstance->getRegisterCatalogue();
43 for(
auto& info : catalogue) {
44 if(info.getRegisterName() == registerPath) {
54 BOOST_AUTO_TEST_SUITE(SharedDummyBackendTestSuite)
63 dev.
open(
"SHDMEMDEV");
72 dev.
open(
"SHDMEMDEV");
87 dev.
open(
"SHDMEMDEV");
93 std::generate(processVars11.
begin(), processVars11.
end(), [n]()
mutable { return n++; });
94 processVars11.
write();
99 std::generate(processVars23.
begin(), processVars23.
end(), [n]()
mutable { return n++; });
100 processVars23.
write();
101 processVars23.
read();
106 std::generate(processVarsWrite21.
begin(), processVarsWrite21.
end(), [n]()
mutable { return n++; });
107 processVarsWrite21.
write();
110 BOOST_CHECK(!std::system(
"./testSharedDummyBackendExt "
111 "--run_test=SharedDummyBackendTestSuite/testReadWrite"));
115 processVarsRead.
read();
117 BOOST_CHECK(
static_cast<std::vector<int>
>(processVarsWrite21) ==
static_cast<std::vector<int>
>(processVarsRead));
126 dev.
open(
"SHDMEMDEV");
132 BOOST_CHECK(roRegisterOne.isReadOnly());
133 BOOST_CHECK(!roRegisterOne.isWriteable());
134 BOOST_CHECK(!roRegisterTwo_dw.isReadOnly());
135 BOOST_CHECK(roRegisterTwo_dw.isWriteable());
137 BOOST_CHECK(testRegisterNotInCatalogue(
"WORD_READ_ONLY_2.DUMMY_WRITEABLE"));
142 roRegisterTwo_dw = 25;
143 roRegisterTwo_dw.write();
148 BOOST_CHECK(!std::system(
"./testSharedDummyBackendExt "
149 "--run_test=SharedDummyBackendTestSuite/testWriteToReadOnly"));
151 roRegisterOne.read();
152 BOOST_CHECK_EQUAL(roRegisterTwo_dw, roRegisterOne);
165 BOOST_CHECK(backendInst1.get() == backendInst2.get());
166 BOOST_CHECK(backendInst3.get() != backendInst2.get());
172BOOST_AUTO_TEST_SUITE_END()
static BackendFactory & getInstance()
Static function to get an instance of factory.
boost::shared_ptr< DeviceBackend > createBackend(const std::string &aliasOrUri)
Create a new backend and return the instance as a shared pointer.
Class allows to read/write registers from device.
bool isOpened() const
Check if the device is currently opened.
void close()
Close the device.
ScalarRegisterAccessor< UserType > getScalarRegisterAccessor(const RegisterPath ®isterPathName, size_t wordOffsetInRegister=0, const AccessModeFlags &flags=AccessModeFlags({})) const
Get a ScalarRegisterObject object for the given register.
OneDRegisterAccessor< UserType > getOneDRegisterAccessor(const RegisterPath ®isterPathName, size_t numberOfWords=0, size_t wordOffsetInRegister=0, const AccessModeFlags &flags=AccessModeFlags({})) const
Get a OneDRegisterAccessor object for the given register.
void open(std::string const &aliasName)
Open a device by the given alias name from the DMAP file.
Accessor class to read and write registers transparently by using the accessor object like a vector o...
Accessor class to read and write scalar registers transparently by using the accessor object like a v...
bool write(ChimeraTK::VersionNumber versionNumber={})
Write the data to device.
void read()
Read the data from the device.
Exception thrown when a logic error has occured.
void setDMapFilePath(std::string dmapFilePath)
Set the location of the dmap file.
BOOST_AUTO_TEST_CASE(testSerialize)
BOOST_FIXTURE_TEST_CASE(testSlowReader, DeviceFixture)