public void WillExcludeFilesWithNoKeys()
            {
                var testable = new TestableLocalDiskStore();

                testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("dir");
                var guid1 = Guid.Empty;
                var guid2 = Guid.NewGuid();
                var sig1  = Guid.Empty.RemoveDashes();
                var sig2  = Guid.NewGuid().RemoveDashes();

                testable.Mock <IUriBuilder>().Setup(x => x.BuildResourceUrl(guid1, sig1, typeof(CssResource))).Returns("url1");
                testable.Mock <IUriBuilder>().Setup(x => x.BuildResourceUrl(guid2, sig2, typeof(CssResource))).Returns("url2");
                var files = new List <DatedFileEntry>
                {
                    new DatedFileEntry(string.Format("dir\\somerandomname-{0}", new CssResource().FileName), DateTime.Now),
                    new DatedFileEntry(string.Format("dir\\{0}-{1}-{2}", guid2.RemoveDashes(), sig2, new CssResource().FileName), DateTime.Now),
                };

                testable.Mock <IFileWrapper>().Setup(x => x.GetDatedFiles("dir", "*RequestReduce*")).Returns(files);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(files[0].FileName.Replace("\\", "/"))).Returns(Guid.Empty);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(files[1].FileName.Replace("\\", "/"))).Returns(guid2);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(files[0].FileName.Replace("\\", "/"))).Returns(Guid.Empty.RemoveDashes());
                testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(files[1].FileName.Replace("\\", "/"))).Returns(sig2);

                var result = testable.ClassUnderTest.GetSavedUrls();

                Assert.Equal(1, result.Count);
                Assert.True(result[guid2] == "url2");
                testable.Dispose();
            }
            public void WillFlushAllKeysWhenPassedGuidIsEmpty()
            {
                var testable   = new TestableLocalDiskStore();
                var urlBuilder = new UriBuilder(testable.Mock <IRRConfiguration>().Object);

                testable.Inject(urlBuilder);
                var guid1 = Guid.NewGuid();
                var guid2 = Guid.NewGuid();

                testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/dir");
                testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\web\\dir");
                testable.Inject <IUriBuilder>(urlBuilder);
                var file1 = new DatedFileEntry(urlBuilder.BuildResourceUrl <CssResource>(guid1, new byte[] { 1 }).Replace("/dir", "c:\\dir").Replace('/', '\\'), DateTime.Now);
                var file2 = new DatedFileEntry(urlBuilder.BuildResourceUrl <CssResource>(guid2, new byte[] { 1 }).Replace("/dir", "c:\\dir").Replace('/', '\\'), DateTime.Now);

                testable.Mock <IFileWrapper>().Setup(x => x.GetDatedFiles("c:\\web\\dir", "*RequestReduce*")).Returns(new List <DatedFileEntry> {
                    file1, file2
                });
                testable.Mock <IFileWrapper>().Setup(x => x.GetFiles("c:\\web\\dir")).Returns(new string[] { file1.FileName, file2.FileName });

                testable.ClassUnderTest.Flush(Guid.Empty);

                testable.Mock <IFileWrapper>().Verify(x => x.RenameFile(file1.FileName, file1.FileName.Replace(guid1.RemoveDashes(), guid1.RemoveDashes() + "-Expired")));
                testable.Mock <IFileWrapper>().Verify(x => x.RenameFile(file2.FileName, file2.FileName.Replace(guid2.RemoveDashes(), guid2.RemoveDashes() + "-Expired")));
            }
            public void WillPullMostRecentActiveUrlPerKey()
            {
                var testable = new TestableLocalDiskStore();

                testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("dir");
                var guid1 = Guid.NewGuid();
                var guid2 = Guid.NewGuid();
                var sig1  = Guid.NewGuid().RemoveDashes();
                var sig2  = Guid.NewGuid().RemoveDashes();
                var sig3  = Guid.NewGuid().RemoveDashes();

                testable.Mock <IUriBuilder>().Setup(x => x.BuildResourceUrl(guid1, sig1, typeof(CssResource))).Returns("url1");
                testable.Mock <IUriBuilder>().Setup(x => x.BuildResourceUrl(guid2, sig2, typeof(CssResource))).Returns("url2");
                testable.Mock <IUriBuilder>().Setup(x => x.BuildResourceUrl(guid2, sig3, typeof(CssResource))).Returns("url3");
                var files = new List <DatedFileEntry>
                {
                    new DatedFileEntry(string.Format("dir\\{0}-Expired-{1}-{2}", guid1.RemoveDashes(), sig1, new CssResource().FileName), DateTime.Now),
                    new DatedFileEntry(string.Format("dir\\{0}-{1}-{2}", guid2.RemoveDashes(), sig2, new CssResource().FileName), DateTime.Now),
                    new DatedFileEntry(string.Format("dir\\{0}-{1}-{2}", guid2.RemoveDashes(), sig3, new CssResource().FileName), DateTime.Now.Subtract(new TimeSpan(0, 1, 1)))
                };

                testable.Mock <IFileWrapper>().Setup(x => x.GetDatedFiles("dir", "*RequestReduce*")).Returns(files);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(files[0].FileName.Replace("\\", "/"))).Returns(guid1);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(files[1].FileName.Replace("\\", "/"))).Returns(guid2);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(files[2].FileName.Replace("\\", "/"))).Returns(guid2);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(files[0].FileName.Replace("\\", "/"))).Returns(sig1);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(files[1].FileName.Replace("\\", "/"))).Returns(sig2);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(files[2].FileName.Replace("\\", "/"))).Returns(sig3);

                var result = testable.ClassUnderTest.GetSavedUrls();

                Assert.Equal(1, result.Count);
                Assert.True(result[guid2] == "url2");
                testable.Dispose();
            }
            public void WillNormalizeCasingOfCofigsAndPasedUrl()
            {
                var testable = new TestableLocalDiskStore();

                testable.Mock <IRRConfiguration>().Setup(x => x.ContentHost).Returns("http://Server");
                testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/RequestReduce");
                testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\phys\\rr");

                var result = testable.ClassUnderTest.GetFileNameFromConfig("http://serVer/requestreDuce/fiLe");

                Assert.Equal("c:\\phys\\rr\\file", result);
            }
            public void WillGetPhysicalPathFromUrl()
            {
                var testable = new TestableLocalDiskStore();
                var content  = new byte[] { 1 };

                testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/url");
                testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\web\\url");
                testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature("/url/myid-style.cc")).Returns("style");

                testable.ClassUnderTest.Save(content, "/url/myid-style.cc", null);

                testable.Mock <IFileWrapper>().Verify(x => x.Save(content, "c:\\web\\url\\myid-style.cc"));
            }
            public void WillTransmitFileToResponseAndReturnTrue()
            {
                var testable = new TestableLocalDiskStore();
                var content  = new byte[] { 1 };

                testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/url");
                testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\web\\url");
                var response = new Mock <HttpResponseBase>();

                var result = testable.ClassUnderTest.SendContent("/url/myid-style.cc", response.Object);

                Assert.True(result);
                response.Verify(x => x.TransmitFile("c:\\web\\url\\myid-style.cc"), Times.Once());
            }
            public void WillTransmitExpiredFileIfFileotFoundandExpired()
            {
                var testable = new TestableLocalDiskStore();

                testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/url");
                testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\web\\url");
                var response = new Mock <HttpResponseBase>();

                response.Setup(x => x.TransmitFile("c:\\web\\url\\myid-style.cc")).Throws(new FileNotFoundException());

                var result = testable.ClassUnderTest.SendContent("/url/myid-style.cc", response.Object);

                Assert.True(result);
                response.Verify(x => x.TransmitFile("c:\\web\\url\\myid-Expired-style.cc"), Times.Once());
            }
            public void WillRemoveExpiredFileIfExists()
            {
                var testable = new TestableLocalDiskStore();
                var content  = new byte[] { 1 };

                testable.Mock <IRRConfiguration>().Setup(x => x.SpriteVirtualPath).Returns("/url");
                testable.Mock <IRRConfiguration>().Setup(x => x.SpritePhysicalPath).Returns("c:\\web\\url");
                testable.Mock <IFileWrapper>().Setup(x => x.FileExists("c:\\web\\url\\myid-Expired-style.cc")).Returns(
                    true);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature("/url/myid-style.cc")).Returns("style");

                testable.ClassUnderTest.Save(content, "/url/myid-style.cc", null);

                testable.Mock <IFileWrapper>().Verify(x => x.DeleteFile("c:\\web\\url\\myid-Expired-style.cc"));
            }
            public void WillNotAddToReductionRepositoryIfPng()
            {
                var testable = new TestableLocalDiskStore();
                var content  = new byte[] { 1 };

                testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/url");
                testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\web\\url");
                testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature("/url/myid-style.png")).Returns("style");
                var expectedKey = Guid.NewGuid();

                testable.Mock <IUriBuilder>().Setup(x => x.ParseKey("/url/myid-style.png")).Returns(expectedKey);

                testable.ClassUnderTest.Save(content, "/url/myid-style.png", null);

                testable.Mock <IReductionRepository>().Verify(x => x.AddReduction(expectedKey, "/url/myid-style.png"), Times.Never());
            }
Ejemplo n.º 10
0
            public void WillExpireFile()
            {
                var testable   = new TestableLocalDiskStore();
                var key        = Guid.NewGuid();
                var urlBuilder = new UriBuilder(testable.Mock <IRRConfiguration>().Object);

                testable.Mock <IRRConfiguration>().Setup(x => x.ResourceVirtualPath).Returns("/RRContent");
                testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("c:\\RRContent");
                testable.Inject <IUriBuilder>(urlBuilder);
                var file1 = urlBuilder.BuildResourceUrl <CssResource>(key, new byte[] { 1 }).Replace("/RRContent", "c:\\RRContent").Replace('/', '\\');
                var file2 = urlBuilder.BuildSpriteUrl(key, new byte[] { 1 }).Replace("/RRContent", "c:\\RRContent").Replace('/', '\\');

                testable.Mock <IFileWrapper>().Setup(x => x.GetFiles("c:\\RRContent")).Returns(new string[]
                                                                                               { file1, file2 });

                testable.ClassUnderTest.Flush(key);

                testable.Mock <IFileWrapper>().Verify(x => x.RenameFile(file1, file1.Replace(key.RemoveDashes(), key.RemoveDashes() + "-Expired")));
                testable.Mock <IFileWrapper>().Verify(x => x.RenameFile(file2, file2.Replace(key.RemoveDashes(), key.RemoveDashes() + "-Expired")));
            }
Ejemplo n.º 11
0
            public void WillResolveFilesInLowerCase()
            {
                var testable = new TestableLocalDiskStore();

                testable.Mock <IRRConfiguration>().Setup(x => x.ResourcePhysicalPath).Returns("dir");
                var guid1 = Guid.NewGuid();
                var sig1  = Guid.NewGuid().RemoveDashes();

                testable.Mock <IUriBuilder>().Setup(x => x.BuildResourceUrl(guid1, sig1, typeof(CssResource))).Returns("url1");
                var files = new List <DatedFileEntry>
                {
                    new DatedFileEntry(string.Format("dir\\{0}-{1}-{2}", guid1.RemoveDashes(), sig1, new CssResource().FileName.ToLower()), DateTime.Now),
                };

                testable.Mock <IFileWrapper>().Setup(x => x.GetDatedFiles("dir", "*RequestReduce*")).Returns(files);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseKey(files[0].FileName.Replace("\\", "/"))).Returns(guid1);
                testable.Mock <IUriBuilder>().Setup(x => x.ParseSignature(files[0].FileName.Replace("\\", "/"))).Returns(sig1);

                var result = testable.ClassUnderTest.GetSavedUrls();

                Assert.Equal(1, result.Count);
                testable.Dispose();
            }