summaryrefslogtreecommitdiffstats
path: root/tests/storagetest.cpp
diff options
context:
space:
mode:
authorMinijackson <minijackson@riseup.net>2018-08-22 09:12:07 +0200
committerMinijackson <minijackson@riseup.net>2018-08-22 09:12:07 +0200
commitad58bd15634528dd07f29edf620bd595adef32c5 (patch)
tree914067a9053996a75b93765345a5f65e46c5192a /tests/storagetest.cpp
parentd0a699da9b2689b3367ba0354ba580069a6268d9 (diff)
downloadsink-ad58bd15634528dd07f29edf620bd595adef32c5.tar.gz
sink-ad58bd15634528dd07f29edf620bd595adef32c5.zip
Check Integer properly sorted and null terminated strings
Diffstat (limited to 'tests/storagetest.cpp')
-rw-r--r--tests/storagetest.cpp109
1 files changed, 106 insertions, 3 deletions
diff --git a/tests/storagetest.cpp b/tests/storagetest.cpp
index 925d1d9..3d583ab 100644
--- a/tests/storagetest.cpp
+++ b/tests/storagetest.cpp
@@ -792,14 +792,28 @@ private slots:
792 auto db = transaction.openDatabase("testIntegerKeys", {}, flags); 792 auto db = transaction.openDatabase("testIntegerKeys", {}, flags);
793 db.write(0, "value1"); 793 db.write(0, "value1");
794 db.write(1, "value2"); 794 db.write(1, "value2");
795
796 size_t resultKey;
795 QByteArray result; 797 QByteArray result;
796 int numValues = db.scan(0, [&](size_t, const QByteArray &value) -> bool { 798 int numValues = db.scan(0, [&](size_t key, const QByteArray &value) -> bool {
799 resultKey = key;
797 result = value; 800 result = value;
798 return true; 801 return true;
799 }); 802 });
800 803
801 QCOMPARE(numValues, 1); 804 QCOMPARE(numValues, 1);
805 QCOMPARE(resultKey, 0);
802 QCOMPARE(result, "value1"); 806 QCOMPARE(result, "value1");
807
808 int numValues2 = db.scan(1, [&](size_t key, const QByteArray &value) -> bool {
809 resultKey = key;
810 result = value;
811 return true;
812 });
813
814 QCOMPARE(numValues2, 1);
815 QCOMPARE(resultKey, 1);
816 QCOMPARE(result, "value2");
803 } 817 }
804 818
805 void testDuplicateIntegerKeys() 819 void testDuplicateIntegerKeys()
@@ -853,8 +867,97 @@ private slots:
853 867
854 QCOMPARE(numValues, 2); 868 QCOMPARE(numValues, 2);
855 QCOMPARE(results.size(), 2); 869 QCOMPARE(results.size(), 2);
856 QVERIFY(results[0] == number1BA); 870 QCOMPARE(results[0], number1BA);
857 QVERIFY(results[1] == number2BA); 871 QCOMPARE(results[1], number2BA);
872 }
873
874 void testIntegerKeyMultipleOf256()
875 {
876 const int flags = Sink::Storage::IntegerKeys;
877 Sink::Storage::DataStore store(testDataPath,
878 { dbName, { {"testIntegerKeyMultipleOf256", flags} } },
879 Sink::Storage::DataStore::ReadWrite);
880
881 {
882 auto transaction = store.createTransaction(Sink::Storage::DataStore::ReadWrite);
883 auto db = transaction.openDatabase("testIntegerKeyMultipleOf256", {}, flags);
884
885 db.write(0x100, "hello");
886 db.write(0x200, "hello2");
887 db.write(0x42, "hello3");
888
889 transaction.commit();
890 }
891
892 {
893 auto transaction2 = store.createTransaction(Sink::Storage::DataStore::ReadWrite);
894 auto db = transaction2.openDatabase("testIntegerKeyMultipleOf256", {}, flags);
895
896 size_t resultKey;
897 QByteArray resultValue;
898 db.scan(0x100, [&] (size_t key, const QByteArray &value) {
899 resultKey = key;
900 resultValue = value;
901 return false;
902 });
903
904 QCOMPARE(resultKey, 0x100);
905 QCOMPARE(resultValue, "hello");
906 }
907 }
908
909 void testIntegerProperlySorted()
910 {
911 const int flags = Sink::Storage::IntegerKeys;
912 Sink::Storage::DataStore store(testDataPath,
913 { dbName, { {"testIntegerProperlySorted", flags} } },
914 Sink::Storage::DataStore::ReadWrite);
915
916 {
917 auto transaction = store.createTransaction(Sink::Storage::DataStore::ReadWrite);
918 auto db = transaction.openDatabase("testIntegerProperlySorted", {}, flags);
919
920 for (size_t i = 0; i < 0x100; ++i) {
921 db.write(i, "hello");
922 }
923
924 size_t previous = 0;
925 bool success = true;
926 db.scan("", [&] (const QByteArray &key, const QByteArray &value) {
927 size_t current = Sink::byteArrayToSizeT(key);
928 if (current < previous) {
929 success = false;
930 return false;
931 }
932
933 previous = current;
934 return true;
935 });
936
937 QVERIFY2(success, "Integer are not properly sorted before commit");
938
939 transaction.commit();
940 }
941
942 {
943 auto transaction = store.createTransaction(Sink::Storage::DataStore::ReadWrite);
944 auto db = transaction.openDatabase("testIntegerProperlySorted", {}, flags);
945
946 size_t previous = 0;
947 bool success = true;
948 db.scan("", [&] (const QByteArray &key, const QByteArray &value) {
949 size_t current = Sink::byteArrayToSizeT(key);
950 if (current < previous) {
951 success = false;
952 return false;
953 }
954
955 previous = current;
956 return true;
957 });
958
959 QVERIFY2(success, "Integer are not properly sorted after commit");
960 }
858 } 961 }
859 962
860}; 963};