import isc.dns
import isc.datasrc
import json
+import os.path
+
spec = module_spec_from_file(path_search('datasrc.spec', PLUGIN_PATHS))
def check(config):
return str(irc)
dlist = isc.datasrc.ConfigurableClientList(rr_class)
+ client_config = classes.get(rr_class_str)
try:
- dlist.configure(json.dumps(classes.get(rr_class_str)),
- False)
+ dlist.configure(json.dumps(client_config), False)
except isc.datasrc.Error as dse:
return str(dse)
+ for client in client_config:
+ if client['type'] == 'MasterFiles':
+ if not client.get('cache-enable', False):
+ return 'The cache must be enabled in MasterFiles type'
+ params = client.get('params')
+ if type(params) != dict:
+ return 'Params of MasterFiles must be a named set'
+ for name in params:
+ try:
+ isc.dns.Name(name)
+ except Exception as e: # There are many related exceptions
+ return str(e)
+ if not os.path.exists(params[name]):
+ return "Master file " + params[name] + " does not exist"
return None
def load():
import sys
import os
sys.path.extend(os.environ["B10_TEST_PLUGIN_DIR"].split(':'))
+import isc.log
import datasrc_config_plugin
import unittest
"type": "No such type"
}]})
+ def test_invalid_mem_params(self):
+ """
+ The client list skips in-memory sources. So we check it locally that
+ invalid things are rejected.
+ """
+ # The 'params' key is mandatory for MasterFiles
+ self.reject({"IN": [{
+ "type": "MasterFiles",
+ "cache-enable": True
+ }]})
+ # The cache must be enabled
+ self.reject({"IN": [{
+ "type": "MasterFiles",
+ "cache-enable": False,
+ "params": {}
+ }]})
+ self.reject({"IN": [{
+ "type": "MasterFiles",
+ "params": {}
+ }]})
+ # Bad params type
+ self.reject({"IN": [{
+ "type": "MasterFiles",
+ "cache-enable": True,
+ "params": []
+ }]})
+ # Bad name
+ self.reject({"IN": [{
+ "type": "MasterFiles",
+ "cache-enable": True,
+ "params": {
+ "example....org.": '/file/does/not/exist'
+ }
+ }]})
+
+ def test_no_such_file_mem(self):
+ """
+ We also check the existance of master files. Not the actual content,
+ though.
+ """
+ self.reject({"IN": [{
+ "type": "MasterFiles",
+ "cache-enable": True,
+ "params": {
+ "example.org.": '/file/does/not/exist'
+ }
+ }]})
+
if __name__ == '__main__':
- unittest.main()
+ isc.log.init("bind10")
+ isc.log.resetUnitTestRootLogger()
+ unittest.main()