Sfoglia il codice sorgente

Changed tests to use nose in parallel mode for faster tests

Nuwan Goonasekera 8 anni fa
parent
commit
b310a28b37

+ 15 - 0
setup.cfg

@@ -0,0 +1,15 @@
+[coverage:run]
+branch = True
+source = cloudbridge
+omit =
+  cloudbridge/cloud/interfaces/*
+
+[nosetests]
+with-coverage=1
+cover-branches=1
+cover-package=cloudbridge
+processes=5
+process-timeout=2700
+match=^[Tt]est 
+# Don't capture stdout - print immediately
+nocapture=1

+ 1 - 0
setup.py

@@ -46,6 +46,7 @@ REQS_FULL = REQS_BASE + REQS_AWS + REQS_AZURE + REQS_OPENSTACK
 # httpretty is required with/for moto 1.0.0 or AWS tests fail
 REQS_DEV = ([
     'tox>=2.1.1',
+    'nose',
     # 'moto>=1.1.11',  # until https://github.com/spulec/moto/issues/1396
     'sphinx>=1.3.1',
     'pydevd',

+ 4 - 3
test/helpers/__init__.py

@@ -99,7 +99,7 @@ TEST_DATA_CONFIG = {
                            '6/resourceGroups/cloudbridge/providers/Microsoft.C'
                            'ompute/images/cb-test-image'),
         "vm_type":
-            os.environ.get('CB_VM_TYPE_AZURE', 'Basic_A0'),
+            os.environ.get('CB_VM_TYPE_AZURE', 'Basic_A2'),
     }
 }
 
@@ -152,8 +152,9 @@ def delete_test_gateway(network, gateway):
     """
     Delete the supplied network and gateway.
     """
-    gateway.delete()
-    network.delete()
+    with cleanup_action(lambda: network.delete()):
+        with cleanup_action(lambda: gateway.delete()):
+            pass
 
 
 def create_test_instance(

+ 2 - 0
test/test_block_store_service.py

@@ -17,6 +17,8 @@ import six
 
 class CloudBlockStoreServiceTestCase(ProviderTestBase):
 
+    _multiprocess_can_split_ = True
+
     @helpers.skipIfNoService(['storage.volumes'])
     def test_crud_volume(self):
         """

+ 2 - 0
test/test_cloud_factory.py

@@ -12,6 +12,8 @@ from cloudbridge.cloud.providers.aws.provider import MockAWSCloudProvider
 
 class CloudFactoryTestCase(unittest.TestCase):
 
+    _multiprocess_can_split_ = True
+
     def test_create_provider_valid(self):
         """
         Creating a provider with a known name should return

+ 2 - 0
test/test_cloud_helpers.py

@@ -17,6 +17,8 @@ class DummyResult(object):
 
 class CloudHelpersTestCase(ProviderTestBase):
 
+    _multiprocess_can_split_ = True
+
     def setUp(self):
         super(CloudHelpersTestCase, self).setUp()
         self.objects = [DummyResult(1, "One"),

+ 2 - 0
test/test_compute_service.py

@@ -16,6 +16,8 @@ import six
 
 class CloudComputeServiceTestCase(ProviderTestBase):
 
+    _multiprocess_can_split_ = True
+
     @helpers.skipIfNoService(['compute.instances', 'networking.networks'])
     def test_crud_instance(self):
         name = "cb_instcrud-{0}".format(helpers.get_uuid())

+ 2 - 0
test/test_image_service.py

@@ -8,6 +8,8 @@ from cloudbridge.cloud.interfaces.resources import MachineImage
 
 class CloudImageServiceTestCase(ProviderTestBase):
 
+    _multiprocess_can_split_ = True
+
     @helpers.skipIfNoService(['compute.images', 'networking.networks',
                               'compute.instances'])
     def test_create_and_list_image(self):

+ 2 - 0
test/test_interface.py

@@ -10,6 +10,8 @@ from cloudbridge.cloud.interfaces.exceptions import ProviderConnectionException
 
 class CloudInterfaceTestCase(ProviderTestBase):
 
+    _multiprocess_can_split_ = True
+
     def test_name_property(self):
         """
         Name should always return a value and should not raise an exception

+ 6 - 3
test/test_network_service.py

@@ -11,6 +11,8 @@ from cloudbridge.cloud.interfaces.resources import Subnet
 
 class CloudNetworkServiceTestCase(ProviderTestBase):
 
+    _multiprocess_can_split_ = True
+
     @helpers.skipIfNoService(['networking.networks'])
     def test_crud_network(self):
 
@@ -46,9 +48,10 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
                 % net.cidr_block)
 
             cidr = '10.0.1.0/24'
-            sn = net.create_subnet(name=subnet_name, cidr_block=cidr,
-                                   zone=helpers.get_provider_test_data(
-                                       self.provider, 'placement'))
+            sn = net.create_subnet(
+                name=subnet_name, cidr_block=cidr,
+                zone=helpers.get_provider_test_data(self.provider,
+                                                    'placement'))
             with helpers.cleanup_action(lambda: sn.delete()):
                 self.assertTrue(
                     sn in net.subnets,

+ 2 - 0
test/test_object_life_cycle.py

@@ -7,6 +7,8 @@ from cloudbridge.cloud.interfaces.exceptions import WaitStateException
 
 class CloudObjectLifeCycleTestCase(ProviderTestBase):
 
+    _multiprocess_can_split_ = True
+
     @helpers.skipIfNoService(['storage.volumes'])
     def test_object_life_cycle(self):
         """

+ 2 - 0
test/test_object_store_service.py

@@ -20,6 +20,8 @@ import requests
 
 class CloudObjectStoreServiceTestCase(ProviderTestBase):
 
+    _multiprocess_can_split_ = True
+
     @helpers.skipIfNoService(['storage.buckets'])
     def test_crud_bucket(self):
         """

+ 2 - 0
test/test_region_service.py

@@ -9,6 +9,8 @@ import six
 
 class CloudRegionServiceTestCase(ProviderTestBase):
 
+    _multiprocess_can_split_ = True
+
     @helpers.skipIfNoService(['compute.regions'])
     def test_get_and_list_regions(self):
         """

+ 2 - 0
test/test_security_service.py

@@ -13,6 +13,8 @@ from cloudbridge.cloud.interfaces.resources import VMFirewallRule
 
 class CloudSecurityServiceTestCase(ProviderTestBase):
 
+    _multiprocess_can_split_ = True
+
     @helpers.skipIfNoService(['security.key_pairs'])
     def test_crud_key_pair_service(self):
 

+ 2 - 0
test/test_vm_types_service.py

@@ -7,6 +7,8 @@ import six
 
 class CloudVMTypeServiceTestCase(ProviderTestBase):
 
+    _multiprocess_can_split_ = True
+
     @helpers.skipIfNoService(['compute.vm_types'])
     def test_vm_type_properties(self):
 

+ 3 - 1
tox.ini

@@ -16,7 +16,9 @@ envlist = {py27,py36,pypy}-{aws,azure,openstack}
 
 [testenv]
 commands = flake8 cloudbridge test setup.py
-           {envpython} -m coverage run --branch --source=cloudbridge --omit=cloudbridge/cloud/interfaces/* setup.py test {posargs}
+           # see setup.cfg for options sent to nosetests and coverage
+           {envpython} setup.py nosetests {posargs}
+           coverage combine
 setenv =
     MOTO_AMIS_PATH=./test/fixtures/custom_amis.json
     aws: CB_TEST_PROVIDER=aws