@@ -37,12 +37,16 @@ getEnabledFromConf(const Element& conf) {
std::string
getSegmentTypeFromConf(const Element& conf) {
- // If cache-zones is not explicitly configured, use the default type.
+ // If cache-type is not explicitly configured, use the default type.
// (Ideally we should retrieve the default from the spec).
if (!conf.contains("cache-type")) {
return ("local");
}
- return (conf.get("cache-type")->stringValue());
+ std::string cache_type = conf.get("cache-type")->stringValue();
+ if ((cache_type != "local") && (cache_type != "mapped")) {
+ isc_throw(CacheConfigError, "invalid cache-type");
+ }
+ return (cache_type);
@@ -238,6 +238,13 @@ TEST_F(CacheConfigTest, getSegmentType) {
" \"params\": {}}"));
EXPECT_THROW(CacheConfig("MasterFiles", 0, *badconfig, true),
isc::data::TypeError);
+
+ // Bad value: should be rejected at construction time
+ ConstElementPtr badconfig2(Element::fromJSON("{\"cache-enable\": true,"
+ " \"cache-type\": \"bogus\","
+ " \"params\": {}}"));
+ EXPECT_THROW(CacheConfig("MasterFiles", 0, *badconfig2, true),
+ isc::datasrc::internal::CacheConfigError);