コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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));
            }
        }
コード例 #4
0
        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");
        }