30 #include <gtest/gtest.h> 33 #include <geometry_msgs/Vector3.h> 34 #include <geometry_msgs/Pose.h> 43 conn_->setParams(
":memory:", 0);
44 ASSERT_TRUE(
conn_->connect());
47 static std::unique_ptr<warehouse_ros_sqlite::DatabaseConnection>
conn_;
53 using V = geometry_msgs::Vector3;
54 auto coll =
conn_->openCollection<
V>(
"main",
"coll");
58 EXPECT_EQ(coll.count(), 0U);
63 using V = geometry_msgs::Vector3;
64 auto coll =
conn_->openCollection<
V>(
"main",
"coll");
65 auto meta1 = coll.createMetadata();
66 meta1->append(
"x", 3);
72 coll.insert(v1, meta1);
74 EXPECT_EQ(coll.count(), 1U);
79 auto meta2 = coll.createMetadata();
80 meta2->append(
"x", 5);
82 coll.insert(v2, meta2);
84 EXPECT_EQ(coll.count(), 2U);
86 auto query = coll.createQuery();
87 query->append(
"x", 3);
89 const auto list = coll.queryList(query);
91 ASSERT_EQ(list.size(), size_t(1));
92 ASSERT_EQ(list[0]->y, 1.0);
94 EXPECT_EQ(coll.removeMessages(query), 1U);
95 EXPECT_EQ(coll.count(), 1U);
100 auto coll1 =
conn_->openCollection<geometry_msgs::Vector3>(
"main",
"coll");
101 ASSERT_TRUE(coll1.md5SumMatches());
102 auto coll2 =
conn_->openCollection<geometry_msgs::Pose>(
"main",
"coll");
103 ASSERT_FALSE(coll2.md5SumMatches());
104 auto coll3 =
conn_->openCollection<geometry_msgs::Vector3>(
"main",
"coll");
105 ASSERT_TRUE(coll3.md5SumMatches());
110 using V = geometry_msgs::Vector3;
111 auto coll =
conn_->openCollection<
V>(
"main",
"coll");
112 auto meta1 = coll.createMetadata();
113 meta1->append(
"x", 3);
121 coll.insert(v1, meta1);
122 meta1->append(
"y", 8);
123 coll.insert(v2, meta1);
125 auto query = coll.createQuery();
126 query->append(
"x", 3);
128 const auto list = coll.queryList(query);
129 ASSERT_EQ(list.size(), size_t(2));
130 EXPECT_EQ(list[0]->lookupInt(
"x"), 3);
131 EXPECT_EQ(list[1]->lookupInt(
"x"), 3);
133 EXPECT_TRUE(((list[0]->lookupInt(
"y") == 0 && list[1]->lookupInt(
"y") == 8) ||
134 (list[1]->lookupInt(
"y") == 0 && list[0]->lookupInt(
"y") == 8)));
139 using V = geometry_msgs::Vector3;
140 auto coll =
conn_->openCollection<
V>(
"main",
"coll");
141 auto meta1 = coll.createMetadata();
142 meta1->append(
"x", 3);
144 coll.insert(
V(), meta1);
145 coll.insert(
V(), meta1);
147 auto query = coll.createQuery();
148 query->append(
"x", 3);
150 const auto list = coll.queryList(query);
151 ASSERT_EQ(list.size(), size_t(2));
152 ASSERT_NE(list[0]->lookupInt(
"id"), list[1]->lookupInt(
"id"));
157 using V = geometry_msgs::Vector3;
158 auto coll =
conn_->openCollection<
V>(
"main",
"coll");
159 auto meta1 = coll.createMetadata();
160 meta1->append(
"x", 3);
163 meta1->append(
"y", y1);
171 coll.insert(v1, meta1);
172 meta1->append(
"y", 6);
173 coll.insert(v2, meta1);
175 auto query = coll.createQuery();
176 query->append(
"y", y1);
178 const auto list = coll.queryList(query);
179 ASSERT_EQ(list.size(), size_t(1));
180 EXPECT_EQ(list[0]->lookupInt(
"x"), 3);
181 EXPECT_EQ(list[0]->lookupInt(
"y"), y1);
182 EXPECT_EQ(list[0]->y, 9.0);
187 using V = geometry_msgs::Vector3;
188 auto coll =
conn_->openCollection<
V>(
"main",
"coll");
189 auto meta1 = coll.createMetadata();
196 meta1->append(
"x", x1);
197 meta1->append(
"y",
"one");
198 coll.insert(v1, meta1);
200 auto meta2 = coll.createMetadata();
201 meta2->append(
"x", 2);
202 meta2->append(
"y",
"one");
203 coll.insert(v2, meta2);
205 auto modify_query = coll.createQuery();
206 modify_query->append(
"x", x1);
207 auto meta_modify = coll.createMetadata();
208 meta_modify->append(
"y",
"two");
209 coll.modifyMetadata(modify_query, meta_modify);
211 auto query = coll.createQuery();
212 query->append(
"y",
"two");
213 const auto list = coll.queryList(query);
215 ASSERT_EQ(list.size(), size_t(1));
216 EXPECT_EQ(list[0]->lookupInt(
"x"), x1);
217 EXPECT_EQ(list[0]->lookupString(
"y"),
"two");
218 EXPECT_EQ(list[0]->x, 3.0);
223 using V = geometry_msgs::Vector3;
224 auto coll =
conn_->openCollection<
V>(
"main",
"coll");
225 auto meta1 = coll.createMetadata();
227 auto keys = meta1->lookupFieldNames();
228 EXPECT_TRUE(keys.empty());
229 meta1->append(
"x",
false);
231 keys = meta1->lookupFieldNames();
232 EXPECT_NE(keys.find(
"x"), keys.end());
233 EXPECT_EQ(keys.size(), 1U);
234 EXPECT_TRUE(meta1->lookupField(
"x"));
235 EXPECT_FALSE(meta1->lookupField(
"z"));
240 using V = geometry_msgs::Vector3;
241 auto coll =
conn_->openCollection<
V>(
"main",
"coll");
242 auto meta1 = coll.createMetadata();
243 meta1->append(
"x", 3);
246 meta1->append(
"y", y1);
254 coll.insert(v1, meta1);
255 meta1->append(
"y", 6);
256 coll.insert(v2, meta1);
258 auto query = coll.createQuery();
259 query->append(
"x", 3);
260 query->append(
"y", y1);
262 const auto list = coll.queryList(query);
263 ASSERT_EQ(list.size(), size_t(1));
264 EXPECT_EQ(list[0]->lookupInt(
"x"), 3);
265 EXPECT_EQ(list[0]->lookupInt(
"y"), y1);
266 EXPECT_EQ(list[0]->y, 9.0);
271 using V = geometry_msgs::Vector3;
272 auto coll =
conn_->openCollection<
V>(
"main",
"coll");
273 auto meta1 = coll.createMetadata();
274 meta1->append(
"x", 7);
275 coll.insert(
V(), meta1);
278 auto query = coll.createQuery();
279 query->append(
"x", 3);
281 auto it_pair = coll.query(query);
282 EXPECT_EQ(std::get<0>(it_pair), std::get<1>(it_pair));
284 auto list = coll.queryList(query);
285 EXPECT_EQ(list.size(), size_t(0));
288 query->append(
"y", 3);
290 it_pair = coll.query(query);
291 EXPECT_EQ(std::get<0>(it_pair), std::get<1>(it_pair));
293 list = coll.queryList(query);
294 EXPECT_EQ(list.size(), size_t(0));
299 using V = geometry_msgs::Vector3;
300 auto coll1 =
conn_->openCollection<
V>(
"main1",
"coll");
301 auto meta1 = coll1.createMetadata();
302 meta1->append(
"x", 7);
303 coll1.insert(
V(), meta1);
305 auto coll2 =
conn_->openCollection<
V>(
"main2",
"coll");
307 auto query2 = coll2.createQuery();
308 query2->append(
"x", 7);
309 const auto list2 = coll2.queryList(query2);
310 EXPECT_EQ(list2.size(), size_t(0));
313 auto meta2 = coll2.createMetadata();
314 meta2->append(
"x", 7);
315 coll2.insert(
V(), meta2);
318 auto query1 = coll1.createQuery();
319 query1->append(
"x", 7);
320 const auto list1 = coll1.queryList(query1);
321 EXPECT_EQ(list1.size(), size_t(1));
327 using V = geometry_msgs::Vector3;
330 auto coll =
conn_->openCollection<
V>(
"main",
"coll");
331 auto meta1 = coll.createMetadata();
332 meta1->append(
"x", 7);
333 coll.insert(
V(), meta1);
336 auto coll =
conn_->openCollection<
V>(
"main2",
"coll");
337 auto meta1 = coll.createMetadata();
338 meta1->append(
"x", 7);
339 coll.insert(
V(), meta1);
342 conn_->dropDatabase(
"main");
345 auto coll1 =
conn_->openCollection<
V>(
"main2",
"coll");
346 auto query1 = coll1.createQuery();
347 query1->append(
"x", 7);
348 const auto list1 = coll1.queryList(query1);
349 EXPECT_EQ(list1.size(), size_t(1));
353 auto coll1 =
conn_->openCollection<
V>(
"main",
"coll");
354 auto query1 = coll1.createQuery();
355 query1->append(
"x", 7);
356 const auto list1 = coll1.queryList(query1);
357 EXPECT_EQ(list1.size(), size_t(0));
363 using V = geometry_msgs::Vector3;
364 auto coll =
conn_->openCollection<
V>(
"main",
"coll");
365 auto meta1 = coll.createMetadata();
366 meta1->append(
"x", 7);
367 coll.insert(
V(), meta1);
369 auto query = coll.createQuery();
370 query->append(
"x", 9);
376 using V = geometry_msgs::Vector3;
377 auto coll =
conn_->openCollection<
V>(
"main",
"coll");
378 auto meta1 = coll.createMetadata();
379 meta1->append(
"x", 71);
380 coll.insert(
V(), meta1);
381 meta1->append(
"x", 10);
382 coll.insert(
V(), meta1);
386 auto query = coll.createQuery();
387 const auto list1 = coll.queryList(query,
false,
"x",
true);
388 ASSERT_EQ(list1.size(), size_t(2));
389 EXPECT_EQ(list1[0]->lookupInt(
"x"), 10);
390 EXPECT_EQ(list1[1]->lookupInt(
"x"), 71);
394 auto query = coll.createQuery();
395 const auto list1 = coll.queryList(query,
false,
"x",
false);
396 ASSERT_EQ(list1.size(), size_t(2));
397 EXPECT_EQ(list1[0]->lookupInt(
"x"), 71);
398 EXPECT_EQ(list1[1]->lookupInt(
"x"), 10);
404 const char* a =
"4a842b65f413084dc2b10fb484ea7f17";
405 const std::array<unsigned char, 16> b{
406 0x4a, 0x84, 0x2b, 0x65, 0xf4, 0x13, 0x08, 0x4d, 0xc2, 0xb1, 0x0f, 0xb4, 0x84, 0xea, 0x7f, 0x17,
412 const char* c =
"Za842b65f413084dc2b10fb484ea7f17";
413 const char*
d =
"aZ842b65f413084dc2b10fb484ea7f17";
418 int main(
int argc,
char** argv)
421 ::testing::InitGoogleTest(&argc, argv);
422 return RUN_ALL_TESTS();
WAREHOUSE_ROS_SQLITE_EXPORT std::array< unsigned char, 16 > parse_md5_hexstring(const std::string &md5)
TEST(Utils, Md5Validation)
static std::unique_ptr< warehouse_ros_sqlite::DatabaseConnection > conn_
static const char * value()
int main(int argc, char **argv)
TEST_F(ConnectionTest, CreateCollection)