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)); }
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)); }
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)); }