public void Suspend_RetriesTheSuspendWhenRequestStatusReturnsFailed() { using (SpinLoop.ForTests(i => { })) { var api = new ScriptedAzureManagementLowLevelApiFake(); var createCallCount = 0; var requestId = 12345; Action incrCallCount = () => { createCallCount++; api.NextRequestId = (++requestId).ToString(); }; api.Script.Add(incrCallCount); api.Script.Add(() => api.NextRequestStatus = AzureRequestStatus.InProgress); api.Script.Add(() => api.NextRequestStatus = AzureRequestStatus.Failed); api.Script.Add(incrCallCount); api.Script.Add(() => api.NextRequestStatus = AzureRequestStatus.Succeeded); var azureManagement = new AzureManagementApiWithRetries( api, 2, TimeSpan.FromMilliseconds(30000)); azureManagement.Suspend(FooUri); Assert.That(createCallCount, Is.EqualTo(2)); var expectedUri = FooUri.ToRequestUri(api.NextRequestId); Assert.That(api.LastCheckRequestStatusRequestUri, Is.EqualTo(expectedUri)); } }
public void Suspend_RetriesOnExpectedExceptionAndThrowsOnUnexpected() { using (SpinLoop.ForTests(i => { })) { var api = new ScriptedAzureManagementLowLevelApiFake(); api.Script.Add(() => { throw new UnhandledHttpException(); }); api.Script.Add(() => { throw new ArgumentException(); }); var azureManagement = new AzureManagementApiWithRetries( api, 2, TimeSpan.FromMilliseconds(30000)); Assert.That( () => azureManagement.Suspend(FooUri), Throws.ArgumentException); } }
public void Suspend_RetriesTheRightNumberOfTimesThenGivesUpAndThrowsIfException() { var sleepCount = 0; using (SpinLoop.ForTests(i => { sleepCount++; })) { var api = new ScriptedAzureManagementLowLevelApiFake(); api.Script.Add(() => { throw new UnhandledHttpException(); }); api.Script.Add(() => { throw new UnhandledHttpException(); }); api.Script.Add(() => { throw new UnhandledHttpException(); }); var azureManagement = new AzureManagementApiWithRetries( api, 2, TimeSpan.FromMilliseconds(30000)); Assert.That( () => azureManagement.Suspend(FooUri), Throws.TypeOf<MaxRetriesExceededException>().With.InnerException.TypeOf<UnhandledHttpException>()); Assert.That(sleepCount, Is.EqualTo(2)); } }
public void Suspend_CallsBeginSuspend() { var api = new ScriptedAzureManagementLowLevelApiFake(); var wasCalled = false; api.Script.Add(() => wasCalled = true); api.Script.Add(() => api.NextRequestStatus = AzureRequestStatus.Succeeded); var azureManagement = new AzureManagementApiWithRetries( api, 2, TimeSpan.FromMilliseconds(30000)); azureManagement.Suspend(FooUri); Assert.That(wasCalled, "was called"); Assert.That(api.BeginSuspendDeploymentUri, Is.EqualTo(FooUri), "expected URI"); }