Ejemplo n.º 1
0
        public async Task TestThatNotAllExceptionsAreRetried()
        {
            string appId = "appId";

            var sequence = StubsUtils.Sequence <StubIUpdateBlobFactory.TryLockUpdateBlob_String_Delegate>()
                           .Twice(id => AsyncUtils.AsyncTaskThatThrows <IUpdateBlob>(new Exception()));
            var updateBlobFactoryStub = new StubIUpdateBlobFactory()
                                        .TryLockUpdateBlob(id => sequence.Next(appId));

            UpdateBlobFactoryRetryLockDecorator retryDecorator =
                new UpdateBlobFactoryRetryLockDecorator(updateBlobFactoryStub, new FixedInterval(1, TimeSpan.Zero));
            await
            Assert.ThrowsAsync <Exception>(async() => await retryDecorator.TryLockUpdateBlob(appId));
        }
Ejemplo n.º 2
0
        public async Task TestThatExceptionIsThrownIfMaxRetryCountIsReached()
        {
            string      appId      = "appId";
            IUpdateBlob updateBlob = new StubIUpdateBlob();

            var sequence = StubsUtils.Sequence <StubIUpdateBlobFactory.TryLockUpdateBlob_String_Delegate>()
                           .Twice(id => AsyncUtils.AsyncTaskThatThrows <IUpdateBlob>(new UpdateBlobUnavailableException()))
                           .Once(id => AsyncUtils.AsyncTaskWithResult(updateBlob));
            var updateBlobFactoryStub = new StubIUpdateBlobFactory()
                                        .TryLockUpdateBlob(id => sequence.Next(appId));

            UpdateBlobFactoryRetryLockDecorator retryDecorator =
                new UpdateBlobFactoryRetryLockDecorator(updateBlobFactoryStub, new FixedInterval(1, TimeSpan.Zero));
            await
            Assert.ThrowsAsync <UpdateBlobUnavailableException>(
                async() => await retryDecorator.TryLockUpdateBlob(appId));
        }
Ejemplo n.º 3
0
        public async Task TestSuccessfullRetry()
        {
            string      appId      = "appId";
            IUpdateBlob updateBlob = new StubIUpdateBlob();

            var sequence = StubsUtils.Sequence <StubIUpdateBlobFactory.TryLockUpdateBlob_String_Delegate>()
                           .Twice(id => AsyncUtils.AsyncTaskThatThrows <IUpdateBlob>(new UpdateBlobUnavailableException()))
                           .Once(id => AsyncUtils.AsyncTaskWithResult(updateBlob));
            var updateBlobFactoryStub = new StubIUpdateBlobFactory()
                                        .TryLockUpdateBlob(id => sequence.Next(appId));

            UpdateBlobFactoryRetryLockDecorator retryDecorator =
                new UpdateBlobFactoryRetryLockDecorator(updateBlobFactoryStub,
                                                        new FixedInterval(2, TimeSpan.Zero));

            Assert.Equal(updateBlob, await retryDecorator.TryLockUpdateBlob(appId));
        }