Merge "Add IxNextgen API for creating PPPoX configurations"
authorAbhijit Sinha <abhijit.sinha@intel.com>
Tue, 11 Sep 2018 11:54:34 +0000 (11:54 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Tue, 11 Sep 2018 11:54:34 +0000 (11:54 +0000)
yardstick/network_services/libs/ixia_libs/ixnet/ixnet_api.py
yardstick/tests/unit/network_services/libs/ixia_libs/test_ixnet_api.py

index 2953380..7548b33 100644 (file)
@@ -587,3 +587,114 @@ class IxNextgen(object):  # pragma: no cover
         self.ixnet.execute('start', '/traffic')
         # pylint: disable=unnecessary-lambda
         utils.wait_until_true(lambda: self.is_traffic_running())
+
+    def add_topology(self, name, vports):
+        log.debug("add_topology: name='%s' ports='%s'", name, vports)
+        obj = self.ixnet.add(self.ixnet.getRoot(), 'topology')
+        self.ixnet.setMultiAttribute(obj, '-name', name, '-vports', vports)
+        self.ixnet.commit()
+        return obj
+
+    def add_device_group(self, topology, name, multiplier):
+        log.debug("add_device_group: tpl='%s', name='%s', multiplier='%s'",
+                  topology, name, multiplier)
+
+        obj = self.ixnet.add(topology, 'deviceGroup')
+        self.ixnet.setMultiAttribute(obj, '-name', name, '-multiplier',
+                                     multiplier)
+        self.ixnet.commit()
+        return obj
+
+    def add_ethernet(self, dev_group, name):
+        log.debug(
+            "add_ethernet: device_group='%s' name='%s'", dev_group, name)
+        obj = self.ixnet.add(dev_group, 'ethernet')
+        self.ixnet.setMultiAttribute(obj, '-name', name)
+        self.ixnet.commit()
+        return obj
+
+    def add_ipv4(self, ethernet, name='',
+                 addr=None, addr_step=None, addr_direction='increment',
+                 prefix=None, prefix_step=None, prefix_direction='increment',
+                 gateway=None, gw_step=None, gw_direction='increment'):
+        log.debug("add_ipv4: ethernet='%s' name='%s'", ethernet, name)
+        obj = self.ixnet.add(ethernet, 'ipv4')
+        if name != '':
+            self.ixnet.setAttribute(obj, '-name', name)
+            self.ixnet.commit()
+
+        if addr_step is not None:
+            # handle counter pattern
+            _address = self.ixnet.getAttribute(obj, '-address')
+            self.ixnet.setMultiAttribute(_address, '-clearOverlays', 'true',
+                                         '-pattern', 'counter')
+
+            address_counter = self.ixnet.add(_address, 'counter')
+            self.ixnet.setMultiAttribute(address_counter,
+                                         '-start', addr,
+                                         '-step', addr_step,
+                                         '-direction', addr_direction)
+        elif addr is not None:
+            # handle single value
+            _address = self.ixnet.getAttribute(obj, '-address')
+            self.ixnet.setMultiAttribute(_address + '/singleValue', '-value',
+                                         addr)
+
+        if prefix_step is not None:
+            # handle counter pattern
+            _prefix = self.ixnet.getAttribute(obj, '-prefix')
+            self.ixnet.setMultiAttribute(_prefix, '-clearOverlays', 'true',
+                                         '-pattern', 'counter')
+            prefix_counter = self.ixnet.add(_prefix, 'counter')
+            self.ixnet.setMultiAttribute(prefix_counter,
+                                         '-start', prefix,
+                                         '-step', prefix_step,
+                                         '-direction', prefix_direction)
+        elif prefix is not None:
+            # handle single value
+            _prefix = self.ixnet.getAttribute(obj, '-prefix')
+            self.ixnet.setMultiAttribute(_prefix + '/singleValue', '-value',
+                                         prefix)
+
+        if gw_step is not None:
+            # handle counter pattern
+            _gateway = self.ixnet.getAttribute(obj, '-gatewayIp')
+            self.ixnet.setMultiAttribute(_gateway, '-clearOverlays', 'true',
+                                         '-pattern', 'counter')
+
+            gateway_counter = self.ixnet.add(_gateway, 'counter')
+            self.ixnet.setMultiAttribute(gateway_counter,
+                                         '-start', gateway,
+                                         '-step', gw_step,
+                                         '-direction', gw_direction)
+        elif gateway is not None:
+            # handle single value
+            _gateway = self.ixnet.getAttribute(obj, '-gatewayIp')
+            self.ixnet.setMultiAttribute(_gateway + '/singleValue', '-value',
+                                         gateway)
+
+        self.ixnet.commit()
+        return obj
+
+    def add_pppox_client(self, xproto, auth, user, pwd):
+        log.debug(
+            "add_pppox_client: xproto='%s', auth='%s', user='%s', pwd='%s'",
+            xproto, auth, user, pwd)
+        obj = self.ixnet.add(xproto, 'pppoxclient')
+        self.ixnet.commit()
+
+        if auth == 'pap':
+            auth_type = self.ixnet.getAttribute(obj, '-authType')
+            self.ixnet.setMultiAttribute(auth_type + '/singleValue', '-value',
+                                         auth)
+            pap_user = self.ixnet.getAttribute(obj, '-papUser')
+            self.ixnet.setMultiAttribute(pap_user + '/singleValue', '-value',
+                                         user)
+            pap_pwd = self.ixnet.getAttribute(obj, '-papPassword')
+            self.ixnet.setMultiAttribute(pap_pwd + '/singleValue', '-value',
+                                         pwd)
+        else:
+            raise NotImplementedError()
+
+        self.ixnet.commit()
+        return obj
index 92ceeae..d04dfd4 100644 (file)
@@ -186,6 +186,113 @@ class TestIxNextgen(unittest.TestCase):
         self.assertIn([64, 64, 75], output)
         self.assertIn([512, 512, 25], output)
 
+    def test_add_topology(self):
+        self.ixnet_gen.ixnet.add.return_value = 'obj'
+        self.ixnet_gen.add_topology('topology 1', 'vports')
+        self.ixnet_gen.ixnet.add.assert_called_once_with('my_root', 'topology')
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_called_once_with(
+            'obj', '-name', 'topology 1', '-vports', 'vports')
+        self.ixnet_gen.ixnet.commit.assert_called_once()
+
+    def test_add_device_group(self):
+        self.ixnet_gen.ixnet.add.return_value = 'obj'
+        self.ixnet_gen.add_device_group('topology', 'device group 1', '1')
+        self.ixnet_gen.ixnet.add.assert_called_once_with('topology',
+                                                         'deviceGroup')
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_called_once_with(
+            'obj', '-name', 'device group 1', '-multiplier', '1')
+        self.ixnet_gen.ixnet.commit.assert_called_once()
+
+    def test_add_ethernet(self):
+        self.ixnet_gen.ixnet.add.return_value = 'obj'
+        self.ixnet_gen.add_ethernet('device_group', 'ethernet 1')
+        self.ixnet_gen.ixnet.add.assert_called_once_with('device_group',
+                                                         'ethernet')
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_called_once_with(
+            'obj', '-name', 'ethernet 1')
+        self.ixnet_gen.ixnet.commit.assert_called_once()
+
+    def test_add_ipv4(self):
+        self.ixnet_gen.ixnet.add.return_value = 'obj'
+        self.ixnet_gen.add_ipv4('ethernet 1', name='ipv4 1')
+        self.ixnet_gen.ixnet.add.assert_called_once_with('ethernet 1', 'ipv4')
+        self.ixnet_gen.ixnet.setAttribute.assert_called_once_with('obj',
+                                                                  '-name',
+                                                                  'ipv4 1')
+        self.assertEqual(self.ixnet.commit.call_count, 2)
+
+    def test_add_ipv4_single(self):
+        self.ixnet_gen.ixnet.add.return_value = 'obj'
+        self.ixnet_gen.ixnet.getAttribute.return_value = 'attr'
+        self.ixnet_gen.add_ipv4('ethernet 1', name='ipv4 1', addr='100.1.1.100',
+                                prefix='24', gateway='100.1.1.200')
+        self.ixnet_gen.ixnet.add.assert_called_once_with('ethernet 1', 'ipv4')
+        self.ixnet_gen.ixnet.setAttribute.assert_called_once_with('obj',
+                                                                  '-name',
+                                                                  'ipv4 1')
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_any_call(
+            'attr/singleValue', '-value', '100.1.1.100')
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_any_call(
+            'attr/singleValue', '-value', '24')
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_any_call(
+            'attr/singleValue', '-value', '100.1.1.200')
+
+        self.assertEqual(self.ixnet.commit.call_count, 2)
+
+    def test_add_ipv4_counter(self):
+        self.ixnet_gen.ixnet.add.return_value = 'obj'
+        self.ixnet_gen.ixnet.getAttribute.return_value = 'attr'
+        self.ixnet_gen.add_ipv4('ethernet 1', name='ipv4 1',
+                                addr='100.1.1.100',
+                                addr_step='1',
+                                addr_direction='increment',
+                                prefix='24',
+                                gateway='100.1.1.200',
+                                gw_step='1',
+                                gw_direction='increment')
+        self.ixnet_gen.ixnet.add.assert_any_call('ethernet 1', 'ipv4')
+        self.ixnet_gen.ixnet.setAttribute.assert_called_once_with('obj',
+                                                                  '-name',
+                                                                  'ipv4 1')
+        self.ixnet_gen.ixnet.add.assert_any_call('attr', 'counter')
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_any_call('obj', '-start',
+                                                               '100.1.1.100',
+                                                               '-step', '1',
+                                                               '-direction',
+                                                               'increment')
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_any_call(
+            'attr/singleValue', '-value', '24')
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_any_call('obj', '-start',
+                                                               '100.1.1.200',
+                                                               '-step', '1',
+                                                               '-direction',
+                                                               'increment')
+        self.assertEqual(self.ixnet.commit.call_count, 2)
+
+    def test_add_pppox_client(self):
+        self.ixnet_gen.ixnet.add.return_value = 'obj'
+        self.ixnet_gen.ixnet.getAttribute.return_value = 'attr'
+        self.ixnet_gen.add_pppox_client('ethernet 1', 'pap', 'user', 'pwd')
+        self.ixnet_gen.ixnet.add.assert_called_once_with('ethernet 1',
+                                                         'pppoxclient')
+
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_any_call(
+            'attr/singleValue', '-value', 'pap')
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_any_call(
+            'attr/singleValue', '-value', 'user')
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_any_call(
+            'attr/singleValue', '-value', 'pwd')
+
+        self.assertEqual(self.ixnet.commit.call_count, 2)
+
+    def test_add_pppox_client_invalid_auth(self):
+        self.ixnet_gen.ixnet.add.return_value = 'obj'
+        self.ixnet_gen.ixnet.getAttribute.return_value = 'attr'
+        self.assertRaises(NotImplementedError, self.ixnet_gen.add_pppox_client,
+                          'ethernet 1', 'invalid_auth', 'user', 'pwd')
+
+        self.ixnet_gen.ixnet.setMultiAttribute.assert_not_called()
+
     @mock.patch.object(IxNetwork, 'IxNet')
     def test_connect(self, mock_ixnet):
         mock_ixnet.return_value = self.ixnet