From: Michal 'vorner' Vaner Date: Fri, 14 Dec 2012 12:45:48 +0000 (+0100) Subject: [2427] Test for $ORIGIN handling X-Git-Tag: bind10-1.0.0-beta-release~13^2^2~20 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8fd5cc452a30a35df0a24b7bd1c30e76ea6bb54d;p=thirdparty%2Fkea.git [2427] Test for $ORIGIN handling --- diff --git a/src/lib/dns/tests/master_loader_unittest.cc b/src/lib/dns/tests/master_loader_unittest.cc index bfbf9fa357..3644f08fcc 100644 --- a/src/lib/dns/tests/master_loader_unittest.cc +++ b/src/lib/dns/tests/master_loader_unittest.cc @@ -123,6 +123,10 @@ public: checkRR("www.example.org", RRType::A(), "192.0.2.1"); } + void checkARR(const string& name) { + checkRR(name, RRType::A(), "192.0.2.1"); + } + MasterLoaderCallbacks callbacks_; boost::scoped_ptr loader_; vector errors_; @@ -179,6 +183,46 @@ TEST_F(MasterLoaderTest, include) { } } +TEST_F(MasterLoaderTest, origin) { + // Varius forms of the directive + const char* origins[] = { + "$origin", + "$ORIGIN", + "$Origin", + "$OrigiN", + "\"$ORIGIN\"", + NULL + }; + for (const char** origin = origins; *origin != NULL; ++origin) { + SCOPED_TRACE(*origin); + + clear(); + const string directive = *origin; + const string input = + "@ 1H IN A 192.0.2.1\n" + + directive + " sub.example.org.\n" + "www 1H IN A 192.0.2.1\n" + + // Relative name in the origin + directive + " relative\n" + "@ 1H IN A 192.0.2.1\n" + // Origin is _not_ used here (absolute name) + "noorigin.example.org. 60M IN A 192.0.2.1\n"; + stringstream ss(input); + setLoader(ss, Name("example.org."), RRClass::IN(), + MasterLoader::MANY_ERRORS); + + loader_->load(); + EXPECT_TRUE(loader_->loadedSucessfully()); + EXPECT_TRUE(errors_.empty()); + EXPECT_TRUE(warnings_.empty()); + + checkARR("example.org"); + checkARR("www.sub.example.org"); + checkARR("relative.sub.example.org"); + checkARR("noorigin.example.org"); + } +} + // Test the source is correctly popped even after error TEST_F(MasterLoaderTest, popAfterError) { const string include_str = "$include " TEST_DATA_SRCDIR