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