diff options
author | Minijackson <minijackson@riseup.net> | 2018-05-23 17:20:34 +0200 |
---|---|---|
committer | Minijackson <minijackson@riseup.net> | 2018-05-23 17:25:18 +0200 |
commit | 427b1d38d870e6876e10349b1081b56ff3390dec (patch) | |
tree | 8895888f5e4900ab8b41e500df32a89dda477e1c /tests/storagetest.cpp | |
parent | 426392f71d5f45aad8c57969643fd6c365ce2362 (diff) | |
download | sink-427b1d38d870e6876e10349b1081b56ff3390dec.tar.gz sink-427b1d38d870e6876e10349b1081b56ff3390dec.zip |
Add and test findAllInRange for ranged lookups
Diffstat (limited to 'tests/storagetest.cpp')
-rw-r--r-- | tests/storagetest.cpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/storagetest.cpp b/tests/storagetest.cpp index 618f9d0..bca91b1 100644 --- a/tests/storagetest.cpp +++ b/tests/storagetest.cpp | |||
@@ -462,6 +462,82 @@ private slots: | |||
462 | QCOMPARE(result, QByteArray("value2")); | 462 | QCOMPARE(result, QByteArray("value2")); |
463 | } | 463 | } |
464 | 464 | ||
465 | void setupTestFindRange(Sink::Storage::DataStore::NamedDatabase &db) | ||
466 | { | ||
467 | db.write("0002", "value1"); | ||
468 | db.write("0003", "value2"); | ||
469 | db.write("0004", "value3"); | ||
470 | db.write("0005", "value4"); | ||
471 | } | ||
472 | |||
473 | void testFindRangeOptimistic() | ||
474 | { | ||
475 | Sink::Storage::DataStore store(testDataPath, dbName, Sink::Storage::DataStore::ReadWrite); | ||
476 | auto transaction = store.createTransaction(Sink::Storage::DataStore::ReadWrite); | ||
477 | auto db = transaction.openDatabase("test", nullptr, false); | ||
478 | setupTestFindRange(db); | ||
479 | QByteArrayList results; | ||
480 | db.findAllInRange("0002", "0004", [&](const QByteArray &key, const QByteArray &value) { results << value; }); | ||
481 | |||
482 | QCOMPARE(results, (QByteArrayList{"value1", "value2", "value3"})); | ||
483 | } | ||
484 | |||
485 | void testFindRangeNothing() | ||
486 | { | ||
487 | Sink::Storage::DataStore store(testDataPath, dbName, Sink::Storage::DataStore::ReadWrite); | ||
488 | auto transaction = store.createTransaction(Sink::Storage::DataStore::ReadWrite); | ||
489 | auto db = transaction.openDatabase("test", nullptr, false); | ||
490 | setupTestFindRange(db); | ||
491 | |||
492 | QByteArrayList results1; | ||
493 | db.findAllInRange("0000", "0001", [&](const QByteArray &key, const QByteArray &value) { results1 << value; }); | ||
494 | QCOMPARE(results1, QByteArrayList{}); | ||
495 | |||
496 | QByteArrayList results2; | ||
497 | db.findAllInRange("0000", "0000", [&](const QByteArray &key, const QByteArray &value) { results2 << value; }); | ||
498 | QCOMPARE(results2, QByteArrayList{}); | ||
499 | |||
500 | QByteArrayList results3; | ||
501 | db.findAllInRange("0006", "0010", [&](const QByteArray &key, const QByteArray &value) { results3 << value; }); | ||
502 | QCOMPARE(results3, QByteArrayList{}); | ||
503 | |||
504 | QByteArrayList results4; | ||
505 | db.findAllInRange("0010", "0010", [&](const QByteArray &key, const QByteArray &value) { results4 << value; }); | ||
506 | QCOMPARE(results4, QByteArrayList{}); | ||
507 | } | ||
508 | |||
509 | void testFindRangeSingle() | ||
510 | { | ||
511 | Sink::Storage::DataStore store(testDataPath, dbName, Sink::Storage::DataStore::ReadWrite); | ||
512 | auto transaction = store.createTransaction(Sink::Storage::DataStore::ReadWrite); | ||
513 | auto db = transaction.openDatabase("test", nullptr, false); | ||
514 | setupTestFindRange(db); | ||
515 | |||
516 | QByteArrayList results1; | ||
517 | db.findAllInRange("0004", "0004", [&](const QByteArray &key, const QByteArray &value) { results1 << value; }); | ||
518 | QCOMPARE(results1, QByteArrayList{"value3"}); | ||
519 | } | ||
520 | |||
521 | void testFindRangeOutofBounds() | ||
522 | { | ||
523 | Sink::Storage::DataStore store(testDataPath, dbName, Sink::Storage::DataStore::ReadWrite); | ||
524 | auto transaction = store.createTransaction(Sink::Storage::DataStore::ReadWrite); | ||
525 | auto db = transaction.openDatabase("test", nullptr, false); | ||
526 | setupTestFindRange(db); | ||
527 | |||
528 | QByteArrayList results1; | ||
529 | db.findAllInRange("0000", "0010", [&](const QByteArray &key, const QByteArray &value) { results1 << value; }); | ||
530 | QCOMPARE(results1, (QByteArrayList{"value1", "value2", "value3", "value4"})); | ||
531 | |||
532 | QByteArrayList results2; | ||
533 | db.findAllInRange("0003", "0010", [&](const QByteArray &key, const QByteArray &value) { results2 << value; }); | ||
534 | QCOMPARE(results2, (QByteArrayList{"value2", "value3", "value4"})); | ||
535 | |||
536 | QByteArrayList results3; | ||
537 | db.findAllInRange("0000", "0003", [&](const QByteArray &key, const QByteArray &value) { results3 << value; }); | ||
538 | QCOMPARE(results3, (QByteArrayList{"value1", "value2"})); | ||
539 | } | ||
540 | |||
465 | void testTransactionVisibility() | 541 | void testTransactionVisibility() |
466 | { | 542 | { |
467 | auto readValue = [](const Sink::Storage::DataStore::NamedDatabase &db, const QByteArray) { | 543 | auto readValue = [](const Sink::Storage::DataStore::NamedDatabase &db, const QByteArray) { |