Merge "Import "traffic_profile" modules only once"
[yardstick.git] / tests / unit / network_services / vnf_generic / test_vnfdgen.py
index be51e4a..ee881c9 100644 (file)
@@ -21,8 +21,13 @@ from __future__ import absolute_import
 import unittest
 from six.moves import range
 
+from yardstick.common.yaml_loader import yaml_load
 from yardstick.network_services.vnf_generic import vnfdgen
 
+
+UPLINK = "uplink"
+DOWNLINK = "downlink"
+
 TREX_VNFD_TEMPLATE = """
 vnfd:vnfd-catalog:
     vnfd:
@@ -65,6 +70,8 @@ vnfd:vnfd-catalog:
                     dst_mac: '{{ interfaces.xe1.dst_mac }}'
                     bandwidth: 10 Gbps
                 vnfd-connection-point-ref: xe1
+            routing_table: {{ routing_table }}
+            nd_route_tbl: {{ nd_route_tbl }}
 
         benchmark:
             kpi:
@@ -126,6 +133,22 @@ COMPLETE_TREX_VNFD = \
                                          'vpci': '0000:00:10.1'},
                    'vnfd-connection-point-ref': 'xe1'}],
                  'id': 'trexgen-baremetal',
+                 'nd_route_tbl': [{'gateway': '0064:ff9b:0:0:0:0:9810:6414',
+                                   'if': 'xe0',
+                                   'netmask': '112',
+                                   'network': '0064:ff9b:0:0:0:0:9810:6414'},
+                                  {'gateway': '0064:ff9b:0:0:0:0:9810:2814',
+                                   'if': 'xe1',
+                                   'netmask': '112',
+                                   'network': '0064:ff9b:0:0:0:0:9810:2814'}],
+                 'routing_table': [{'gateway': '152.16.100.20',
+                                    'if': 'xe0',
+                                    'netmask': '255.255.255.0',
+                                    'network': '152.16.100.20'},
+                                   {'gateway': '152.16.40.20',
+                                    'if': 'xe1',
+                                    'netmask': '255.255.255.0',
+                                    'network': '152.16.40.20'}],
                  'name': 'trexgen-baremetal'}]}]}}
 
 NODE_CFG = {'ip': '1.1.1.1',
@@ -144,31 +167,63 @@ NODE_CFG = {'ip': '1.1.1.1',
                                    'dst_mac': '00:01:02:03:04:06',
                                    'local_ip': '2.1.1.2',
                                    'local_mac': '00:01:02:03:05:06',
-                                   'vpci': '0000:00:10.1'}}}
+                                   'vpci': '0000:00:10.1'}},
+            'nd_route_tbl': [{u'gateway': u'0064:ff9b:0:0:0:0:9810:6414',
+                              u'if': u'xe0',
+                              u'netmask': u'112',
+                              u'network': u'0064:ff9b:0:0:0:0:9810:6414'},
+                             {u'gateway': u'0064:ff9b:0:0:0:0:9810:2814',
+                              u'if': u'xe1',
+                              u'netmask': u'112',
+                              u'network': u'0064:ff9b:0:0:0:0:9810:2814'}],
+            'routing_table': [{u'gateway': u'152.16.100.20',
+                               u'if': u'xe0',
+                               u'netmask': u'255.255.255.0',
+                               u'network': u'152.16.100.20'},
+                              {u'gateway': u'152.16.40.20',
+                               u'if': u'xe1',
+                               u'netmask': u'255.255.255.0',
+                               u'network': u'152.16.40.20'}],
+            }
 
 
+# need to template, but can't use {} so use %s
 TRAFFIC_PROFILE_TPL = """
-private:
+%(0)s:
     - ipv4:
         outer_l2:
             framesize:
-                64B: "{{ get(imix, 'private.imix_small', 10) }}"
-                128B: "{{ get(imix, 'private.imix_128B', 10) }}"
-                256B: "{{ get(imix, 'private.imix_256B', 10) }}"
-                373B: "{{ get(imix, 'private.imix_373B', 10) }}"
-                570B: "{{get(imix, 'private.imix_570B', 10) }}"
-                1400B: "{{get(imix, 'private.imix_1400B', 10) }}"
-                1518B: "{{get(imix, 'private.imix_1500B', 40) }}"
-"""
+                64B: "{{ get(imix, '%(0)s.imix_small', 10) }}"
+                128B: "{{ get(imix, '%(0)s.imix_128B', 10) }}"
+                256B: "{{ get(imix, '%(0)s.imix_256B', 10) }}"
+                373B: "{{ get(imix, '%(0)s.imix_373B', 10) }}"
+                570B: "{{get(imix, '%(0)s.imix_570B', 10) }}"
+                1400B: "{{get(imix, '%(0)s.imix_1400B', 10) }}"
+                1518B: "{{get(imix, '%(0)s.imix_1500B', 40) }}"
+""" % {"0": UPLINK}
 
 TRAFFIC_PROFILE = {
-    "private": [{"ipv4": {"outer_l2":
+    UPLINK: [{"ipv4": {"outer_l2":
                           {"framesize": {"64B": '10', "128B": '10',
                                          "256B": '10', "373B": '10',
                                          "570B": '10', "1400B": '10',
                                          "1518B": '40'}}}}]}
 
 
+class TestRender(unittest.TestCase):
+
+    def test_render_none(self):
+
+        tmpl = "{{ routing_table }}"
+        self.assertEqual(vnfdgen.render(tmpl, routing_table=None), u'~')
+        self.assertEqual(yaml_load(vnfdgen.render(tmpl, routing_table=None)), None)
+
+    def test_render_unicode_dict(self):
+
+        tmpl = "{{ routing_table }}"
+        self.assertEqual(yaml_load(vnfdgen.render(tmpl, **NODE_CFG)), NODE_CFG["routing_table"])
+
+
 class TestVnfdGen(unittest.TestCase):
     """ Class to verify VNFS testcases """
 
@@ -193,6 +248,14 @@ class TestVnfdGen(unittest.TestCase):
         d = {'a': 1, 'b': 2}
         self.assertEqual(vnfdgen.deepgetitem(d, "a"), 1)
 
+    def test_dict_flatten_str_int_key_first(self):
+        d = {'0': 1, 0: 24, 'b': 2}
+        self.assertEqual(vnfdgen.deepgetitem(d, "0"), 1)
+
+    def test_dict_flatten_int_key_fallback(self):
+        d = {0: 1, 'b': 2}
+        self.assertEqual(vnfdgen.deepgetitem(d, "0"), 1)
+
     def test_dict_flatten_list(self):
         d = {'a': 1, 'b': list(range(2))}
         self.assertEqual(vnfdgen.deepgetitem(d, "b.0"), 0)
@@ -201,13 +264,18 @@ class TestVnfdGen(unittest.TestCase):
         d = {'a': 1, 'b': {x: x for x in list(range(2))}}
         self.assertEqual(vnfdgen.deepgetitem(d, "b.0"), 0)
 
+    def test_dict_flatten_only_str_key(self):
+        d = {'0': 1, 0: 24, 'b': 2}
+        self.assertRaises(AttributeError, vnfdgen.deepgetitem, d, 0)
+
+
     def test_generate_tp_single_var(self):
         """ Function to verify traffic profile generation with imix """
 
         generated_tp = \
             vnfdgen.generate_vnfd(TRAFFIC_PROFILE_TPL,
-                                  {"imix": {"private": {"imix_small": '20'}}})
+                                  {"imix": {UPLINK: {"imix_small": '20'}}})
         self.maxDiff = None
         tp2 = dict(TRAFFIC_PROFILE)
-        tp2["private"][0]["ipv4"]["outer_l2"]["framesize"]["64B"] = '20'
+        tp2[UPLINK][0]["ipv4"]["outer_l2"]["framesize"]["64B"] = '20'
         self.assertDictEqual(tp2, generated_tp)