diff options
| author | Indrajit Raychaudhuri <irc@indrajit.com> | 2023-05-15 02:09:06 -0500 | 
|---|---|---|
| committer | Indrajit Raychaudhuri <irc@indrajit.com> | 2023-06-04 01:21:14 -0500 | 
| commit | db495ed36be215deebbf34e294eae755dde64fa6 (patch) | |
| tree | 10e9aef414f9a410ba91498d8189c881a525b101 | |
| parent | f4ea61dd5bf0ef2baa7d545b12e168b652412509 (diff) | |
| download | vyos-1x-db495ed36be215deebbf34e294eae755dde64fa6.tar.gz vyos-1x-db495ed36be215deebbf34e294eae755dde64fa6.zip | |
dns: T5144: Update smoketest for dynamic dns operation
| -rwxr-xr-x | smoketest/scripts/cli/test_service_dns_dynamic.py | 132 | 
1 files changed, 67 insertions, 65 deletions
| diff --git a/smoketest/scripts/cli/test_service_dns_dynamic.py b/smoketest/scripts/cli/test_service_dns_dynamic.py index 4a3c05a36..b2b425d80 100755 --- a/smoketest/scripts/cli/test_service_dns_dynamic.py +++ b/smoketest/scripts/cli/test_service_dns_dynamic.py @@ -23,7 +23,6 @@ from base_vyostest_shim import VyOSUnitTestSHIM  from vyos.configsession import ConfigSessionError  from vyos.util import cmd  from vyos.util import process_running -from vyos.util import read_file  DDCLIENT_CONF = '/run/ddclient/ddclient.conf'  DDCLIENT_PID = '/run/ddclient/ddclient.pid' @@ -35,7 +34,7 @@ interface = 'eth0'  def get_config_value(key):      tmp = cmd(f'sudo cat {DDCLIENT_CONF}')      tmp = re.findall(r'\n?{}=+(.*)'.format(key), tmp) -    tmp = tmp[0].rstrip(',') +    tmp = tmp[0].rstrip(', \\')      return tmp  class TestServiceDDNS(VyOSUnitTestSHIM.TestCase): @@ -51,102 +50,104 @@ class TestServiceDDNS(VyOSUnitTestSHIM.TestCase):          self.assertFalse(os.path.exists(DDCLIENT_PID))      def test_dyndns_service(self): -        from itertools import product -        ddns = ['interface', interface, 'service'] -        users = [None, 'vyos_user'] -        services = ['cloudflare', 'afraid', 'dyndns', 'zoneedit'] - -        for user, service in product(users, services): -            password = 'vyos_pass' -            zone = 'vyos.io' +        ddns = ['address', interface, 'service'] +        services = {'cloudflare': {'protocol': 'cloudflare', 'zone': 'vyos.io'}, +                    'freedns': {'protocol': 'freedns', 'username': 'vyos_user'}, +                    'zoneedit': {'protocol': 'zoneedit1', 'username': 'vyos_user'}} +        password = 'vyos_pass' +        zone = 'vyos.io' + +        for svc, details in services.items():              self.cli_delete(base_path) -            self.cli_set(base_path + ddns + [service, 'host-name', hostname]) -            if user is not None: -                self.cli_set(base_path + ddns + [service, 'login', user]) -            self.cli_set(base_path + ddns + [service, 'password', password]) -            self.cli_set(base_path + ddns + [service, 'zone', zone]) +            self.cli_set(base_path + ddns + [svc, 'host-name', hostname]) +            for opt, value in details.items(): +                self.cli_set(base_path + ddns + [svc, opt, value]) +            self.cli_set(base_path + ddns + [svc, 'password', password]) +            self.cli_set(base_path + ddns + [svc, 'zone', zone])              # commit changes -            if service == 'cloudflare': +            if details['protocol'] == 'cloudflare':                  self.cli_commit() -            elif user is None: -                # not set user is only allowed for cloudflare -                with self.assertRaises(ConfigSessionError): -                    # remove zone to test not set user -                    self.cli_delete(base_path + ddns + [service, 'zone', 'vyos.io']) -                    self.cli_commit() -                # this case is fininshed, user not set is not allowed when service isn't cloudflare -                continue              else: -                # zone option only works on cloudflare, an exception is raised -                # for all others +                # zone option does not work on all protocols, an exception is +                # raised for all others                  with self.assertRaises(ConfigSessionError):                      self.cli_commit() -                self.cli_delete(base_path + ddns + [service, 'zone', 'vyos.io']) +                self.cli_delete(base_path + ddns + [svc, 'zone', zone])                  # commit changes again - now it should work                  self.cli_commit() -            # we can only read the configuration file when we operate as 'root' -            protocol = get_config_value('protocol') -            login = None if user is None else get_config_value('login') -            pwd = get_config_value('password') - -            # some services need special treatment -            protoname = service -            if service == 'cloudflare': -                tmp = get_config_value('zone') -                self.assertTrue(tmp == zone) -            elif service == 'afraid': -                protoname = 'freedns' -            elif service == 'dyndns': -                protoname = 'dyndns2' -            elif service == 'zoneedit': -                protoname = 'zoneedit1' - -            self.assertTrue(protocol == protoname) -            self.assertTrue(login == user) -            self.assertTrue(pwd == "'" + password + "'") +            for opt in details.keys(): +                if opt == 'username': +                    self.assertTrue(get_config_value('login') == details[opt]) +                else: +                    self.assertTrue(get_config_value(opt) == details[opt]) + +            self.assertTrue(get_config_value('use') == 'if') +            self.assertTrue(get_config_value('if') == interface)      def test_dyndns_rfc2136(self):          # Check if DDNS service can be configured and runs -        ddns = ['interface', interface, 'rfc2136', 'vyos'] +        ddns = ['address', interface, 'rfc2136', 'vyos']          ddns_key_file = '/config/auth/my.key' +        with open(ddns_key_file, 'w') as f: +            f.write('S3cretKey') +          self.cli_set(base_path + ddns + ['key', ddns_key_file]) -        self.cli_set(base_path + ddns + ['record', 'test.ddns.vyos.io']) +        self.cli_set(base_path + ddns + ['host-name', 'test.ddns.vyos.io'])          self.cli_set(base_path + ddns + ['server', 'ns1.vyos.io'])          self.cli_set(base_path + ddns + ['ttl', '300'])          self.cli_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.cli_commit() - -        with open(ddns_key_file, 'w') as f: -            f.write('S3cretKey') -          # commit changes          self.cli_commit()          # TODO: inspect generated configuration file +    def test_dyndns_dual(self): +        ddns = ['address', interface, 'service'] +        services = {'cloudflare': {'protocol': 'cloudflare', 'zone': 'vyos.io'}, +                    'freedns': {'protocol': 'freedns', 'username': 'vyos_user'}} +        password = 'vyos_pass' +        ip_version = 'both' + +        for svc, details in services.items(): +            self.cli_delete(base_path) +            self.cli_set(base_path + ddns + [svc, 'host-name', hostname]) +            for opt, value in details.items(): +                self.cli_set(base_path + ddns + [svc, opt, value]) +            self.cli_set(base_path + ddns + [svc, 'password', password]) +            self.cli_set(base_path + ddns + [svc, 'ip-version', ip_version]) + +            # commit changes +            self.cli_commit() + +            for opt in details.keys(): +                if opt == 'username': +                    self.assertTrue(get_config_value('login') == details[opt]) +                else: +                    self.assertTrue(get_config_value(opt) == details[opt]) + +            self.assertTrue(get_config_value('usev4') == 'ifv4') +            self.assertTrue(get_config_value('usev6') == 'ifv6') +            self.assertTrue(get_config_value('ifv4') == interface) +            self.assertTrue(get_config_value('ifv6') == interface) +      def test_dyndns_ipv6(self): -        ddns = ['interface', interface, 'service', 'dynv6'] +        ddns = ['address', interface, 'service', 'dynv6']          proto = 'dyndns2'          user = 'none'          password = 'paSS_4ord'          srv = 'ddns.vyos.io' +        ip_version = 'ipv6' -        self.cli_set(base_path + ['interface', interface, 'ipv6-enable'])          self.cli_set(base_path + ddns + ['host-name', hostname]) -        self.cli_set(base_path + ddns + ['login', user]) +        self.cli_set(base_path + ddns + ['username', user])          self.cli_set(base_path + ddns + ['password', password])          self.cli_set(base_path + ddns + ['protocol', proto])          self.cli_set(base_path + ddns + ['server', srv]) +        self.cli_set(base_path + ddns + ['ip-version', ip_version])          # commit changes          self.cli_commit() @@ -160,9 +161,10 @@ class TestServiceDDNS(VyOSUnitTestSHIM.TestCase):          # Check some generating config parameters          self.assertEqual(protocol, proto)          self.assertEqual(login, user) -        self.assertEqual(pwd, f"'{password}'") +        self.assertEqual(pwd, password)          self.assertEqual(server, srv) -        self.assertEqual(usev6, f"ifv6, if={interface}") +        self.assertEqual(usev6, 'ifv6') +        self.assertEqual(get_config_value('ifv6'), interface)  if __name__ == '__main__':      unittest.main(verbosity=2) | 
