BIND 10 trac2750, updated. 8a6e0a611829250157c74d6fe8a329629d66b537 [2750] Update comment

BIND 10 source code commits bind10-changes at lists.isc.org
Fri Aug 30 01:47:11 UTC 2013


The branch, trac2750 has been updated
       via  8a6e0a611829250157c74d6fe8a329629d66b537 (commit)
       via  65d3cd24fbee716e9e331a9f4541e34341e5e15b (commit)
      from  82fded3b3266bfe0c30dc89572b716898b5aaf8e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 8a6e0a611829250157c74d6fe8a329629d66b537
Author: Mukund Sivaraman <muks at isc.org>
Date:   Fri Aug 30 07:16:51 2013 +0530

    [2750] Update comment

commit 65d3cd24fbee716e9e331a9f4541e34341e5e15b
Author: Mukund Sivaraman <muks at isc.org>
Date:   Fri Aug 30 07:13:54 2013 +0530

    [2750] Test multiple occurrences of node fusion in a single step upwards in the forest

-----------------------------------------------------------------------

Summary of changes:
 .../datasrc/tests/memory/domaintree_unittest.cc    |   96 +++++++++++++++++++-
 1 file changed, 95 insertions(+), 1 deletion(-)

-----------------------------------------------------------------------
diff --git a/src/lib/datasrc/tests/memory/domaintree_unittest.cc b/src/lib/datasrc/tests/memory/domaintree_unittest.cc
index 6178068..9373b1f 100644
--- a/src/lib/datasrc/tests/memory/domaintree_unittest.cc
+++ b/src/lib/datasrc/tests/memory/domaintree_unittest.cc
@@ -510,7 +510,8 @@ TEST_F(DomainTreeTest, nodeFusion) {
               dtree_expose_empty_node.find(Name("w.y.d.e.f"), &cdtnode));
     EXPECT_EQ(Name("w.y.d.e.f"), cdtnode->getName());
 
-    // Check that "p" exists independently.
+    // Check that "p" exists independently. This also checks that the
+    // down pointer got saved correctly during the last fusion.
     EXPECT_EQ(TestDomainTree::EXACTMATCH,
               dtree_expose_empty_node.find(Name("p.w.y.d.e.f"), &cdtnode));
     EXPECT_EQ(Name("p"), cdtnode->getName());
@@ -621,6 +622,99 @@ TEST_F(DomainTreeTest, nodeFusionWithData) {
     EXPECT_EQ(Name("w.y"), cdtnode->getName());
 }
 
+TEST_F(DomainTreeTest, nodeFusionMultiple) {
+    // Test that node fusion occurs up the tree multiple times when
+    // conditions permit.
+
+    /* Original tree:
+     *             .
+     *             |
+     *             b
+     *           /   \
+     *          a    d.e.f
+     *              /  |   \
+     *             c   |    g.h
+     *                 |     |
+     *                w.y    i
+     *              /  |  \   \
+     *             x   |   z   k
+     *                 |   |
+     *                 p   j
+     *               /   \
+     *              o     q
+     *
+     */
+
+    // Set data (some value 42) in the "d.e.f" node
+    EXPECT_EQ(TestDomainTree::EXACTMATCH,
+              dtree_expose_empty_node.find(Name("d.e.f"), &dtnode));
+    EXPECT_EQ(static_cast<int*>(NULL),
+              dtnode->setData(new int(42)));
+
+    // Now, delete "x" and "z" nodes.
+    EXPECT_EQ(TestDomainTree::EXACTMATCH,
+              dtree_expose_empty_node.find(Name("x.d.e.f"), &dtnode));
+    dtree_expose_empty_node.remove(mem_sgmt_, dtnode, deleteData);
+
+    EXPECT_EQ(TestDomainTree::EXACTMATCH,
+              dtree_expose_empty_node.find(Name("z.d.e.f"), &dtnode));
+    dtree_expose_empty_node.remove(mem_sgmt_, dtnode, deleteData);
+
+    /* Deleting 'x' and 'z' should not cause "w.y" to be fused with
+     * "d.e.f" because "d.e.f" is not empty (has data) in this case.
+     *             .
+     *             |
+     *             b
+     *           /   \
+     *          a    d.e.f
+     *              /  |   \
+     *             c   |    g.h
+     *                 |     |
+     *                w.y    i
+     *                 |      \
+     *                 |       k
+     *                 |
+     *                 p
+     *               /   \
+     *              o     q
+     *
+     */
+
+    // Check that "w.y" did not get fused with "d.e.f"
+    EXPECT_EQ(TestDomainTree::EXACTMATCH,
+              dtree_expose_empty_node.find(Name("d.e.f"), &cdtnode));
+    EXPECT_EQ(Name("d.e.f"), cdtnode->getName());
+
+    // Now, clear the data on "d.e.f". (Ideally, this itself should
+    // cause fusion of "d.e.f" and "w.y" to occur, but we only do fusion
+    // during deletion in our DomainTree implementation.)
+    EXPECT_EQ(TestDomainTree::EXACTMATCH,
+              dtree_expose_empty_node.find(Name("d.e.f"), &dtnode));
+    delete dtnode->setData(NULL);
+
+    // Check that "p" exists independently.
+    EXPECT_EQ(TestDomainTree::EXACTMATCH,
+              dtree_expose_empty_node.find(Name("p.w.y.d.e.f"), &cdtnode));
+    EXPECT_EQ(Name("p"), cdtnode->getName());
+
+    // Now, delete "o" and "q" nodes.
+    EXPECT_EQ(TestDomainTree::EXACTMATCH,
+              dtree_expose_empty_node.find(Name("o.w.y.d.e.f"), &dtnode));
+    dtree_expose_empty_node.remove(mem_sgmt_, dtnode, deleteData);
+
+    EXPECT_EQ(TestDomainTree::EXACTMATCH,
+              dtree_expose_empty_node.find(Name("q.w.y.d.e.f"), &dtnode));
+    dtree_expose_empty_node.remove(mem_sgmt_, dtnode, deleteData);
+
+    // The deletion of "o" and "q" should cause "p" to fuse with "w.y"
+    // to form "p.w.y". Then, as "d.e.f" is now empty and conditions
+    // permit, for a second time up the forest, "p.w.y" is fused with
+    // "d.e.f" to form "p.w.y.d.e.f".
+    EXPECT_EQ(TestDomainTree::EXACTMATCH,
+              dtree_expose_empty_node.find(Name("p.w.y.d.e.f"), &cdtnode));
+    EXPECT_EQ(Name("p.w.y.d.e.f"), cdtnode->getName());
+}
+
 TEST_F(DomainTreeTest, DISABLED_remove1) {
     ofstream o1("d1.dot");
     dtree_expose_empty_node.dumpDot(o1);



More information about the bind10-changes mailing list