Explorar el Código

Make mock tests run faster.

nuwan_ag hace 10 años
padre
commit
bd50dce42a

+ 7 - 7
cloudbridge/providers/base.py

@@ -102,9 +102,9 @@ class BaseObjectLifeCycleMixin(ObjectLifeCycleMixin):
                  interval=5):
         assert timeout > 0
         assert timeout > interval
-        assert interval > 0
 
-        for time_left in range(timeout, 0, -interval):
+        end_time = time.time() + timeout
+        while True:
             if self.state in target_states:
                 return True
             elif self.state in terminal_states:
@@ -117,15 +117,15 @@ class BaseObjectLifeCycleMixin(ObjectLifeCycleMixin):
                     " to reach target state(s): {3}...".format(
                         self,
                         self.state,
-                        time_left,
+                        int(end_time - time.time()),
                         target_states))
                 time.sleep(interval)
+                if time.time() > end_time:
+                    raise WaitStateException(
+                        "Waited too long for object: {0} to become ready. It's"
+                        " still in state: {1}".format(self, self.state))
             self.refresh()
 
-        raise WaitStateException("Waited too long for object: {0} to become"
-                                 " ready. It's still  in state: {1}".format(
-                                     self, self.state))
-
     def wait_till_ready(self, timeout=600, interval=5):
         self.wait_for(
             self.ready_states,

+ 1 - 1
test/helpers.py

@@ -6,7 +6,7 @@ from six import reraise
 
 from cloudbridge.providers.factory import CloudProviderFactory
 
-TEST_WAIT_INTERVAL = 1
+TEST_WAIT_INTERVAL = 0
 
 
 @contextmanager

+ 12 - 8
test/test_provider_block_store_service.py

@@ -23,7 +23,7 @@ class ProviderBlockStoreServiceTestCase(ProviderTestBase):
             1,
             helpers.get_provider_test_data(self.provider, "placement"))
         with helpers.exception_action(lambda: test_vol.delete()):
-            test_vol.wait_till_ready()
+            test_vol.wait_till_ready(interval=helpers.TEST_WAIT_INTERVAL)
             volumes = self.provider.block_store.volumes.list_volumes()
             found_volumes = [vol for vol in volumes if vol.name == name]
             self.assertTrue(
@@ -33,7 +33,8 @@ class ProviderBlockStoreServiceTestCase(ProviderTestBase):
             test_vol.delete()
             test_vol.wait_for(
                 [VolumeState.DELETED, VolumeState.UNKNOWN],
-                terminal_states=[VolumeState.ERROR])
+                terminal_states=[VolumeState.ERROR],
+                interval=helpers.TEST_WAIT_INTERVAL)
             volumes = self.provider.block_store.volumes.list_volumes()
             found_volumes = [vol for vol in volumes if vol.name == name]
             self.assertTrue(
@@ -54,15 +55,17 @@ class ProviderBlockStoreServiceTestCase(ProviderTestBase):
             test_vol = self.provider.block_store.volumes.create_volume(
                 name, 1, test_instance.placement_zone)
             with helpers.exception_action(lambda: test_vol.delete()):
-                test_vol.wait_till_ready()
+                test_vol.wait_till_ready(interval=helpers.TEST_WAIT_INTERVAL)
                 test_vol.attach(test_instance, '/dev/sda2')
                 test_vol.wait_for(
                     [VolumeState.IN_USE],
-                    terminal_states=[VolumeState.ERROR, VolumeState.DELETED])
+                    terminal_states=[VolumeState.ERROR, VolumeState.DELETED],
+                    interval=helpers.TEST_WAIT_INTERVAL)
                 test_vol.detach()
                 test_vol.wait_for(
                     [VolumeState.AVAILABLE],
-                    terminal_states=[VolumeState.ERROR, VolumeState.DELETED])
+                    terminal_states=[VolumeState.ERROR, VolumeState.DELETED],
+                    interval=helpers.TEST_WAIT_INTERVAL)
                 test_vol.delete()
 
     def test_crud_snapshot(self):
@@ -77,7 +80,7 @@ class ProviderBlockStoreServiceTestCase(ProviderTestBase):
             1,
             helpers.get_provider_test_data(self.provider, "placement"))
         with helpers.exception_action(lambda: test_vol.delete()):
-            test_vol.wait_till_ready()
+            test_vol.wait_till_ready(interval=helpers.TEST_WAIT_INTERVAL)
             snap_name = "CBSnapshot-{0}".format(name)
             test_snap = test_vol.create_snapshot(name=snap_name,
                                                  description=snap_name)
@@ -86,10 +89,11 @@ class ProviderBlockStoreServiceTestCase(ProviderTestBase):
                 snap.delete()
                 snap.wait_for(
                     [SnapshotState.UNKNOWN],
-                    terminal_states=[SnapshotState.ERROR])
+                    terminal_states=[SnapshotState.ERROR],
+                    interval=helpers.TEST_WAIT_INTERVAL)
 
             with helpers.exception_action(lambda: cleanup_snap(test_snap)):
-                test_snap.wait_till_ready()
+                test_snap.wait_till_ready(interval=helpers.TEST_WAIT_INTERVAL)
                 snaps = self.provider.block_store.snapshots.list_snapshots()
                 found_snaps = [snap for snap in snaps
                                if snap.name == snap_name]

+ 3 - 2
test/test_provider_compute_service.py

@@ -17,7 +17,7 @@ class ProviderComputeServiceTestCase(ProviderTestBase):
             uuid.uuid4())
         inst = helpers.create_test_instance(self.provider, name)
         with helpers.exception_action(lambda: inst.terminate()):
-            inst.wait_till_ready()
+            inst.wait_till_ready(interval=helpers.TEST_WAIT_INTERVAL)
             all_instances = self.provider.compute.list_instances()
             found_instances = [i for i in all_instances if i.name == name]
             self.assertTrue(
@@ -27,7 +27,8 @@ class ProviderComputeServiceTestCase(ProviderTestBase):
             inst.terminate()
             inst.wait_for(
                 [InstanceState.TERMINATED, InstanceState.UNKNOWN],
-                terminal_states=[InstanceState.ERROR])
+                terminal_states=[InstanceState.ERROR],
+                interval=helpers.TEST_WAIT_INTERVAL)
             deleted_inst = self.provider.compute.get_instance(inst.instance_id)
             self.assertTrue(
                 deleted_inst is None or deleted_inst.state in (

+ 3 - 2
test/test_provider_image_service.py

@@ -24,7 +24,7 @@ class ProviderImageServiceTestCase(ProviderTestBase):
             name = "CBUnitTestListImg-{0}".format(uuid.uuid4())
             test_image = test_instance.create_image(name)
             with helpers.exception_action(lambda: test_image.delete()):
-                test_image.wait_till_ready()
+                test_image.wait_till_ready(interval=helpers.TEST_WAIT_INTERVAL)
                 images = self.provider.images.list_images()
                 found_images = [image for image in images
                                 if image.name == name]
@@ -35,7 +35,8 @@ class ProviderImageServiceTestCase(ProviderTestBase):
                 test_image.delete()
                 test_image.wait_for(
                     [MachineImageState.UNKNOWN],
-                    terminal_states=[MachineImageState.ERROR])
+                    terminal_states=[MachineImageState.ERROR],
+                    interval=helpers.TEST_WAIT_INTERVAL)
             # TODO: Images take a long time to deregister on EC2. Needs
             # investigation
 #                 images = self.provider.images.list_images()