From: Michal 'vorner' Vaner Date: Sat, 14 Apr 2012 14:49:00 +0000 (+0200) Subject: [1577] Share some test code X-Git-Tag: trac2351_base~226^2~116^2~34^2^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=de9ccf5df44c42526b2cd8e7f078d6073729c35a;p=thirdparty%2Fkea.git [1577] Share some test code As it had two copies (one in in-memory tests and one in database ones), it can be moved to a separate function. --- diff --git a/src/lib/datasrc/tests/database_unittest.cc b/src/lib/datasrc/tests/database_unittest.cc index 1f346bc5aa..980ff8fb7c 100644 --- a/src/lib/datasrc/tests/database_unittest.cc +++ b/src/lib/datasrc/tests/database_unittest.cc @@ -3576,8 +3576,7 @@ TEST_F(MockDatabaseClientTest, journalWithBadData) { second->getNextDiff(), DataSourceError); } -/// Let us test a little bit of NSEC3. This is borrowed from the in-memory tests -/// Maybe unify the code a little bit somehow? +/// Let us test a little bit of NSEC3. TEST_F(MockDatabaseClientTest, findNSEC3) { // Set up the faked hash calculator. setNSEC3HashCreator(&test_nsec3_hash_creator_); @@ -3594,82 +3593,8 @@ TEST_F(MockDatabaseClientTest, findNSEC3) { // And enable NSEC3 in the zone. this->current_accessor_->enableNSEC3(); - // Parameter validation: the query name must be in or below the zone - EXPECT_THROW(finder->findNSEC3(Name("example.com"), false), OutOfZone); - EXPECT_THROW(finder->findNSEC3(Name("org"), true), OutOfZone); - - Name origin("example.org"); - const string apex_nsec3_text = string(apex_hash) + ".example.org." + - string(nsec3_common); - const string ns1_nsec3_text = string(ns1_hash) + ".example.org." + - string(nsec3_common); - const string w_nsec3_text = string(w_hash) + ".example.org." + - string(nsec3_common); - const string zzz_nsec3_text = string(zzz_hash) + ".example.org." + - string(nsec3_common); - - // Apex name. It should have a matching NSEC3. - { - SCOPED_TRACE("apex, non recursive mode"); - findNSEC3Check(true, origin.getLabelCount(), apex_nsec3_text, "", - finder->findNSEC3(origin, false)); - } - - // Recursive mode doesn't change the result in this case. - { - SCOPED_TRACE("apex, recursive mode"); - findNSEC3Check(true, origin.getLabelCount(), apex_nsec3_text, "", - finder->findNSEC3(origin, true)); - } - - // Non existent name (in the NSEC3 namespace -- the findNSEC3 does - // not look into the normal data). Disabling recursion, a covering - // NSEC3 should be returned. - const Name www_name("www.example.org"); - { - SCOPED_TRACE("non existent name, non recursive mode"); - findNSEC3Check(false, www_name.getLabelCount(), apex_nsec3_text, "", - finder->findNSEC3(www_name, false)); - } - - // Non existent name. The closest provable encloser is the apex, - // and next closer is the query name itself (which NSEC3 for ns1 - // covers) - // H(ns1) = 2T... < H(xxx) = Q0... < H(zzz) = R5... - { - SCOPED_TRACE("non existent name, recursive mode"); - findNSEC3Check(true, origin.getLabelCount(), apex_nsec3_text, - ns1_nsec3_text, - finder->findNSEC3(Name("xxx.example.org"), true)); - } - - // Similar to the previous case, but next closer name is different - // from the query name. The closet encloser is w.example.org, and - // next closer is y.w.example.org. - // H(ns1) = 2T.. < H(y.w) = K8.. < H(zzz) = R5 - { - SCOPED_TRACE("non existent name, non qname next closer"); - findNSEC3Check(true, Name("w.example.org").getLabelCount(), - w_nsec3_text, ns1_nsec3_text, - finder->findNSEC3(Name("x.y.w.example.org"), - true)); - } - - // In the rest of test we check hash comparison for wrap around cases. - { - SCOPED_TRACE("very small hash"); - const Name smallest_name("smallest.example.org"); - findNSEC3Check(false, smallest_name.getLabelCount(), - zzz_nsec3_text, "", - finder->findNSEC3(smallest_name, false)); - } - { - SCOPED_TRACE("very large hash"); - const Name largest_name("largest.example.org"); - findNSEC3Check(false, largest_name.getLabelCount(), - zzz_nsec3_text, "", - finder->findNSEC3(largest_name, false)); - } + // The rest is in the function, it is shared with in-memory tests + performNSEC3Test(*finder); } } diff --git a/src/lib/datasrc/tests/faked_nsec3.cc b/src/lib/datasrc/tests/faked_nsec3.cc index da210af240..4ca22a5563 100644 --- a/src/lib/datasrc/tests/faked_nsec3.cc +++ b/src/lib/datasrc/tests/faked_nsec3.cc @@ -111,6 +111,86 @@ findNSEC3Check(bool expected_matched, uint8_t expected_labels, } } +void +performNSEC3Test(ZoneFinder &finder) { + // Parameter validation: the query name must be in or below the zone + EXPECT_THROW(finder.findNSEC3(Name("example.com"), false), OutOfZone); + EXPECT_THROW(finder.findNSEC3(Name("org"), true), OutOfZone); + + Name origin("example.org"); + const string apex_nsec3_text = string(apex_hash) + ".example.org." + + string(nsec3_common); + const string ns1_nsec3_text = string(ns1_hash) + ".example.org." + + string(nsec3_common); + const string w_nsec3_text = string(w_hash) + ".example.org." + + string(nsec3_common); + const string zzz_nsec3_text = string(zzz_hash) + ".example.org." + + string(nsec3_common); + + // Apex name. It should have a matching NSEC3. + { + SCOPED_TRACE("apex, non recursive mode"); + findNSEC3Check(true, origin.getLabelCount(), apex_nsec3_text, "", + finder.findNSEC3(origin, false)); + } + + // Recursive mode doesn't change the result in this case. + { + SCOPED_TRACE("apex, recursive mode"); + findNSEC3Check(true, origin.getLabelCount(), apex_nsec3_text, "", + finder.findNSEC3(origin, true)); + } + + // Non existent name (in the NSEC3 namespace -- the findNSEC3 does + // not look into the normal data). Disabling recursion, a covering + // NSEC3 should be returned. + const Name www_name("www.example.org"); + { + SCOPED_TRACE("non existent name, non recursive mode"); + findNSEC3Check(false, www_name.getLabelCount(), apex_nsec3_text, "", + finder.findNSEC3(www_name, false)); + } + + // Non existent name. The closest provable encloser is the apex, + // and next closer is the query name itself (which NSEC3 for ns1 + // covers) + // H(ns1) = 2T... < H(xxx) = Q0... < H(zzz) = R5... + { + SCOPED_TRACE("non existent name, recursive mode"); + findNSEC3Check(true, origin.getLabelCount(), apex_nsec3_text, + ns1_nsec3_text, + finder.findNSEC3(Name("xxx.example.org"), true)); + } + + // Similar to the previous case, but next closer name is different + // from the query name. The closet encloser is w.example.org, and + // next closer is y.w.example.org. + // H(ns1) = 2T.. < H(y.w) = K8.. < H(zzz) = R5 + { + SCOPED_TRACE("non existent name, non qname next closer"); + findNSEC3Check(true, Name("w.example.org").getLabelCount(), + w_nsec3_text, ns1_nsec3_text, + finder.findNSEC3(Name("x.y.w.example.org"), + true)); + } + + // In the rest of test we check hash comparison for wrap around cases. + { + SCOPED_TRACE("very small hash"); + const Name smallest_name("smallest.example.org"); + findNSEC3Check(false, smallest_name.getLabelCount(), + zzz_nsec3_text, "", + finder.findNSEC3(smallest_name, false)); + } + { + SCOPED_TRACE("very large hash"); + const Name largest_name("largest.example.org"); + findNSEC3Check(false, largest_name.getLabelCount(), + zzz_nsec3_text, "", + finder.findNSEC3(largest_name, false)); + } +} + } } } diff --git a/src/lib/datasrc/tests/faked_nsec3.h b/src/lib/datasrc/tests/faked_nsec3.h index a7352f78a9..51b40593d5 100644 --- a/src/lib/datasrc/tests/faked_nsec3.h +++ b/src/lib/datasrc/tests/faked_nsec3.h @@ -66,6 +66,7 @@ public: const; }; +// Check the result against expected values. It directly calls EXPECT_ macros void findNSEC3Check(bool expected_matched, uint8_t expected_labels, const std::string& expected_closest, @@ -73,6 +74,11 @@ findNSEC3Check(bool expected_matched, uint8_t expected_labels, const isc::datasrc::ZoneFinder::FindNSEC3Result& result, bool expected_sig = false); +// Perform the shared part of NSEC3 test (shared between in-memory and database +// tests). +void +performNSEC3Test(ZoneFinder &finder); + } } } diff --git a/src/lib/datasrc/tests/memory_datasrc_unittest.cc b/src/lib/datasrc/tests/memory_datasrc_unittest.cc index 4403ba3033..87fa24fa85 100644 --- a/src/lib/datasrc/tests/memory_datasrc_unittest.cc +++ b/src/lib/datasrc/tests/memory_datasrc_unittest.cc @@ -1859,71 +1859,7 @@ TEST_F(InMemoryZoneFinderTest, findNSEC3) { string(nsec3_common); EXPECT_EQ(result::SUCCESS, zone_finder_.add(textToRRset(zzz_nsec3_text))); - // Parameter validation: the query name must be in or below the zone - EXPECT_THROW(zone_finder_.findNSEC3(Name("example.com"), false), OutOfZone); - EXPECT_THROW(zone_finder_.findNSEC3(Name("org"), true), OutOfZone); - - // Apex name. It should have a matching NSEC3. - { - SCOPED_TRACE("apex, non recursive mode"); - findNSEC3Check(true, origin_.getLabelCount(), apex_nsec3_text, "", - zone_finder_.findNSEC3(origin_, false)); - } - - // Recursive mode doesn't change the result in this case. - { - SCOPED_TRACE("apex, recursive mode"); - findNSEC3Check(true, origin_.getLabelCount(), apex_nsec3_text, "", - zone_finder_.findNSEC3(origin_, true)); - } - - // Non existent name. Disabling recursion, a covering NSEC3 should be - // returned. - const Name www_name("www.example.org"); - { - SCOPED_TRACE("non existent name, non recursive mode"); - findNSEC3Check(false, www_name.getLabelCount(), apex_nsec3_text, "", - zone_finder_.findNSEC3(www_name, false)); - } - - // Non existent name. The closest provable encloser is the apex, - // and next closer is the query name itself (which NSEC3 for ns1 - // covers) - // H(ns1) = 2T... < H(xxx) = Q0... < H(zzz) = R5... - { - SCOPED_TRACE("non existent name, recursive mode"); - findNSEC3Check(true, origin_.getLabelCount(), apex_nsec3_text, - ns1_nsec3_text, - zone_finder_.findNSEC3(Name("xxx.example.org"), true)); - } - - // Similar to the previous case, but next closer name is different - // from the query name. The closet encloser is w.example.org, and - // next closer is y.w.example.org. - // H(ns1) = 2T.. < H(y.w) = K8.. < H(zzz) = R5 - { - SCOPED_TRACE("non existent name, non qname next closer"); - findNSEC3Check(true, Name("w.example.org").getLabelCount(), - w_nsec3_text, ns1_nsec3_text, - zone_finder_.findNSEC3(Name("x.y.w.example.org"), - true)); - } - - // In the rest of test we check hash comparison for wrap around cases. - { - SCOPED_TRACE("very small hash"); - const Name smallest_name("smallest.example.org"); - findNSEC3Check(false, smallest_name.getLabelCount(), - zzz_nsec3_text, "", - zone_finder_.findNSEC3(smallest_name, false)); - } - { - SCOPED_TRACE("very large hash"); - const Name largest_name("largest.example.org"); - findNSEC3Check(false, largest_name.getLabelCount(), - zzz_nsec3_text, "", - zone_finder_.findNSEC3(largest_name, false)); - } + performNSEC3Test(zone_finder_); } TEST_F(InMemoryZoneFinderTest, findNSEC3ForBadZone) {