$treeview $search $mathjax $extrastylesheet
otsdaq
v2_03_00
$projectbrief
|
$projectbrief
|
$searchbox |
00001 #define BOOST_TEST_MODULE (databaseinterface test) 00002 00003 #include "boost/test/auto_unit_test.hpp" 00004 00005 #include <time.h> /* time */ 00006 #include <cassert> 00007 #include <cstdlib> 00008 #include <iostream> 00009 #include <memory> 00010 #include <string> 00011 00012 #include "otsdaq-core/ConfigurationInterface/DatabaseConfigurationInterface.h" 00013 00014 #include "artdaq-database/JsonDocument/JSONDocument.h" 00015 00016 #include "artdaq-database/ConfigurationDB/configuration_common.h" 00017 #include "artdaq-database/ConfigurationDB/dispatch_common.h" 00018 00019 #include "artdaq-database/JsonDocument/JSONDocument.h" 00020 #include "artdaq-database/JsonDocument/JSONDocumentBuilder.h" 00021 #include "artdaq-database/StorageProviders/FileSystemDB/provider_filedb.h" 00022 #include "artdaq-database/StorageProviders/MongoDB/provider_mongodb.h" 00023 00024 #include "artdaq-database/DataFormats/Json/json_reader.h" 00025 //#include "artdaq-database/DataFormats/common/helper_functions.h" 00026 //#include "artdaq-database/DataFormats/common/shared_literals.h" 00027 00028 namespace ots 00029 { 00030 struct TableViewEx : public TableView 00031 { 00032 void printJSON(std::stringstream& ss) const { ss << _json; } 00033 int fillFromJSON(std::string const& newjson) 00034 { 00035 _json = newjson; 00036 return 0; 00037 } 00038 std::string _json = "{ \"testJSON\" : 123 }"; 00039 }; 00040 00041 struct TestConfiguration001 final : public TableBase 00042 { 00043 TestConfiguration001() : TableBase("TestConfiguration001") { init(0); } 00044 void init(ConfigurationManager* configManager) { activeTableView_ = &view; } 00045 TableViewEx view; 00046 }; 00047 00048 struct TestConfiguration002 final : public TableBase 00049 { 00050 TestConfiguration002() : TableBase("TestConfiguration002") { init(0); } 00051 void init(ConfigurationManager* configManager) { activeTableView_ = &view; } 00052 TableViewEx view; 00053 }; 00054 } // namespace ots 00055 00056 struct TestData 00057 { 00058 TestData() 00059 { 00060 /* 00061 artdaq::database::filesystem::debug::enable(); 00062 artdaq::database::mongo::debug::enable(); 00063 // artdaq::database::jsonutils::debug::enableJSONDocument(); 00064 // artdaq::database::jsonutils::debug::enableJSONDocumentBuilder(); 00065 00066 artdaq::database::configuration::debug::enableFindConfigsOperation(); 00067 artdaq::database::configuration::debug::enableCreateConfigsOperation(); 00068 00069 artdaq::database::configuration::debug::options::enableOperationBase(); 00070 artdaq::database::configuration::debug::options::enableOperationManageConfigs(); 00071 artdaq::database::configuration::debug::detail::enableCreateConfigsOperation(); 00072 artdaq::database::configuration::debug::detail::enableFindConfigsOperation(); 00073 00074 artdaq::database::configuration::debug::enableDBOperationMongo(); 00075 artdaq::database::configuration::debug::enableDBOperationFileSystem(); 00076 00077 // debug::registerUngracefullExitHandlers(); 00078 artdaq::database::dataformats::useFakeTime(true); 00079 */ 00080 std::cout << "setup fixture\n"; 00081 } 00082 00083 ~TestData() { std::cout << "setup fixture\n"; } 00084 00085 void updateConfigCount(int count) { _oldConfigCount = count; } 00086 00087 int version() { return _version; } 00088 int oldConfigCount() { return _oldConfigCount; } 00089 00090 const int _version = (srand(time(NULL)), rand() % 99999 + 100000); 00091 00092 int _oldConfigCount = 0; 00093 }; 00094 00095 using namespace ots; 00096 00097 TestData fixture; 00098 00099 BOOST_AUTO_TEST_SUITE(databaseinterface_test) 00100 00101 BOOST_AUTO_TEST_CASE(configure_tests) 00102 { 00103 std::cout << "TestData::version=" << fixture.version() << "\n"; 00104 return; 00105 } 00106 00107 BOOST_AUTO_TEST_CASE(store_configuration) 00108 { 00109 std::shared_ptr<TableBase> cfg1 = std::make_shared<TestConfiguration001>(); 00110 auto ifc = DatabaseConfigurationInterface(); 00111 00112 cfg1->getViewP()->setVersion(fixture.version()); 00113 00114 BOOST_CHECK_EQUAL(cfg1->getViewP()->getVersion(), fixture.version()); 00115 00116 // std::cout << "Table Version " << 00117 // std::to_string(cfg1->getViewP()->getVersion() ) << "\n"; 00118 00119 ifc.saveActiveVersion(cfg1.get()); 00120 00121 return; 00122 } 00123 00124 BOOST_AUTO_TEST_CASE(load_configuration) 00125 { 00126 std::shared_ptr<TableBase> cfg1 = std::make_shared<TestConfiguration001>(); 00127 auto ifc = DatabaseConfigurationInterface(); 00128 00129 ifc.fill(cfg1.get(), TableVersion(fixture.version())); 00130 00131 return; 00132 } 00133 00134 BOOST_AUTO_TEST_CASE(store_global_configuration) 00135 { 00136 std::shared_ptr<TableBase> cfg1 = std::make_shared<TestConfiguration001>(); 00137 std::shared_ptr<TableBase> cfg2 = std::make_shared<TestConfiguration002>(); 00138 00139 auto ifc = DatabaseConfigurationInterface(); 00140 00141 cfg1->getViewP()->setVersion(fixture.version() + 1); 00142 cfg2->getViewP()->setVersion(fixture.version() + 2); 00143 00144 ifc.saveActiveVersion(cfg1.get()); 00145 00146 ifc.saveActiveVersion(cfg2.get()); 00147 00148 auto map = DatabaseConfigurationInterface::config_version_map_t{}; 00149 map[cfg1->getTableName()] = cfg1->getView().getVersion(); 00150 map[cfg2->getTableName()] = cfg2->getView().getVersion(); 00151 00152 auto tableName = std::string{"config"} + std::to_string(fixture.version()); 00153 00154 auto list = ifc.getAllTableGroupNames(); 00155 00156 fixture.updateConfigCount(list.size()); 00157 00158 ifc.saveTableGroup(map, tableName); 00159 00160 return; 00161 } 00162 00163 BOOST_AUTO_TEST_CASE(load_global_configuration) 00164 { 00165 auto ifc = DatabaseConfigurationInterface(); 00166 00167 auto tableName = std::string{"config"} + std::to_string(fixture.version()); 00168 00169 auto map = ifc.getTableGroupMembers(tableName); 00170 00171 BOOST_CHECK_EQUAL(map.size(), 2); 00172 00173 std::shared_ptr<TableBase> cfg1 = std::make_shared<TestConfiguration001>(); 00174 std::shared_ptr<TableBase> cfg2 = std::make_shared<TestConfiguration002>(); 00175 00176 BOOST_CHECK_EQUAL(map.at(cfg1->getTableName()), fixture.version() + 1); 00177 BOOST_CHECK_EQUAL(map.at(cfg2->getTableName()), fixture.version() + 2); 00178 00179 return; 00180 } 00181 00182 BOOST_AUTO_TEST_CASE(find_all_global_configurations) 00183 { 00184 auto ifc = DatabaseConfigurationInterface(); 00185 00186 auto list = ifc.getAllTableGroupNames(); 00187 00188 BOOST_CHECK_EQUAL(list.size(), fixture.oldConfigCount() + 1); 00189 00190 auto tableName = std::string{"config"} + std::to_string(fixture.version()); 00191 00192 auto found = (std::find(list.begin(), list.end(), tableName) != list.end()); 00193 00194 BOOST_CHECK_EQUAL(found, true); 00195 00196 return; 00197 } 00198 00199 BOOST_AUTO_TEST_CASE(list_configuration_types) 00200 { 00201 auto ifc = DatabaseConfigurationInterface(); 00202 00203 auto list = ifc.getAllTableNames(); 00204 00205 BOOST_CHECK_EQUAL(list.size(), 2); 00206 00207 std::shared_ptr<TableBase> cfg1 = std::make_shared<TestConfiguration001>(); 00208 std::shared_ptr<TableBase> cfg2 = std::make_shared<TestConfiguration002>(); 00209 00210 auto found1 = 00211 (std::find(list.begin(), list.end(), cfg1->getTableName()) != list.end()); 00212 00213 BOOST_CHECK_EQUAL(found1, true); 00214 00215 auto found2 = 00216 (std::find(list.begin(), list.end(), cfg2->getTableName()) != list.end()); 00217 00218 BOOST_CHECK_EQUAL(found2, true); 00219 00220 return; 00221 } 00222 00223 BOOST_AUTO_TEST_CASE(find_configuration_version) 00224 { 00225 auto ifc = DatabaseConfigurationInterface(); 00226 00227 std::shared_ptr<TableBase> cfg1 = std::make_shared<TestConfiguration001>(); 00228 00229 auto list = ifc.getVersions(cfg1.get()); 00230 00231 auto found1 = (std::find(list.begin(), list.end(), fixture.version()) != list.end()); 00232 00233 BOOST_CHECK_EQUAL(found1, true); 00234 00235 auto found2 = 00236 (std::find(list.begin(), list.end(), fixture.version() + 1) != list.end()); 00237 00238 BOOST_CHECK_EQUAL(found2, true); 00239 00240 return; 00241 } 00242 00243 BOOST_AUTO_TEST_CASE(find_latest_configuration_version) 00244 { 00245 auto ifc = DatabaseConfigurationInterface(); 00246 00247 std::shared_ptr<TableBase> cfg1 = std::make_shared<TestConfiguration001>(); 00248 00249 auto version = ifc.findLatestVersion(cfg1.get()); 00250 00251 auto list = ifc.getVersions(cfg1.get()); 00252 00253 std::cout << "Found versions\n"; 00254 00255 for(auto version : list) 00256 { 00257 std::cout << version << ", "; 00258 } 00259 00260 std::cout << "\nGot latest version: " << version << "\n"; 00261 00262 return; 00263 } 00264 00265 BOOST_AUTO_TEST_SUITE_END()