예제 #1
0
    def test_run_traffic_process(self, ssh):
        mock_ssh(ssh)

        mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
        mock_traffic_profile.get_traffic_definition.return_value = "64"
        mock_traffic_profile.params = self.TRAFFIC_PROFILE

        ssh.from_node.return_value.execute.return_value = 0, "success", ""
        ssh.from_node.return_value.run.return_value = 0, "success", ""

        sut = PingTrafficGen('vnf1', self.VNFD_0)
        sut._traffic_runner(mock_traffic_profile)
        sut.ssh_helper.run.assert_called_with(
            "ping -s 64 152.16.100.20",
            stdout=sut._parser, keep_stdin_open=True, pty=True)
예제 #2
0
class TestPingTrafficGen(unittest.TestCase):
    VNFD = {
        'vnfd:vnfd-catalog': {
            'vnfd': [{
                'short-name':
                'VpeVnf',
                'vdu': [{
                    'routing_table': [{
                        'network': '152.16.100.20',
                        'netmask': '255.255.255.0',
                        'gateway': '152.16.100.20',
                        'if': 'xe0'
                    }, {
                        'network': '152.16.40.20',
                        'netmask': '255.255.255.0',
                        'gateway': '152.16.40.20',
                        'if': 'xe1'
                    }],
                    'description':
                    'VPE approximation using DPDK',
                    'name':
                    'vpevnf-baremetal',
                    'nd_route_tbl': [{
                        'network': '0064:ff9b:0:0:0:0:9810:6414',
                        'netmask': '112',
                        'gateway': '0064:ff9b:0:0:0:0:9810:6414',
                        'if': 'xe0'
                    }, {
                        'network': '0064:ff9b:0:0:0:0:9810:2814',
                        'netmask': '112',
                        'gateway': '0064:ff9b:0:0:0:0:9810:2814',
                        'if': 'xe1'
                    }],
                    'id':
                    'vpevnf-baremetal',
                    'external-interface': [{
                        'virtual-interface': {
                            'dst_mac': '00:00:00:00:00:04',
                            'vpci': '0000:05:00.0',
                            'local_ip': '152.16.100.19',
                            'type': 'PCI-PASSTHROUGH',
                            'netmask': '255.255.255.0',
                            'dpdk_port_num': '0',
                            'bandwidth': '10 Gbps',
                            'driver': "i40e",
                            'dst_ip': '152.16.100.20',
                            'local_iface_name': 'xe0',
                            'local_mac': '00:00:00:00:00:02'
                        },
                        'vnfd-connection-point-ref': 'xe0',
                        'name': 'xe0'
                    }, {
                        'virtual-interface': {
                            'dst_mac': '00:00:00:00:00:03',
                            'vpci': '0000:05:00.1',
                            'local_ip': '152.16.40.19',
                            'type': 'PCI-PASSTHROUGH',
                            'driver': "i40e",
                            'netmask': '255.255.255.0',
                            'dpdk_port_num': '1',
                            'bandwidth': '10 Gbps',
                            'dst_ip': '152.16.40.20',
                            'local_iface_name': 'xe1',
                            'local_mac': '00:00:00:00:00:01'
                        },
                        'vnfd-connection-point-ref': 'xe1',
                        'name': 'xe1'
                    }]
                }],
                'description':
                'Vpe approximation using DPDK',
                'mgmt-interface': {
                    'vdu-id': 'vpevnf-baremetal',
                    'host': '1.1.1.1',
                    'password': '******',
                    'user': '******',
                    'ip': '1.1.1.1'
                },
                'benchmark': {
                    'kpi': ['packets_in', 'packets_fwd', 'packets_dropped']
                },
                'connection-point': [{
                    'type': 'VPORT',
                    'name': 'xe0'
                }, {
                    'type': 'VPORT',
                    'name': 'xe1'
                }],
                'id':
                'VpeApproxVnf',
                'name':
                'VPEVnfSsh'
            }]
        }
    }

    TRAFFIC_PROFILE = {
        "schema": "isb:traffic_profile:0.1",
        "name": "fixed",
        "description": "Fixed traffic profile to run UDP traffic",
        "traffic_profile": {
            "traffic_type": "FixedTraffic",
            "frame_rate": 100,  # pps
            "flow_number": 10,
            "frame_size": 64
        }
    }

    def test___init__(self):
        with mock.patch("yardstick.ssh.SSH") as ssh:
            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
            ssh_mock = mock.Mock(autospec=ssh.SSH)
            ssh_mock.execute = \
                mock.Mock(return_value=(0, "", ""))
            ssh.from_node.return_value = ssh_mock
            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
            ping_traffic_gen = PingTrafficGen(vnfd)
            self.assertEqual(ping_traffic_gen._queue, None)

    def test_collect_kpi(self):
        with mock.patch("yardstick.ssh.SSH") as ssh:
            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
            ssh_mock = mock.Mock(autospec=ssh.SSH)
            ssh_mock.execute = \
                mock.Mock(return_value=(0, "", ""))
            ssh.from_node.return_value = ssh_mock
            ping_traffic_gen = PingTrafficGen(vnfd)
            ping_traffic_gen._queue = Queue()
            ping_traffic_gen._queue.put({})
            ping_traffic_gen.collect_kpi()
            self.assertEqual({}, ping_traffic_gen._result)

    def test_instantiate(self):
        with mock.patch("yardstick.ssh.SSH") as ssh:
            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
            ssh_mock = mock.Mock(autospec=ssh.SSH)
            ssh_mock.execute = \
                mock.Mock(return_value=(0, "", ""))
            ssh.from_node.return_value = ssh_mock
            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
            ping_traffic_gen = PingTrafficGen(vnfd)
            self.assertEqual(None, ping_traffic_gen.instantiate({}, {}))

    def test_listen_traffic(self):
        with mock.patch("yardstick.ssh.SSH") as ssh:
            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
            ssh_mock = mock.Mock(autospec=ssh.SSH)
            ssh_mock.execute = \
                mock.Mock(return_value=(0, "", ""))
            ssh.from_node.return_value = ssh_mock
            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
            ping_traffic_gen = PingTrafficGen(vnfd)
            self.assertEqual(None, ping_traffic_gen.listen_traffic({}))

    def test_run_traffic(self):
        mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
        mock_traffic_profile.get_traffic_definition.return_value = "64"
        mock_traffic_profile.params = self.TRAFFIC_PROFILE
        with mock.patch("yardstick.ssh.SSH") as ssh:
            ssh_mock = mock.Mock(autospec=ssh.SSH)
            ssh_mock.execute = \
                mock.Mock(return_value=(0, "", ""))
            ssh_mock.run = \
                mock.Mock(return_value=(0, "", ""))
            ssh.from_node.return_value = ssh_mock
            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
            self.sut = PingTrafficGen(vnfd)
            self.sut.connection = mock.Mock()
            self.sut.connection.run = mock.Mock()
            self.sut._traffic_runner = mock.Mock(return_value=0)
            self.assertEqual(False, self.sut.run_traffic(mock_traffic_profile))

    def test_run_traffic_process(self):
        mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
        mock_traffic_profile.get_traffic_definition.return_value = "64"
        mock_traffic_profile.params = self.TRAFFIC_PROFILE
        with mock.patch("yardstick.ssh.SSH") as ssh:
            ssh_mock = mock.Mock(autospec=ssh.SSH)
            ssh_mock.execute = \
                mock.Mock(return_value=(0, "", ""))
            ssh_mock.run = \
                mock.Mock(return_value=(0, "", ""))
            ssh.from_node.return_value = ssh_mock
            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
            self.sut = PingTrafficGen(vnfd)
            self.sut.connection = mock.Mock()
            self.sut.connection.run = mock.Mock()
            q = Queue()
            self.sut._traffic_runner(mock_traffic_profile, q)
            self.sut.connection.run.assert_called_with(
                "ping -s 64 152.16.100.20",
                stdout=q,
                keep_stdin_open=True,
                pty=True)

    def test_scale(self):
        with mock.patch("yardstick.ssh.SSH") as ssh:
            ssh_mock = mock.Mock(autospec=ssh.SSH)
            ssh_mock.execute = \
                mock.Mock(return_value=(0, "", ""))
            ssh_mock.run = \
                mock.Mock(return_value=(0, "", ""))
            ssh.from_node.return_value = ssh_mock
            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
            flavor = ""
            ping_traffic_gen = PingTrafficGen(vnfd)
            self.assertRaises(NotImplementedError, ping_traffic_gen.scale,
                              flavor)

    def test_terminate(self):
        with mock.patch("yardstick.ssh.SSH") as ssh:
            ssh_mock = mock.Mock(autospec=ssh.SSH)
            ssh_mock.execute = \
                mock.Mock(return_value=(0, "", ""))
            ssh_mock.run = \
                mock.Mock(return_value=(0, "", ""))
            ssh.from_node.return_value = ssh_mock
            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
            ping_traffic_gen = PingTrafficGen(vnfd)
            self.assertEqual(None, ping_traffic_gen.terminate())