from pathlib import Path import re import unittest SCENARIO_DIR = Path(__file__).parents[1] / "scenario_testcases" SCENARIOS = ( "ng_regional_clusters.yaml", "ng_regional_clusters_alicloud.yaml", "ng_regional_sharedpools.yaml", "ng_regional_sharedpools_alicloud.yaml", ) class RegionalSharedPoolCleanupTest(unittest.TestCase): def test_delete_is_followed_by_bounded_absence_poll(self) -> None: for filename in SCENARIOS: with self.subTest(filename=filename): content = (SCENARIO_DIR / filename).read_text(encoding="utf-8") steps = re.findall( r"(?ms)^- operation_id: .*?(?=^- operation_id: |\Z)", content, ) operations = [ re.search( r"^- operation_id: (.+)$", step, re.MULTILINE, ).group(1) for step in steps ] delete_index = max( index for index, operation in enumerate(operations) if operation == "SharedPoolService_DeleteSharedPool" ) self.assertLess(delete_index + 1, len(steps)) poll_step = steps[delete_index + 1] self.assertEqual( operations[delete_index + 1], "SharedPoolService_WaitSharedPoolDeleted", ) self.assertIn('"method": "GET"', poll_step) self.assertIn('"path": "/sharedPools/{sharedPoolId}"', poll_step) self.assertIn('"sharedPoolId": "sharedpool_1"', poll_step) self.assertIn('"status_code": 404', poll_step) max_retries = int( re.search(r"^ max_retries: (\d+)$", poll_step, re.MULTILINE).group(1) ) delay_after = int( re.search(r"^ delay_after: (\d+)$", poll_step, re.MULTILINE).group(1) ) self.assertGreater(max_retries, 0) self.assertGreater(delay_after, 0) self.assertLessEqual(max_retries * delay_after, 1800) if __name__ == "__main__": unittest.main()