public async Task ServiceTest() { var serviceInfo = new CalledServiceInfo { Name = "Service", Id = Guid.NewGuid(), Endpoint = "Endpoint", CircuitBreakerInfo = new CircuitBreakerInfo { ExceptionCount = 1, BreakDuration = TimeSpan.FromMilliseconds(1) }, Timeout = TimeSpan.FromMilliseconds(100) }; var httpClientResponse = new HttpClientResponse { HttpStatusCode = HttpStatusCode.NoContent, Response = "" }; var cacheRegion = "cacheRegion"; var cache = Substitute.For <ICache>(); var httpClientWrapper = Substitute.For <IHttpClientWrapper>(); var tokenService = Substitute.For <ITokenService>(); httpClientWrapper.PostAsync(serviceInfo.Endpoint, null, CancellationToken.None).ReturnsForAnyArgs(httpClientResponse); var sut = new CachedService(cache, httpClientWrapper, tokenService); ServiceResponse actual = await sut.CallService(serviceInfo, cacheRegion, CancellationToken.None, null); Assert.AreEqual(ServiceResponseStatus.Success, actual.Status); }
public async Task SemaphoreTest() { var cacheRegion = "cacheRegion"; var serviceInfo = new CalledServiceInfo { Name = "Service", Id = Guid.NewGuid(), Endpoint = "Endpoint", CircuitBreakerInfo = new CircuitBreakerInfo { ExceptionCount = 1, BreakDuration = TimeSpan.FromMilliseconds(1) }, Timeout = TimeSpan.FromMilliseconds(100) }; var httpClientResponse = new HttpClientResponse { HttpStatusCode = HttpStatusCode.NoContent, Response = "" }; var cache = new CacheMock(); var httpClientWrapper = Substitute.For <IHttpClientWrapper>(); var tokenService = Substitute.For <ITokenService>(); httpClientWrapper.PostAsync(serviceInfo.Endpoint, null, CancellationToken.None).ReturnsForAnyArgs(async callInfo => { await Task.Delay(20); return(httpClientResponse); }); var sut = new CachedService(cache, httpClientWrapper, tokenService); Task <ServiceResponse> task1 = Task.Run(async() => await sut.CallService(serviceInfo, cacheRegion, CancellationToken.None, null)); Task <ServiceResponse> task2 = Task.Run(async() => await sut.CallService(serviceInfo, cacheRegion, CancellationToken.None, null)); await Task.WhenAll(task1, task2); await httpClientWrapper.ReceivedWithAnyArgs(1).PostAsync(serviceInfo.Endpoint, null, CancellationToken.None); }