public void StartBackgroundServiceCallsTest() { Guid serviceGuid = Guid.NewGuid(); var serviceInfo = new DynamicServiceInfo { Id = serviceGuid, }; Guid[] serviceAndTokenIds = new[] { serviceGuid }; var cacheRegion = "region"; var serviceRepository = Substitute.For <IServiceRepository>(); var dynamicService = Substitute.For <IDynamicService>(); var cachedService = Substitute.For <ICachedService>(); var staticService = Substitute.For <IStaticService>(); var taskScheduler = new TaskSchedulerMock(); var cache = Substitute.For <ICache>(); serviceRepository.GetServicesAndTokens(serviceAndTokenIds).Returns(new[] { serviceInfo }); var sut = new ServiceBrokerService(serviceRepository, dynamicService, cachedService, staticService, taskScheduler, cache); sut.StartBackgroundServiceCalls(serviceAndTokenIds, cacheRegion, TimeSpan.FromSeconds(10)); dynamicService.ReceivedWithAnyArgs(1).CallService(serviceInfo, cacheRegion, CancellationToken.None, null); }
public void CallServiceFaultyServiceTest() { var serviceId = Guid.NewGuid(); var serviceAndTokenIds = new List <Guid> { serviceId }; var cacheRegion = "region"; var serviceRepository = Substitute.For <IServiceRepository>(); var dynamicService = Substitute.For <IDynamicService>(); var cachedService = Substitute.For <ICachedService>(); var staticService = Substitute.For <IStaticService>(); var taskScheduler = Substitute.For <ITaskScheduler>(); var cache = Substitute.For <ICache>(); serviceRepository.GetServicesAndTokens(serviceAndTokenIds).ReturnsForAnyArgs(new ServiceInfo[0]); var sut = new ServiceBrokerService(serviceRepository, dynamicService, cachedService, staticService, taskScheduler, cache); ServiceResponse actual = sut.CallService(serviceId, cacheRegion, TimeSpan.FromMilliseconds(10), new List <KeyValuePair <string, string> >()); serviceRepository.ReceivedWithAnyArgs(1).GetServicesAndTokens(serviceAndTokenIds); Assert.AreEqual(ServiceResponseStatus.Error, actual.Status); Assert.IsNull(actual.Value); }
public async Task CallServicesAsyncNullListTest() { var serviceRepository = Substitute.For <IServiceRepository>(); var dynamicService = Substitute.For <IDynamicService>(); var cachedService = Substitute.For <ICachedService>(); var staticService = Substitute.For <IStaticService>(); var taskScheduler = Substitute.For <ITaskScheduler>(); var cache = Substitute.For <ICache>(); var sut = new ServiceBrokerService(serviceRepository, dynamicService, cachedService, staticService, taskScheduler, cache); ServiceBrokerResponse actual = await sut.CallServicesAsync(null, "region", TimeSpan.Zero); Assert.IsNull(actual); }
public void CallServicesEmptyListTest() { var serviceRepository = Substitute.For <IServiceRepository>(); var dynamicService = Substitute.For <IDynamicService>(); var cachedService = Substitute.For <ICachedService>(); var staticService = Substitute.For <IStaticService>(); var taskScheduler = Substitute.For <ITaskScheduler>(); var cache = Substitute.For <ICache>(); var sut = new ServiceBrokerService(serviceRepository, dynamicService, cachedService, staticService, taskScheduler, cache); ServiceBrokerResponse actual = sut.CallServices(new Guid[0], "region", TimeSpan.Zero); Assert.IsNull(actual); }
public async Task CallServicesAsyncTimeoutServiceTest() { Guid serviceGuid = Guid.NewGuid(); var serviceInfo = new DynamicServiceInfo { Id = serviceGuid, }; Guid[] serviceAndTokenIds = new[] { serviceGuid }; var cacheRegion = "region"; var serviceRepository = Substitute.For <IServiceRepository>(); var dynamicService = Substitute.For <IDynamicService>(); var cachedService = Substitute.For <ICachedService>(); var staticService = Substitute.For <IStaticService>(); var taskScheduler = Substitute.For <ITaskScheduler>(); var cache = Substitute.For <ICache>(); serviceRepository.GetServicesAndTokens(serviceAndTokenIds).Returns(new[] { serviceInfo }); dynamicService.CallService(serviceInfo, cacheRegion, CancellationToken.None, null) .ReturnsForAnyArgs(Task.Run(async() => { await Task.Delay(10); return(new ServiceResponse()); })); var sut = new ServiceBrokerService(serviceRepository, dynamicService, cachedService, staticService, taskScheduler, cache); ServiceBrokerResponse actual = await sut.CallServicesAsync(serviceAndTokenIds, cacheRegion, TimeSpan.Zero); serviceRepository.Received(1).GetServicesAndTokens(serviceAndTokenIds); Assert.AreEqual(1, actual.ServiceResponses.Count()); ServiceResponse dynamicServiceResponse = actual.ServiceResponses.First(); Assert.AreEqual(ServiceResponseStatus.Timeout, dynamicServiceResponse.Status); Assert.IsNull(dynamicServiceResponse.Value); Assert.IsFalse(dynamicServiceResponse.TokenResponses.Any()); }
public void CallServicesCachedServiceTest() { Guid serviceGuid = Guid.NewGuid(); var serviceInfo = new CachedServiceInfo { Id = serviceGuid, }; var serviceAndTokenIds = new List <Guid> { serviceGuid }; var cacheRegion = "region"; var serviceResponse = "Service response"; var serviceRepository = Substitute.For <IServiceRepository>(); var dynamicService = Substitute.For <IDynamicService>(); var cachedService = Substitute.For <ICachedService>(); var staticService = Substitute.For <IStaticService>(); var taskScheduler = Substitute.For <ITaskScheduler>(); var cache = Substitute.For <ICache>(); serviceRepository.GetServicesAndTokens(serviceAndTokenIds).ReturnsForAnyArgs(new[] { serviceInfo }); cachedService.CallService(serviceInfo, cacheRegion, CancellationToken.None, null) .ReturnsForAnyArgs(Task.FromResult(new ServiceResponse { Value = serviceResponse })); var sut = new ServiceBrokerService(serviceRepository, dynamicService, cachedService, staticService, taskScheduler, cache); ServiceBrokerResponse actual = sut.CallServices(serviceAndTokenIds, cacheRegion, TimeSpan.FromMilliseconds(10)); serviceRepository.ReceivedWithAnyArgs(1).GetServicesAndTokens(serviceAndTokenIds); Assert.AreEqual(1, actual.ServiceResponses.Count()); ServiceResponse dynamicServiceResponse = actual.ServiceResponses.First(); Assert.AreEqual(ServiceResponseStatus.Success, dynamicServiceResponse.Status); Assert.AreEqual(serviceResponse, dynamicServiceResponse.Value); }
public void CallServiceDynamicServiceTest() { Guid serviceId = Guid.NewGuid(); var serviceInfo = new DynamicServiceInfo { Id = serviceId, }; var serviceAndTokenIds = new List <Guid> { serviceId }; var cacheRegion = "region"; var serviceResponse = "Service response"; // ReSharper disable once CollectionNeverUpdated.Local var additionalParameters = new List <KeyValuePair <string, string> >(); var serviceRepository = Substitute.For <IServiceRepository>(); var dynamicService = Substitute.For <IDynamicService>(); var cachedService = Substitute.For <ICachedService>(); var staticService = Substitute.For <IStaticService>(); var taskScheduler = Substitute.For <ITaskScheduler>(); var cache = Substitute.For <ICache>(); serviceRepository.GetServicesAndTokens(serviceAndTokenIds).ReturnsForAnyArgs(new[] { serviceInfo }); dynamicService.CallService(serviceInfo, cacheRegion, CancellationToken.None, additionalParameters) .ReturnsForAnyArgs(Task.FromResult(new ServiceResponse { Value = serviceResponse })); var sut = new ServiceBrokerService(serviceRepository, dynamicService, cachedService, staticService, taskScheduler, cache); ServiceResponse actual = sut.CallService(serviceId, cacheRegion, TimeSpan.FromMilliseconds(10), additionalParameters); serviceRepository.ReceivedWithAnyArgs(1).GetServicesAndTokens(serviceAndTokenIds); dynamicService.ReceivedWithAnyArgs(1).CallService(serviceInfo, cacheRegion, CancellationToken.None, additionalParameters); Assert.AreEqual(ServiceResponseStatus.Success, actual.Status); Assert.AreEqual(serviceResponse, actual.Value); }
public void GetUserProfileTest() { Guid service1Id = Guid.NewGuid(); Guid service2Id = Guid.NewGuid(); Guid token1Id = Guid.NewGuid(); Guid token2Id = Guid.NewGuid(); var service1Name = "Service1"; var service2Name = "Service2"; var token1Name = "Token1"; var token2Name = "Token1"; var token1Content = "content"; var cachedService1Info = new CachedServiceInfo { Id = service1Id, Name = service1Name, Tokens = new [] { new XPathTokenInfo { Id = token1Id, Name = token1Name, XPath = "/node/text()" }, new XPathTokenInfo { Id = token2Id, Name = token2Name, XPath = "/node/text()" } } }; var cachedService2Info = new CachedServiceInfo { Id = service2Id, Name = service2Name, Tokens = new TokenInfo[0] }; var cacheRegion = "region"; var serviceCacheEntry = new CacheEntry <string> { Value = $"<node>{token1Content}</node>" }; var tokenCacheEntry = new CacheEntry <string> { Value = token1Content }; var serviceRepository = Substitute.For <IServiceRepository>(); var dynamicService = Substitute.For <IDynamicService>(); var cachedService = Substitute.For <ICachedService>(); var staticService = Substitute.For <IStaticService>(); var taskScheduler = Substitute.For <ITaskScheduler>(); var cache = Substitute.For <ICache>(); cache.Get <string>(cacheRegion, service1Id.ToString()).Returns(serviceCacheEntry); cache.Get <string>(cacheRegion, token1Id.ToString()).Returns(tokenCacheEntry); serviceRepository.GetCachedServices().ReturnsForAnyArgs(new[] { cachedService1Info, cachedService2Info }); var sut = new ServiceBrokerService(serviceRepository, dynamicService, cachedService, staticService, taskScheduler, cache); XDocument profile = sut.GetUserProfile(cacheRegion, false); Assert.IsNotNull(profile.Root); XNode serviceNode = profile.Root.FirstNode; Assert.IsNotNull(serviceNode); Assert.AreEqual(XmlNodeType.Element, serviceNode.NodeType); var serviceElement = serviceNode as XElement; Assert.IsNotNull(serviceElement); Assert.AreEqual(service1Name, serviceElement.Name); }
public void MultipleDynamicServiceTest() { Guid service1Id = Guid.NewGuid(); Guid service2Id = Guid.NewGuid(); Guid token1Id = Guid.NewGuid(); Guid token2Id = Guid.NewGuid(); var cacheRegion = "cacheRegion"; TimeSpan timeSpan = TimeSpan.FromMilliseconds(10); Guid[] serviceIds = new[] { service1Id, service2Id }; var endpoint1 = "/endpoint1"; var endpoint2 = "/endpoint2"; var innerText1 = "Text1"; var innerText2 = "Text2"; var service1Info = new DynamicServiceInfo { Id = service1Id, Endpoint = endpoint1, Timeout = TimeSpan.FromMilliseconds(5), CircuitBreakerInfo = new CircuitBreakerInfo { ExceptionCount = 1 }, Tokens = new[] { new XPathTokenInfo { Id = token1Id, Name = "XPath", XPath = "/content/text()" } } }; var service2Info = new DynamicServiceInfo { Id = service2Id, Endpoint = endpoint2, Timeout = TimeSpan.FromMilliseconds(5), CircuitBreakerInfo = new CircuitBreakerInfo { ExceptionCount = 1 }, Tokens = new[] { new XPathTokenInfo { Id = token2Id, Name = "XPath", XPath = "/content/text()" } } }; var httpClientResponse1 = new HttpClientResponse { HttpStatusCode = System.Net.HttpStatusCode.OK, Response = $"<content>{innerText1}</content>" }; var httpClientResponse2 = new HttpClientResponse { HttpStatusCode = System.Net.HttpStatusCode.OK, Response = $"<content>{innerText2}</content>" }; var cache = Substitute.For <ICache>(); var httpClientWrapper = Substitute.For <IHttpClientWrapper>(); var serviceRepository = Substitute.For <IServiceRepository>(); var taskScheduler = Substitute.For <ITaskScheduler>(); serviceRepository.GetServicesAndTokens(serviceIds).Returns(new[] { service1Info, service2Info }); httpClientWrapper.PostAsync(endpoint1, null, CancellationToken.None).ReturnsForAnyArgs(callInfo => { var endpointArg = callInfo.ArgAt <string>(0); if (endpointArg.Equals(endpoint1)) { return(httpClientResponse1); } if (endpointArg.Equals(endpoint2)) { return(httpClientResponse2); } return(null); }); var tokenService = new TokenService(cache); var dynamicService = new DynamicService(cache, httpClientWrapper, tokenService); var cachedService = new CachedService(cache, httpClientWrapper, tokenService); var staticService = new StaticService(cache, tokenService); var serviceBroker = new ServiceBrokerService(serviceRepository, dynamicService, cachedService, staticService, taskScheduler, cache); ServiceBrokerResponse actual = serviceBroker.CallServices(serviceIds, cacheRegion, timeSpan); Assert.IsNotNull(actual); Assert.IsNotNull(actual.ServiceResponses); Assert.IsTrue(actual.ServiceResponses.Any()); ServiceResponse serviceResponse1 = actual.ServiceResponses.First(); Assert.AreEqual(ServiceResponseStatus.Success, serviceResponse1.Status); Assert.AreEqual(httpClientResponse1.Response, serviceResponse1.Value); Assert.IsNotNull(serviceResponse1.TokenResponses); Assert.IsTrue(serviceResponse1.TokenResponses.Any()); TokenResponse tokenResponse1 = serviceResponse1.TokenResponses.First(); Assert.AreEqual(TokenResponseStatus.Found, tokenResponse1.Status); Assert.AreEqual(innerText1, tokenResponse1.Value); ServiceResponse serviceResponse2 = actual.ServiceResponses.Skip(1).First(); Assert.AreEqual(ServiceResponseStatus.Success, serviceResponse2.Status); Assert.AreEqual(httpClientResponse2.Response, serviceResponse2.Value); Assert.IsNotNull(serviceResponse1.TokenResponses); Assert.IsTrue(serviceResponse1.TokenResponses.Any()); TokenResponse tokenResponse2 = serviceResponse2.TokenResponses.First(); Assert.AreEqual(TokenResponseStatus.Found, tokenResponse2.Status); Assert.AreEqual(innerText2, tokenResponse2.Value); }
public void SingleCachedServiceTest() { Guid serviceId = Guid.NewGuid(); Guid tokenId = Guid.NewGuid(); var cacheRegion = "cacheRegion"; TimeSpan timeSpan = TimeSpan.FromMilliseconds(10); Guid[] serviceIds = new[] { serviceId }; var endpoint = "/"; var innerText = "Text"; var serviceInfo = new CachedServiceInfo { Id = serviceId, Endpoint = endpoint, Timeout = TimeSpan.FromMilliseconds(5), CircuitBreakerInfo = new CircuitBreakerInfo { ExceptionCount = 1 }, Tokens = new[] { new XPathTokenInfo { Id = tokenId, Name = "XPath", XPath = "/content/text()" } } }; var httpClientResponse = new HttpClientResponse { HttpStatusCode = System.Net.HttpStatusCode.OK, Response = $"<content>{innerText}</content>" }; var cache = new CacheMock(); var httpClientWrapper = Substitute.For <IHttpClientWrapper>(); var serviceRepository = Substitute.For <IServiceRepository>(); var taskScheduler = Substitute.For <ITaskScheduler>(); serviceRepository.GetServicesAndTokens(serviceIds).Returns(new[] { serviceInfo }); httpClientWrapper.PostAsync(endpoint, null, CancellationToken.None).ReturnsForAnyArgs(httpClientResponse); var tokenService = new TokenService(cache); var dynamicService = new DynamicService(cache, httpClientWrapper, tokenService); var cachedService = new CachedService(cache, httpClientWrapper, tokenService); var staticService = new StaticService(cache, tokenService); var serviceBroker = new ServiceBrokerService(serviceRepository, dynamicService, cachedService, staticService, taskScheduler, cache); ServiceBrokerResponse actual = serviceBroker.CallServices(serviceIds, cacheRegion, timeSpan); serviceBroker.CallServices(serviceIds, cacheRegion, timeSpan); httpClientWrapper.ReceivedWithAnyArgs(1).PostAsync(endpoint, null, CancellationToken.None); Assert.IsNotNull(actual); Assert.IsNotNull(actual.ServiceResponses); Assert.IsTrue(actual.ServiceResponses.Any()); ServiceResponse serviceResponse = actual.ServiceResponses.First(); Assert.AreEqual(ServiceResponseStatus.Success, serviceResponse.Status); Assert.AreEqual(httpClientResponse.Response, serviceResponse.Value); Assert.IsNotNull(serviceResponse.TokenResponses); Assert.IsTrue(serviceResponse.TokenResponses.Any()); TokenResponse tokenResponse = serviceResponse.TokenResponses.First(); Assert.AreEqual(TokenResponseStatus.Found, tokenResponse.Status); Assert.AreEqual(innerText, tokenResponse.Value); }