diff options
| author | Indrajit Raychaudhuri <irc@indrajit.com> | 2023-06-06 12:27:31 -0500 | 
|---|---|---|
| committer | Indrajit Raychaudhuri <irc@indrajit.com> | 2023-06-06 20:41:20 -0500 | 
| commit | b1e379f2a298de58445a0565f889faff920e82f3 (patch) | |
| tree | d8e40c08a34693ecdaf4037bc22249ba257616a5 | |
| parent | ee14f9cd28313e76992e37ac0bf4856ddf1c5d76 (diff) | |
| download | vyos-1x-b1e379f2a298de58445a0565f889faff920e82f3.tar.gz vyos-1x-b1e379f2a298de58445a0565f889faff920e82f3.zip | |
dns: T5144: Refactor smoke tests for dynamic dns operation
- config_value extraction is more flexible in handling different
  variation of line endings
- more parameter assertions
- reduce different mixes of assertEqual and assertTrue were possible
| -rwxr-xr-x | smoketest/scripts/cli/test_service_dns_dynamic.py | 142 | 
1 files changed, 75 insertions, 67 deletions
| diff --git a/smoketest/scripts/cli/test_service_dns_dynamic.py b/smoketest/scripts/cli/test_service_dns_dynamic.py index 044d053b4..11d411cb4 100755 --- a/smoketest/scripts/cli/test_service_dns_dynamic.py +++ b/smoketest/scripts/cli/test_service_dns_dynamic.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2019-2020 VyOS maintainers and contributors +# Copyright (C) 2019-2023 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 @@ -30,13 +30,16 @@ DDCLIENT_PID = '/run/ddclient/ddclient.pid'  base_path = ['service', 'dns', 'dynamic']  hostname = 'test.ddns.vyos.io' +zone = 'vyos.io' +password = 'paSS_@4ord'  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(', \\') -    return tmp +    vals = re.findall(r'\n?{}=([.-@_A-Za-z0-9]+),? \\'.format(key), tmp) +    return vals[0] if vals else '' +  class TestServiceDDNS(VyOSUnitTestSHIM.TestCase):      def tearDown(self): @@ -50,13 +53,12 @@ class TestServiceDDNS(VyOSUnitTestSHIM.TestCase):          # PID file must no londer exist after process exited          self.assertFalse(os.path.exists(DDCLIENT_PID)) -    def test_dyndns_service(self): +    # IPv4 standard DDNS service configuration +    def test_dyndns_service_standard(self):          ddns = ['address', interface, 'service'] -        services = {'cloudflare': {'protocol': 'cloudflare', 'zone': 'vyos.io'}, +        services = {'cloudflare': {'protocol': 'cloudflare'},                      '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) @@ -78,44 +80,46 @@ class TestServiceDDNS(VyOSUnitTestSHIM.TestCase):                  # commit changes again - now it should work                  self.cli_commit() +            # Check the generating config parameters +            self.assertEqual(get_config_value('use'), 'if') +            self.assertEqual(get_config_value('if'), interface) +            self.assertEqual(get_config_value('password'), password) +              for opt in details.keys():                  if opt == 'username': -                    self.assertTrue(get_config_value('login') == details[opt]) +                    self.assertEqual(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) +                    self.assertEqual(get_config_value(opt), details[opt]) -    def test_dyndns_rfc2136(self): -        # Check if DDNS service can be configured and runs -        ddns = ['address', interface, 'rfc2136', 'vyos'] -        srv = 'ns1.vyos.io' -        zone = 'vyos.io' -        ttl = '300' - -        with tempfile.NamedTemporaryFile(prefix='/config/auth/') as key_file: -            key_file.write(b'S3cretKey') +    # IPv6 only DDNS service configuration +    def test_dyndns_service_ipv6(self): +        ddns = ['address', interface, 'service', 'dynv6'] +        proto = 'dyndns2' +        user = 'none' +        password = 'paSS_4ord' +        srv = 'ddns.vyos.io' +        ip_version = 'ipv6' -            self.cli_set(base_path + ddns + ['key', key_file.name]) -            self.cli_set(base_path + ddns + ['host-name', hostname]) -            self.cli_set(base_path + ddns + ['server', srv]) -            self.cli_set(base_path + ddns + ['ttl', ttl]) -            self.cli_set(base_path + ddns + ['zone', zone]) +        self.cli_set(base_path + ddns + ['ip-version', ip_version]) +        self.cli_set(base_path + ddns + ['protocol', proto]) +        self.cli_set(base_path + ddns + ['server', srv]) +        self.cli_set(base_path + ddns + ['username', user]) +        self.cli_set(base_path + ddns + ['password', password]) +        self.cli_set(base_path + ddns + ['host-name', hostname]) -            # commit changes -            self.cli_commit() +        # commit changes +        self.cli_commit() -            # Check some generating config parameters -            self.assertEqual(get_config_value('protocol'), 'nsupdate') -            self.assertTrue(get_config_value('password') == key_file.name) -            self.assertTrue(get_config_value('server') == srv) -            self.assertTrue(get_config_value('zone') == zone) -            self.assertTrue(get_config_value('ttl') == ttl) -            self.assertEqual(get_config_value('use'), 'if') -            self.assertEqual(get_config_value('if'), interface) +        # Check the generating config parameters +        self.assertEqual(get_config_value('usev6'), 'ifv6') +        self.assertEqual(get_config_value('ifv6'), interface) +        self.assertEqual(get_config_value('protocol'), proto) +        self.assertEqual(get_config_value('server'), srv) +        self.assertEqual(get_config_value('login'), user) +        self.assertEqual(get_config_value('password'), password) -    def test_dyndns_dual(self): +    # IPv4+IPv6 dual DDNS service configuration +    def test_dyndns_service_dual_stack(self):          ddns = ['address', interface, 'service']          services = {'cloudflare': {'protocol': 'cloudflare', 'zone': 'vyos.io'},                      'freedns': {'protocol': 'freedns', 'username': 'vyos_user'}} @@ -133,43 +137,47 @@ class TestServiceDDNS(VyOSUnitTestSHIM.TestCase):              # commit changes              self.cli_commit() -            # Check some generating config parameters +            # Check the generating config parameters +            self.assertEqual(get_config_value('usev4'), 'ifv4') +            self.assertEqual(get_config_value('usev6'), 'ifv6') +            self.assertEqual(get_config_value('ifv4'), interface) +            self.assertEqual(get_config_value('ifv6'), interface) +            self.assertEqual(get_config_value('password'), password) +              for opt in details.keys():                  if opt == 'username': -                    self.assertTrue(get_config_value('login') == details[opt]) +                    self.assertEqual(get_config_value('login'), details[opt])                  else: -                    self.assertTrue(get_config_value(opt) == details[opt]) +                    self.assertEqual(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_rfc2136(self): +        # Check if DDNS service can be configured and runs +        ddns = ['address', interface, 'rfc2136', 'vyos'] +        srv = 'ns1.vyos.io' +        zone = 'vyos.io' +        ttl = '300' -    def test_dyndns_ipv6(self): -        ddns = ['address', interface, 'service', 'dynv6'] -        proto = 'dyndns2' -        user = 'none' -        password = 'paSS_4ord' -        srv = 'ddns.vyos.io' -        ip_version = 'ipv6' +        with tempfile.NamedTemporaryFile(prefix='/config/auth/') as key_file: +            key_file.write(b'S3cretKey') -        self.cli_set(base_path + ddns + ['host-name', hostname]) -        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]) +            self.cli_set(base_path + ddns + ['server', srv]) +            self.cli_set(base_path + ddns + ['zone', zone]) +            self.cli_set(base_path + ddns + ['key', key_file.name]) +            self.cli_set(base_path + ddns + ['ttl', ttl]) +            self.cli_set(base_path + ddns + ['host-name', hostname]) -        # commit changes -        self.cli_commit() +            # commit changes +            self.cli_commit() + +            # Check some generating config parameters +            self.assertEqual(get_config_value('use'), 'if') +            self.assertEqual(get_config_value('if'), interface) +            self.assertEqual(get_config_value('protocol'), 'nsupdate') +            self.assertEqual(get_config_value('server'), srv) +            self.assertEqual(get_config_value('zone'), zone) +            self.assertEqual(get_config_value('password'), key_file.name) +            self.assertEqual(get_config_value('ttl'), ttl) -        # Check some generating config parameters -        self.assertEqual(get_config_value('protocol'), proto) -        self.assertEqual(get_config_value('login'), user) -        self.assertEqual(get_config_value('password'), password) -        self.assertEqual(get_config_value('server'), srv) -        self.assertEqual(get_config_value('usev6'), 'ifv6') -        self.assertEqual(get_config_value('ifv6'), interface)  if __name__ == '__main__':      unittest.main(verbosity=2) | 
