summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorJINMEI Tatuya <jinmei@isc.org>2013-04-01 21:32:05 +0200
committerJINMEI Tatuya <jinmei@isc.org>2013-04-01 21:32:05 +0200
commit766d7f47299cea598fd47bb510b9366de6da4356 (patch)
tree19a0c0facfb0c9c6d32fdfaef91e01f848ffff1f /src/lib
parent[2833] renamed ZoneTableConfig to CacheConfig (diff)
downloadkea-766d7f47299cea598fd47bb510b9366de6da4356.tar.xz
kea-766d7f47299cea598fd47bb510b9366de6da4356.zip
[2833] pass allow_cache to CacheConfig
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/datasrc/Makefile.am2
-rw-r--r--src/lib/datasrc/cache_config.cc (renamed from src/lib/datasrc/zone_table_config.cc)8
-rw-r--r--src/lib/datasrc/cache_config.h (renamed from src/lib/datasrc/zone_table_config.h)3
-rw-r--r--src/lib/datasrc/client_list.cc20
-rw-r--r--src/lib/datasrc/tests/Makefile.am2
-rw-r--r--src/lib/datasrc/tests/cache_config_unittest.cc (renamed from src/lib/datasrc/tests/zone_table_config_unittest.cc)54
6 files changed, 48 insertions, 41 deletions
diff --git a/src/lib/datasrc/Makefile.am b/src/lib/datasrc/Makefile.am
index d0ff01522d..48b344af6f 100644
--- a/src/lib/datasrc/Makefile.am
+++ b/src/lib/datasrc/Makefile.am
@@ -39,7 +39,7 @@ libb10_datasrc_la_SOURCES += master_loader_callbacks.h
libb10_datasrc_la_SOURCES += master_loader_callbacks.cc
libb10_datasrc_la_SOURCES += rrset_collection_base.h rrset_collection_base.cc
libb10_datasrc_la_SOURCES += zone_loader.h zone_loader.cc
-libb10_datasrc_la_SOURCES += zone_table_config.h zone_table_config.cc
+libb10_datasrc_la_SOURCES += cache_config.h cache_config.cc
nodist_libb10_datasrc_la_SOURCES = datasrc_messages.h datasrc_messages.cc
libb10_datasrc_la_LDFLAGS = -no-undefined -version-info 1:0:1
diff --git a/src/lib/datasrc/zone_table_config.cc b/src/lib/datasrc/cache_config.cc
index 6db6a89095..b821f7d7c7 100644
--- a/src/lib/datasrc/zone_table_config.cc
+++ b/src/lib/datasrc/cache_config.cc
@@ -12,7 +12,7 @@
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
-#include <datasrc/zone_table_config.h>
+#include <datasrc/cache_config.h>
#include <datasrc/client.h>
#include <datasrc/memory/load_action.h>
#include <dns/name.h>
@@ -48,8 +48,9 @@ getSegmentTypeFromConf(const Element& conf) {
CacheConfig::CacheConfig(const std::string& datasrc_type,
const DataSourceClient* datasrc_client,
- const Element& datasrc_conf) :
- enabled_(getEnabledFromConf(datasrc_conf)),
+ const Element& datasrc_conf,
+ bool allowed) :
+ enabled_(allowed && getEnabledFromConf(datasrc_conf)),
segment_type_(getSegmentTypeFromConf(datasrc_conf)),
datasrc_client_(datasrc_client)
{
@@ -62,6 +63,7 @@ CacheConfig::CacheConfig(const std::string& datasrc_type,
isc_throw(isc::InvalidParameter,
"data source client is given for MasterFiles");
}
+
if (!enabled_) {
isc_throw(CacheConfigError,
"The cache must be enabled for the MasterFiles type");
diff --git a/src/lib/datasrc/zone_table_config.h b/src/lib/datasrc/cache_config.h
index 22e3c7481d..f2944b77cb 100644
--- a/src/lib/datasrc/zone_table_config.h
+++ b/src/lib/datasrc/cache_config.h
@@ -58,7 +58,8 @@ class CacheConfig {
public:
CacheConfig(const std::string& datasrc_type,
const DataSourceClient* datasrc_client,
- const data::Element& datasrc_conf);
+ const data::Element& datasrc_conf,
+ bool allowed);
/// \brief Return if the cache is enabled.
///
diff --git a/src/lib/datasrc/client_list.cc b/src/lib/datasrc/client_list.cc
index fdc80dbd35..1fc41ced9c 100644
--- a/src/lib/datasrc/client_list.cc
+++ b/src/lib/datasrc/client_list.cc
@@ -17,7 +17,7 @@
#include <datasrc/exceptions.h>
#include <datasrc/client.h>
#include <datasrc/factory.h>
-#include <datasrc/zone_table_config.h>
+#include <datasrc/cache_config.h>
#include <datasrc/memory/memory_client.h>
#include <datasrc/memory/zone_table_segment.h>
#include <datasrc/memory/zone_writer.h>
@@ -120,20 +120,21 @@ ConfigurableClientList::configure(const ConstElementPtr& config,
<< name);
}
- if (type == "MasterFiles" && !allow_cache) { // XXX type specific
- // We're not going to load these zones. Issue warnings about
- // it.
- LOG_WARN(logger, DATASRC_LIST_NOT_CACHED).
- arg(name).arg(rrclass_);
- continue;
- }
// Create a client for the underling data source via factory.
// (If it's our internal type of data source, this is essentially
// no-op).
const DataSourcePair dsrc_pair = getDataSourceClient(type,
paramConf);
+ if (!allow_cache && !dsrc_pair.first) {
+ // We're not going to load these zones. Issue warnings about
+ // it.
+ LOG_WARN(logger, DATASRC_LIST_NOT_CACHED).
+ arg(name).arg(rrclass_);
+ continue;
+ }
- internal::CacheConfig cache_conf(type, dsrc_pair.first, *dconf);
+ internal::CacheConfig cache_conf(type, dsrc_pair.first, *dconf,
+ allow_cache);
shared_ptr<ZoneTableSegment> ztable_segment;
if (cache_conf.isEnabled()) {
ztable_segment.reset(ZoneTableSegment::create(
@@ -142,7 +143,6 @@ ConfigurableClientList::configure(const ConstElementPtr& config,
}
new_data_sources.push_back(DataSourceInfo(dsrc_pair.first,
dsrc_pair.second,
- allow_cache &&
cache_conf.isEnabled(),
rrclass_, ztable_segment,
name));
diff --git a/src/lib/datasrc/tests/Makefile.am b/src/lib/datasrc/tests/Makefile.am
index 57a8fdbcb0..341d6eb53f 100644
--- a/src/lib/datasrc/tests/Makefile.am
+++ b/src/lib/datasrc/tests/Makefile.am
@@ -59,7 +59,7 @@ run_unittests_SOURCES += faked_nsec3.h faked_nsec3.cc
run_unittests_SOURCES += client_list_unittest.cc
run_unittests_SOURCES += master_loader_callbacks_test.cc
run_unittests_SOURCES += zone_loader_unittest.cc
-run_unittests_SOURCES += zone_table_config_unittest.cc
+run_unittests_SOURCES += cache_config_unittest.cc
# We need the actual module implementation in the tests (they are not part
# of libdatasrc)
diff --git a/src/lib/datasrc/tests/zone_table_config_unittest.cc b/src/lib/datasrc/tests/cache_config_unittest.cc
index a0d5607b06..43cc6672e6 100644
--- a/src/lib/datasrc/tests/zone_table_config_unittest.cc
+++ b/src/lib/datasrc/tests/cache_config_unittest.cc
@@ -12,7 +12,7 @@
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
-#include <datasrc/zone_table_config.h>
+#include <datasrc/cache_config.h>
#include <datasrc/tests/mock_client.h>
#include <cc/data.h>
@@ -55,7 +55,7 @@ protected:
TEST_F(CacheConfigTest, constructMasterFiles) {
// A simple case: configuring a MasterFiles table with a single zone
- const CacheConfig cache_conf("MasterFiles", 0, *master_config_);
+ const CacheConfig cache_conf("MasterFiles", 0, *master_config_, true);
// getZoneConfig() returns a map containing exactly one entry
// corresponding to the root zone information in the configuration.
EXPECT_EQ(1, cache_conf.getZoneConfig().size());
@@ -73,41 +73,42 @@ TEST_F(CacheConfigTest, constructMasterFiles) {
" \"example.org\": \"file2\","
" \"example.info\": \"file3\"}"
"}"));
- EXPECT_EQ(3, CacheConfig("MasterFiles", 0, *config_elem_multi).
+ EXPECT_EQ(3, CacheConfig("MasterFiles", 0, *config_elem_multi, true).
getZoneConfig().size());
// A bit unusual, but acceptable case: empty parameters, so no zones.
EXPECT_TRUE(CacheConfig("MasterFiles", 0,
*Element::fromJSON("{\"cache-enable\": true,"
- " \"params\": {}}")).
+ " \"params\": {}}"), true).
getZoneConfig().empty());
}
TEST_F(CacheConfigTest, badConstructMasterFiles) {
// no "params"
EXPECT_THROW(CacheConfig("MasterFiles", 0,
- *Element::fromJSON("{\"cache-enable\": true}")),
+ *Element::fromJSON("{\"cache-enable\": true}"),
+ true),
isc::data::TypeError);
// no "cache-enable"
EXPECT_THROW(CacheConfig("MasterFiles", 0,
- *Element::fromJSON("{\"params\": {}}")),
+ *Element::fromJSON("{\"params\": {}}"), true),
CacheConfigError);
// cache disabled for MasterFiles
EXPECT_THROW(CacheConfig("MasterFiles", 0,
*Element::fromJSON("{\"cache-enable\": false,"
- " \"params\": {}}")),
+ " \"params\": {}}"), true),
CacheConfigError);
// type error for cache-enable
EXPECT_THROW(CacheConfig("MasterFiles", 0,
*Element::fromJSON("{\"cache-enable\": 1,"
- " \"params\": {}}")),
+ " \"params\": {}}"), true),
isc::data::TypeError);
// "params" is not a map
EXPECT_THROW(CacheConfig("MasterFiles", 0,
*Element::fromJSON("{\"cache-enable\": true,"
- " \"params\": []}")),
+ " \"params\": []}"), true),
isc::data::TypeError);
// bogus zone name
@@ -115,20 +116,20 @@ TEST_F(CacheConfigTest, badConstructMasterFiles) {
"{\"cache-enable\": true,"
" \"params\": "
"{\"bad..name\": \"file1\"}}"));
- EXPECT_THROW(CacheConfig("MasterFiles", 0, *bad_config),
+ EXPECT_THROW(CacheConfig("MasterFiles", 0, *bad_config, true),
isc::dns::EmptyLabel);
// file name is not a string
const ConstElementPtr bad_config2(Element::fromJSON(
"{\"cache-enable\": true,"
" \"params\": {\".\": 1}}"));
- EXPECT_THROW(CacheConfig("MasterFiles", 0, *bad_config2),
+ EXPECT_THROW(CacheConfig("MasterFiles", 0, *bad_config2, true),
isc::data::TypeError);
// Specify data source client (must be null for MasterFiles)
EXPECT_THROW(CacheConfig("MasterFiles", &mock_client_,
*Element::fromJSON("{\"cache-enable\": true,"
- " \"params\": {}}")),
+ " \"params\": {}}"), true),
isc::InvalidParameter);
}
@@ -136,7 +137,7 @@ TEST_F(CacheConfigTest, constructWithMock) {
// Performing equivalent set of tests as constructMasterFiles
// Configure with a single zone.
- const CacheConfig cache_conf("mock", &mock_client_, *mock_config_);
+ const CacheConfig cache_conf("mock", &mock_client_, *mock_config_, true);
EXPECT_EQ(1, cache_conf.getZoneConfig().size());
EXPECT_EQ(Name::ROOT_NAME(), cache_conf.getZoneConfig().begin()->first);
EXPECT_EQ("", cache_conf.getZoneConfig().begin()->second);
@@ -148,46 +149,49 @@ TEST_F(CacheConfigTest, constructWithMock) {
" \"cache-zones\": "
"[\"example.com\", \"example.org\",\"example.info\"]"
"}"));
- EXPECT_EQ(3, CacheConfig("mock", &mock_client_, *config_elem_multi).
+ EXPECT_EQ(3, CacheConfig("mock", &mock_client_, *config_elem_multi, true).
getZoneConfig().size());
// Empty
EXPECT_TRUE(CacheConfig("mock", &mock_client_,
*Element::fromJSON("{\"cache-enable\": true,"
- " \"cache-zones\": []}")).
+ " \"cache-zones\": []}"), true).
getZoneConfig().empty());
// disabled. value of cache-zones are ignored.
const ConstElementPtr config_elem_disabled(
Element::fromJSON("{\"cache-enable\": false,"
" \"cache-zones\": [\"example.com\"]}"));
- EXPECT_TRUE(CacheConfig("mock", &mock_client_, *config_elem_disabled).
+ EXPECT_TRUE(CacheConfig("mock", &mock_client_, *config_elem_disabled, true).
getZoneConfig().empty());
}
TEST_F(CacheConfigTest, badConstructWithMock) {
// no "cache-zones" (may become valid in future, but for now "notimp")
EXPECT_THROW(CacheConfig("mock", &mock_client_,
- *Element::fromJSON("{\"cache-enable\": true}")),
+ *Element::fromJSON("{\"cache-enable\": true}"),
+ true),
isc::NotImplemented);
// "cache-zones" is not a list
EXPECT_THROW(CacheConfig("mock", &mock_client_,
*Element::fromJSON("{\"cache-enable\": true,"
- " \"cache-zones\": {}}")),
+ " \"cache-zones\": {}}"),
+ true),
isc::data::TypeError);
// "cache-zone" entry is not a string
EXPECT_THROW(CacheConfig("mock", &mock_client_,
*Element::fromJSON("{\"cache-enable\": true,"
- " \"cache-zones\": [1]}")),
+ " \"cache-zones\": [1]}"),
+ true),
isc::data::TypeError);
// bogus zone name
const ConstElementPtr bad_config(Element::fromJSON(
"{\"cache-enable\": true,"
" \"cache-zones\": [\"bad..\"]}"));
- EXPECT_THROW(CacheConfig("mock", &mock_client_, *bad_config),
+ EXPECT_THROW(CacheConfig("mock", &mock_client_, *bad_config, true),
isc::dns::EmptyLabel);
// duplicate zone name
@@ -195,11 +199,11 @@ TEST_F(CacheConfigTest, badConstructWithMock) {
"{\"cache-enable\": true,"
" \"cache-zones\": "
" [\"example\", \"example\"]}"));
- EXPECT_THROW(CacheConfig("mock", &mock_client_, *dup_config),
+ EXPECT_THROW(CacheConfig("mock", &mock_client_, *dup_config, true),
isc::InvalidParameter);
// datasrc is null
- EXPECT_THROW(CacheConfig("mock", 0, *mock_config_),
+ EXPECT_THROW(CacheConfig("mock", 0, *mock_config_, true),
isc::InvalidParameter);
}
@@ -207,20 +211,20 @@ TEST_F(CacheConfigTest, getSegmentType) {
// Default type
EXPECT_EQ("local",
CacheConfig("MasterFiles", 0,
- *master_config_).getSegmentType());
+ *master_config_, true).getSegmentType());
// If we explicitly configure it, that value should be used.
ConstElementPtr config(Element::fromJSON("{\"cache-enable\": true,"
" \"cache-type\": \"mapped\","
" \"params\": {}}" ));
EXPECT_EQ("mapped",
- CacheConfig("MasterFiles", 0, *config).getSegmentType());
+ CacheConfig("MasterFiles", 0, *config, true).getSegmentType());
// Wrong types: should be rejected at construction time
ConstElementPtr badconfig(Element::fromJSON("{\"cache-enable\": true,"
" \"cache-type\": 1,"
" \"params\": {}}"));
- EXPECT_THROW(CacheConfig("MasterFiles", 0, *badconfig),
+ EXPECT_THROW(CacheConfig("MasterFiles", 0, *badconfig, true),
isc::data::TypeError);
}