summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-02-16 13:16:56 +0100
committerChristian Poessinger <christian@poessinger.com>2020-02-16 13:16:56 +0100
commit5014e35efc13d762ef12e7934ba59374751c487c (patch)
tree1965d25c7bf5302a6c14d4652ce2e64ccaa587e7
parent42bc2005d32ac5c0fcd1ce3d2d7327e830d0dfb8 (diff)
downloadvyos-1x-5014e35efc13d762ef12e7934ba59374751c487c.tar.gz
vyos-1x-5014e35efc13d762ef12e7934ba59374751c487c.zip
ddns: add initial unittest
-rwxr-xr-xscripts/cli/test_service_dns_dynamic.py109
1 files changed, 109 insertions, 0 deletions
diff --git a/scripts/cli/test_service_dns_dynamic.py b/scripts/cli/test_service_dns_dynamic.py
new file mode 100755
index 000000000..2b65b38c7
--- /dev/null
+++ b/scripts/cli/test_service_dns_dynamic.py
@@ -0,0 +1,109 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2019-2020 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import re
+import os
+import unittest
+
+from psutil import process_iter
+from vyos.config import Config
+from vyos.configsession import ConfigSession, ConfigSessionError
+from vyos.util import read_file
+
+DDCLIENT_CONF = '/etc/ddclient/ddclient.conf'
+base_path = ['service', 'dns', 'dynamic']
+
+def get_config_value(key):
+ tmp = read_file(DDCLIENT_CONF)
+ return re.findall(r'\n?{}\s+(.*)'.format(key), tmp)
+
+
+class TestServiceDDNS(unittest.TestCase):
+ def setUp(self):
+ self.session = ConfigSession(os.getpid())
+ env = self.session.get_session_env()
+ self.config = Config(session_env=env)
+
+ def tearDown(self):
+ # Delete DDNS configuration
+ self.session.delete(base_path)
+ self.session.commit()
+
+ del self.session
+
+ def test_service(self):
+ """ Check individual DDNS service providers """
+ ddns = ['interface', 'eth0', 'service']
+ services = ['cloudflare']
+
+ for service in services:
+ self.session.set(base_path + ddns + [service, 'host-name', 'test.ddns.vyos.io'])
+ self.session.set(base_path + ddns + [service, 'login', 'vyos_user'])
+ self.session.set(base_path + ddns + [service, 'password', 'vyos_pass'])
+
+ # commit changes
+ self.session.commit()
+
+ # TODO: inspect generated configuration file
+
+ # Check for running process
+ # process name changes dynamically "ddclient - sleeping for 270 seconds"
+ # thus we need a different approach
+ running = False
+ for p in process_iter():
+ if "ddclient" in p.name():
+ running = True
+ self.assertTrue(running)
+
+
+ def test_rfc2136(self):
+ """ Check if DDNS service can be configured and runs """
+ ddns = ['interface', 'eth0', 'rfc2136', 'vyos']
+ ddns_key_file = '/config/auth/my.key'
+
+ self.session.set(base_path + ddns + ['key', ddns_key_file])
+ self.session.set(base_path + ddns + ['record', 'test.ddns.vyos.io'])
+ self.session.set(base_path + ddns + ['server', 'ns1.vyos.io'])
+ self.session.set(base_path + ddns + ['ttl', '300'])
+ self.session.set(base_path + ddns + ['zone', 'vyos.io'])
+
+ # ensure an exception will be raised as no key is present
+ if os.path.exists(ddns_key_file):
+ os.unlink(ddns_key_file)
+
+ # check validate() - the key file does not exist yet
+ with self.assertRaises(ConfigSessionError):
+ self.session.commit()
+
+ with open(ddns_key_file, 'w') as f:
+ f.write('S3cretKey')
+
+ # commit changes
+ self.session.commit()
+
+ # TODO: inspect generated configuration file
+
+ # Check for running process
+ # process name changes dynamically "ddclient - sleeping for 270 seconds"
+ # thus we need a different approach
+ running = False
+ for p in process_iter():
+ if "ddclient" in p.name():
+ running = True
+ self.assertTrue(running)
+
+if __name__ == '__main__':
+ unittest.main()