public void WillSetPhysicalPathToMappedVirtualPathOnFlush() { var module = new RequestReduceModule(); var context = new Mock <HttpContextBase>(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); config.Setup(x => x.AuthorizedUserList).Returns(RRConfiguration.Anonymous); context.Setup(x => x.Server.MapPath("/RRContent")).Returns("physical"); context.Setup(x => x.Request.RawUrl).Returns("/RRContent/FlushFailures"); var identity = new Mock <IIdentity>(); identity.Setup(x => x.IsAuthenticated).Returns(false); context.Setup(x => x.User.Identity).Returns(identity.Object); var queue = new Mock <IReducingQueue>(); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IReducingQueue>().Use(queue.Object); }); module.HandleRRFlush(context.Object); config.VerifySet(x => x.SpritePhysicalPath = "physical", Times.Once()); RRContainer.Current = null; }
public void WillNotSetResponseFilterIfStatusIs302Or301(int status) { RRContainer.Current = null; var module = new RequestReduceModule(); var context = new Mock <HttpContextBase>(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.SpriteVirtualPath).Returns("/Virtual"); context.Setup(x => x.Items.Contains(RequestReduceModule.CONTEXT_KEY)).Returns(false); context.Setup(x => x.Response.ContentType).Returns("text/html"); context.Setup(x => x.Request.QueryString).Returns(new NameValueCollection()); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); context.Setup(x => x.Request.RawUrl).Returns("/content/blah"); context.Setup(x => x.Response.StatusCode).Returns(status); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <AbstractFilter>().Use(new Mock <AbstractFilter>().Object); }); module.InstallFilter(context.Object); context.VerifySet(x => x.Response.Filter = It.IsAny <Stream>(), Times.Never()); RRContainer.Current = null; }
public void WillGetAndSetResponseFilterIfXHtmlContent() { var module = new RequestReduceModule(); var context = new Mock <HttpContextBase>(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.ResourceAbsolutePath).Returns("/Virtual"); context.Setup(x => x.Items.Contains(ResponseFilter.ContextKey)).Returns(false); context.Setup(x => x.Request.Url).Returns(new Uri("http://host/Content/blah")); context.Setup(x => x.Response.ContentType).Returns("application/xhtml+xml"); context.Setup(x => x.Request.QueryString).Returns(new NameValueCollection()); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IHostingEnvironmentWrapper>().Use(new Mock <IHostingEnvironmentWrapper>().Object); x.For <AbstractFilter>().Use(new Mock <AbstractFilter>().Object); }); module.InstallFilter(context.Object); context.VerifyGet(x => x.Response.Filter, Times.Once()); context.VerifySet(x => x.Response.Filter = It.IsAny <Stream>(), Times.Once()); RRContainer.Current = null; }
public void WillSetPhysicalPathToMappedVirtualPathWhenHandlingContent() { var module = new RequestReduceModule(); var context = new Mock <HttpContextBase>(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.SpriteVirtualPath).Returns("/Virtual"); context.Setup(x => x.Server.MapPath("/Virtual")).Returns("physical"); context.Setup(x => x.Request.RawUrl).Returns("/Virtual/blah"); context.Setup(x => x.Response.Headers).Returns(new NameValueCollection()); context.Setup(x => x.Request.Headers).Returns(new NameValueCollection()); var cache = new Mock <HttpCachePolicyBase>(); context.Setup(x => x.Response.Cache).Returns(cache.Object); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IStore>().Use(new Mock <IStore>().Object); x.For <IUriBuilder>().Use(new Mock <IUriBuilder>().Object); }); module.HandleRRContent(context.Object); config.VerifySet(x => x.SpritePhysicalPath = "physical", Times.Once()); RRContainer.Current = null; }
public void WillFlushReductionsOnFlushUrlWhenCurrentUserIsAuthorizedUserAndEquivalentIpv6IsInIpFilter() { var module = new RequestReduceModule(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.AuthorizedUserList).Returns(new string[] { "user1", "user2" }); config.Setup(x => x.IpFilterList).Returns(new[] { "3780:0:c307:0:2c45:0:81c7:9273" }); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Request.RawUrl).Returns("/RRContent/flush/page.aspx"); var identity = new Mock <IIdentity>(); identity.Setup(x => x.IsAuthenticated).Returns(true); identity.Setup(x => x.Name).Returns("user2"); context.Setup(x => x.User.Identity).Returns(identity.Object); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); context.Setup(x => x.Request.UserHostAddress).Returns("3780:0000:c307:0000:2c45:0000:81c7:9273"); var store = new Mock <IStore>(); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IHostingEnvironmentWrapper>().Use(new Mock <IHostingEnvironmentWrapper>().Object); x.For <IStore>().Use(store.Object); x.For <IUriBuilder>().Use <UriBuilder>(); x.For <IIpFilter>().Use <IpFilter>(); }); module.HandleRRFlush(context.Object); store.Verify(x => x.Flush(Guid.Empty), Times.Once()); RRContainer.Current = null; }
public void WillCorrectlySetContentType(string path, string contentType, bool contentInStore) { var module = new RequestReduceModule(); var context = new Mock <HttpContextBase>(); var response = new Mock <HttpResponseBase>(); response.SetupProperty(x => x.ContentType); response.Setup(x => x.Headers).Returns(new NameValueCollection()); response.Setup(x => x.Cache).Returns(new Mock <HttpCachePolicyBase>().Object); context.Setup(x => x.Request.Headers).Returns(new NameValueCollection()); context.Setup(x => x.Response).Returns(response.Object); context.Setup(x => x.Request.RawUrl).Returns(path); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); var store = new Mock <IStore>(); store.Setup( x => x.SendContent(It.IsAny <string>(), response.Object)). Returns(contentInStore); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IStore>().Use(store.Object); x.For <IUriBuilder>().Use(new UriBuilder(config.Object)); }); module.HandleRRContent(context.Object); Assert.Equal(contentType, response.Object.ContentType); RRContainer.Current = null; }
public void WillNotHandleRequestsInChildDirectory() { var module = new RequestReduceModule(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.ResourceVirtualPath).Returns("/RRContent"); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Request.Url).Returns(new Uri("http://host/RRContent/child/someresource")); context.Setup(x => x.Request.Headers).Returns(new NameValueCollection()); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); var store = new Mock <IStore>(); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IHostingEnvironmentWrapper>().Use(new Mock <IHostingEnvironmentWrapper>().Object); x.For <IStore>().Use(store.Object); x.For <IUriBuilder>().Use <UriBuilder>(); x.For <IHandlerFactory>().Use(new Mock <IHandlerFactory>().Object); }); module.HandleRRContent(context.Object, false); store.Verify(x => x.SendContent(It.IsAny <string>(), It.IsAny <HttpResponseBase>()), Times.Never()); RRContainer.Current = null; }
public void WillDelegateContentNotInMyDirectoryFriendHandlers() { var module = new RequestReduceModule(); var handler = new DefaultHttpHandler(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Request.RawUrl).Returns("/content/someresource.less"); context.Setup(x => x.Request.Url).Returns(new Uri("http://host/content/someresource.less")); context.Setup(x => x.Request.Headers).Returns(new NameValueCollection()); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); context.Setup(x => x.Items).Returns(new Hashtable()); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IUriBuilder>().Use <UriBuilder>(); }); Registry.HandlerMaps.Add(x => x.AbsolutePath.EndsWith(".less") ? handler : null); Registry.HandlerMaps.Add(x => x.AbsolutePath.EndsWith(".les") ? new DefaultHttpHandler() : null); module.HandleRRContent(context.Object); //context.Verify(x => x.RemapHandler(handler), Times.Once()); Assert.Equal(handler, context.Object.Items["remapped handler"]); RRContainer.Current = null; Registry.HandlerMaps.Clear(); }
public void WillFlushFailuresOnFlushFailureUrlWithTrailingSlashWhenAndAuthorizedUsersIsAnonymous() { var module = new RequestReduceModule(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.AuthorizedUserList).Returns(RRConfiguration.Anonymous); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Request.RawUrl).Returns("/RRContent/FlushFailures/"); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); var identity = new Mock <IIdentity>(); identity.Setup(x => x.IsAuthenticated).Returns(false); context.Setup(x => x.User.Identity).Returns(identity.Object); var queue = new Mock <IReducingQueue>(); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IReducingQueue>().Use(queue.Object); x.For <IUriBuilder>().Use <UriBuilder>(); }); module.HandleRRFlush(context.Object); queue.Verify(x => x.ClearFailures(), Times.Once()); RRContainer.Current = null; }
public void WillFlushReductionsOnFlushUrlWithTrailingSlashWhenCurrentUserIsAuthorizedUser() { var module = new RequestReduceModule(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.AuthorizedUserList).Returns(new string[] { "user1", "user2" }); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Request.RawUrl).Returns("/RRContent/flush/"); var identity = new Mock <IIdentity>(); identity.Setup(x => x.IsAuthenticated).Returns(true); identity.Setup(x => x.Name).Returns("user2"); context.Setup(x => x.User.Identity).Returns(identity.Object); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); var store = new Mock <IStore>(); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IStore>().Use(store.Object); x.For <IUriBuilder>().Use <UriBuilder>(); }); module.HandleRRFlush(context.Object); store.Verify(x => x.Flush(Guid.Empty), Times.Once()); RRContainer.Current = null; }
public void WillNotFlushReductionsOnFlushUrlWhenCurrentUserIsNotAuthorizedUserAndReturn401() { var module = new RequestReduceModule(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.AuthorizedUserList).Returns(new string[] { "user1", "user2" }); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); var context = new Mock <HttpContextBase>(); var response = new Mock <HttpResponseBase>(); response.SetupProperty(x => x.StatusCode); context.Setup(x => x.Request.RawUrl).Returns("/RRContent/flush"); var identity = new Mock <IIdentity>(); identity.Setup(x => x.IsAuthenticated).Returns(true); identity.Setup(x => x.Name).Returns("user3"); context.Setup(x => x.User.Identity).Returns(identity.Object); context.Setup(x => x.Response).Returns(response.Object); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); var store = new Mock <IStore>(); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IStore>().Use(store.Object); x.For <IUriBuilder>().Use <UriBuilder>(); }); module.HandleRRFlush(context.Object); store.Verify(x => x.Flush(It.IsAny <Guid>()), Times.Never()); Assert.Equal(401, response.Object.StatusCode); RRContainer.Current = null; }
public void WillFlushReductionsOnFlushUrlWhenAndAuthorizedUsersIsAnonymous(string url, string key) { var module = new RequestReduceModule(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.AuthorizedUserList).Returns(RRConfiguration.Anonymous); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Request.RawUrl).Returns(url); var identity = new Mock <IIdentity>(); identity.Setup(x => x.IsAuthenticated).Returns(false); context.Setup(x => x.User.Identity).Returns(identity.Object); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); var store = new Mock <IStore>(); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IStore>().Use(store.Object); x.For <IUriBuilder>().Use <UriBuilder>(); }); var keyGuid = Guid.Parse(key); module.HandleRRFlush(context.Object); store.Verify(x => x.Flush(keyGuid), Times.Once()); RRContainer.Current = null; }
public void WillNotFlushReductionsIfNotOnFlushUrl() { var module = new RequestReduceModule(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.AuthorizedUserList).Returns(RRConfiguration.Anonymous); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Request.RawUrl).Returns("/RRContent/notflush"); var identity = new Mock <IIdentity>(); identity.Setup(x => x.IsAuthenticated).Returns(false); context.Setup(x => x.User.Identity).Returns(identity.Object); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); var store = new Mock <IStore>(); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IStore>().Use(store.Object); x.For <IUriBuilder>().Use <UriBuilder>(); }); module.HandleRRFlush(context.Object); store.Verify(x => x.Flush(It.IsAny <Guid>()), Times.Never()); RRContainer.Current = null; }
public void WillStripQueryStringDromGeneratedUrls() { var module = new RequestReduceModule(); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Request.RawUrl).Returns("/RRContent/key-match-css.css?somequerystring"); context.Setup(x => x.Request.Url).Returns(new Uri("http://localhost/RRContent/key-match-css.css?somequerystring")); context.Setup(x => x.Request.Headers).Returns(new NameValueCollection() { { "If-None-Match", @"""match""" } }); context.Setup(x => x.Response.Headers).Returns(new NameValueCollection()); var cache = new Mock <HttpCachePolicyBase>(); context.Setup(x => x.Response.Cache).Returns(cache.Object); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); var store = new Mock <IStore>(); var builder = new Mock <IUriBuilder>(); builder.Setup(x => x.ParseSignature("/RRContent/key-match-css.css")).Returns("match"); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IHostingEnvironmentWrapper>().Use(new Mock <IHostingEnvironmentWrapper>().Object); x.For <IStore>().Use(store.Object); x.For <IUriBuilder>().Use(builder.Object); }); module.HandleRRContent(context.Object); store.Verify(x => x.SendContent("/RRContent/key-match-css.css", context.Object.Response), Times.Never()); RRContainer.Current = null; }
public void WillFlushFailuresOnFlushFailureUrlWhenAndAuthorizedUsersIsAnonymousAndNull() { var module = new RequestReduceModule(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.AuthorizedUserList).Returns(RRConfiguration.Anonymous); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Request.RawUrl).Returns("/RRContent/FlushFailures/page.aspx"); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); context.Setup(x => x.User).Returns(null as IPrincipal); var queue = new Mock <IReducingQueue>(); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IHostingEnvironmentWrapper>().Use(new Mock <IHostingEnvironmentWrapper>().Object); x.For <IReducingQueue>().Use(queue.Object); x.For <IUriBuilder>().Use <UriBuilder>(); x.For <IIpFilter>().Use <IpFilter>(); }); module.HandleRRFlush(context.Object); queue.Verify(x => x.ClearFailures(), Times.Once()); RRContainer.Current = null; }
public void WillNotSetCachabilityIfNotInRRPatOrStoreDoesNotSendContent(string path, bool contentSent) { var module = new RequestReduceModule(); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Request.Url).Returns(new Uri("http://host/RRContent/css.css")); context.Setup(x => x.Request.Headers).Returns(new NameValueCollection()); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); var cache = new Mock <HttpCachePolicyBase>(); context.Setup(x => x.Response.Cache).Returns(cache.Object); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.ResourceAbsolutePath).Returns(path); var store = new Mock <IStore>(); store.Setup( x => x.SendContent(It.IsAny <string>(), context.Object.Response)). Returns(contentSent); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IHostingEnvironmentWrapper>().Use(new Mock <IHostingEnvironmentWrapper>().Object); x.For <IStore>().Use(store.Object); x.For <IUriBuilder>().Use(new UriBuilder(config.Object)); x.For <IHandlerFactory>().Use <HandlerFactory>(); }); module.HandleRRContent(context.Object, false); cache.Verify(x => x.SetCacheability(HttpCacheability.Public), Times.Never()); RRContainer.Current = null; }
public void WillDelegateContentMappedToHandler() { var module = new RequestReduceModule(); var handler = new DefaultHttpHandler(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.ResourceAbsolutePath).Returns("/RRContent"); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Request.Url).Returns(new Uri("http://host/content/someresource.less")); context.Setup(x => x.Request.Headers).Returns(new NameValueCollection()); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); context.Setup(x => x.Items).Returns(new Hashtable()); var handlerFactory = new HandlerFactory(config.Object, new UriBuilder(config.Object)); handlerFactory.AddHandlerMap((x, y) => x.AbsolutePath.EndsWith(".less") ? handler : null); handlerFactory.AddHandlerMap((x, y) => x.AbsolutePath.EndsWith(".les") ? new DefaultHttpHandler() : null); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IUriBuilder>().Use <UriBuilder>(); x.For <IHandlerFactory>().Use(handlerFactory); }); module.HandleRRContent(context.Object, false); Assert.Equal(handler, context.Object.Items["remapped handler"]); RRContainer.Current = null; }
public void WillSetContextKeyIfNotSetBefore() { RRContainer.Current = null; var module = new RequestReduceModule(); var context = new Mock <HttpContextBase>(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.SpriteVirtualPath).Returns("/Virtual"); context.Setup(x => x.Items.Contains(RequestReduceModule.CONTEXT_KEY)).Returns(false); context.Setup(x => x.Response.ContentType).Returns("type"); context.Setup(x => x.Request.QueryString).Returns(new NameValueCollection()); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); context.Setup(x => x.Response.ContentType).Returns("text/html"); context.Setup(x => x.Request.RawUrl).Returns("/content/blah"); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <AbstractFilter>().Use(new Mock <AbstractFilter>().Object); }); module.InstallFilter(context.Object); context.Verify(x => x.Items.Add(RequestReduceModule.CONTEXT_KEY, It.IsAny <Object>()), Times.Once()); RRContainer.Current = null; }
public void WillSetResponseFilterIfJustCssProcessingIsDisabledFromConfig() { var module = new RequestReduceModule(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.SpriteVirtualPath).Returns("/Virtual"); config.Setup(x => x.CssProcessingDisabled).Returns(true); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Items.Contains(RequestReduceModule.CONTEXT_KEY)).Returns(false); context.Setup(x => x.Response.ContentType).Returns("text/html"); context.Setup(x => x.Request.QueryString).Returns(new NameValueCollection()); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); context.Setup(x => x.Request.RawUrl).Returns("/NotVirtual/blah"); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <AbstractFilter>().Use(new Mock <AbstractFilter>().Object); }); module.InstallFilter(context.Object); context.VerifySet(x => x.Response.Filter = It.IsAny <Stream>(), Times.Once()); RRContainer.Current = null; }
public void WillSetResponseFilterOnce() { var module = new RequestReduceModule(); var context = new Mock <HttpContextBase>(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.SpriteVirtualPath).Returns("/Virtual"); context.Setup(x => x.Items.Contains(RequestReduceModule.CONTEXT_KEY)).Returns(true); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <AbstractFilter>().Use(new Mock <AbstractFilter>().Object); }); module.InstallFilter(context.Object); context.VerifySet((x => x.Response.Filter = It.IsAny <Stream>()), Times.Never()); RRContainer.Current = null; }
public void WillNotReturn304WhenSigDoesNotMatchIfNoneMatch() { var module = new RequestReduceModule(); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Request.RawUrl).Returns("/RRContent/key-match-css.css"); context.Setup(x => x.Request.Headers).Returns(new NameValueCollection() { { "If-None-Match", @"""notmatch""" } }); context.Setup(x => x.Request.Url).Returns(new Uri("http://localhost/RRContent/key-match-css.css")); context.Setup(x => x.Response.Headers).Returns(new NameValueCollection()); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); var cache = new Mock <HttpCachePolicyBase>(); context.Setup(x => x.Response.Cache).Returns(cache.Object); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); var store = new Mock <IStore>(); store.Setup( x => x.SendContent(It.IsAny <string>(), context.Object.Response)). Returns(true); var builder = new Mock <IUriBuilder>(); builder.Setup(x => x.ParseSignature("/RRContent/key-match-css.css")).Returns("match"); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IHostingEnvironmentWrapper>().Use(new Mock <IHostingEnvironmentWrapper>().Object); x.For <IStore>().Use(store.Object); x.For <IUriBuilder>().Use(builder.Object); }); module.HandleRRContent(context.Object); Assert.Equal(60 * 24 * 360, context.Object.Response.Expires); cache.Verify(x => x.SetETag(@"""match"""), Times.Once()); cache.Verify(x => x.SetCacheability(HttpCacheability.Public), Times.Once()); RRContainer.Current = null; }
public void WillNotFlushReductionsOnFlushUrlWhenAuthorizedUsersIsAnonymousButBlockedByIpFilterAndReturn401() { var module = new RequestReduceModule(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.AuthorizedUserList).Returns(RRConfiguration.Anonymous); config.Setup(x => x.IpFilterList).Returns(new[] { "1.2.3.4", " 3.4.5.6" }); config.Setup(x => x.SpriteVirtualPath).Returns("/RRContent"); var context = new Mock <HttpContextBase>(); var response = new Mock <HttpResponseBase>(); response.SetupProperty(x => x.StatusCode); context.Setup(x => x.Request.RawUrl).Returns("/RRContent/flush/page.aspx"); var identity = new Mock <IIdentity>(); identity.Setup(x => x.IsAuthenticated).Returns(false); context.Setup(x => x.User.Identity).Returns(identity.Object); context.Setup(x => x.Response).Returns(response.Object); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); context.Setup(x => x.Request.UserHostAddress).Returns("10.0.0.1"); context.Setup(x => x.Request.ServerVariables).Returns(new NameValueCollection { { "HTTP_X_FORWARDED_FOR", "9.9.9.9" } }); var store = new Mock <IStore>(); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IHostingEnvironmentWrapper>().Use(new Mock <IHostingEnvironmentWrapper>().Object); x.For <IStore>().Use(store.Object); x.For <IUriBuilder>().Use <UriBuilder>(); x.For <IIpFilter>().Use <IpFilter>(); }); module.HandleRRFlush(context.Object); store.Verify(x => x.Flush(It.IsAny <Guid>()), Times.Never()); Assert.Equal(401, response.Object.StatusCode); RRContainer.Current = null; }
public void WillSetCachabilityIfInRRPathAndStoreSendsContent(string path) { var module = new RequestReduceModule(); var context = new Mock <HttpContextBase>(); context.Setup(x => x.Request.RawUrl).Returns("/RRContent/css.css"); context.Setup(x => x.Request.Url).Returns(new Uri("http://localhost/RRContent/css.css")); context.Setup(x => x.Response.Headers).Returns(new NameValueCollection()); context.Setup(x => x.Request.Headers).Returns(new NameValueCollection()); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); var cache = new Mock <HttpCachePolicyBase>(); context.Setup(x => x.Response.Cache).Returns(cache.Object); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.SpriteVirtualPath).Returns(path); var store = new Mock <IStore>(); store.Setup( x => x.SendContent(It.IsAny <string>(), context.Object.Response)). Returns(true); var builder = new Mock <IUriBuilder>(); builder.Setup(x => x.ParseSignature("/RRContent/css.css")).Returns("sig"); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <IStore>().Use(store.Object); x.For <IUriBuilder>().Use(builder.Object); }); module.HandleRRContent(context.Object); Assert.Equal(60 * 24 * 360, context.Object.Response.Expires); cache.Verify(x => x.SetETag(@"""sig"""), Times.Once()); cache.Verify(x => x.SetCacheability(HttpCacheability.Public), Times.Once()); RRContainer.Current = null; }
public void WillSetPhysicalPathToMappedVirtualPath() { var module = new RequestReduceModule(); var context = new Mock <HttpContextBase>(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.SpriteVirtualPath).Returns("/Virtual"); context.Setup(x => x.Items.Contains(RequestReduceModule.CONTEXT_KEY)).Returns(false); context.Setup(x => x.Response.ContentType).Returns("text/html"); context.Setup(x => x.Server.MapPath("/Virtual")).Returns("physical"); context.Setup(x => x.Request.QueryString).Returns(new NameValueCollection()); context.Setup(x => x.Request.RawUrl).Returns("/content/blah"); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <AbstractFilter>().Use(new Mock <AbstractFilter>().Object); }); module.InstallFilter(context.Object); config.VerifySet(x => x.SpritePhysicalPath = "physical", Times.Once()); RRContainer.Current = null; }
public void WillNotSetResponseFilterIfFaviconIco() { RRContainer.Current = null; var module = new RequestReduceModule(); var context = new Mock <HttpContextBase>(); var config = new Mock <IRRConfiguration>(); config.Setup(x => x.ResourceVirtualPath).Returns("/Virtual"); context.Setup(x => x.Items.Contains(ResponseFilter.ContextKey)).Returns(false); context.Setup(x => x.Response.ContentType).Returns("text/html"); context.Setup(x => x.Request.QueryString).Returns(new NameValueCollection()); context.Setup(x => x.Server).Returns(new Mock <HttpServerUtilityBase>().Object); context.Setup(x => x.Request.Url).Returns(new Uri("http://host/favicon.ico")); RRContainer.Current = new Container(x => { x.For <IRRConfiguration>().Use(config.Object); x.For <AbstractFilter>().Use(new Mock <AbstractFilter>().Object); }); module.InstallFilter(context.Object); context.VerifySet(x => x.Response.Filter = It.IsAny <Stream>(), Times.Never()); RRContainer.Current = null; }