From: Michal 'vorner' Vaner Date: Tue, 4 Dec 2012 12:57:50 +0000 (+0100) Subject: [2378] Fixes of ZoneLoader and tests X-Git-Tag: bind10-1.0.0-beta-release~28^2~2^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=01461d51fa2a533092b135604b33747908891792;p=thirdparty%2Fkea.git [2378] Fixes of ZoneLoader and tests After the rebase on top of working 2377. The most significant - don't access updater if it doesn't exist. --- diff --git a/src/lib/datasrc/tests/zone_loader_unittest.cc b/src/lib/datasrc/tests/zone_loader_unittest.cc index ccc5b9d28d..c71c1e3572 100644 --- a/src/lib/datasrc/tests/zone_loader_unittest.cc +++ b/src/lib/datasrc/tests/zone_loader_unittest.cc @@ -288,7 +288,7 @@ TEST_F(ZoneLoaderTest, classMismatch) { // Load an unsigned zone, all at once TEST_F(ZoneLoaderTest, loadUnsigned) { ZoneLoader loader(destination_client_, Name::ROOT_NAME(), - TEST_DATA_DIR "root.zone"); + TEST_DATA_DIR "/root.zone"); // It gets the updater directly in the constructor ASSERT_EQ(1, destination_client_.provided_updaters_.size()); EXPECT_EQ(Name::ROOT_NAME(), destination_client_.provided_updaters_[0]); @@ -377,8 +377,10 @@ TEST_F(ZoneLoaderTest, loadSigned) { // Test it throws when there's no such file TEST_F(ZoneLoaderTest, loadNoSuchFile) { - EXPECT_THROW(ZoneLoader(destination_client_, Name::ROOT_NAME(), - "This file does not exist"), MasterFileError); + ZoneLoader loader(destination_client_, Name::ROOT_NAME(), + "This file does not exist"); + EXPECT_THROW(loader.load(), MasterFileError); + EXPECT_FALSE(destination_client_.commit_called_); } // And it also throws when there's a syntax error in the master file diff --git a/src/lib/datasrc/zone_loader.cc b/src/lib/datasrc/zone_loader.cc index b77f6b8619..1d06740c3c 100644 --- a/src/lib/datasrc/zone_loader.cc +++ b/src/lib/datasrc/zone_loader.cc @@ -59,18 +59,23 @@ ZoneLoader::ZoneLoader(DataSourceClient& destination, const Name& zone_name, ZoneLoader::ZoneLoader(DataSourceClient& destination, const Name& zone_name, const char* filename) : updater_(destination.getUpdater(zone_name, true, false)), - loader_(new MasterLoader(filename, zone_name, - // TODO: Maybe we should have getClass() on the - // data source? - updater_->getFinder().getClass(), - createMasterLoaderCallbacks(zone_name, - updater_->getFinder().getClass(), - &loaded_ok_), - createMasterLoaderAddCallback(*updater_))), complete_(false), loaded_ok_(true) { - + if (updater_ == ZoneUpdaterPtr()) { + isc_throw(DataSourceError, "Zone " << zone_name << " not found in " + "destination data source, can't fill it with data"); + } else { + loader_.reset(new + MasterLoader(filename, zone_name, + // TODO: Maybe we should have getClass() + // on the data source? + updater_->getFinder().getClass(), + createMasterLoaderCallbacks(zone_name, + updater_->getFinder().getClass(), + &loaded_ok_), + createMasterLoaderAddCallback(*updater_))); + } } namespace { diff --git a/src/lib/datasrc/zone_loader.h b/src/lib/datasrc/zone_loader.h index 65be733fd6..5f5ddfd399 100644 --- a/src/lib/datasrc/zone_loader.h +++ b/src/lib/datasrc/zone_loader.h @@ -140,7 +140,7 @@ private: /// \brief The destination zone updater const ZoneUpdaterPtr updater_; /// \brief The master loader (for the loader mode) - const boost::scoped_ptr loader_; + boost::scoped_ptr loader_; /// \brief Indicator if loading was completed bool complete_; /// \brief Was the loading successful?