diff options
author | Christian Poessinger <christian@poessinger.com> | 2020-02-16 13:16:56 +0100 |
---|---|---|
committer | Christian Poessinger <christian@poessinger.com> | 2020-02-16 13:16:56 +0100 |
commit | 5014e35efc13d762ef12e7934ba59374751c487c (patch) | |
tree | 1965d25c7bf5302a6c14d4652ce2e64ccaa587e7 | |
parent | 42bc2005d32ac5c0fcd1ce3d2d7327e830d0dfb8 (diff) | |
download | vyos-1x-5014e35efc13d762ef12e7934ba59374751c487c.tar.gz vyos-1x-5014e35efc13d762ef12e7934ba59374751c487c.zip |
ddns: add initial unittest
-rwxr-xr-x | scripts/cli/test_service_dns_dynamic.py | 109 |
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() |