diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py | 58 |
1 files changed, 33 insertions, 25 deletions
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py index 61fc012bc..04cd9e858 100644 --- a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py +++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py @@ -11,7 +11,6 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -# import os @@ -19,41 +18,50 @@ import mock import six import unittest -from tests.unit import STL_MOCKS - -STLClient = mock.MagicMock() -stl_patch = mock.patch.dict("sys.modules", STL_MOCKS) -stl_patch.start() +from yardstick.network_services.vnf_generic.vnf import tg_rfc2544_ixia +from yardstick.network_services.traffic_profile import base as tp_base -if stl_patch: - from yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia import IxiaTrafficGen - from yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia import IxiaRfc2544Helper - from yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia import IxiaResourceHelper - from yardstick.network_services.traffic_profile.base import TrafficProfile TEST_FILE_YAML = 'nsb_test_case.yaml' NAME = "tg__1" -@mock.patch("yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.IxNextgen") class TestIxiaResourceHelper(unittest.TestCase): - def test___init___with_custom_rfc_helper(self, *args): - class MyRfcHelper(IxiaRfc2544Helper): + + def setUp(self): + self._mock_IxNextgen = mock.patch.object(tg_rfc2544_ixia, 'IxNextgen') + self.mock_IxNextgen = self._mock_IxNextgen.start() + self.addCleanup(self._stop_mocks) + + def _stop_mocks(self): + self._mock_IxNextgen.stop() + + def test___init___with_custom_rfc_helper(self): + class MyRfcHelper(tg_rfc2544_ixia.IxiaRfc2544Helper): pass - ixia_resource_helper = IxiaResourceHelper(mock.Mock(), MyRfcHelper) + ixia_resource_helper = tg_rfc2544_ixia.IxiaResourceHelper( + mock.Mock(), MyRfcHelper) self.assertIsInstance(ixia_resource_helper.rfc_helper, MyRfcHelper) - def test_stop_collect_with_client(self, *args): + def test_stop_collect_with_client(self): mock_client = mock.Mock() - ixia_resource_helper = IxiaResourceHelper(mock.Mock()) + ixia_resource_helper = tg_rfc2544_ixia.IxiaResourceHelper(mock.Mock()) ixia_resource_helper.client = mock_client ixia_resource_helper.stop_collect() self.assertEqual(mock_client.ix_stop_traffic.call_count, 1) + # NOTE(ralonsoh): to be updated in next patchset + def test__initialise_client(self): + pass + + # NOTE(ralonsoh): to be updated in next patchset + def test_run_traffic(self): + pass + @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.IxNextgen") class Tes ##############################################################################
# Copyright (c) 2017 ZTE Corporation and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
import commands
import libvirt
import os
import string
import xml.etree.ElementTree as ET
from utils import (
LI,
LE,
LW,
WORKSPACE,
err_exit,
path_join
)
def get_nets_name(root):
nets = []
for interface in root.findall('./devices/interface'):
if 'type' in interface.attrib and interface.attrib['type'] == 'network':
for source in interface.iterfind('source'):
if 'network' in source.attrib:
nets.append(source.attrib['network'])
return nets
def modify_vm_boot_order(root, boot_devs):
os_elem = root.find('os')
for boot_elem in os_elem.findall('boot'):
os_elem.remove(boot_elem)
for boot_dev in boot_devs:
boot_elem = ET.Element('boot', attrib={'dev': boot_dev})
os_elem.append(boot_elem)
return root
def modify_vm_name(root, vm_name):
name_elem = root.find('./name')
name_elem.text = vm_name
def modify_vm_disk_file(root, disks):
dev_list = ['hd' + ch for ch in string.ascii_lowercase]
devices = root.find('./devices')
for disk in devices.findall('disk'):
if disk.attrib['device'] == 'disk':
devices.remove(disk)
else:
target = disk.find('target')
dev = target.attrib['dev']
if dev in dev_list:
dev_list.remove(dev)
for disk_file in disks:
dev = dev_list.pop(0)
disk = ET.Element('disk', attrib={'device': 'disk', 'type': 'file'})
disk.append(ET.Element('driver', attrib={'name': 'qemu', 'type': 'qcow2'}))
disk.append(ET.Element('source', attrib={'file': disk_file}))
disk.append(ET.Element('target', attrib={'dev': dev, 'bus': 'ide'}))
devices.append(disk)
def create_virtual_disk(disk_file, size):
LI('Create virtual disk file %s size %d GB' % (disk_file, size))
cmd = 'qemu-img create -f qcow2 {disk_file} {size}G'.format(
disk_file=disk_file, size=size)
status, output = commands.getstatusoutput(cmd)
if status:
LE(output)
err_exit('Fail to create qemu image !')
def create_vm(template, name=None, disks=None):
LI('Begin to create VM %s' % template)
if name or disks:
tree = ET.ElementTree(file=template)
root = tree.getroot()
if name:
modify_vm_name(root, name)
if disks:
modify_vm_disk_file(root, disks)
temp_file = path_join(WORKSPACE, 'tmp.xml')
tree.write(temp_file)
output = commands.getoutput('cat %s' % temp_file)
os.remove(temp_file)
else:
output = commands.getoutput('cat %s' % template)
conn = libvirt.open('qemu:///system')
domain = conn.defineXML(output)
if domain is None:
err_exit('Failed to define VM %s' % template)
if domain.create() < 0:
err_exit('Failed to start VM %s' % template)
domain.setAutostart(1)
conn.close()
LI('VM %s is started' % domain.name())
return domain
def reboot_vm(vm_name, boot_devs=None):
LI('Begin to reboot VM %s', vm_name)
conn = libvirt.open('qemu:///system')
try:
vm = conn.lookupByName(vm_name)
except libvirt.libvirtError as e:
LE(e)
err_exit('VM %s is not found: ' % vm_name)
if boot_devs:
if vm.isActive():
vm.destroy()
LI('Destroy VM %s' % vm_name)
root = ET.fromstring(vm.XMLDesc())
LI('Modify the boot order %s' % boot_devs)
modify_vm_boot_order(root, boot_devs)
LI('Re-define and start the VM %s' % vm_name)
vm.undefine()
vm = conn.defineXML(ET.tostring(root))
vm.create()
vm.setAutostart(1)
else:
vm.reset()
conn.close()
def get_disk_file(root):
disks = []
for disk in root.findall('./devices/disk'):
if 'device' in disk.attrib and disk.attrib['device'] == 'disk':
for source in disk.iterfind('source'):
if 'file' in source.attrib:
disks.append(source.attrib['file'])
return disks
def delete_vm_and_disk(vm_name):
LI('Begin to delete VM %s', vm_name)
conn = libvirt.open('qemu:///system')
vm = None
for item in conn.listAllDomains():
if vm_name == item.name():
vm = item
break
if vm is None:
conn.close()
LI('VM %s is not found' % vm_name)
return
output = vm.XMLDesc()
root = ET.fromstring(output)
if vm.isActive():
vm.destroy()
LI('Destroy VM %s' % vm.name())
vm.undefine()
for disk_file in get_disk_file(root):
if os.path.isfile(disk_file):
status, output = commands.getstatusoutput('rm -f %s' % disk_file)
if status:
LW('Failed to delete the VM disk file %s' % disk_file)
conn.close()
LI('VM %s is removed' % vm_name)
def create_virtual_network(template):
LI('Begin to create virtual network %s' % template)
output = commands.getoutput('cat %s' % template)
conn = libvirt.open('qemu:///system')
network = conn.networkDefineXML(output)
if network is None:
err_exit('Failed to define a virtual network %s' % template)
network.create() # set the network active
network.setAutostart(1)
conn.close()
LI('Virtual network %s is created' % network.name())
return network.name()
def delete_virtual_network(network_xml):
LI('Begin to find and delete network %s' % network_xml)
tree = ET.ElementTree(file=network_xml)
root = tree.getroot()
names = root.findall('./name')
assert len(names) == 1
name = names[0].text
result = 0
conn = libvirt.open('qemu:///system')
for net in conn.listAllNetworks():
if name == net.name():
if net.isActive():
net.destroy()
LI('Network %s is destroyed' % name)
net.undefine()
LI('Network %s is deleted' % name)
result = 1
break
conn.close()
if not result:
LI('Network %s is not found' % name)
def get_vm_mac_addresses(domain):
root = ET.fromstring(domain.XMLDesc())
macs = root.findall('./devices/interface/mac')
return [mac.attrib['address'] for mac in macs]
|