Пример #1
0
        public void Connect()
        {
            var client = new CachedHttpClient(this.server.HttpClient);
            var result = client.GetAsync(IndexUri).Result;

            result.StatusCode.Should().Be(HttpStatusCode.OK);
        }
Пример #2
0
        public void CachedConnectMultipleUris()
        {
            CachedHttpClient.Cache.Remove(IndexPath);

            var mockCache = new Mock <ObjectCache>();

            //cache.Set(new CacheItem(requestUri, result.Content.ToString()), new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.UtcNow.Add(result.Headers.CacheControl.MaxAge.Value) });
            mockCache.Setup(mc => mc.Contains(IndexPath, null)).Returns(false);
            mockCache.Setup(mc => mc.Contains("/HelloWorld", null)).Returns(false);

            mockCache.Setup(m => m.Set(It.IsAny <CacheItem>(), It.Is <CacheItemPolicy>(cip => cip.AbsoluteExpiration <DateTimeOffset.UtcNow.AddMilliseconds(1001) && cip.AbsoluteExpiration> DateTimeOffset.UtcNow.AddMilliseconds(900)))).Verifiable("Didn't add to cache");
            It.Is <CacheItemPolicy>(cip => cip.AbsoluteExpiration <DateTimeOffset.UtcNow.AddMilliseconds(1001) && cip.AbsoluteExpiration> DateTimeOffset.UtcNow.AddMilliseconds(900));
            var client = new CachedHttpClient(this.server.HttpClient);
            var result = client.GetAsync(IndexUri).Result;

            result.StatusCode.Should().Be(HttpStatusCode.OK);
            result.WasCached.Should().BeFalse("should not yet be cached.");

            var result2 = client.GetAsync(new Uri("/HelloWorld", UriKind.Relative)).Result;

            result2.StatusCode.Should().Be(HttpStatusCode.OK, "Should be ok");
            result2.WasCached.Should().BeFalse("should not be cached");

            CachedHttpClient.Cache.GetCount().Should().Be(2);
            CachedHttpClient.Cache[IndexPath].Should().NotBeNull("Should contain entry");
            CachedHttpClient.Cache["/HelloWorld"].Should().NotBeNull("Should contain entry");
        }
Пример #3
0
 public void DoNotCacheMaxAgeOfZero()
 {
     using (var testServer = SingleApiServer(0))
     {
         var mockCache = new Mock <ObjectCache>(MockBehavior.Strict);
         mockCache.Setup(m => m.Contains(IndexPath, null)).Returns(false);
         var client = new CachedHttpClient(testServer.HttpClient, mockCache.Object);
         var result = client.GetAsync(IndexUri).Result;
         result.StatusCode.Should().Be(HttpStatusCode.OK);
         result.WasCached.Should().BeFalse("should not be cached if time = 0.");
     }
 }
Пример #4
0
        public async Task CachedHttpClientAttemptsCacheHit()
        {
            var            mockedCache = new Mock <IRequestCache>();
            PostcodeDetail mockOutput;

            mockedCache.Setup(c => c.TryGetResponse(It.IsAny <string>(), out mockOutput))
            .Returns(false);

            var client = new CachedHttpClient(mockedCache.Object);
            await client.GetAsync <PostcodeDetail>("http://uk-postcodes.com/postcode/SW1A0AA.json");

            mockedCache.Verify(c => c.TryGetResponse(It.IsAny <string>(), out mockOutput), Times.AtLeastOnce);
        }
Пример #5
0
        public void CachedConnect()
        {
            CachedHttpClient.Cache.Remove(IndexPath);

            var client = new CachedHttpClient(this.server.HttpClient);
            var result = client.GetAsync(IndexUri).Result;
            result.StatusCode.Should().Be(HttpStatusCode.OK);
            result.WasCached.Should().BeFalse("should not yet be cached.");

            CachedHttpClient.Cache.GetCount().Should().Be(1);
            CachedHttpClient.Cache[IndexPath].Should().NotBeNull("Should contain entry");

            var result2 = client.GetAsync(IndexUri).Result;
            result2.StatusCode.Should().Be(HttpStatusCode.OK, "Should be ok");
            result2.WasCached.Should().BeTrue("should be cached");
        }
Пример #6
0
        public void CachedConnect()
        {
            CachedHttpClient.Cache.Remove(IndexPath);

            var client = new CachedHttpClient(this.server.HttpClient);
            var result = client.GetAsync(IndexUri).Result;

            result.StatusCode.Should().Be(HttpStatusCode.OK);
            result.WasCached.Should().BeFalse("should not yet be cached.");

            CachedHttpClient.Cache.GetCount().Should().Be(1);
            CachedHttpClient.Cache[IndexPath].Should().NotBeNull("Should contain entry");

            var result2 = client.GetAsync(IndexUri).Result;

            result2.StatusCode.Should().Be(HttpStatusCode.OK, "Should be ok");
            result2.WasCached.Should().BeTrue("should be cached");
        }
Пример #7
0
        public void PutClearsCache()
        {
            var mockCache = new Mock <ObjectCache>(MockBehavior.Strict);

            //cache.Set(new CacheItem(requestUri, result.Content.ToString()), new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.UtcNow.Add(result.Headers.CacheControl.MaxAge.Value) });
            mockCache.Setup(mc => mc.Contains(IndexPath, null)).Returns(false);
            mockCache.Setup(m => m.Set(It.IsAny <CacheItem>(), It.Is <CacheItemPolicy>(cip => cip.AbsoluteExpiration <DateTimeOffset.UtcNow.AddMilliseconds(1001) && cip.AbsoluteExpiration> DateTimeOffset.UtcNow.AddMilliseconds(900)))).Verifiable("Didn't add to cache");
            mockCache.Setup(m => m.Remove(IndexPath, null)).Returns(null).Verifiable("didn't delete from cache");

            using (var testServer = SingleApiServer(1))
            {
                var client = new CachedHttpClient(testServer.HttpClient, mockCache.Object);
                var result = client.GetAsync(IndexUri).Result;
                result.StatusCode.Should().Be(HttpStatusCode.OK);
                result.WasCached.Should().BeFalse("should not yet be cached.");
                var result2 = client.PutAsync(IndexUri, new StringContent("HI")).Result;
                mockCache.Verify();
            }
        }
Пример #8
0
        public async Task <IHentaiInfoModel> GetInfoAsync(string url)
        {
            var html = await CachedHttpClient.Method(t => t.GetStringAsync(url))
                       .ExpireAfter(TimeSpan.FromDays(1))
                       .GetValueAsync();

            var model = new EHentaiInfoModel
            {
                Title = TitleRegex.Match(html).Value,
                Id    = UrlRegex.Match(url).Groups["id"].Value,
                Cover = await GetCoverAsync(html)
            };

            foreach (var pair in await ExtractTagsAsync(html))
            {
                model.Tags.Add(pair);
            }

            return(model);
        }
Пример #9
0
        public async Task <IHentaiInfoModel> GetInfoAsync(string url)
        {
            var html = await CachedHttpClient.Method(t => t.GetStringAsync(url))
                       .ExpireAfter(TimeSpan.FromDays(1))
                       .GetValueAsync();

            var htmlParser = BrowsingContext.New();
            var document   = await htmlParser.OpenAsync(req => req.Content(html));

            var model = new NHentaiInfoModel
            {
                Title = string.Join("", document.QuerySelector("h2.title").Children.Select(t => t.Text())),
                Id    = UrlRegex.Match(url).Groups["id"].Value,
                Cover = await GetCoverAsync(html)
            };

            foreach (var pair in await ExtractTagsAsync(html))
            {
                model.Tags.Add(pair);
            }

            return(model);
        }
Пример #10
0
        public void CachedConnectRespectsCacheControl()
        {
            using (var testServer = SingleApiServer(1))
            {
                var mockCache = new Mock <ObjectCache>(MockBehavior.Strict);
                //cache.Set(new CacheItem(requestUri, result.Content.ToString()), new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.UtcNow.Add(result.Headers.CacheControl.MaxAge.Value) });
                mockCache.Setup(mc => mc.Contains(IndexPath, null)).Returns(false);
                mockCache.Setup(m => m.Set(It.IsAny <CacheItem>(), It.Is <CacheItemPolicy>(cip => cip.AbsoluteExpiration <DateTimeOffset.UtcNow.AddMilliseconds(1001) && cip.AbsoluteExpiration> DateTimeOffset.UtcNow.AddMilliseconds(900)))).Verifiable("Didn't add to cache");

                var client = new CachedHttpClient(testServer.HttpClient, mockCache.Object);
                var result = client.GetAsync(IndexUri).Result;
                result.StatusCode.Should().Be(HttpStatusCode.OK, "Should have succeeded on first request");
                result.WasCached.Should().BeFalse("should not yet be cached.");
                mockCache.Verify();

                mockCache.Setup(mc => mc.Contains(IndexPath, null)).Returns(true);
                mockCache.Setup(mc => mc[IndexPath]).Returns(null);

                client.GetAsync(IndexUri).Wait();
                result.StatusCode.Should().Be(HttpStatusCode.OK, "Should have succeeded on second request");
                result.WasCached.Should().BeFalse("should not yet be cached.");
            }
        }
Пример #11
0
        public async Task <(bool, string)> GetTranslationAsync(string row, string tag = null)
        {
            string url, target;

            if (tag == null)
            {
                url    = $"{DatabaseUrl}rows.md";
                target = row;
            }
            else
            {
                url    = $"{DatabaseUrl}{row}.md";
                target = tag;
            }

            string markdown;

            try
            {
                markdown = await CachedHttpClient.Method(t => t.GetStringAsync(url))
                           .ExpireAfter(TimeSpan.FromDays(1))
                           .GetValueAsync();
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Get translation failed");
                return(false, target.Replace("_", " "));
            }

            var regex = new Regex($@"\| {target.Replace("_", " ")} \| (?<translation>.+?) \|");
            var match = regex.Match(markdown);

            return(match.Success, match.Success
                ? MarkdownPicReplaceRegex.Replace(match.Groups["translation"].Value, "").Replace(@"\|", "|")
                : target.Replace("_", " "));
        }
Пример #12
0
        public void CachedConnectMultipleUris()
        {
            CachedHttpClient.Cache.Remove(IndexPath);

            var mockCache = new Mock<ObjectCache>();
            //cache.Set(new CacheItem(requestUri, result.Content.ToString()), new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.UtcNow.Add(result.Headers.CacheControl.MaxAge.Value) });
            mockCache.Setup(mc => mc.Contains(IndexPath, null)).Returns(false);
            mockCache.Setup(mc => mc.Contains("/HelloWorld", null)).Returns(false);

            mockCache.Setup(m => m.Set(It.IsAny<CacheItem>(), It.Is<CacheItemPolicy>(cip => cip.AbsoluteExpiration < DateTimeOffset.UtcNow.AddMilliseconds(1001) && cip.AbsoluteExpiration > DateTimeOffset.UtcNow.AddMilliseconds(900)))).Verifiable("Didn't add to cache");
            It.Is<CacheItemPolicy>(cip => cip.AbsoluteExpiration < DateTimeOffset.UtcNow.AddMilliseconds(1001) && cip.AbsoluteExpiration > DateTimeOffset.UtcNow.AddMilliseconds(900));
            var client = new CachedHttpClient(this.server.HttpClient);
            var result = client.GetAsync(IndexUri).Result;
            result.StatusCode.Should().Be(HttpStatusCode.OK);
            result.WasCached.Should().BeFalse("should not yet be cached.");

            var result2 = client.GetAsync(new Uri("/HelloWorld", UriKind.Relative)).Result;
            result2.StatusCode.Should().Be(HttpStatusCode.OK, "Should be ok");
            result2.WasCached.Should().BeFalse("should not be cached");

            CachedHttpClient.Cache.GetCount().Should().Be(2);
            CachedHttpClient.Cache[IndexPath].Should().NotBeNull("Should contain entry");
            CachedHttpClient.Cache["/HelloWorld"].Should().NotBeNull("Should contain entry");
        }
Пример #13
0
        public void CachedConnectRespectsCacheControl()
        {
            using (var testServer = SingleApiServer(1))
            {

                var mockCache = new Mock<ObjectCache>(MockBehavior.Strict);
                //cache.Set(new CacheItem(requestUri, result.Content.ToString()), new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.UtcNow.Add(result.Headers.CacheControl.MaxAge.Value) });
                mockCache.Setup(mc => mc.Contains(IndexPath, null)).Returns(false);
                mockCache.Setup(m => m.Set(It.IsAny<CacheItem>(), It.Is<CacheItemPolicy>(cip => cip.AbsoluteExpiration < DateTimeOffset.UtcNow.AddMilliseconds(1001)&& cip.AbsoluteExpiration > DateTimeOffset.UtcNow.AddMilliseconds(900)))).Verifiable("Didn't add to cache");

                var client = new CachedHttpClient(testServer.HttpClient, mockCache.Object);
                var result = client.GetAsync(IndexUri).Result;
                result.StatusCode.Should().Be(HttpStatusCode.OK, "Should have succeeded on first request");
                result.WasCached.Should().BeFalse("should not yet be cached.");
                mockCache.Verify();

                mockCache.Setup(mc => mc.Contains(IndexPath, null)).Returns(true);
                mockCache.Setup(mc => mc[IndexPath]).Returns(null);

                client.GetAsync(IndexUri).Wait();
                result.StatusCode.Should().Be(HttpStatusCode.OK, "Should have succeeded on second request");
                result.WasCached.Should().BeFalse("should not yet be cached.");
            }
        }
Пример #14
0
 public Postcodes(IRequestCache cache)
 {
     _client = new CachedHttpClient(cache);
 }
Пример #15
0
        public void PutClearsCache()
        {
            var mockCache = new Mock<ObjectCache>(MockBehavior.Strict);
            //cache.Set(new CacheItem(requestUri, result.Content.ToString()), new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.UtcNow.Add(result.Headers.CacheControl.MaxAge.Value) });
            mockCache.Setup(mc => mc.Contains(IndexPath, null)).Returns(false);
            mockCache.Setup(m => m.Set(It.IsAny<CacheItem>(), It.Is<CacheItemPolicy>(cip => cip.AbsoluteExpiration < DateTimeOffset.UtcNow.AddMilliseconds(1001) && cip.AbsoluteExpiration > DateTimeOffset.UtcNow.AddMilliseconds(900)))).Verifiable("Didn't add to cache");
            mockCache.Setup(m => m.Remove(IndexPath, null)).Returns(null).Verifiable("didn't delete from cache");

            using (var testServer = SingleApiServer(1))
            {
                var client = new CachedHttpClient(testServer.HttpClient, mockCache.Object);
                var result = client.GetAsync(IndexUri).Result;
                result.StatusCode.Should().Be(HttpStatusCode.OK);
                result.WasCached.Should().BeFalse("should not yet be cached.");
                var result2 = client.PutAsync(IndexUri, new StringContent("HI")).Result;
                mockCache.Verify();
            }
        }
Пример #16
0
 public void DoNotCacheMaxAgeOfZero()
 {
     using (var testServer = SingleApiServer(0))
     {
         var mockCache = new Mock<ObjectCache>(MockBehavior.Strict);
         mockCache.Setup(m => m.Contains(IndexPath, null)).Returns(false);
         var client = new CachedHttpClient(testServer.HttpClient, mockCache.Object);
         var result = client.GetAsync(IndexUri).Result;
         result.StatusCode.Should().Be(HttpStatusCode.OK);
         result.WasCached.Should().BeFalse("should not be cached if time = 0.");
     }
 }
Пример #17
0
 public void Connect()
 {
     var client = new CachedHttpClient(this.server.HttpClient);
     var result = client.GetAsync(IndexUri).Result;
     result.StatusCode.Should().Be(HttpStatusCode.OK);
 }