Add expect_op_status for wait_for_instance_status function.
We should wait until the instance’s status becomes healthy before sending api requests. Change-Id: I8f818b6278499ef420588b6bdcfd1734c5cf41d6
This commit is contained in:
parent
826cd69b85
commit
9122baa272
@ -237,7 +237,8 @@ class BaseTroveTest(test.BaseTestCase):
|
||||
|
||||
instance = cls.create_instance(create_user=cls.create_user)
|
||||
cls.instance_id = instance['id']
|
||||
cls.wait_for_instance_status(cls.instance_id)
|
||||
cls.wait_for_instance_status(cls.instance_id,
|
||||
expected_op_status=["HEALTHY"])
|
||||
cls.instance = cls.client.get_resource(
|
||||
"instances", cls.instance_id)['instance']
|
||||
cls.instance_ip = cls.get_instance_ip(cls.instance)
|
||||
@ -412,11 +413,13 @@ class BaseTroveTest(test.BaseTestCase):
|
||||
{"restart": {}},
|
||||
expected_status_code=202,
|
||||
need_response=False)
|
||||
cls.wait_for_instance_status(instance_id)
|
||||
cls.wait_for_instance_status(instance_id,
|
||||
expected_op_status=["HEALTHY"])
|
||||
|
||||
@classmethod
|
||||
def wait_for_instance_status(cls, id,
|
||||
expected_status=["HEALTHY", "ACTIVE"],
|
||||
expected_status=["ACTIVE"],
|
||||
expected_op_status=[],
|
||||
need_delete=False,
|
||||
timeout=CONF.database.database_build_timeout):
|
||||
def _wait():
|
||||
@ -431,7 +434,13 @@ class BaseTroveTest(test.BaseTestCase):
|
||||
|
||||
if cur_status in expected_status:
|
||||
LOG.info('Instance %s becomes %s', id, cur_status)
|
||||
raise loopingcall.LoopingCallDone()
|
||||
if expected_op_status:
|
||||
op_status = res["instance"]["operating_status"]
|
||||
if op_status in expected_op_status:
|
||||
raise loopingcall.LoopingCallDone()
|
||||
else:
|
||||
raise loopingcall.LoopingCallDone()
|
||||
|
||||
elif "ERROR" not in expected_status and cur_status == "ERROR":
|
||||
# If instance status goes to ERROR but is not expected, stop
|
||||
# waiting
|
||||
@ -475,6 +484,9 @@ class BaseTroveTest(test.BaseTestCase):
|
||||
if type(expected_status) != list:
|
||||
expected_status = [expected_status]
|
||||
|
||||
if type(expected_op_status) != list:
|
||||
expected_op_status = [expected_op_status]
|
||||
|
||||
if need_delete:
|
||||
# If resource already removed, return
|
||||
try:
|
||||
@ -633,7 +645,8 @@ class BaseTroveTest(test.BaseTestCase):
|
||||
f"mgmt/instances/{instance_id}/action",
|
||||
rebuild_req, expected_status_code=202,
|
||||
need_response=False)
|
||||
cls.wait_for_instance_status(instance_id)
|
||||
cls.wait_for_instance_status(instance_id,
|
||||
expected_op_status=["HEALTHY"])
|
||||
|
||||
@classmethod
|
||||
def create_config(cls, name, values, datastore, datastore_version):
|
||||
|
@ -67,7 +67,8 @@ class TestInstanceActionsBase(trove_base.BaseTroveTest):
|
||||
instance = self.create_instance(name=name,
|
||||
datastore_version=ds_version,
|
||||
create_user=self.create_user)
|
||||
self.wait_for_instance_status(instance['id'])
|
||||
self.wait_for_instance_status(instance['id'],
|
||||
expected_op_status=["HEALTHY"])
|
||||
instance = self.client.get_resource(
|
||||
"instances", instance['id'])['instance']
|
||||
instance_ip = self.get_instance_ip(instance)
|
||||
@ -83,7 +84,8 @@ class TestInstanceActionsBase(trove_base.BaseTroveTest):
|
||||
f"{new_version}")
|
||||
body = {"instance": {"datastore_version": new_version}}
|
||||
self.client.patch_resource('instances', instance['id'], body)
|
||||
self.wait_for_instance_status(instance['id'])
|
||||
self.wait_for_instance_status(instance['id'],
|
||||
expected_op_status=["HEALTHY"])
|
||||
|
||||
LOG.info(f"Getting database version on {instance_ip}")
|
||||
actual = self.get_db_version(instance_ip)
|
||||
@ -110,7 +112,8 @@ class TestInstanceActionsBase(trove_base.BaseTroveTest):
|
||||
self.client.create_resource(f"instances/{self.instance_id}/action",
|
||||
resize_flavor, expected_status_code=202,
|
||||
need_response=False)
|
||||
self.wait_for_instance_status(self.instance_id)
|
||||
self.wait_for_instance_status(self.instance_id,
|
||||
expected_op_status=["HEALTHY"])
|
||||
|
||||
# Verify Trove flavor
|
||||
ret = self.client.get_resource('instances', self.instance_id)
|
||||
@ -140,7 +143,8 @@ class TestInstanceActionsBase(trove_base.BaseTroveTest):
|
||||
self.client.create_resource(f"instances/{self.instance_id}/action",
|
||||
resize_volume, expected_status_code=202,
|
||||
need_response=False)
|
||||
self.wait_for_instance_status(self.instance_id)
|
||||
self.wait_for_instance_status(self.instance_id,
|
||||
expected_op_status=["HEALTHY"])
|
||||
|
||||
# Verify Trove volume
|
||||
ret = self.client.get_resource('instances', self.instance_id)
|
||||
|
@ -70,6 +70,7 @@ class TestBackupBase(trove_base.BaseTroveTest):
|
||||
)
|
||||
self.wait_for_instance_status(
|
||||
restore_instance['id'],
|
||||
expected_op_status=["HEALTHY"],
|
||||
timeout=CONF.database.database_restore_timeout)
|
||||
|
||||
if self.enable_root:
|
||||
@ -116,6 +117,7 @@ class TestBackupBase(trove_base.BaseTroveTest):
|
||||
)
|
||||
self.wait_for_instance_status(
|
||||
restore_instance['id'],
|
||||
expected_op_status=["HEALTHY"],
|
||||
timeout=CONF.database.database_restore_timeout)
|
||||
|
||||
if self.enable_root:
|
||||
|
@ -54,6 +54,7 @@ class TestReplicationBase(trove_base.BaseTroveTest):
|
||||
need_delete=True, expected_status='DELETED')
|
||||
self.wait_for_instance_status(
|
||||
replica1_id,
|
||||
expected_op_status=["HEALTHY"],
|
||||
timeout=CONF.database.database_build_timeout * 2)
|
||||
replica1 = self.client.get_resource(
|
||||
"instances", replica1_id)['instance']
|
||||
@ -108,6 +109,7 @@ class TestReplicationBase(trove_base.BaseTroveTest):
|
||||
need_delete=True, expected_status='DELETED')
|
||||
self.wait_for_instance_status(
|
||||
replica2_id,
|
||||
expected_op_status=["HEALTHY"],
|
||||
timeout=CONF.database.database_build_timeout * 2)
|
||||
replica2 = self.client.get_resource(
|
||||
"instances", replica2_id)['instance']
|
||||
@ -144,9 +146,12 @@ class TestReplicationBase(trove_base.BaseTroveTest):
|
||||
self.client.create_resource(f"instances/{self.instance_id}/action",
|
||||
req_body, expected_status_code=202,
|
||||
need_response=False)
|
||||
self.wait_for_instance_status(self.instance_id)
|
||||
self.wait_for_instance_status(replica1_id)
|
||||
self.wait_for_instance_status(replica2_id)
|
||||
self.wait_for_instance_status(self.instance_id,
|
||||
expected_op_status=["HEALTHY"])
|
||||
self.wait_for_instance_status(replica1_id,
|
||||
expected_op_status=["HEALTHY"])
|
||||
self.wait_for_instance_status(replica2_id,
|
||||
expected_op_status=["HEALTHY"])
|
||||
|
||||
# Verify the volumes of all the replicas are also resized to 2G
|
||||
replica1 = self.client.get_resource('instances', replica1_id)
|
||||
@ -162,7 +167,8 @@ class TestReplicationBase(trove_base.BaseTroveTest):
|
||||
self.client.create_resource(f"instances/{replica1_id}/action",
|
||||
promote_primary, expected_status_code=202,
|
||||
need_response=False)
|
||||
self.wait_for_instance_status(replica1_id)
|
||||
self.wait_for_instance_status(replica1_id,
|
||||
expected_op_status=["HEALTHY"])
|
||||
|
||||
# Make sure to delete replicas first for clean up, in case failure
|
||||
# happens when replica1 is still the primary.
|
||||
@ -203,7 +209,8 @@ class TestReplicationBase(trove_base.BaseTroveTest):
|
||||
}
|
||||
self.client.put_resource(f'/instances/{self.instance_id}',
|
||||
detach_replica)
|
||||
self.wait_for_instance_status(self.instance_id)
|
||||
self.wait_for_instance_status(self.instance_id,
|
||||
expected_op_status=["HEALTHY"])
|
||||
|
||||
# Verify original primary
|
||||
ret = self.client.get_resource('instances', self.instance_id)
|
||||
|
@ -41,7 +41,9 @@ class TestInstanceUpdateAccessBase(trove_base.BaseTroveTest):
|
||||
}
|
||||
}
|
||||
self.client.put_resource(f'instances/{self.instance_id}', body)
|
||||
self.wait_for_instance_status(self.instance_id, timeout=30)
|
||||
self.wait_for_instance_status(self.instance_id,
|
||||
expected_op_status=["HEALTHY"],
|
||||
timeout=30)
|
||||
|
||||
instance = self.client.get_resource(
|
||||
"instances", self.instance_id)['instance']
|
||||
@ -59,7 +61,9 @@ class TestInstanceUpdateAccessBase(trove_base.BaseTroveTest):
|
||||
}
|
||||
}
|
||||
self.client.put_resource(f'instances/{self.instance_id}', body)
|
||||
self.wait_for_instance_status(self.instance_id, timeout=30)
|
||||
self.wait_for_instance_status(self.instance_id,
|
||||
expected_op_status=["HEALTHY"],
|
||||
timeout=30)
|
||||
|
||||
@decorators.idempotent_id("c907cc80-36b4-11eb-b177-00224d6b7bc1")
|
||||
def test_instance_update_access(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user