[Pkg-bitcoin-commits] [bitcoin] 48/126: Verify DBWrapper iterators are taking snapshots

Jonas Smedegaard dr at jones.dk
Mon Nov 13 20:01:54 UTC 2017


This is an automated email from the git hooks/post-receive script.

js pushed a commit to annotated tag debian/0.15.1_dfsg-1
in repository bitcoin.

commit a36f3320a94aa70328e133d53146fc1ef57e1e34
Author: Matt Corallo <git at bluematt.me>
Date:   Fri Sep 29 17:33:50 2017 -0400

    Verify DBWrapper iterators are taking snapshots
    
    The LevelDB docs seem to indicate that an iterator will not take
    snapshots (even providing instructions on how to do so yourself).
    In several of the places we use them, we assume snapshots to have
    been taken.
    
    In order to make sure LevelDB doesn't change out from under us
    (and to prevent the next person who reads the docs from having the
    same fright I did), verify that snapshots are taken in our tests.
    
    Github-Pull: #11422
    Rebased-From: bb8376bbc3d96af727444f90e5f60d47105609dc
---
 src/test/dbwrapper_tests.cpp | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/test/dbwrapper_tests.cpp b/src/test/dbwrapper_tests.cpp
index 6ed6e77..d90fe50 100644
--- a/src/test/dbwrapper_tests.cpp
+++ b/src/test/dbwrapper_tests.cpp
@@ -204,19 +204,31 @@ BOOST_AUTO_TEST_CASE(iterator_ordering)
     for (int x=0x00; x<256; ++x) {
         uint8_t key = x;
         uint32_t value = x*x;
-        BOOST_CHECK(dbw.Write(key, value));
+        if (!(x & 1)) BOOST_CHECK(dbw.Write(key, value));
     }
 
+    // Check that creating an iterator creates a snapshot
     std::unique_ptr<CDBIterator> it(const_cast<CDBWrapper&>(dbw).NewIterator());
+
+    for (int x=0x00; x<256; ++x) {
+        uint8_t key = x;
+        uint32_t value = x*x;
+        if (x & 1) BOOST_CHECK(dbw.Write(key, value));
+    }
+
     for (int seek_start : {0x00, 0x80}) {
         it->Seek((uint8_t)seek_start);
-        for (int x=seek_start; x<256; ++x) {
+        for (int x=seek_start; x<255; ++x) {
             uint8_t key;
             uint32_t value;
             BOOST_CHECK(it->Valid());
             if (!it->Valid()) // Avoid spurious errors about invalid iterator's key and value in case of failure
                 break;
             BOOST_CHECK(it->GetKey(key));
+            if (x & 1) {
+                BOOST_CHECK_EQUAL(key, x + 1);
+                continue;
+            }
             BOOST_CHECK(it->GetValue(value));
             BOOST_CHECK_EQUAL(key, x);
             BOOST_CHECK_EQUAL(value, x*x);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-bitcoin/bitcoin.git



More information about the Pkg-bitcoin-commits mailing list