1717from gcloud import _helpers
1818from gcloud .environment_vars import TESTS_PROJECT
1919from gcloud .exceptions import NotFound
20+ from gcloud .exceptions import ServiceUnavailable
2021from gcloud import monitoring
2122
23+ from retry import RetryErrors
2224from system_test_utils import unique_resource_id
2325
26+ retry_404 = RetryErrors (NotFound )
27+ retry_503 = RetryErrors (ServiceUnavailable )
28+
2429
2530def setUpModule ():
2631 _helpers .PROJECT = TESTS_PROJECT
@@ -172,7 +177,8 @@ def test_create_and_delete_metric_descriptor(self):
172177 )
173178
174179 descriptor .create ()
175- descriptor .delete ()
180+ retry_404 (descriptor .delete )()
181+
176182 with self .assertRaises (NotFound ):
177183 descriptor .delete ()
178184
@@ -187,7 +193,7 @@ def setUp(self):
187193
188194 def tearDown (self ):
189195 for group in self .to_delete :
190- group .delete ()
196+ retry_404 ( group .delete ) ()
191197
192198 def test_create_group (self ):
193199 client = monitoring .Client ()
@@ -196,8 +202,10 @@ def test_create_group(self):
196202 filter_string = self .FILTER ,
197203 is_cluster = self .IS_CLUSTER ,
198204 )
199- group .create ()
205+
206+ retry_503 (group .create )()
200207 self .to_delete .append (group )
208+
201209 self .assertTrue (group .exists ())
202210
203211 def test_list_groups (self ):
@@ -209,8 +217,10 @@ def test_list_groups(self):
209217 )
210218 before_groups = client .list_groups ()
211219 before_names = set (group .name for group in before_groups )
212- new_group .create ()
220+
221+ retry_503 (new_group .create )()
213222 self .to_delete .append (new_group )
223+
214224 self .assertTrue (new_group .exists ())
215225 after_groups = client .list_groups ()
216226 after_names = set (group .name for group in after_groups )
@@ -224,8 +234,10 @@ def test_reload_group(self):
224234 filter_string = self .FILTER ,
225235 is_cluster = self .IS_CLUSTER ,
226236 )
227- group .create ()
237+
238+ retry_503 (group .create )()
228239 self .to_delete .append (group )
240+
229241 group .filter = 'resource.type = "aws_ec2_instance"'
230242 group .display_name = 'locally changed name'
231243 group .reload ()
@@ -242,7 +254,8 @@ def test_update_group(self):
242254 filter_string = self .FILTER ,
243255 is_cluster = self .IS_CLUSTER ,
244256 )
245- group .create ()
257+
258+ retry_503 (group .create )()
246259 self .to_delete .append (group )
247260
248261 group .filter = NEW_FILTER
@@ -260,7 +273,8 @@ def test_list_group_members(self):
260273 filter_string = self .FILTER ,
261274 is_cluster = self .IS_CLUSTER ,
262275 )
263- group .create ()
276+
277+ retry_503 (group .create )()
264278 self .to_delete .append (group )
265279
266280 for member in group .list_members ():
@@ -272,22 +286,27 @@ def test_group_hierarchy(self):
272286 display_name = 'Testing: Root group' ,
273287 filter_string = self .FILTER ,
274288 )
275- root_group .create ()
289+
290+ retry_503 (root_group .create )()
291+ self .to_delete .insert (0 , root_group )
276292
277293 middle_group = client .group (
278294 display_name = 'Testing: Middle group' ,
279295 filter_string = self .FILTER ,
280296 parent_id = root_group .id ,
281297 )
282- middle_group .create ()
298+
299+ retry_503 (middle_group .create )()
300+ self .to_delete .insert (0 , middle_group )
283301
284302 leaf_group = client .group (
285303 display_name = 'Testing: Leaf group' ,
286304 filter_string = self .FILTER ,
287305 parent_id = middle_group .id ,
288306 )
289- leaf_group .create ()
290- self .to_delete .extend ([leaf_group , middle_group , root_group ])
307+
308+ retry_503 (leaf_group .create )()
309+ self .to_delete .insert (0 , leaf_group )
291310
292311 # Test for parent.
293312 actual_parent = middle_group .fetch_parent ()
0 commit comments