From: JINMEI Tatuya Date: Sat, 20 Oct 2012 03:15:16 +0000 (-0700) Subject: [2211] updated auth LoadZoneCommand so it uses the new DataSrcClientsMgr. X-Git-Tag: trac2402_base~3^2~16 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0e56f890880b684ebb71245155d0ecd435c75fdf;p=thirdparty%2Fkea.git [2211] updated auth LoadZoneCommand so it uses the new DataSrcClientsMgr. --- diff --git a/src/bin/auth/command.cc b/src/bin/auth/command.cc index efd60f2645..6ee616870c 100644 --- a/src/bin/auth/command.cc +++ b/src/bin/auth/command.cc @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -188,16 +189,12 @@ public: if (!origin_elem) { isc_throw(AuthCommandError, "Zone origin is missing"); } - Name origin(origin_elem->stringValue()); + const Name origin(origin_elem->stringValue()); - // We're going to work with the client lists. They may be used - // from a different thread too, protect them. - isc::util::thread::Mutex::Locker locker( - server.getDataSrcClientListMutex()); - const boost::shared_ptr - list(server.getDataSrcClientList(zone_class)); + DataSrcClientsMgr::Holder holder(server.getDataSrcClientsMgr()); + ConfigurableClientList* list = holder.findClientList(zone_class); - if (!list) { + if (list == NULL) { isc_throw(AuthCommandError, "There's no client list for " "class " << zone_class); } diff --git a/src/bin/auth/datasrc_clients_mgr.h b/src/bin/auth/datasrc_clients_mgr.h index 0a36c95e94..beebb64518 100644 --- a/src/bin/auth/datasrc_clients_mgr.h +++ b/src/bin/auth/datasrc_clients_mgr.h @@ -209,6 +209,16 @@ public: reconfigureHook(); // for test's customization } + /// \brief Swap the underlying data source client lists. + /// + /// This is provided only for some existing tests until we support a + /// cleaner way to use faked data source clients. Non test code or + /// newer tests must not use this. + void swapDataSrcClientLists(datasrc::DataSrcClientListsPtr new_lists) { + typename MutexType::Locker locker(map_mutex_); + clients_map_.swap(new_lists); + } + private: // This is expected to be called at the end of the destructor. It // actually does nothing, but provides a customization point for diff --git a/src/bin/auth/tests/command_unittest.cc b/src/bin/auth/tests/command_unittest.cc index 92b5211ef0..95d9684d05 100644 --- a/src/bin/auth/tests/command_unittest.cc +++ b/src/bin/auth/tests/command_unittest.cc @@ -57,6 +57,7 @@ using namespace isc::datasrc; using namespace isc::config; using namespace isc::util::unittests; using namespace isc::testutils; +using namespace isc::auth; using namespace isc::auth::unittest; namespace { @@ -175,27 +176,26 @@ TEST_F(AuthCommandTest, shutdownIncorrectPID) { // zones, and checks the zones are correctly loaded. void zoneChecks(AuthSrv& server) { - isc::util::thread::Mutex::Locker locker( - server.getDataSrcClientListMutex()); - EXPECT_EQ(ZoneFinder::SUCCESS, server.getDataSrcClientList(RRClass::IN())-> - find(Name("ns.test1.example")).finder_-> - find(Name("ns.test1.example"), RRType::A())->code); - EXPECT_EQ(ZoneFinder::NXRRSET, server.getDataSrcClientList(RRClass::IN())-> - find(Name("ns.test1.example")).finder_-> - find(Name("ns.test1.example"), RRType::AAAA())->code); - EXPECT_EQ(ZoneFinder::SUCCESS, server.getDataSrcClientList(RRClass::IN())-> - find(Name("ns.test2.example")).finder_-> - find(Name("ns.test2.example"), RRType::A())->code); - EXPECT_EQ(ZoneFinder::NXRRSET, server.getDataSrcClientList(RRClass::IN())-> - find(Name("ns.test2.example")).finder_-> - find(Name("ns.test2.example"), RRType::AAAA())->code); + const RRClass rrclass(RRClass::IN()); + + DataSrcClientsMgr::Holder holder(server.getDataSrcClientsMgr()); + EXPECT_EQ(ZoneFinder::SUCCESS, + holder.findClientList(rrclass)->find(Name("ns.test1.example")) + .finder_->find(Name("ns.test1.example"), RRType::A())->code); + EXPECT_EQ(ZoneFinder::NXRRSET, + holder.findClientList(rrclass)->find(Name("ns.test1.example")). + finder_->find(Name("ns.test1.example"), RRType::AAAA())->code); + EXPECT_EQ(ZoneFinder::SUCCESS, + holder.findClientList(rrclass)->find(Name("ns.test2.example")). + finder_->find(Name("ns.test2.example"), RRType::A())->code); + EXPECT_EQ(ZoneFinder::NXRRSET, + holder.findClientList(rrclass)->find(Name("ns.test2.example")). + finder_->find(Name("ns.test2.example"), RRType::AAAA())->code); } void installDataSrcClientLists(AuthSrv& server, DataSrcClientListsPtr lists) { - isc::util::thread::Mutex::Locker locker( - server.getDataSrcClientListMutex()); - server.swapDataSrcClientLists(lists); + server.getDataSrcClientsMgr().swapDataSrcClientLists(lists); } void @@ -224,22 +224,24 @@ configureZones(AuthSrv& server) { void newZoneChecks(AuthSrv& server) { - isc::util::thread::Mutex::Locker locker( - server.getDataSrcClientListMutex()); - EXPECT_EQ(ZoneFinder::SUCCESS, server.getDataSrcClientList(RRClass::IN())-> + const RRClass rrclass(RRClass::IN()); + + DataSrcClientsMgr::Holder holder(server.getDataSrcClientsMgr()); + EXPECT_EQ(ZoneFinder::SUCCESS, holder.findClientList(rrclass)-> find(Name("ns.test1.example")).finder_-> find(Name("ns.test1.example"), RRType::A())->code); + // now test1.example should have ns/AAAA - EXPECT_EQ(ZoneFinder::SUCCESS, server.getDataSrcClientList(RRClass::IN())-> + EXPECT_EQ(ZoneFinder::SUCCESS, holder.findClientList(rrclass)-> find(Name("ns.test1.example")).finder_-> find(Name("ns.test1.example"), RRType::AAAA())->code); // test2.example shouldn't change - EXPECT_EQ(ZoneFinder::SUCCESS, server.getDataSrcClientList(RRClass::IN())-> + EXPECT_EQ(ZoneFinder::SUCCESS, holder.findClientList(rrclass)-> find(Name("ns.test2.example")).finder_-> find(Name("ns.test2.example"), RRType::A())->code); EXPECT_EQ(ZoneFinder::NXRRSET, - server.getDataSrcClientList(RRClass::IN())-> + holder.findClientList(rrclass)-> find(Name("ns.test2.example")).finder_-> find(Name("ns.test2.example"), RRType::AAAA())->code); } @@ -285,11 +287,11 @@ TEST_F(AuthCommandTest, installDataSrcClientLists(server_, configureDataSource(config)); { - isc::util::thread::Mutex::Locker locker( - server_.getDataSrcClientListMutex()); + DataSrcClientsMgr::Holder holder(server_.getDataSrcClientsMgr()); + // Check that the A record at www.example.org does not exist EXPECT_EQ(ZoneFinder::NXDOMAIN, - server_.getDataSrcClientList(RRClass::IN())-> + holder.findClientList(RRClass::IN())-> find(Name("example.org")).finder_-> find(Name("www.example.org"), RRType::A())->code); @@ -310,7 +312,7 @@ TEST_F(AuthCommandTest, sql_updater->commit(); EXPECT_EQ(ZoneFinder::NXDOMAIN, - server_.getDataSrcClientList(RRClass::IN())-> + holder.findClientList(RRClass::IN())-> find(Name("example.org")).finder_-> find(Name("www.example.org"), RRType::A())->code); } @@ -322,11 +324,10 @@ TEST_F(AuthCommandTest, checkAnswer(0, "Successful load"); { - isc::util::thread::Mutex::Locker locker( - server_.getDataSrcClientListMutex()); + DataSrcClientsMgr::Holder holder(server_.getDataSrcClientsMgr()); // And now it should be present too. EXPECT_EQ(ZoneFinder::SUCCESS, - server_.getDataSrcClientList(RRClass::IN())-> + holder.findClientList(RRClass::IN())-> find(Name("example.org")).finder_-> find(Name("www.example.org"), RRType::A())->code); } @@ -337,11 +338,10 @@ TEST_F(AuthCommandTest, checkAnswer(1, "example.com"); { - isc::util::thread::Mutex::Locker locker( - server_.getDataSrcClientListMutex()); + DataSrcClientsMgr::Holder holder(server_.getDataSrcClientsMgr()); // The previous zone is not hurt in any way EXPECT_EQ(ZoneFinder::SUCCESS, - server_.getDataSrcClientList(RRClass::IN())-> + holder.findClientList(RRClass::IN())-> find(Name("example.org")).finder_-> find(Name("example.org"), RRType::SOA())->code); } @@ -360,11 +360,10 @@ TEST_F(AuthCommandTest, Element::fromJSON("{\"origin\": \"example.com\"}")); checkAnswer(1, "Unreadable"); - isc::util::thread::Mutex::Locker locker( - server_.getDataSrcClientListMutex()); + DataSrcClientsMgr::Holder holder(server_.getDataSrcClientsMgr()); // The previous zone is not hurt in any way EXPECT_EQ(ZoneFinder::SUCCESS, - server_.getDataSrcClientList(RRClass::IN())-> + holder.findClientList(RRClass::IN())-> find(Name("example.org")).finder_-> find(Name("example.org"), RRType::SOA())->code); }