Parcourir la source

[2832] add value checking for 'cache-type'

Paul Selkirk il y a 12 ans
Parent
commit
946b1dfec8

+ 6 - 2
src/lib/datasrc/cache_config.cc

@@ -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);
 }
 }
 

+ 7 - 0
src/lib/datasrc/tests/cache_config_unittest.cc

@@ -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);
 }
 
 }