You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2014/09/18 02:36:59 UTC

git commit: updated refs/heads/pytest to 152c226

Repository: cloudstack
Updated Branches:
  refs/heads/pytest c753f765f -> 152c22603


finally, xdist works as I want


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/152c2260
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/152c2260
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/152c2260

Branch: refs/heads/pytest
Commit: 152c226039a6421aa1da105870b607af27a1c2ed
Parents: c753f76
Author: Edison Su <su...@gmail.com>
Authored: Wed Sep 17 17:36:43 2014 -0700
Committer: Edison Su <su...@gmail.com>
Committed: Wed Sep 17 17:36:43 2014 -0700

----------------------------------------------------------------------
 test/integration/smoke/misc/test_deploy_vm.py      |  6 +++---
 test/integration/smoke/misc/test_vm_ha.py          |  4 ++--
 test/integration/smoke/misc/test_vm_sync.py        |  4 ++--
 tools/marvin/marvin/pytest/pytest_marvin_plugin.py | 15 +++++++++++++++
 tools/marvin/marvin/utils.py                       |  7 +------
 tools/pytest-xdist/xdist/dsession.py               |  5 ++---
 tools/pytest-xdist/xdist/plugin.py                 |  2 +-
 tools/pytest-xdist/xdist/remote.py                 |  8 +++++---
 8 files changed, 31 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/152c2260/test/integration/smoke/misc/test_deploy_vm.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/misc/test_deploy_vm.py b/test/integration/smoke/misc/test_deploy_vm.py
index 071d15d..20ea90e 100644
--- a/test/integration/smoke/misc/test_deploy_vm.py
+++ b/test/integration/smoke/misc/test_deploy_vm.py
@@ -32,7 +32,7 @@ from marvin.lib.utils import cleanup_resources
 #common - commonly used methods for all tests are listed here
 from marvin.lib.common import get_zone, get_domain, get_template
 
-from nose.plugins.attrib import attr
+import pytest
 
 class TestDeployVMVolumeCreationFailure(cloudstackTestCase):
     """Test VM deploy into user account with volume creation failure
@@ -81,7 +81,7 @@ class TestDeployVMVolumeCreationFailure(cloudstackTestCase):
         ]
 
 
-    @attr(tags = ['advanced'], required_hardware="simulator only")
+    @pytest.mark.tags(tags = ['advanced'], required_hardware="simulator only")
     def test_deploy_vm_volume_creation_failure(self):
         """Test Deploy Virtual Machine - volume creation failure and retry
 
@@ -192,7 +192,7 @@ class TestDeployVMStartFailure(cloudstackTestCase):
             self.mock_start_failure
         ]
 
-    @attr(tags = ['advanced'], required_hardware="simulator only")
+    @pytest.mark.tags(tags = ['advanced'], required_hardware="simulator only")
     def test_deploy_vm_start_failure(self):
         """Test Deploy Virtual Machine - start operation failure and retry
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/152c2260/test/integration/smoke/misc/test_vm_ha.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/misc/test_vm_ha.py b/test/integration/smoke/misc/test_vm_ha.py
index 601354e..0ba0da5 100644
--- a/test/integration/smoke/misc/test_vm_ha.py
+++ b/test/integration/smoke/misc/test_vm_ha.py
@@ -34,7 +34,7 @@ from marvin.lib.utils import cleanup_resources, validateList
 from marvin.lib.common import get_zone, get_domain, get_template
 from marvin.codes import PASS
 
-from nose.plugins.attrib import attr
+import pytest
 
 class TestDeployVMHA(cloudstackTestCase):
     """Test VM HA
@@ -148,7 +148,7 @@ class TestDeployVMHA(cloudstackTestCase):
         ]
         self.cleanup = self.cleanup + self.mock_checkonhost_list
 
-    @attr(tags = ['advanced'], required_hardware="simulator only")
+    @pytest.mark.tags(tags = ['advanced'], required_hardware="simulator only")
     def test_vm_ha(self):
         """Test VM HA
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/152c2260/test/integration/smoke/misc/test_vm_sync.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/misc/test_vm_sync.py b/test/integration/smoke/misc/test_vm_sync.py
index 6f2f4e9..538a1a3 100644
--- a/test/integration/smoke/misc/test_vm_sync.py
+++ b/test/integration/smoke/misc/test_vm_sync.py
@@ -33,7 +33,7 @@ from marvin.lib.utils import cleanup_resources
 #common - commonly used methods for all tests are listed here
 from marvin.lib.common import get_zone, get_domain, get_template
 
-from nose.plugins.attrib import attr
+import pytest
 
 class TestDeployVMSync(cloudstackTestCase):
     """Test VM Sync
@@ -122,7 +122,7 @@ class TestDeployVMSync(cloudstackTestCase):
             self.mock_ping
         ]
 
-    @attr(tags = ['advanced'], required_hardware="simulator only")
+    @pytest.mark.tags(tags = ['advanced'], required_hardware="simulator only")
     def test_vm_sync(self):
         """Test VM Sync
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/152c2260/tools/marvin/marvin/pytest/pytest_marvin_plugin.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/pytest/pytest_marvin_plugin.py b/tools/marvin/marvin/pytest/pytest_marvin_plugin.py
index 3ae78c8..46b91a3 100644
--- a/tools/marvin/marvin/pytest/pytest_marvin_plugin.py
+++ b/tools/marvin/marvin/pytest/pytest_marvin_plugin.py
@@ -26,6 +26,21 @@ def pytest_configure(config):
 
     marvin_init_tags()
 
+def pytest_collection_finish(session):
+    units = []
+    for item in session.items:
+        if item.instance is None and item.cls is None:
+            units.append(item.nodeid)
+        elif item.instance is not None:
+            instance = item.instance
+            name = instance.__module__ + ":" + instance.__class__.__name__
+            units.append(name)
+        else:
+            name = item.cls
+            units.append(name)
+
+    print units
+
 g_marvin_filter = {
     "tags":[],
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/152c2260/tools/marvin/marvin/utils.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/utils.py b/tools/marvin/marvin/utils.py
index e25b4c7..ef14730 100644
--- a/tools/marvin/marvin/utils.py
+++ b/tools/marvin/marvin/utils.py
@@ -43,9 +43,4 @@ def initTestClass(cls, idenifier):
     if cls.clstestclient is None:
         cls.clstestclient = marvinObj.getTestClient()
 
-    marvinObj.getTestClient().identifier = idenifier
-    if hasattr(cls, "user"):
-        # when the class-level attr applied. all test runs as 'user'
-        cls.testClient.getUserApiClient(cls.UserName,
-                                           cls.DomainName,
-                                           cls.AcctType)
\ No newline at end of file
+    marvinObj.getTestClient().identifier = idenifier
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/152c2260/tools/pytest-xdist/xdist/dsession.py
----------------------------------------------------------------------
diff --git a/tools/pytest-xdist/xdist/dsession.py b/tools/pytest-xdist/xdist/dsession.py
index 741c30b..1d6b17a 100644
--- a/tools/pytest-xdist/xdist/dsession.py
+++ b/tools/pytest-xdist/xdist/dsession.py
@@ -84,7 +84,8 @@ class LoadScheduling:
         if not self.collection_is_completed:
             return False
         for pending in self.node2pending.values():
-            self.log("pending " + str(pending))
+            for p in pending:
+                self.log("pending item: " + self.collection[p])
             if len(pending) >= 2:
                 return False
         return True
@@ -97,7 +98,6 @@ class LoadScheduling:
             self.collection_is_completed = True
 
     def remove_item(self, node, item_index, duration=0):
-        self.log("remove item" + str(item_index))
         self.node2pending[node].remove(item_index)
         self.check_schedule(node, duration=duration)
 
@@ -106,7 +106,6 @@ class LoadScheduling:
 
     def remove_node(self, node):
         self.nodes.remove(node)
-        self.log("remove node, pop up")
         pending = self.node2pending.pop(node)
         if not pending:
             return

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/152c2260/tools/pytest-xdist/xdist/plugin.py
----------------------------------------------------------------------
diff --git a/tools/pytest-xdist/xdist/plugin.py b/tools/pytest-xdist/xdist/plugin.py
index bc32104..98dfe77 100644
--- a/tools/pytest-xdist/xdist/plugin.py
+++ b/tools/pytest-xdist/xdist/plugin.py
@@ -7,7 +7,7 @@ def pytest_addoption(parser):
            action="store_true", dest="looponfail", default=False,
            help="run tests in subprocess, wait for modified files "
                 "and re-run failing test set until all pass.")
-    group._addoption('-n', dest="numprocesses", metavar="numprocesses",
+    group._addoption('-n', dest="numprocesses", metavar="numprocesses", default=2,
            action="store", type="int",
            help="shortcut for '--dist=load --tx=NUM*popen'")
     group.addoption('--boxed',

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/152c2260/tools/pytest-xdist/xdist/remote.py
----------------------------------------------------------------------
diff --git a/tools/pytest-xdist/xdist/remote.py b/tools/pytest-xdist/xdist/remote.py
index b360658..55c1610 100644
--- a/tools/pytest-xdist/xdist/remote.py
+++ b/tools/pytest-xdist/xdist/remote.py
@@ -74,13 +74,15 @@ class SlaveInteractor:
     def pytest_collection_finish(self, session):
         units = []
         for item in session.items:
-            if item.instance is None:
+            if item.instance is None and item.cls is None:
                 units.append(item.nodeid)
-            else:
+            elif item.instance is not None:
                 instance = item.instance
                 name = instance.__module__ + ":" + instance.__class__.__name__
                 units.append(name)
-
+            else:
+                name = str(item.cls)
+                units.append(name)
         self.sendevent("collectionfinish",
             topdir=str(session.fspath),
             ids=units)