Commit 7ff2ddee authored by JINMEI Tatuya's avatar JINMEI Tatuya
Browse files

[2212] ported command test's loadBrokenZone test.

now catch exceptions from reload().
parent 3519306b
...@@ -490,9 +490,16 @@ DataSrcClientsBuilderBase<MutexType, CondVarType>::doLoadZone( ...@@ -490,9 +490,16 @@ DataSrcClientsBuilderBase<MutexType, CondVarType>::doLoadZone(
assert(client_list); assert(client_list);
datasrc::ConfigurableClientList::ReloadResult result; datasrc::ConfigurableClientList::ReloadResult result;
{ try {
typename MutexType::Locker locker(*map_mutex_); typename MutexType::Locker locker(*map_mutex_);
result = client_list->reload(origin); result = client_list->reload(origin);
} catch (const isc::Exception& ex) {
// We catch our internal exceptions (which will be just ignored) and
// propagated others (which should generally be considered fatal and
// will make the thread terminate)
isc_throw(InternalCommandError, "failed to load a zone " << origin <<
"/" << rrclass << ": error occurred in reload: " <<
ex.what());
} }
switch (result) { switch (result) {
case datasrc::ConfigurableClientList::ZONE_RELOADED: case datasrc::ConfigurableClientList::ZONE_RELOADED:
......
...@@ -372,4 +372,20 @@ TEST_F(DataSrcClientsBuilderTest, ...@@ -372,4 +372,20 @@ TEST_F(DataSrcClientsBuilderTest,
find(Name("example.org"), RRType::SOA())->code); find(Name("example.org"), RRType::SOA())->code);
} }
TEST_F(DataSrcClientsBuilderTest, loadBrokenZone) {
configureZones();
ASSERT_EQ(0, std::system(INSTALL_PROG " -c " TEST_DATA_DIR
"/test1-broken.zone.in "
TEST_DATA_BUILDDIR "/test1.zone.copied"));
// there's an error in the new zone file. reload will be rejected.
const Command loadzone_cmd(LOADZONE, isc::data::Element::fromJSON(
"{\"class\": \"IN\","
" \"origin\": \"test1.example\"}"));
EXPECT_THROW(builder.handleCommand(loadzone_cmd),
TestDataSrcClientsBuilder::InternalCommandError);
zoneChecks(clients_map, rrclass); // zone shouldn't be replaced
}
} // unnamed namespace } // unnamed namespace
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment