diff --git a/source/RobotAPI/libraries/armem/test/ArMemLTMTest.cpp b/source/RobotAPI/libraries/armem/test/ArMemLTMTest.cpp index c7cea5d73db6e451e11da30ec57a667c94e2077a..a42141d41eb41ec1da0fe696f2b1729f3bdffffd 100644 --- a/source/RobotAPI/libraries/armem/test/ArMemLTMTest.cpp +++ b/source/RobotAPI/libraries/armem/test/ArMemLTMTest.cpp @@ -41,11 +41,10 @@ namespace armem = armarx::armem; namespace aron = armarx::aron; -BOOST_AUTO_TEST_CASE(test_memory_heavy_setup_and_export) +armem::Memory setupMemoryWithType(const std::string& memoryName, const aron::typenavigator::AronObjectTypeNavigatorPtr& t1, const aron::typenavigator::AronObjectTypeNavigatorPtr& t2, unsigned int snapshots, unsigned int instances) { aron::AronRandomizer r; - std::string memoryName = "TestMemory"; armem::Memory memory(memoryName); BOOST_CHECK_EQUAL(memory.name(), memoryName); @@ -57,6 +56,37 @@ BOOST_AUTO_TEST_CASE(test_memory_heavy_setup_and_export) BOOST_CHECK_EQUAL(providerSegment.name(), "TestProvider"); BOOST_CHECK(coreSegment.hasProviderSegment(providerSegment.name())); + coreSegment.aronType() = t1; + providerSegment.aronType() = t2; + + aron::typenavigator::AronObjectTypeNavigatorPtr t = t2 != nullptr ? t2 : t1; + + for (unsigned int i = 0; i < snapshots; ++i) + { + armem::EntityUpdate update; + std::vector<aron::datanavigator::AronDictDataNavigatorPtr> q; + + for (unsigned int j = 0; j < instances; ++j) + { + aron::datanavigator::AronDictDataNavigatorPtr m = aron::datanavigator::AronDictDataNavigator::DynamicCastAndCheck(r.generateAronDataFromType(t)); + r.initializeRandomly(m, t); + q.push_back(m); + } + update.entityID = armem::MemoryID::fromString(memoryName + "/TestCoreSegment/TestProvider/TestEntity"); + update.instancesData = q; + update.timeCreated = armem::Time::now(); + BOOST_CHECK_NO_THROW(providerSegment.update(update)); + BOOST_CHECK_EQUAL(providerSegment.entities.size(), 1); + } + BOOST_CHECK(providerSegment.hasEntity("TestEntity")); + + return memory; +} + +BOOST_AUTO_TEST_CASE(test_memory_export__easy_int_setup) +{ + std::string memoryName = "TestMemory_IntSetup"; + aron::typenavigator::AronObjectTypeNavigatorPtr t(new aron::typenavigator::AronObjectTypeNavigator(aron::AronPath())); t->setObjectName("TestObjectType1"); @@ -69,23 +99,212 @@ BOOST_AUTO_TEST_CASE(test_memory_heavy_setup_and_export) t->addAcceptedType("theInt3", tm3); t->addAcceptedType("theInt4", tm4); - providerSegment.aronType() = t; + armem::Memory memory = setupMemoryWithType(memoryName, t, nullptr, 15, 1); - for (int i = 0; i < 5; ++i) - { - armem::EntityUpdate update; - aron::datanavigator::AronDictDataNavigatorPtr m = aron::datanavigator::AronDictDataNavigator::DynamicCastAndCheck(r.generateAronDataFromType(t)); - r.initializeRandomly(m, t); - update.entityID = armem::MemoryID::fromString(memoryName + "/TestCoreSegment/TestProvider/TestEntity"); - update.instancesData = - { - m - }; - update.timeCreated = armem::Time::now(); - BOOST_CHECK_NO_THROW(providerSegment.update(update)); - BOOST_CHECK_EQUAL(providerSegment.entities.size(), 1); - } - BOOST_CHECK(providerSegment.hasEntity("TestEntity")); + // export memory + std::string storagePath = "/tmp/MemoryExport"; // important! without tailing / + std::filesystem::remove_all(storagePath); + armem::io::FileSystemMemoryManager mfs(storagePath, true); + mfs.writeOnDisk(memory); + + std::string mfs_str = mfs.toString(); + + armem::io::FileSystemMemoryManager mfs2(storagePath); + mfs2.update(); + + std::string mfs2_str = mfs2.toString(); + + //std::cout << "MFS1: " << std::endl; + //std::cout << mfs_str << std::endl; + //std::cout << "MFS2: " << std::endl; + //std::cout << mfs2_str << std::endl; + BOOST_CHECK_EQUAL(mfs_str == mfs2_str, true); + + armem::Memory memory2 = mfs.readMemoryFromDisk(memoryName); + BOOST_CHECK_EQUAL(memory.equalsDeep(memory2), true); +} + +BOOST_AUTO_TEST_CASE(test_memory_export__easy_long_setup) +{ + std::string memoryName = "TestMemory_LongSetup"; + + aron::typenavigator::AronObjectTypeNavigatorPtr t(new aron::typenavigator::AronObjectTypeNavigator(aron::AronPath())); + t->setObjectName("TestObjectType1"); + + aron::typenavigator::AronLongTypeNavigatorPtr tm1(new aron::typenavigator::AronLongTypeNavigator(aron::AronPath())); + aron::typenavigator::AronLongTypeNavigatorPtr tm2(new aron::typenavigator::AronLongTypeNavigator(aron::AronPath())); + aron::typenavigator::AronLongTypeNavigatorPtr tm3(new aron::typenavigator::AronLongTypeNavigator(aron::AronPath())); + aron::typenavigator::AronLongTypeNavigatorPtr tm4(new aron::typenavigator::AronLongTypeNavigator(aron::AronPath())); + t->addAcceptedType("theLong1", tm1); + t->addAcceptedType("theLong2", tm2); + t->addAcceptedType("theLong3", tm3); + t->addAcceptedType("theLong4", tm4); + + armem::Memory memory = setupMemoryWithType(memoryName, t, nullptr, 15, 1); + + // export memory + std::string storagePath = "/tmp/MemoryExport"; // important! without tailing / + std::filesystem::remove_all(storagePath); + armem::io::FileSystemMemoryManager mfs(storagePath, true); + mfs.writeOnDisk(memory); + + std::string mfs_str = mfs.toString(); + + armem::io::FileSystemMemoryManager mfs2(storagePath); + mfs2.update(); + + std::string mfs2_str = mfs2.toString(); + + //std::cout << "MFS1: " << std::endl; + //std::cout << mfs_str << std::endl; + //std::cout << "MFS2: " << std::endl; + //std::cout << mfs2_str << std::endl; + BOOST_CHECK_EQUAL(mfs_str == mfs2_str, true); + + armem::Memory memory2 = mfs.readMemoryFromDisk(memoryName); + BOOST_CHECK_EQUAL(memory.equalsDeep(memory2), true); +} + +BOOST_AUTO_TEST_CASE(test_memory_export__easy_float_setup) +{ + std::string memoryName = "TestMemory_FloatSetup"; + + aron::typenavigator::AronObjectTypeNavigatorPtr t(new aron::typenavigator::AronObjectTypeNavigator(aron::AronPath())); + t->setObjectName("TestObjectType1"); + + aron::typenavigator::AronFloatTypeNavigatorPtr tm1(new aron::typenavigator::AronFloatTypeNavigator(aron::AronPath())); + aron::typenavigator::AronFloatTypeNavigatorPtr tm2(new aron::typenavigator::AronFloatTypeNavigator(aron::AronPath())); + aron::typenavigator::AronFloatTypeNavigatorPtr tm3(new aron::typenavigator::AronFloatTypeNavigator(aron::AronPath())); + aron::typenavigator::AronFloatTypeNavigatorPtr tm4(new aron::typenavigator::AronFloatTypeNavigator(aron::AronPath())); + t->addAcceptedType("theFloat1", tm1); + t->addAcceptedType("theFloat2", tm2); + t->addAcceptedType("theFloat3", tm3); + t->addAcceptedType("theFloat4", tm4); + + armem::Memory memory = setupMemoryWithType(memoryName, t, nullptr, 15, 1); + + // export memory + std::string storagePath = "/tmp/MemoryExport"; // important! without tailing / + std::filesystem::remove_all(storagePath); + armem::io::FileSystemMemoryManager mfs(storagePath, true); + mfs.writeOnDisk(memory); + + std::string mfs_str = mfs.toString(); + + armem::io::FileSystemMemoryManager mfs2(storagePath); + mfs2.update(); + + std::string mfs2_str = mfs2.toString(); + + //std::cout << "MFS1: " << std::endl; + //std::cout << mfs_str << std::endl; + //std::cout << "MFS2: " << std::endl; + //std::cout << mfs2_str << std::endl; + BOOST_CHECK_EQUAL(mfs_str == mfs2_str, true); + + armem::Memory memory2 = mfs.readMemoryFromDisk(memoryName); + BOOST_CHECK_EQUAL(memory.equalsDeep(memory2), true); +} + +BOOST_AUTO_TEST_CASE(test_memory_export__easy_double_setup) +{ + std::string memoryName = "TestMemory_DoubleSetup"; + + aron::typenavigator::AronObjectTypeNavigatorPtr t(new aron::typenavigator::AronObjectTypeNavigator(aron::AronPath())); + t->setObjectName("TestObjectType1"); + + aron::typenavigator::AronDoubleTypeNavigatorPtr tm1(new aron::typenavigator::AronDoubleTypeNavigator(aron::AronPath())); + aron::typenavigator::AronDoubleTypeNavigatorPtr tm2(new aron::typenavigator::AronDoubleTypeNavigator(aron::AronPath())); + aron::typenavigator::AronDoubleTypeNavigatorPtr tm3(new aron::typenavigator::AronDoubleTypeNavigator(aron::AronPath())); + aron::typenavigator::AronDoubleTypeNavigatorPtr tm4(new aron::typenavigator::AronDoubleTypeNavigator(aron::AronPath())); + t->addAcceptedType("theDouble1", tm1); + t->addAcceptedType("theDouble2", tm2); + t->addAcceptedType("theDouble3", tm3); + t->addAcceptedType("theDouble4", tm4); + + armem::Memory memory = setupMemoryWithType(memoryName, t, nullptr, 15, 1); + + // export memory + std::string storagePath = "/tmp/MemoryExport"; // important! without tailing / + std::filesystem::remove_all(storagePath); + armem::io::FileSystemMemoryManager mfs(storagePath, true); + mfs.writeOnDisk(memory); + + std::string mfs_str = mfs.toString(); + + armem::io::FileSystemMemoryManager mfs2(storagePath); + mfs2.update(); + + std::string mfs2_str = mfs2.toString(); + + //std::cout << "MFS1: " << std::endl; + //std::cout << mfs_str << std::endl; + //std::cout << "MFS2: " << std::endl; + //std::cout << mfs2_str << std::endl; + BOOST_CHECK_EQUAL(mfs_str == mfs2_str, true); + + armem::Memory memory2 = mfs.readMemoryFromDisk(memoryName); + BOOST_CHECK_EQUAL(memory.equalsDeep(memory2), true); +} + +BOOST_AUTO_TEST_CASE(test_memory_export__easy_string_setup) +{ + std::string memoryName = "TestMemory_StringSetup"; + + aron::typenavigator::AronObjectTypeNavigatorPtr t(new aron::typenavigator::AronObjectTypeNavigator(aron::AronPath())); + t->setObjectName("TestObjectType1"); + + aron::typenavigator::AronStringTypeNavigatorPtr tm1(new aron::typenavigator::AronStringTypeNavigator(aron::AronPath())); + aron::typenavigator::AronStringTypeNavigatorPtr tm2(new aron::typenavigator::AronStringTypeNavigator(aron::AronPath())); + aron::typenavigator::AronStringTypeNavigatorPtr tm3(new aron::typenavigator::AronStringTypeNavigator(aron::AronPath())); + aron::typenavigator::AronStringTypeNavigatorPtr tm4(new aron::typenavigator::AronStringTypeNavigator(aron::AronPath())); + t->addAcceptedType("theString1", tm1); + t->addAcceptedType("theString2", tm2); + t->addAcceptedType("theString3", tm3); + t->addAcceptedType("theString4", tm4); + + armem::Memory memory = setupMemoryWithType(memoryName, t, nullptr, 15, 1); + + // export memory + std::string storagePath = "/tmp/MemoryExport"; // important! without tailing / + std::filesystem::remove_all(storagePath); + armem::io::FileSystemMemoryManager mfs(storagePath, true); + mfs.writeOnDisk(memory); + + std::string mfs_str = mfs.toString(); + + armem::io::FileSystemMemoryManager mfs2(storagePath); + mfs2.update(); + + std::string mfs2_str = mfs2.toString(); + + //std::cout << "MFS1: " << std::endl; + //std::cout << mfs_str << std::endl; + //std::cout << "MFS2: " << std::endl; + //std::cout << mfs2_str << std::endl; + BOOST_CHECK_EQUAL(mfs_str == mfs2_str, true); + + armem::Memory memory2 = mfs.readMemoryFromDisk(memoryName); + BOOST_CHECK_EQUAL(memory.equalsDeep(memory2), true); +} + +BOOST_AUTO_TEST_CASE(test_memory_export__easy_bool_setup) +{ + std::string memoryName = "TestMemory_BoolSetup"; + + aron::typenavigator::AronObjectTypeNavigatorPtr t(new aron::typenavigator::AronObjectTypeNavigator(aron::AronPath())); + t->setObjectName("TestObjectType1"); + + aron::typenavigator::AronBoolTypeNavigatorPtr tm1(new aron::typenavigator::AronBoolTypeNavigator(aron::AronPath())); + aron::typenavigator::AronBoolTypeNavigatorPtr tm2(new aron::typenavigator::AronBoolTypeNavigator(aron::AronPath())); + aron::typenavigator::AronBoolTypeNavigatorPtr tm3(new aron::typenavigator::AronBoolTypeNavigator(aron::AronPath())); + aron::typenavigator::AronBoolTypeNavigatorPtr tm4(new aron::typenavigator::AronBoolTypeNavigator(aron::AronPath())); + t->addAcceptedType("theBool1", tm1); + t->addAcceptedType("theBool2", tm2); + t->addAcceptedType("theBool3", tm3); + t->addAcceptedType("theBool4", tm4); + + armem::Memory memory = setupMemoryWithType(memoryName, t, nullptr, 15, 1); // export memory std::string storagePath = "/tmp/MemoryExport"; // important! without tailing /