[dbus PATCH] Convert testsuite from unittest to pytest

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Also add flake8 target in tests Makefile and rewrite
some parts to be more pythonic.

Signed-off-by: Katerina Koukiou <kkoukiou@xxxxxxxxxx>
---
 HACKING.md           |  2 +-
 test/Makefile.am     | 15 ++++++++++++---
 test/conftest.py     | 15 +++++++++++++++
 test/libvirttest.py  | 51 ++++++++++++++++++++++++++++-----------------------
 test/test_connect.py | 35 +++++++++++++++--------------------
 test/test_domain.py  | 39 +++++++++++++++++----------------------
 test/travis-run      |  4 ++--
 7 files changed, 90 insertions(+), 71 deletions(-)
 create mode 100644 test/conftest.py

diff --git a/HACKING.md b/HACKING.md
index 75aa6d0..30d321c 100644
--- a/HACKING.md
+++ b/HACKING.md
@@ -35,7 +35,7 @@ Running from git repository
     make check
     ```
 
-    The test tool requires python3 and python3-dbus.
+    The test tool requires python3, pytest and python3-dbus.
 
 
   * To run libvirt-dbus directly from the build dir without installing it
diff --git a/test/Makefile.am b/test/Makefile.am
index d3997f3..554c433 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,17 +1,26 @@
 test_helpers = \
-	libvirttest.py
+	libvirttest.py \
+	conftest.py
 
 test_programs = \
 	test_connect.py \
 	test_domain.py
 
-TESTS = $(test_programs)
-
 EXTRA_DIST = \
 	$(test_helpers) \
 	$(test_programs) \
 	travis-run
 
+TEST_PATH=./
+
+lint:
+	flake8 --exclude=.tox --ignore=E501
+
+test:
+	py.test --verbose --color=yes $(TEST_PATH)
+
+check: lint test
+
 TESTS_ENVIRONMENT = \
 	abs_top_builddir=$(abs_top_builddir) \
 	VIRT_DBUS_INTERFACES_DIR=$(abs_top_srcdir)/data
diff --git a/test/conftest.py b/test/conftest.py
new file mode 100644
index 0000000..a468599
--- /dev/null
+++ b/test/conftest.py
@@ -0,0 +1,15 @@
+import os
+import subprocess
+import pytest
+
+
+@pytest.fixture(scope="session", autouse=True)
+def dbus_daemon_session():
+    """Fixture to start D-Bus message bus session daemon for use in the whole test suite.
+    """
+    dbus_daemon = subprocess.Popen(['dbus-daemon', '--session', '--print-address'],
+                                   stdout=subprocess.PIPE, universal_newlines=True)
+    os.environ['DBUS_SESSION_BUS_ADDRESS'] = dbus_daemon.stdout.readline().strip()
+    yield
+    dbus_daemon.terminate()
+    dbus_daemon.wait(timeout=10)
diff --git a/test/libvirttest.py b/test/libvirttest.py
index 6a00aea..fc8c5c4 100644
--- a/test/libvirttest.py
+++ b/test/libvirttest.py
@@ -1,34 +1,33 @@
 #!/usr/bin/python3
 
-from dbus.mainloop.glib import DBusGMainLoop
-from gi.repository import GLib
-import dbus
 import os
 import subprocess
 import time
-import unittest
+import pytest
+from gi.repository import GLib
+from dbus.mainloop.glib import DBusGMainLoop
+import dbus
 
-root = os.environ.get('abs_top_builddir', os.path.dirname(os.path.dirname(__file__)))
-exe = os.path.join(root, 'src', 'libvirt-dbus')
+ROOT = os.environ.get('abs_top_builddir', os.path.dirname(os.path.dirname(__file__)))
+EXE = os.path.join(ROOT, 'src', 'libvirt-dbus')
 
 DBusGMainLoop(set_as_default=True)
 
-class TestCase(unittest.TestCase):
-    @classmethod
-    def setUpClass(cls):
-        cls.bus = subprocess.Popen(['dbus-daemon', '--session', '--print-address'],
-            stdout=subprocess.PIPE, universal_newlines=True)
-        os.environ['DBUS_SESSION_BUS_ADDRESS'] = cls.bus.stdout.readline().strip()
 
-    @classmethod
-    def tearDownClass(cls):
-        cls.bus.terminate()
-        cls.bus.wait(timeout=10)
+class BaseTestClass():
+    """ Base test class for whole test suite
+    """
+    connect = None
+    bus = None
+    libvirt_dbus = None
+    loop = False
 
-    def setUp(self):
+    @pytest.fixture(autouse=True)
+    def libvirt_dbus_setup(self, request):
+        """Start libvirt-dbus for each test function
+        """
         os.environ['LIBVIRT_DEBUG'] = '3'
-
-        self.daemon = subprocess.Popen([exe])
+        self.libvirt_dbus = subprocess.Popen([EXE])
         self.bus = dbus.SessionBus()
 
         for i in range(10):
@@ -41,12 +40,18 @@ class TestCase(unittest.TestCase):
         obj = self.bus.get_object('org.libvirt', '/org/libvirt/Test')
         self.connect = dbus.Interface(obj, 'org.libvirt.Connect')
 
-    def tearDown(self):
-        self.daemon.terminate()
-        self.daemon.wait(timeout=10)
+    @pytest.fixture(autouse=True)
+    def libvirt_dbus_teardown(self):
+        """Terminate libvirt-dbus at the teardown of each test
+        """
+        yield
+        self.libvirt_dbus.terminate()
+        self.libvirt_dbus.wait(timeout=10)
 
     def main_loop(self):
-        self.assertFalse(getattr(self, 'loop', False))
+        """Initializes the mainloop
+        """
+        assert getattr(self, 'loop', False) is False
 
         def timeout():
             self.loop.quit()
diff --git a/test/test_connect.py b/test/test_connect.py
index 4ec3fe0..14f70d5 100755
--- a/test/test_connect.py
+++ b/test/test_connect.py
@@ -1,10 +1,9 @@
-#!/usr/bin/python3
-
 import dbus
 import libvirttest
-import unittest
 
-minimal_xml = '''
+
+class TestConnect(libvirttest.BaseTestClass):
+    minimal_xml = '''
     <domain type="test">
       <name>foo</name>
       <memory>1024</memory>
@@ -12,16 +11,15 @@ minimal_xml = '''
         <type>hvm</type>
       </os>
     </domain>
-'''
+    '''
 
-class TestConnect(libvirttest.TestCase):
     def test_list_domains(self):
         domains = self.connect.ListDomains(0)
-        self.assertEqual(type(domains), dbus.Array)
-        self.assertEqual(len(domains), 1)
+        assert isinstance(domains, dbus.Array)
+        assert len(domains) == 1
 
         for path in domains:
-            self.assertEqual(type(path), dbus.ObjectPath)
+            assert isinstance(path, dbus.ObjectPath)
             domain = self.bus.get_object('org.libvirt', path)
 
             # ensure the path exists by calling Introspect on it
@@ -29,29 +27,26 @@ class TestConnect(libvirttest.TestCase):
 
     def test_create(self):
         def domain_started(name, path):
-            self.assertEqual(name, 'foo')
-            self.assertEqual(type(path), dbus.ObjectPath)
+            assert name == 'foo'
+            assert isinstance(path, dbus.ObjectPath)
             self.loop.quit()
 
         self.connect.connect_to_signal('DomainStarted', domain_started)
 
-        path = self.connect.CreateXML(minimal_xml, 0)
-        self.assertEqual(type(path), dbus.ObjectPath)
+        path = self.connect.CreateXML(self.minimal_xml, 0)
+        assert isinstance(path, dbus.ObjectPath)
 
         self.main_loop()
 
     def test_define(self):
         def domain_defined(name, path):
-            self.assertEqual(name, 'foo')
-            self.assertEqual(type(path), dbus.ObjectPath)
+            assert name == 'foo'
+            assert isinstance(path, dbus.ObjectPath)
             self.loop.quit()
 
         self.connect.connect_to_signal('DomainDefined', domain_defined)
 
-        path = self.connect.DefineXML(minimal_xml)
-        self.assertEqual(type(path), dbus.ObjectPath)
+        path = self.connect.DefineXML(self.minimal_xml)
+        assert isinstance(path, dbus.ObjectPath)
 
         self.main_loop()
-
-if __name__ == '__main__':
-    unittest.main(verbosity=2)
diff --git a/test/test_domain.py b/test/test_domain.py
index b1ab7a5..b176c29 100755
--- a/test/test_domain.py
+++ b/test/test_domain.py
@@ -1,10 +1,8 @@
-#!/usr/bin/python3
-
 import dbus
 import libvirttest
-import unittest
 
-class TestDomain(libvirttest.TestCase):
+
+class TestDomain(libvirttest.BaseTestClass):
     def domain(self):
         path = self.connect.ListDomains(0)[0]
         obj = self.bus.get_object('org.libvirt', path)
@@ -14,21 +12,21 @@ class TestDomain(libvirttest.TestCase):
         obj, domain = self.domain()
 
         props = obj.GetAll('org.libvirt.Domain', dbus_interface=dbus.PROPERTIES_IFACE)
-        self.assertEqual(type(props['Name']), dbus.String)
-        self.assertEqual(type(props['UUID']), dbus.String)
-        self.assertEqual(type(props['Id']), dbus.UInt32)
-        self.assertEqual(type(props['Vcpus']), dbus.UInt32)
-        self.assertEqual(type(props['OSType']), dbus.String)
-        self.assertEqual(type(props['Active']), dbus.Boolean)
-        self.assertEqual(type(props['Persistent']), dbus.Boolean)
-        self.assertEqual(type(props['State']), dbus.String)
-        self.assertEqual(type(props['Autostart']), dbus.Boolean)
+        assert isinstance(props['Name'], dbus.String)
+        assert isinstance(props['UUID'], dbus.String)
+        assert isinstance(props['Id'], dbus.UInt32)
+        assert isinstance(props['Vcpus'], dbus.UInt32)
+        assert isinstance(props['OSType'], dbus.String)
+        assert isinstance(props['Active'], dbus.Boolean)
+        assert isinstance(props['Persistent'], dbus.Boolean)
+        assert isinstance(props['State'], dbus.String)
+        assert isinstance(props['Autostart'], dbus.Boolean)
 
         # Call all methods except Reset and GetStats, because the test backend
         # doesn't support those
 
         xml = domain.GetXMLDesc(0)
-        self.assertEqual(type(xml), dbus.String)
+        assert isinstance(xml, dbus.String)
 
         domain.Reboot(0)
         domain.Shutdown()
@@ -38,8 +36,8 @@ class TestDomain(libvirttest.TestCase):
 
     def test_shutdown(self):
         def domain_stopped(name, path):
-            self.assertEqual(name, 'test')
-            self.assertEqual(type(path), dbus.ObjectPath)
+            assert name == 'test'
+            assert isinstance(path, dbus.ObjectPath)
             self.loop.quit()
 
         self.connect.connect_to_signal('DomainStopped', domain_stopped)
@@ -48,14 +46,14 @@ class TestDomain(libvirttest.TestCase):
         domain.Shutdown()
 
         state = obj.Get('org.libvirt.Domain', 'State', dbus_interface=dbus.PROPERTIES_IFACE)
-        self.assertEqual(state, 'shutoff')
+        assert state == 'shutoff'
 
         self.main_loop()
 
     def test_undefine(self):
         def domain_undefined(name, path):
-            self.assertEqual(name, 'test')
-            self.assertEqual(type(path), dbus.ObjectPath)
+            assert name == 'test'
+            assert isinstance(path, dbus.ObjectPath)
             self.loop.quit()
 
         self.connect.connect_to_signal('DomainUndefined', domain_undefined)
@@ -65,6 +63,3 @@ class TestDomain(libvirttest.TestCase):
         domain.Undefine()
 
         self.main_loop()
-
-if __name__ == '__main__':
-    unittest.main(verbosity=2)
diff --git a/test/travis-run b/test/travis-run
index 7577253..c2ab729 100755
--- a/test/travis-run
+++ b/test/travis-run
@@ -22,7 +22,7 @@ sudo chroot "$CHROOT" << EOF
 set -ex
 # install build deps
 apt-get update
-apt-get install -y dh-autoreconf pkg-config libvirt-dev libglib2.0-dev libtool python3-gi python3-dbus dbus
+apt-get install -y dh-autoreconf pkg-config libvirt-dev libglib2.0-dev libtool python3-gi python3-dbus dbus pytest
 
 # run build and tests as user
 chown -R buildd:buildd /build
@@ -31,6 +31,6 @@ set -ex
 cd /build/src
 ./autogen.sh
 make -j4
-make check || { cat test-suite.log; exit 1; }
+make check
 EOU
 EOF
-- 
2.15.0

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux