otsdaq  v1_01_02
 All Classes Namespaces Functions
DatabaseInterfaceTest_t.cc
1 #define BOOST_TEST_MODULE (databaseinterface test)
2 
3 #include "boost/test/auto_unit_test.hpp"
4 
5 #include <time.h> /* time */
6 #include <cassert>
7 #include <cstdlib>
8 #include <iostream>
9 #include <memory>
10 #include <string>
11 
12 #include "otsdaq-core/ConfigurationInterface/DatabaseConfigurationInterface.h"
13 
14 #include "artdaq-database/JsonDocument/JSONDocument.h"
15 
16 #include "artdaq-database/ConfigurationDB/configuration_common.h"
17 #include "artdaq-database/ConfigurationDB/dispatch_common.h"
18 
19 #include "artdaq-database/JsonDocument/JSONDocument.h"
20 #include "artdaq-database/JsonDocument/JSONDocumentBuilder.h"
21 #include "artdaq-database/StorageProviders/FileSystemDB/provider_filedb.h"
22 #include "artdaq-database/StorageProviders/MongoDB/provider_mongodb.h"
23 
24 #include "artdaq-database/DataFormats/Json/json_reader.h"
25 //#include "artdaq-database/DataFormats/common/helper_functions.h"
26 //#include "artdaq-database/DataFormats/common/shared_literals.h"
27 
28 namespace ots {
30  void printJSON(std::stringstream& ss) const { ss << _json; }
31  int fillFromJSON(std::string const& newjson) {
32  _json = newjson;
33  return 0;
34  }
35  std::string _json = "{ \"testJSON\" : 123 }";
36 };
37 
38 struct TestConfiguration001 final : public ConfigurationBase {
39  TestConfiguration001():ConfigurationBase( "TestConfiguration001") {init(0);}
40  void init(ConfigurationManager *configManager) {activeConfigurationView_=&view; }
42 };
43 
44 struct TestConfiguration002 final : public ConfigurationBase {
45  TestConfiguration002():ConfigurationBase( "TestConfiguration002") {init(0);}
46  void init(ConfigurationManager *configManager){activeConfigurationView_=&view; }
48 
49 };
50 }
51 
52 
53 struct TestData {
54  TestData() {
55 
56 /*
57  artdaq::database::filesystem::debug::enable();
58  artdaq::database::mongo::debug::enable();
59  // artdaq::database::jsonutils::debug::enableJSONDocument();
60  // artdaq::database::jsonutils::debug::enableJSONDocumentBuilder();
61 
62  artdaq::database::configuration::debug::enableFindConfigsOperation();
63  artdaq::database::configuration::debug::enableCreateConfigsOperation();
64 
65  artdaq::database::configuration::debug::options::enableOperationBase();
66  artdaq::database::configuration::debug::options::enableOperationManageConfigs();
67  artdaq::database::configuration::debug::detail::enableCreateConfigsOperation();
68  artdaq::database::configuration::debug::detail::enableFindConfigsOperation();
69 
70  artdaq::database::configuration::debug::enableDBOperationMongo();
71  artdaq::database::configuration::debug::enableDBOperationFileSystem();
72 
73 // debug::registerUngracefullExitHandlers();
74  artdaq::database::dataformats::useFakeTime(true);
75  */
76  std::cout << "setup fixture\n";
77  }
78 
79  ~TestData() {
80  std::cout << "setup fixture\n";
81  }
82 
83  void updateConfigCount(int count) { _oldConfigCount = count; }
84 
85  int version() { return _version; }
86  int oldConfigCount() { return _oldConfigCount; }
87 
88  const int _version = (srand(time(NULL)), rand() % 99999 + 100000);
89 
90  int _oldConfigCount = 0;
91 };
92 
93 using namespace ots;
94 
95 TestData fixture;
96 
97 BOOST_AUTO_TEST_SUITE(databaseinterface_test)
98 
99 BOOST_AUTO_TEST_CASE(configure_tests) {
100  std::cout << "TestData::version=" << fixture.version() << "\n";
101  return;
102 }
103 
104 BOOST_AUTO_TEST_CASE(store_configuration) {
105  std::shared_ptr<ConfigurationBase> cfg1 = std::make_shared<TestConfiguration001>();
106  auto ifc = DatabaseConfigurationInterface();
107 
108  cfg1->getViewP()->setVersion(fixture.version());
109 
110  BOOST_CHECK_EQUAL(cfg1->getViewP()->getVersion(), fixture.version());
111 
112 // std::cout << "Configuration Version " << std::to_string(cfg1->getViewP()->getVersion() ) << "\n";
113 
114  ifc.saveActiveVersion(cfg1.get());
115 
116  return;
117 }
118 
119 BOOST_AUTO_TEST_CASE(load_configuration) {
120  std::shared_ptr<ConfigurationBase> cfg1 = std::make_shared<TestConfiguration001>();
121  auto ifc = DatabaseConfigurationInterface();
122 
123  ifc.fill(cfg1.get(), ConfigurationVersion(fixture.version()));
124 
125  return;
126 }
127 
128 BOOST_AUTO_TEST_CASE(store_global_configuration) {
129  std::shared_ptr<ConfigurationBase> cfg1 = std::make_shared<TestConfiguration001>();
130  std::shared_ptr<ConfigurationBase> cfg2 = std::make_shared<TestConfiguration002>();
131 
132  auto ifc = DatabaseConfigurationInterface();
133 
134  cfg1->getViewP()->setVersion(fixture.version() + 1);
135  cfg2->getViewP()->setVersion(fixture.version() + 2);
136 
137  ifc.saveActiveVersion(cfg1.get());
138 
139  ifc.saveActiveVersion(cfg2.get());
140 
141  auto map = DatabaseConfigurationInterface::config_version_map_t{};
142  map[cfg1->getConfigurationName()] = cfg1->getView().getVersion();
143  map[cfg2->getConfigurationName()] = cfg2->getView().getVersion();
144 
145  auto configName = std::string{"config"} + std::to_string(fixture.version());
146 
147  auto list = ifc.getAllConfigurationGroupNames();
148 
149  fixture.updateConfigCount(list.size());
150 
151  ifc.saveConfigurationGroup(map, configName);
152 
153  return;
154 }
155 
156 BOOST_AUTO_TEST_CASE(load_global_configuration) {
157  auto ifc = DatabaseConfigurationInterface();
158 
159  auto configName = std::string{"config"} + std::to_string(fixture.version());
160 
161  auto map = ifc.getConfigurationGroupMembers(configName);
162 
163  BOOST_CHECK_EQUAL(map.size(), 2);
164 
165  std::shared_ptr<ConfigurationBase> cfg1 = std::make_shared<TestConfiguration001>();
166  std::shared_ptr<ConfigurationBase> cfg2 = std::make_shared<TestConfiguration002>();
167 
168  BOOST_CHECK_EQUAL(map.at(cfg1->getConfigurationName()), fixture.version() + 1);
169  BOOST_CHECK_EQUAL(map.at(cfg2->getConfigurationName()), fixture.version() + 2);
170 
171  return;
172 }
173 
174 BOOST_AUTO_TEST_CASE(find_all_global_configurations) {
175  auto ifc = DatabaseConfigurationInterface();
176 
177  auto list = ifc.getAllConfigurationGroupNames();
178 
179  BOOST_CHECK_EQUAL(list.size(), fixture.oldConfigCount() + 1);
180 
181  auto configName = std::string{"config"} + std::to_string(fixture.version());
182 
183  auto found = (std::find(list.begin(), list.end(), configName) != list.end());
184 
185  BOOST_CHECK_EQUAL(found, true);
186 
187  return;
188 }
189 
190 BOOST_AUTO_TEST_CASE(list_configuration_types) {
191  auto ifc = DatabaseConfigurationInterface();
192 
193  auto list = ifc.getAllConfigurationNames();
194 
195  BOOST_CHECK_EQUAL(list.size(), 2);
196 
197  std::shared_ptr<ConfigurationBase> cfg1 = std::make_shared<TestConfiguration001>();
198  std::shared_ptr<ConfigurationBase> cfg2 = std::make_shared<TestConfiguration002>();
199 
200  auto found1 = (std::find(list.begin(), list.end(), cfg1->getConfigurationName()) != list.end());
201 
202  BOOST_CHECK_EQUAL(found1, true);
203 
204  auto found2 = (std::find(list.begin(), list.end(), cfg2->getConfigurationName()) != list.end());
205 
206  BOOST_CHECK_EQUAL(found2, true);
207 
208  return;
209 }
210 
211 BOOST_AUTO_TEST_CASE(find_configuration_version) {
212  auto ifc = DatabaseConfigurationInterface();
213 
214  std::shared_ptr<ConfigurationBase> cfg1 = std::make_shared<TestConfiguration001>();
215 
216  auto list = ifc.getVersions(cfg1.get());
217 
218  auto found1 = (std::find(list.begin(), list.end(), fixture.version()) != list.end());
219 
220  BOOST_CHECK_EQUAL(found1, true);
221 
222  auto found2 = (std::find(list.begin(), list.end(), fixture.version() + 1) != list.end());
223 
224  BOOST_CHECK_EQUAL(found2, true);
225 
226  return;
227 }
228 
229 BOOST_AUTO_TEST_CASE(find_latest_configuration_version) {
230  auto ifc = DatabaseConfigurationInterface();
231 
232  std::shared_ptr<ConfigurationBase> cfg1 = std::make_shared<TestConfiguration001>();
233 
234  auto version = ifc.findLatestVersion(cfg1.get());
235 
236  auto list = ifc.getVersions(cfg1.get());
237 
238  std::cout << "Found versions\n";
239 
240  for(auto version:list) { std::cout << version << ", "; }
241 
242  std::cout << "\nGot latest version: " << version << "\n";
243 
244  return;
245 }
246 
247 BOOST_AUTO_TEST_SUITE_END()
248