From 7d37e14e3555755f668b6596fcda5d2d7d129992 Mon Sep 17 00:00:00 2001 From: Dmitry Volodin Date: Fri, 21 Aug 2020 17:39:02 +0300 Subject: [PATCH] ConfDB: Expose profile to normalizer tests --- .../Eltex/MES24xx/interface-description1.yml | 21 +++++++++++++ .../Eltex/MES24xx/interface-ip-address1.yml | 17 +++++++++++ .../interface-loopbback-detection1.yml | 19 ++++++++++++ .../Eltex/MES24xx/interface-no-shutdown1.yml | 30 +++++++++++++++++++ .../interface-storm-control-broadcast1.yml | 17 +++++++++++ .../interface-storm-control-multicast1.yml | 17 +++++++++++ .../profiles/Eltex/MES24xx/interface1.yml | 24 +++++++++++++++ tests/confdb/test_profiles.py | 22 +++++++++++--- 8 files changed, 163 insertions(+), 4 deletions(-) create mode 100644 tests/confdb/profiles/Eltex/MES24xx/interface-description1.yml create mode 100644 tests/confdb/profiles/Eltex/MES24xx/interface-ip-address1.yml create mode 100644 tests/confdb/profiles/Eltex/MES24xx/interface-loopbback-detection1.yml create mode 100644 tests/confdb/profiles/Eltex/MES24xx/interface-no-shutdown1.yml create mode 100644 tests/confdb/profiles/Eltex/MES24xx/interface-storm-control-broadcast1.yml create mode 100644 tests/confdb/profiles/Eltex/MES24xx/interface-storm-control-multicast1.yml create mode 100644 tests/confdb/profiles/Eltex/MES24xx/interface1.yml diff --git a/tests/confdb/profiles/Eltex/MES24xx/interface-description1.yml b/tests/confdb/profiles/Eltex/MES24xx/interface-description1.yml new file mode 100644 index 0000000000..8ba5d33eae --- /dev/null +++ b/tests/confdb/profiles/Eltex/MES24xx/interface-description1.yml @@ -0,0 +1,21 @@ +config: | + ! + interface vlan 1 + description "-- Vlan [1] --" + ! + interface vlan 2 + description "-- Descr $#%&^*~±§#@+=% --" + ! + interface gigabitethernet 0/1 + description "-- Descr [$#%&^*] {~±§#@+=%}$$;:|/ --" + ! + interface gigabitethernet 0/2 + ! +result: + - ['interfaces', 'Vl 1'] + - ['interfaces', 'Vl 1', 'description', '-- Vlan [1] --', {'replace': True}] + - ['interfaces', 'Vl 2'] + - ['interfaces', 'Vl 2', 'description', '-- Descr $#%&^*~±§#@+=% --', {'replace': True}] + - ['interfaces', 'Gi 0/1'] + - ['interfaces', 'Gi 0/1', 'description', '-- Descr [$#%&^*] {~±§#@+=%}$$;:|/ --', {'replace': True}] + - ['interfaces', 'Gi 0/2'] diff --git a/tests/confdb/profiles/Eltex/MES24xx/interface-ip-address1.yml b/tests/confdb/profiles/Eltex/MES24xx/interface-ip-address1.yml new file mode 100644 index 0000000000..3b834033ea --- /dev/null +++ b/tests/confdb/profiles/Eltex/MES24xx/interface-ip-address1.yml @@ -0,0 +1,17 @@ +config: | + ! + interface vlan 1 + ! + interface vlan 2 + ip address 192.168.0.2 255.255.255.0 + ! + interface gigabitethernet 0/1 + ! + interface gigabitethernet 0/2 + ! +result: + - ['interfaces', 'Vl 1'] + - ['interfaces', 'Vl 2'] + - ['virtual-router', 'default', 'forwarding-instance', 'default', 'interfaces', 'Vl 2', 'unit', 'Vl 2', 'inet', 'address', '192.168.0.2/24'] + - ['interfaces', 'Gi 0/1'] + - ['interfaces', 'Gi 0/2'] diff --git a/tests/confdb/profiles/Eltex/MES24xx/interface-loopbback-detection1.yml b/tests/confdb/profiles/Eltex/MES24xx/interface-loopbback-detection1.yml new file mode 100644 index 0000000000..b2e3dafa77 --- /dev/null +++ b/tests/confdb/profiles/Eltex/MES24xx/interface-loopbback-detection1.yml @@ -0,0 +1,19 @@ +config: | + ! + interface vlan 2 + ! + interface gigabitethernet 0/1 + loopback-detection enable + ! + interface gigabitethernet 0/2 + loopback-detection enable + ! + interface gigabitethernet 0/3 + ! +result: + - ['interfaces', 'Vl 2'] + - ['interfaces', 'Gi 0/1'] + - ['protocols', 'loop-detect', 'interface', 'Gi 0/1'] + - ['interfaces', 'Gi 0/2'] + - ['protocols', 'loop-detect', 'interface', 'Gi 0/2'] + - ['interfaces', 'Gi 0/3'] diff --git a/tests/confdb/profiles/Eltex/MES24xx/interface-no-shutdown1.yml b/tests/confdb/profiles/Eltex/MES24xx/interface-no-shutdown1.yml new file mode 100644 index 0000000000..a8a5f49bfb --- /dev/null +++ b/tests/confdb/profiles/Eltex/MES24xx/interface-no-shutdown1.yml @@ -0,0 +1,30 @@ +config: | + ! + interface vlan 1 + no shutdown + ! + interface vlan 2 + ! + interface gigabitethernet 0/1 + no shutdown + ! + interface gigabitethernet 0/2 + no shutdown + ! + interface gigabitethernet 0/3 + ! + interface gigabitethernet 0/4 + ! + interface gigabitethernet 0/5 + ! +result: + - ['interfaces', 'Vl 1'] + - ['interfaces', 'Vl 1', 'admin-status', True, {'replace': True}] + - ['interfaces', 'Vl 2'] + - ['interfaces', 'Gi 0/1'] + - ['interfaces', 'Gi 0/1', 'admin-status', True, {'replace': True}] + - ['interfaces', 'Gi 0/2'] + - ['interfaces', 'Gi 0/2', 'admin-status', True, {'replace': True}] + - ['interfaces', 'Gi 0/3'] + - ['interfaces', 'Gi 0/4'] + - ['interfaces', 'Gi 0/5'] diff --git a/tests/confdb/profiles/Eltex/MES24xx/interface-storm-control-broadcast1.yml b/tests/confdb/profiles/Eltex/MES24xx/interface-storm-control-broadcast1.yml new file mode 100644 index 0000000000..3b51c22b29 --- /dev/null +++ b/tests/confdb/profiles/Eltex/MES24xx/interface-storm-control-broadcast1.yml @@ -0,0 +1,17 @@ +config: | + ! + interface vlan 1 + ! + interface vlan 2 + ! + interface gigabitethernet 0/1 + storm-control broadcast level kbps 4992 + ! + interface gigabitethernet 0/2 + ! +result: + - ['interfaces', 'Vl 1'] + - ['interfaces', 'Vl 2'] + - ['interfaces', 'Gi 0/1'] + - ['interfaces', 'Gi 0/1', 'storm-control', 'broadcast', 'level', 4992.0, {'replace': True}] + - ['interfaces', 'Gi 0/2'] diff --git a/tests/confdb/profiles/Eltex/MES24xx/interface-storm-control-multicast1.yml b/tests/confdb/profiles/Eltex/MES24xx/interface-storm-control-multicast1.yml new file mode 100644 index 0000000000..fa87154aaa --- /dev/null +++ b/tests/confdb/profiles/Eltex/MES24xx/interface-storm-control-multicast1.yml @@ -0,0 +1,17 @@ +config: | + ! + interface vlan 1 + ! + interface vlan 2 + ! + interface gigabitethernet 0/1 + storm-control multicast level kbps 4992 + ! + interface gigabitethernet 0/2 + ! +result: + - ['interfaces', 'Vl 1'] + - ['interfaces', 'Vl 2'] + - ['interfaces', 'Gi 0/1'] + - ['interfaces', 'Gi 0/1', 'storm-control', 'multicast', 'level', 4992.0, {'replace': True}] + - ['interfaces', 'Gi 0/2'] diff --git a/tests/confdb/profiles/Eltex/MES24xx/interface1.yml b/tests/confdb/profiles/Eltex/MES24xx/interface1.yml new file mode 100644 index 0000000000..e899358f32 --- /dev/null +++ b/tests/confdb/profiles/Eltex/MES24xx/interface1.yml @@ -0,0 +1,24 @@ +config: | + ! + interface vlan 1 + ! + interface vlan 2 + ! + interface gigabitethernet 0/1 + ! + interface gigabitethernet 0/2 + ! + interface gigabitethernet 0/3 + ! + interface gigabitethernet 0/4 + ! + interface gigabitethernet 0/5 + ! +result: + - ['interfaces', 'Vl 1'] + - ['interfaces', 'Vl 2'] + - ['interfaces', 'Gi 0/1'] + - ['interfaces', 'Gi 0/2'] + - ['interfaces', 'Gi 0/3'] + - ['interfaces', 'Gi 0/4'] + - ['interfaces', 'Gi 0/5'] diff --git a/tests/confdb/test_profiles.py b/tests/confdb/test_profiles.py index e2fd079bf9..d3a37fc6cf 100644 --- a/tests/confdb/test_profiles.py +++ b/tests/confdb/test_profiles.py @@ -31,6 +31,19 @@ def iter_test_paths(): yield os.path.join(*path) +class MockProfile(object): + def __init__(self, profile_cls): + self.profile = profile_cls() + + def get_profile(self): + return self.profile + + +class MockManagedObject(object): + def __init__(self, profile): + self.profile = MockProfile(profile) + + @pytest.mark.parametrize("path", list(iter_test_paths())) def test_profile(path): # Open YAML @@ -47,14 +60,15 @@ def test_profile(path): profile_name = ".".join(path.split(os.sep)[:2]) profile = profile_loader.get_profile(profile_name) assert profile, "Invalid profile '%s'" % profile_name - # @todo: Create mock ManagedObject + # Create mock object + mo = MockManagedObject(profile=profile) # Setup tokenizer - tokenizer_name, tokenizer_conf = profile.get_config_tokenizer(None) + tokenizer_name, tokenizer_conf = profile.get_config_tokenizer(mo) tokenizer_cls = tokenizer_loader.get_class(tokenizer_name) assert tokenizer_cls, "Tokenizer not found" tokenizer = tokenizer_cls(test["config"], **tokenizer_conf) # Setup normalizer - normalizer_name, normalizer_conf = profile.get_config_normalizer(None) + normalizer_name, normalizer_conf = profile.get_config_normalizer(mo) if not normalizer_name.startswith("noc."): normalizer_name = "noc.sa.profiles.%s.confdb.normalizer.%s" % ( profile.name, @@ -62,7 +76,7 @@ def test_profile(path): ) normalizer_cls = get_handler(normalizer_name) assert normalizer_cls, "Normalizer not found" - normalizer = normalizer_cls(None, tokenizer, **normalizer_conf) + normalizer = normalizer_cls(mo, tokenizer, **normalizer_conf) # Check result result = list(normalizer) expected = [tuple(x) for x in test["result"]] -- GitLab