예제 #1
0
        public void UrlBuilderProperlySignsFullyQualifiedUrls()
        {
            var test = new UrlBuilder("my-social-network.imgix.net", useHttps: true)
            {
                SignKey = "FOO123bar"
            };

            Assert.AreEqual("https://my-social-network.imgix.net/http%3A%2F%2Favatars.com%2Fjohn-smith.png?s=493a52f008c91416351f8b33d4883135", test.BuildUrl("/http%3A%2F%2Favatars.com%2Fjohn-smith.png"));
        }
        public void UrlBuilderSignsNestedPaths()
        {
            var test = new UrlBuilder("domain.imgix.net")
            {
                SignKey = SignKey
            };

            Assert.AreEqual(test.BuildUrl("test/gaiman.jpg"), "http://domain.imgix.net/test/gaiman.jpg?s=51033c27726f19c0f8229a1ed2dc8523");
        }
        public void UrlBuilderBuildsQueryStringUrlHttps()
        {
            var test = new UrlBuilder("domain.imgix.net", useHttps: true);

            test.Parameters["w"] = "500";
            test.Parameters["blur"] = "100";

            Assert.AreEqual(test.BuildUrl("gaiman.jpg"), "https://domain.imgix.net/gaiman.jpg?w=500&blur=100");
        }
예제 #4
0
        public void UrlBuilderAppendsQueryStringParameters()
        {
            var test = new UrlBuilder("my-social-network.imgix.net", useHttps: true);

            test.Parameters.Add("w", "400");
            test.Parameters.Add("h", "300");

            Assert.AreEqual("https://my-social-network.imgix.net/users/1.png?w=400&h=300", test.BuildUrl("/users/1.png"));
        }
예제 #5
0
        public void UrlBuilderProperlySignsFullyQualifiedUrlsWithParameters()
        {
            var test = new UrlBuilder("my-social-network.imgix.net", useHttps: true)
            {
                SignKey = "FOO123bar"
            };

            test.Parameters.Add("w", "400");
            test.Parameters.Add("h", "300");

            Assert.AreEqual("https://my-social-network.imgix.net/http%3A%2F%2Favatars.com%2Fjohn-smith.png?w=400&h=300&s=61ea1cc7add87653bb0695fe25f2b534", test.BuildUrl("/http%3A%2F%2Favatars.com%2Fjohn-smith.png"));
        }
        public void UrlBuilderSignsParameteredRequests()
        {
            var test = new UrlBuilder("domain.imgix.net")
            {
                SignKey = SignKey
            };

            test.Parameters.Add("w", "500");
            test.Parameters.Add("h", "1000");

            Assert.AreEqual(test.BuildUrl("gaiman.jpg"), "http://domain.imgix.net/gaiman.jpg?w=500&h=1000&s=fc4afbc39b6741560717142aeada876c");
        }
예제 #7
0
        public void Process(GetMediaStreamPipelineArgs args)
        {
            if (args.MediaData.Extension.Equals("PNG"))
            {
                var builder = new UrlBuilder("bensterrett.imgix.net")
                {
                    SignKey = WebConfigurationManager.AppSettings["imgixSecret"]
                };

                HttpContext.Current.Response.Redirect(builder.BuildUrl(HttpUtility.UrlEncode(args.MediaData.MediaItem.ID.ToString())));

                args.AbortPipeline();
            }
        }
        public void UrlBuilderUsesCRCShardingBydefault()
        {
            var test = new UrlBuilder("domain.imgix.net", useHttps: true);

            Assert.AreEqual(test.ShardStrategy, UrlBuilder.ShardStrategyType.CRC);
        }
        public void UrlBuilderWithMultipleDomainsPicksTheFirstWhenNoShardTypeSelected()
        {
            var domains = new[] { "domain.imgix.net", "domain2.imgix.net", "domain3.imgix.net" };

            var test = new UrlBuilder(domains)
            {
                ShardStrategy = UrlBuilder.ShardStrategyType.NONE
            };

            Assert.AreEqual(test.BuildUrl("gaiman.jpg"), "http://domain.imgix.net/gaiman.jpg");
        }
예제 #10
0
        public void UrlBuilderHandlesBasicPathsProperly()
        {
            var test = new UrlBuilder("my-social-network.imgix.net", useHttps: true);

            Assert.AreEqual("https://my-social-network.imgix.net/users/1.png", test.BuildUrl("/users/1.png"));
        }
예제 #11
0
        public void UrlBuilderSignsParameterlessRequests()
        {
            var test = new UrlBuilder("domain.imgix.net")
            {
                SignKey = SignKey
            };

            Assert.AreEqual(test.BuildUrl("gaiman.jpg"), "http://domain.imgix.net/gaiman.jpg?s=db6110637ad768e4b1d503cb96e6439a");
        }
예제 #12
0
        public void UrlBuilderProperlySignsSimplePathsWithParameters()
        {
            var test = new UrlBuilder("my-social-network.imgix.net", useHttps: true)
            {
                SignKey = "FOO123bar"
            };

            test.Parameters.Add("w", "400");
            test.Parameters.Add("h", "300");

            Assert.AreEqual("https://my-social-network.imgix.net/users/1.png?w=400&h=300&s=c7b86f666a832434dd38577e38cf86d1", test.BuildUrl("/users/1.png"));
        }
예제 #13
0
        public void UrlBuilderProperlyEncodesAbsolutePaths()
        {
            var test = new UrlBuilder("my-social-network.imgix.net", useHttps: true);

            Assert.AreEqual("https://my-social-network.imgix.net/http%3A%2F%2Favatars.com%2Fjohn-smith.png", test.BuildUrl("http://avatars.com/john-smith.png"));
        }
예제 #14
0
        public void UrlBuilderBuildsBasicUrlHttps()
        {
            var test = new UrlBuilder("domain.imgix.net", useHttps: true);

            Assert.AreEqual(test.BuildUrl("gaiman.jpg"), "https://domain.imgix.net/gaiman.jpg");
        }
예제 #15
0
        public void UrlBuilderWithMultipleDomainsSelectsServerByCRC()
        {
            var domains = new[] { "domain.imgix.net", "domain2.imgix.net", "domain3.imgix.net" };
            var crcs = new [] { "test1.png", "test2.png", "test3.png" }.Select(i => Convert.ToInt32(new Crc32().ComputeCrcHash(i) % domains.Length)).ToArray();

            var test = new UrlBuilder(domains)
            {
                ShardStrategy = UrlBuilder.ShardStrategyType.CRC
            };

            Assert.AreEqual(test.BuildUrl("test1.png"), String.Format("http://{0}/test1.png", domains[crcs[0]]));
            Assert.AreEqual(test.BuildUrl("test2.png"), String.Format("http://{0}/test2.png", domains[crcs[1]]));
            Assert.AreEqual(test.BuildUrl("test3.png"), String.Format("http://{0}/test3.png", domains[crcs[2]]));
        }
예제 #16
0
        public void UrlBuilderDoesnotMerelyAppend()
        {
            var test = new UrlBuilder("my-social-network.imgix.net", useHttps: true);

            Assert.AreNotEqual("https://my-social-network.imgix.net/http://avatars.com/john-smith.png", test.BuildUrl("http://avatars.com/john-smith.png"));
        }
예제 #17
0
        public void UrlBuilderWithMultipleDomainCyclesThroughDomains()
        {
            var domains = new[] {"domain.imgix.net", "domain2.imgix.net", "domain3.imgix.net"};

            var test = new UrlBuilder(domains)
            {
                ShardStrategy = UrlBuilder.ShardStrategyType.CYCLE
            };

            Assert.AreEqual(test.BuildUrl("gaiman.jpg"), "http://domain.imgix.net/gaiman.jpg");
            Assert.AreEqual(test.BuildUrl("gaiman.jpg"), "http://domain2.imgix.net/gaiman.jpg");
            Assert.AreEqual(test.BuildUrl("gaiman.jpg"), "http://domain3.imgix.net/gaiman.jpg");
            Assert.AreEqual(test.BuildUrl("gaiman.jpg"), "http://domain.imgix.net/gaiman.jpg");
        }
예제 #18
0
        public void UrlBuilderProperlySignsSimpleRequests()
        {
            var test = new UrlBuilder("my-social-network.imgix.net", useHttps: true)
            {
                SignKey = "FOO123bar"
            };

            Assert.AreEqual("https://my-social-network.imgix.net/users/1.png?s=6797c24146142d5b40bde3141fd3600c", test.BuildUrl("/users/1.png"));
        }