@@ -169,5 +169,142 @@ def test_process_terraform_logs_with_invalid_log_line(self, mock_open_file, mock
169169 mock_open_file .assert_called_once_with ('/fake/path/terraform_apply.log' , 'r' , encoding = 'utf-8' )
170170 mock_isfile .assert_called_once_with ("/fake/path/terraform_apply.log" )
171171
172+ @patch ("os.path.isfile" , return_value = True )
173+ @patch ("builtins.open" , new_callable = mock_open , read_data = (
174+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Creating...\n "
175+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... [10m0s elapsed]\n "
176+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... 20m0s elapsed]\n "
177+ "│ Error: Failed to create/update resource\n "
178+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Creating...\n "
179+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... [15m0s elapsed]\n "
180+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... 25m30s elapsed]\n "
181+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Creating...\n "
182+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... [5m0s elapsed]\n "
183+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... 30m45s elapsed]\n "
184+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Creation complete after 30m55s [id=/subscriptions/b8ceb4e5-f05b-4562-a9f5-14acb1f24219/resourceGroups/57202-578c08a2/providers/Microsoft.ContainerService/managedClusters/ccp-provisioning-H4]\n "
185+ ))
186+ def test_process_terraform_logs_with_failed_run_and_retries (self , mock_open_file , mock_isfile ):
187+ os .environ ["RUN_ID" ] = "9988776655"
188+
189+ results = process_terraform_logs (
190+ log_path = "/fake/path" ,
191+ _command_type = "apply" ,
192+ _scenario_type = "perf-eval" ,
193+ _scenario_name = "test_scenario_name" ,
194+ )
195+
196+ self .assertEqual (len (results ), 3 )
197+
198+ # First failed run - last elapsed was 20m0s = 1200s
199+ self .assertEqual (results [0 ]["module_name" ], "azapi[\" ccp\" ]" )
200+ self .assertEqual (results [0 ]["resource_name" ], "aks_cluster" )
201+ self .assertEqual (results [0 ]["time_taken_seconds" ], 1200 )
202+ self .assertEqual (results [0 ]["result" ], {"success" : False , "timed_out" : False })
203+
204+ # Second failed run (retry 1) - last elapsed was 25m30s = 1530s
205+ self .assertEqual (results [1 ]["module_name" ], "azapi[\" ccp\" ]" )
206+ self .assertEqual (results [1 ]["resource_name" ], "aks_cluster" )
207+ self .assertEqual (results [1 ]["time_taken_seconds" ], 1530 )
208+ self .assertEqual (results [1 ]["result" ], {"success" : False , "timed_out" : False })
209+
210+ # Third failed run (retry 2) - last elapsed was 30m45s = 1845s
211+ self .assertEqual (results [2 ]["module_name" ], "azapi[\" ccp\" ]" )
212+ self .assertEqual (results [2 ]["resource_name" ], "aks_cluster" )
213+ self .assertEqual (results [2 ]["time_taken_seconds" ], 1855 )
214+ self .assertEqual (results [2 ]["result" ], {"success" : True , "timed_out" : False })
215+
216+ mock_open_file .assert_called_once_with ('/fake/path/terraform_apply.log' , 'r' , encoding = 'utf-8' )
217+ mock_isfile .assert_called_once_with ("/fake/path/terraform_apply.log" )
218+
219+ @patch ("os.path.isfile" , return_value = True )
220+ @patch ("builtins.open" , new_callable = mock_open , read_data = (
221+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Creating...\n "
222+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... [5m0s elapsed]\n "
223+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... [10m0s elapsed]\n "
224+ "creating/updating Resource: (ResourceId\n "
225+ "/subscriptions/b8ceb4e5/resourceGroups/58296/providers/Microsoft.ContainerService/managedClusters/ccp-H8\n "
226+ "│ Error: creating/updating Resource: context deadline exceeded\n "
227+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Creating...\n "
228+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... [5m0s elapsed]\n "
229+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Creation complete after 8m30s [id=/subscriptions/b8ceb4e5/resourceGroups/58296/providers/Microsoft.ContainerService/managedClusters/ccp-H8]\n "
230+ ))
231+ def test_process_terraform_logs_with_timeout_and_retry (self , mock_open_file , mock_isfile ):
232+ os .environ ["RUN_ID" ] = "1234567890"
233+
234+ results = process_terraform_logs (
235+ log_path = "/fake/path" ,
236+ _command_type = "apply" ,
237+ _scenario_type = "perf-eval" ,
238+ _scenario_name = "test_scenario_name" ,
239+ )
240+
241+ self .assertEqual (len (results ), 2 )
242+
243+ # First run timed out
244+ self .assertEqual (results [0 ]["module_name" ], "azapi[\" ccp\" ]" )
245+ self .assertEqual (results [0 ]["resource_name" ], "aks_cluster" )
246+ self .assertEqual (results [0 ]["time_taken_seconds" ], 600 )
247+ self .assertEqual (results [0 ]["result" ], {"success" : False , "timed_out" : True })
248+
249+ # Retry succeeded
250+ self .assertEqual (results [1 ]["module_name" ], "azapi[\" ccp\" ]" )
251+ self .assertEqual (results [1 ]["resource_name" ], "aks_cluster" )
252+ self .assertEqual (results [1 ]["time_taken_seconds" ], 510 )
253+ self .assertEqual (results [1 ]["result" ], {"success" : True , "timed_out" : False })
254+
255+ mock_open_file .assert_called_once_with ('/fake/path/terraform_apply.log' , 'r' , encoding = 'utf-8' )
256+ mock_isfile .assert_called_once_with ("/fake/path/terraform_apply.log" )
257+
258+ @patch ("os.path.isfile" , return_value = True )
259+ @patch ("builtins.open" , new_callable = mock_open , read_data = (
260+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Creating...\n "
261+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... [5m0s elapsed]\n "
262+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... [10m0s elapsed]\n "
263+ "│ Error: Failed to create/update resource\n "
264+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Creating...\n "
265+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... [5m0s elapsed]\n "
266+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... [10m0s elapsed]\n "
267+ "│ Error: creating/updating Resource: context deadline exceeded\n "
268+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Creating...\n "
269+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... [5m0s elapsed]\n "
270+ "module.azapi[\" ccp\" ].azapi_resource.aks_cluster: Still creating... [10m0s elapsed]\n "
271+ "│ Error: creating/updating Resource: context deadline exceeded\n "
272+ ))
273+ def test_process_terraform_logs_with_all_retries_failed (self , mock_open_file , mock_isfile ):
274+ os .environ ["RUN_ID" ] = "1112223334"
275+
276+ results = process_terraform_logs (
277+ log_path = "/fake/path" ,
278+ _command_type = "apply" ,
279+ _scenario_type = "perf-eval" ,
280+ _scenario_name = "test_scenario_name" ,
281+ )
282+
283+ self .assertEqual (len (results ), 3 )
284+
285+ # First run failed with a non-timeout error
286+ self .assertEqual (results [0 ]["run_id" ], "1112223334" )
287+ self .assertEqual (results [0 ]["module_name" ], "azapi[\" ccp\" ]" )
288+ self .assertEqual (results [0 ]["resource_name" ], "aks_cluster" )
289+ self .assertEqual (results [0 ]["time_taken_seconds" ], 600 )
290+ self .assertEqual (results [0 ]["result" ], {"success" : False , "timed_out" : False })
291+
292+ # Second run timed out
293+ self .assertEqual (results [1 ]["run_id" ], "1112223334" )
294+ self .assertEqual (results [1 ]["module_name" ], "azapi[\" ccp\" ]" )
295+ self .assertEqual (results [1 ]["resource_name" ], "aks_cluster" )
296+ self .assertEqual (results [1 ]["time_taken_seconds" ], 600 )
297+ self .assertEqual (results [1 ]["result" ], {"success" : False , "timed_out" : True })
298+
299+ # Third run timed out
300+ self .assertEqual (results [2 ]["run_id" ], "1112223334" )
301+ self .assertEqual (results [2 ]["module_name" ], "azapi[\" ccp\" ]" )
302+ self .assertEqual (results [2 ]["resource_name" ], "aks_cluster" )
303+ self .assertEqual (results [2 ]["time_taken_seconds" ], 600 )
304+ self .assertEqual (results [2 ]["result" ], {"success" : False , "timed_out" : True })
305+
306+ mock_open_file .assert_called_once_with ('/fake/path/terraform_apply.log' , 'r' , encoding = 'utf-8' )
307+ mock_isfile .assert_called_once_with ("/fake/path/terraform_apply.log" )
308+
172309if __name__ == "__main__" :
173310 unittest .main ()
0 commit comments