|
@@ -254,6 +254,8 @@ public:
|
|
|
}
|
|
|
ConfigurableClientList::CacheStatus doReload(
|
|
|
const Name& origin, const string& datasrc_name = "");
|
|
|
+ void accessorIterate(boost::shared_ptr<const ZoneTableAccessor>accessor,
|
|
|
+ int numZones);
|
|
|
|
|
|
const RRClass rrclass_;
|
|
|
shared_ptr<TestedList> list_;
|
|
@@ -1128,6 +1130,80 @@ TEST_F(ListTest, reloadByDataSourceName) {
|
|
|
doReload(Name("example.org"), "test_type4"));
|
|
|
}
|
|
|
|
|
|
+void
|
|
|
+ListTest::accessorIterate(boost::shared_ptr<const ZoneTableAccessor>accessor,
|
|
|
+ int numZones)
|
|
|
+{
|
|
|
+ // Confirm basic iterator behavior.
|
|
|
+ ZoneTableAccessor::IteratorPtr it = accessor->getIterator();
|
|
|
+ ASSERT_TRUE(it);
|
|
|
+ for (int i = 0; i < numZones; ++i) {
|
|
|
+ it->next();
|
|
|
+ }
|
|
|
+ EXPECT_TRUE(it->isLast());
|
|
|
+}
|
|
|
+
|
|
|
+TEST_F(ListTest, zoneTableAccessor) {
|
|
|
+ // empty configuration
|
|
|
+ const ConstElementPtr elem(new ListElement);
|
|
|
+ list_->configure(elem, true);
|
|
|
+ // null pointer treated as false
|
|
|
+ EXPECT_FALSE(list_->getZoneTableAccessor("", true));
|
|
|
+
|
|
|
+ // empty list
|
|
|
+ list_->configure(config_elem_, true);
|
|
|
+ EXPECT_FALSE(list_->getZoneTableAccessor("", true));
|
|
|
+
|
|
|
+ // allow_cache = false
|
|
|
+ list_->configure(config_elem_zones_, false);
|
|
|
+ EXPECT_FALSE(list_->getZoneTableAccessor("", true));
|
|
|
+ EXPECT_FALSE(list_->getZoneTableAccessor("type1", true));
|
|
|
+
|
|
|
+ // allow_cache = true, use_cache = false
|
|
|
+ list_->configure(config_elem_zones_, true);
|
|
|
+ EXPECT_THROW(list_->getZoneTableAccessor("", false), isc::NotImplemented);
|
|
|
+ EXPECT_THROW(list_->getZoneTableAccessor("type1", false),
|
|
|
+ isc::NotImplemented);
|
|
|
+
|
|
|
+ const ConstElementPtr elem2(Element::fromJSON("["
|
|
|
+ "{"
|
|
|
+ " \"type\": \"type1\","
|
|
|
+ " \"cache-enable\": false,"
|
|
|
+ " \"cache-zones\": [\"example.org\"],"
|
|
|
+ " \"params\": [\"example.org\"]"
|
|
|
+ "},"
|
|
|
+ "{"
|
|
|
+ " \"type\": \"type2\","
|
|
|
+ " \"cache-enable\": true,"
|
|
|
+ " \"cache-zones\": [\"example.com\"],"
|
|
|
+ " \"params\": [\"example.com\"]"
|
|
|
+ "},"
|
|
|
+ "{"
|
|
|
+ " \"type\": \"type3\","
|
|
|
+ " \"cache-enable\": true,"
|
|
|
+ " \"cache-zones\": [\"example.net\", \"example.info\"],"
|
|
|
+ " \"params\": [\"example.net\", \"example.info\"]"
|
|
|
+ "}]"));
|
|
|
+ list_->configure(elem2, true);
|
|
|
+
|
|
|
+ // datasrc not found, returns NULL pointer
|
|
|
+ boost::shared_ptr<const ZoneTableAccessor>
|
|
|
+ z(list_->getZoneTableAccessor("bogus", true));
|
|
|
+ EXPECT_FALSE(z);
|
|
|
+
|
|
|
+ // datasrc has cache disabled, returns accessor to empty list
|
|
|
+ z = list_->getZoneTableAccessor("type1", true);
|
|
|
+ accessorIterate(z, 0);
|
|
|
+
|
|
|
+ // return first enabled datasrc
|
|
|
+ z = list_->getZoneTableAccessor("", true);
|
|
|
+ accessorIterate(z, 1);
|
|
|
+
|
|
|
+ // search by name
|
|
|
+ z = list_->getZoneTableAccessor("type3", true);
|
|
|
+ accessorIterate(z, 2);
|
|
|
+}
|
|
|
+
|
|
|
// Check the status holds data
|
|
|
TEST(DataSourceStatus, status) {
|
|
|
const DataSourceStatus status("Test", SEGMENT_INUSE, "local");
|