Merge "Add testing using py.test"

This commit is contained in:
Jenkins
2015-06-23 08:45:16 +00:00
committed by Gerrit Code Review
7 changed files with 83 additions and 31 deletions

View File

@@ -15,8 +15,9 @@
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "devops.settings")
from devops.models.network import DiskDevice
from devops.models.environment import Environment
from devops.models.network import Address
from devops.models.network import DiskDevice
from devops.models.network import Interface
from devops.models.network import Network
from devops.models.node import Node

View File

@@ -16,23 +16,24 @@ import json
import random
from unittest import TestCase
from mock import Mock
import mock
from devops.driver.libvirt.libvirt_xml_builder import LibvirtXMLBuilder
class BaseTestXMLBuilder(TestCase):
def setUp(self):
self.xml_builder = LibvirtXMLBuilder(Mock())
self.xml_builder.driver.volume_path = Mock(
self.xml_builder = LibvirtXMLBuilder(mock.Mock())
self.xml_builder.driver.volume_path = mock.Mock(
return_value="volume_path_mock"
)
self.xml_builder.driver.network_name = Mock(
self.xml_builder.driver.network_name = mock.Mock(
return_value="network_name_mock"
)
self.net = Mock()
self.vol = Mock()
self.node = Mock()
self.xml_builder.driver.reboot_timeout = None
self.net = mock.Mock()
self.vol = mock.Mock()
self.node = mock.Mock()
class TestNetworkXml(BaseTestXMLBuilder):
@@ -68,12 +69,11 @@ class TestNetworkXml(BaseTestXMLBuilder):
ip = '172.0.1.1'
prefix = '24'
self.net.ip_network = "{0}/{1}".format(ip, prefix)
self.net.has_pxe_server = True
self.net.has_pxe_server = False
self.net.tftp_root_dir = '/tmp'
xml = self.xml_builder.build_network_xml(self.net)
str = '''
<ip address="{0}" prefix="{1}">
</ip>'''.format(ip, prefix, self.net.tftp_root_dir)
str = '<ip address="{0}" prefix="{1}" />'.format(
ip, prefix)
self.assertIn(str, xml)
@@ -103,7 +103,7 @@ class TestVolumeXml(BaseTestXMLBuilder):
</target>'''.format(self.vol.format), xml)
def test_backing_store(self):
self.vol.backing_store = Mock(
self.vol.backing_store = mock.Mock(
uuid="volume_uuid",
format="raw"
)
@@ -144,13 +144,15 @@ class TestNodeXml(BaseTestXMLBuilder):
self.node.architecture = 'test_architecture'
self.node.boot = '["dev1", "dev2"]'
self.node.has_vnc = None
self.node.disk_devices = []
disk_devices = mock.MagicMock()
disk_devices.filter.return_value = []
self.node.disk_devices = disk_devices
self.node.interfaces = []
def test_node(self):
xml = self.xml_builder.build_node_xml(self.node, 'test_emulator')
boot = json.loads(self.node.boot)
self.assertIn('''
expected = '''
<domain type="test_hypervisor">
<name>test_env_name_test_name</name>
<cpu mode="host-model">
@@ -158,12 +160,25 @@ class TestNodeXml(BaseTestXMLBuilder):
</cpu>
<vcpu>{0}</vcpu>
<memory unit="KiB">{1}</memory>
<clock offset="utc" />
<clock>
<timer name="rtc" tickpolicy="catchup" track="wall">
<catchup limit="10000" slew="120" threshold="123" />
</timer>
</clock>
<clock>
<timer name="pit" tickpolicy="delay" />
</clock>
<clock>
<timer name="hpet" present="yes" />
</clock>
<os>
<type arch="{2}">{3}</type>
<boot dev="{4}" />
<boot dev="{5}" />
</os>
<devices>
<controller model="nec-xhci" type="usb" />
<emulator>test_emulator</emulator>
<video>
<model heads="1" type="vga" vram="9216" />
@@ -177,32 +192,48 @@ class TestNodeXml(BaseTestXMLBuilder):
</devices>
</domain>'''.format(self.node.vcpu, str(self.node.memory * 1024),
self.node.architecture, self.node.os_type,
boot[0], boot[1]), xml)
boot[0], boot[1])
self.assertIn(expected, xml)
def test_node_devices(self):
volumes = [Mock(uuid=i, format='frmt{0}'.format(i)) for i in range(3)]
self.node.disk_devices = [
Mock(type='type{0}'.format(i), device='device{0}'.format(i),
volume=volumes[i], target_dev='tdev{0}'.format(i),
bus='bus{0}'.format(i)) for i in range(3)]
@mock.patch('devops.driver.libvirt.libvirt_xml_builder.uuid')
def test_node_devices(self, mock_uuid):
mock_uuid.uuid4.return_value.hex = 'disk-serial'
volumes = [mock.Mock(uuid=i, format='frmt{0}'.format(i))
for i in range(3)]
disk_devices = [
mock.Mock(
type='type{0}'.format(i),
device='device{0}'.format(i),
volume=volumes[i],
target_dev='tdev{0}'.format(i),
bus='bus{0}'.format(i)
) for i in range(3)
]
self.node.disk_devices = mock.MagicMock()
self.node.disk_devices.__iter__.return_value = iter(disk_devices)
xml = self.xml_builder.build_node_xml(self.node, 'test_emulator')
self.assertIn('''
expected = '''
<devices>
<controller model="nec-xhci" type="usb" />
<emulator>test_emulator</emulator>
<disk device="device0" type="type0">
<driver cache="unsafe" type="frmt0" />
<source file="volume_path_mock" />
<target bus="bus0" dev="tdev0" />
<serial>disk-serial</serial>
</disk>
<disk device="device1" type="type1">
<driver cache="unsafe" type="frmt1" />
<source file="volume_path_mock" />
<target bus="bus1" dev="tdev1" />
<serial>disk-serial</serial>
</disk>
<disk device="device2" type="type2">
<driver cache="unsafe" type="frmt2" />
<source file="volume_path_mock" />
<target bus="bus2" dev="tdev2" />
<serial>disk-serial</serial>
</disk>
<video>
<model heads="1" type="vga" vram="9216" />
@@ -213,17 +244,19 @@ class TestNodeXml(BaseTestXMLBuilder):
<console type="pty">
<target port="0" type="serial" />
</console>
</devices>''', xml)
</devices>'''
self.assertIn(expected, xml)
def test_node_interfaces(self):
networks = [Mock(uuid=i) for i in range(3)]
networks = [mock.Mock(uuid=i) for i in range(3)]
self.node.interfaces = [
Mock(type='network'.format(i), mac_address='mac{0}'.format(i),
network=networks[i], id='id{0}'.format(i),
model='model{0}'.format(i)) for i in range(3)]
mock.Mock(type='network'.format(i), mac_address='mac{0}'.format(i),
network=networks[i], id='id{0}'.format(i),
model='model{0}'.format(i)) for i in range(3)]
xml = self.xml_builder.build_node_xml(self.node, 'test_emulator')
self.assertIn('''
<devices>
<controller model="nec-xhci" type="usb" />
<emulator>test_emulator</emulator>
<interface type="network">
<mac address="mac0" />

View File

@@ -12,9 +12,11 @@
# License for the specific language governing permissions and limitations
# under the License.
from django.test import TestCase
from ipaddr import IPNetwork
from ipaddr import IPv4Network
import pytest
from devops.helpers.network import IpNetworksPool
from devops.models import Address
@@ -26,6 +28,7 @@ from devops.models import Node
from devops.models import Volume
@pytest.mark.xfail(reason="No DB configured")
class TestManager(TestCase):
def tearDown(self):

View File

@@ -17,7 +17,7 @@ import threading
from django.utils import unittest
from devops.models import double_tuple
from devops.models.base import double_tuple
from devops.models import Network

View File

@@ -41,7 +41,6 @@ setup(
'psycopg2',
'south',
'PyYAML',
'mock',
'libvirt-python',
]
)

4
test-requirements.txt Normal file
View File

@@ -0,0 +1,4 @@
mock >= 1.0.1
pytest >= 2.7.1
pytest-django >= 2.8.0
py == 1.4.26 # https://bitbucket.org/pytest-dev/pytest/issue/752/internalerror-indexerror-list-index-out-of

14
tox.ini
View File

@@ -5,9 +5,18 @@
[tox]
minversion = 1.6
envlist = pep8
envlist = py27, pep8
skipsdist = True
[testenv]
usedevelop = True
deps = -r{toxinidir}/test-requirements.txt
commands =
py.test -v {posargs:devops/tests}
[testenv:venv]
commands = {posargs:}
[testenv:pep8]
deps = hacking==0.10.1
usedevelop = False
@@ -22,3 +31,6 @@ exclude = .venv,.git,.tox,dist,doc,*lib/python*,*egg,build,tools,__init__.py,doc
show-pep8 = True
show-source = True
count = True
[pytest]
DJANGO_SETTINGS_MODULE=devops.settings