public void PreApplicationStartCodeDoesNotLoadIfAHigherVersionIsAvailableInGac() { // Arrange Version loadedVersion = null; bool registeredForChangeNotification = false; // Hopefully we'd have figured out a better way to load Plan9 by v8. var webPagesVersion = new Version("8.0.0.0"); IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies("1.0.0.0", LatestVersion, "8.0.0.0"); var fileSystem = new TestFileSystem(); fileSystem.AddFile("Index.cshtml"); var buildManager = new TestBuildManager(); var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: null); Action <Version> loadWebPages = (version) => { loadedVersion = version; }; Action registerForChange = () => { registeredForChangeNotification = true; }; // Act bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", "bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, null); // Assert Assert.False(loaded); Assert.Null(loadedVersion); Assert.False(registeredForChangeNotification); Assert.Equal(0, buildManager.Stream.Length); }
public static void Configure() { RouteTable.Routes.Add(new Route(BundleHelper.CLIENT_SCRIPT_VPATH.TrimStart('/') + "{path}.js", new ClientScriptRouteHandler())); BundleTable.Bundles.UseCdn = ClientSettings.StoreBundles; BundleTable.EnableOptimizations = true; PreApplicationStartCode.Start(); }
public void PreApplicationStartCodeDoesNotLoadIfAHigherVersionIsAvailableInBin() { // Arrange Version loadedVersion = null; bool registeredForChangeNotification = false; IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(LatestVersion, "8.0.0.0"); var binDirectory = DeploymentUtil.GetBinDirectory(); var fileSystem = new TestFileSystem(); fileSystem.AddFile("Index.cshtml"); fileSystem.AddFile(Path.Combine(binDirectory, "System.Web.WebPages.Deployment.dll")); var buildManager = new TestBuildManager(); var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: null); Action <Version> loadWebPages = (version) => { loadedVersion = version; }; Action registerForChange = () => { registeredForChangeNotification = true; }; Func <string, AssemblyName> getAssembyName = _ => new AssemblyName("System.Web.WebPages.Deployment, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"); // Act bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", binDirectory, nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, getAssembyName); // Assert Assert.False(loaded); Assert.Null(loadedVersion); Assert.False(registeredForChangeNotification); Assert.Equal(0, buildManager.Stream.Length); }
public void PreApplicationStartCodeDoesNotForceRecompileIfNewVersionIsV1AndCurrentAssemblyIsNotMaxVersion() { // Arrange Version loadedVersion = null; bool registeredForChangeNotification = false; IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(LatestVersion, "5.0.0.0"); var fileSystem = new TestFileSystem(); fileSystem.AddFile("Index.cshtml"); var buildManager = new TestBuildManager(); var content = AssemblyUtils.ThisAssemblyName.Version + Environment.NewLine; buildManager.Stream = new MemoryStream(Encoding.Default.GetBytes(content)); var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: new Version("1.0.0")); Action <Version> loadWebPages = (version) => { loadedVersion = version; }; Action registerForChange = () => { registeredForChangeNotification = true; }; // Act bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", @"site\bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, null); // Assert Assert.False(loaded); Assert.False(registeredForChangeNotification); VerifyVersionFile(buildManager, AssemblyUtils.ThisAssemblyName.Version); Assert.False(fileSystem.FileExists(@"site\bin\WebPagesRecompilation.deleteme")); }
public void PreApplicationStartCodeForcesRecompileIfPreviousVersionIsNotTheSameAsCurrentVersion() { // Arrange Version loadedVersion = null; bool registeredForChangeNotification = false; IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(LatestVersion); var fileSystem = new TestFileSystem(); fileSystem.AddFile("Index.cshtml"); var buildManager = new TestBuildManager(); var content = "1.0.0.0" + Environment.NewLine; buildManager.Stream = new MemoryStream(Encoding.Default.GetBytes(content)); var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: new Version(LatestVersion)); Action <Version> loadWebPages = (version) => { loadedVersion = version; }; Action registerForChange = () => { registeredForChangeNotification = true; }; // Act var ex = Assert.Throws <HttpCompileException>(() => PreApplicationStartCode.StartCore(fileSystem, "", @"site\bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, null) ); // Assert Assert.Equal("Changes were detected in the Web Pages runtime version that require your application to be recompiled. Refresh your browser window to continue.", ex.Message); Assert.Equal(ex.Data["WebPages.VersionChange"], true); Assert.False(registeredForChangeNotification); VerifyVersionFile(buildManager, new Version(LatestVersion)); Assert.True(fileSystem.FileExists(@"site\bin\WebPagesRecompilation.deleteme")); }
public void PreApplicationStartCodeUsesVersionSpecifiedInConfigIfWebPagesIsImplicitlyEnabled() { // Arrange Version loadedVersion = null; bool registeredForChangeNotification = false; IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies("1.12.123.1234", LatestVersion); Version webPagesVersion = new Version("1.12.123.1234"); var fileSystem = new TestFileSystem(); fileSystem.AddFile("Default.cshtml"); var buildManager = new TestBuildManager(); var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: webPagesVersion); Action <Version> loadWebPages = (version) => { loadedVersion = version; }; Action registerForChange = () => { registeredForChangeNotification = true; }; // Act bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", "bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, getAssemblyNameThunk: null); // Assert Assert.True(loaded); Assert.Equal(webPagesVersion, loadedVersion); Assert.False(registeredForChangeNotification); VerifyVersionFile(buildManager, webPagesVersion); }
public void PreApplicationStartCodeThrowsIfVersionIsSpecifiedInConfigAndDifferentVersionExistsInBin() { // Arrange Version loadedVersion = null; var binDirectory = DeploymentUtil.GetBinDirectory(); IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies("1.0.0.0", AssemblyUtils.ThisAssemblyName.Version.ToString()); var fileSystem = new TestFileSystem(); fileSystem.AddFile("Index.cshtml"); fileSystem.AddFile(Path.Combine(binDirectory, "System.Web.WebPages.Deployment.dll")); var buildManager = new TestBuildManager(); var content = AssemblyUtils.ThisAssemblyName.Version + Environment.NewLine; buildManager.Stream = new MemoryStream(Encoding.Default.GetBytes(content)); var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: new Version("1.0.0")); Action <Version> loadWebPages = (version) => { loadedVersion = version; }; Action registerForChange = () => { }; Func <string, AssemblyName> getAssembyName = _ => new AssemblyName("System.Web.WebPages.Deployment, Version=" + AssemblyUtils.ThisAssemblyName.Version + ", Culture=neutral, PublicKeyToken=31bf3856ad364e35"); // Act and Assert Assert.Throws <InvalidOperationException>(() => PreApplicationStartCode.StartCore(fileSystem, "", binDirectory, nameValueCollection, loadedAssemblies, buildManager: buildManager, loadWebPages: loadWebPages, registerForChangeNotification: registerForChange, getAssemblyNameThunk: getAssembyName), String.Format(@"Conflicting versions of ASP.NET Web Pages detected: specified version is ""1.0.0.0"", but the version in bin is ""{0}"". To continue, remove files from the application's bin directory or remove the version specification in web.config.", AssemblyUtils.ThisAssemblyName.Version)); }
public void StartTest() { AppDomainUtils.RunInSeparateAppDomain( () => { AppDomainUtils.SetPreAppStartStage(); PreApplicationStartCode.Start(); // Call a second time to ensure multiple calls do not cause issues PreApplicationStartCode.Start(); Assert.False( RouteTable.Routes.RouteExistingFiles, "We should not be setting RouteExistingFiles" ); Assert.Empty(RouteTable.Routes); Assert.False(PageParser.EnableLongStringsAsResources); string formsAuthLoginUrl = (string)typeof(FormsAuthentication) .GetField("_LoginUrl", BindingFlags.Static | BindingFlags.NonPublic) .GetValue(null); Assert.Null(formsAuthLoginUrl); } ); }
public void PreApplicationStartCodeThrowsIfVersionSpecifiedInConfigIsNotAvailable() { // Arrange Version loadedVersion = null; var binDirectory = DeploymentUtil.GetBinDirectory(); IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies("1.0.0.0", AssemblyUtils.ThisAssemblyName.Version.ToString()); var fileSystem = new TestFileSystem(); fileSystem.AddFile("Index.cshtml"); var buildManager = new TestBuildManager(); var content = AssemblyUtils.ThisAssemblyName.Version + Environment.NewLine; buildManager.Stream = new MemoryStream(Encoding.Default.GetBytes(content)); var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: new Version("1.5")); Action <Version> loadWebPages = (version) => { loadedVersion = version; }; Action registerForChange = () => { }; // Act and Assert Assert.Throws <InvalidOperationException>(() => PreApplicationStartCode.StartCore(fileSystem, "", binDirectory, nameValueCollection, loadedAssemblies, buildManager: buildManager, loadWebPages: loadWebPages, registerForChangeNotification: registerForChange, getAssemblyNameThunk: null), String.Format("Specified Web Pages version \"1.5.0.0\" could not be found. Update your web.config to specify a different version. Current version: \"{0}\".", AssemblyUtils.ThisAssemblyName.Version)); }
public void PreApplicationStartCodeLoadsV1IfNoVersionIsSpecifiedAndCurrentAssemblyIsTheMaximumVersionAvailable() { // Arrange Version loadedVersion = null; bool registeredForChangeNotification = false; var webPagesVersion = AssemblyUtils.ThisAssemblyName.Version; var v1Version = new Version("1.0.0.0"); IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies("1.0.0.0", LatestVersion); // Note: For this test to work with future versions we would need to create corresponding embedded resources with that version in it. var fileSystem = new TestFileSystem(); var buildManager = new TestBuildManager(); fileSystem.AddFile("Index.cshtml"); var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: null); Action <Version> loadWebPages = (version) => { loadedVersion = version; }; Action registerForChange = () => { registeredForChangeNotification = true; }; // Act bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", "bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, null); // Assert Assert.True(loaded); Assert.Equal(v1Version, loadedVersion); Assert.False(registeredForChangeNotification); VerifyVersionFile(buildManager, v1Version); }
public void PreApplicationStartCodeDoesNothingIfItIsAvailableInBinAndFileExistsInRootOfWebSite() { // Arrange Version loadedVersion = null; bool registeredForChangeNotification = false; var webPagesVersion = AssemblyUtils.ThisAssemblyName.Version; IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(AssemblyUtils.ThisAssemblyName.Version.ToString()); var fileSystem = new TestFileSystem(); var binDirectory = DeploymentUtil.GetBinDirectory(); var buildManager = new TestBuildManager(); fileSystem.AddFile("Default.cshtml"); fileSystem.AddFile(Path.Combine(binDirectory, "System.Web.WebPages.Deployment.dll")); var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: null); Action <Version> loadWebPages = (version) => { loadedVersion = version; }; Action registerForChange = () => { registeredForChangeNotification = true; }; Func <string, AssemblyName> getAssembyName = _ => new AssemblyName("System.Web.WebPages.Deployment, Version=" + AssemblyUtils.ThisAssemblyName.Version.ToString() + ", Culture=neutral, PublicKeyToken=2f9147bba06de483"); // Act bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", binDirectory, nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, getAssembyName); // Assert Assert.False(loaded); Assert.Null(loadedVersion); Assert.False(registeredForChangeNotification); Assert.Equal(0, buildManager.Stream.Length); }
public void PreApplicationStartCodeThrowsIfNoVersionIsSpecifiedAndV1IsNotAvailable() { // Arrange Version loadedVersion = null; bool registeredForChangeNotification = false; var webPagesVersion = AssemblyUtils.ThisAssemblyName.Version; IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(LatestVersion); // Note: For this test to work with future versions we would need to create corresponding embedded resources with that version in it. var fileSystem = new TestFileSystem(); var buildManager = new TestBuildManager(); fileSystem.AddFile("Index.cshtml"); var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: null); Action <Version> loadWebPages = (version) => { loadedVersion = version; }; Action registerForChange = () => { registeredForChangeNotification = true; }; // Act and Assert Assert.Throws <InvalidOperationException>(() => PreApplicationStartCode.StartCore(fileSystem, "", "bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, null), @"Could not determine which version of ASP.NET Web Pages to use. In order to use this site, specify a version in the site’s web.config file. For more information, see the following article on the Microsoft support site: http://go.microsoft.com/fwlink/?LinkId=254126"); Assert.False(registeredForChangeNotification); Assert.Equal(0, buildManager.Stream.Length); }
public void PreApplicationStartCodeDoesNothingIfVersionDoesNotMatchBootstrapperVersion() { // Act bool loaded = PreApplicationStartCode.StartCore(testVersion: new Version(2, 0, 0, 0)); // Assert Assert.IsFalse(loaded); }
public void PreApplicationStartCodeLoadsWebPagesIfVersionMatchesBootstrapperVersion() { // Act bool loaded = PreApplicationStartCode.StartCore(testVersion: new Version(1, 0, 0, 0)); // Assert Assert.IsTrue(loaded); }
public void StartTest() { AppDomainUtils.RunInSeparateAppDomain(() => { AppDomainUtils.SetPreAppStartStage(); PreApplicationStartCode.Start(); var buildProviders = typeof(BuildProvider).GetField("s_dynamicallyRegisteredProviders", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null); Assert.AreEqual(2, buildProviders.GetType().GetProperty("Count", BindingFlags.Public | BindingFlags.Instance).GetValue(buildProviders, new object[] { })); }); }
public void StartCanRunTwice() { AppDomainUtils.RunInSeparateAppDomain(() => { AppDomainUtils.SetPreAppStartStage(); PreApplicationStartCode.Start(); // Call a second time to ensure multiple calls do not cause issues PreApplicationStartCode.Start(); }); }
public void StartInitializesFormsAuthByDefault() { AppDomainUtils.RunInSeparateAppDomain(() => { AppDomainUtils.SetPreAppStartStage(); PreApplicationStartCode.Start(); string formsAuthLoginUrl = (string)typeof(FormsAuthentication).GetField("_LoginUrl", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null); Assert.Equal(FormsAuthenticationSettings.DefaultLoginUrl, formsAuthLoginUrl); }); }
public void StartDoesNotInitializeFormsAuthWhenDisabled() { AppDomainUtils.RunInSeparateAppDomain(() => { AppDomainUtils.SetPreAppStartStage(); ConfigurationManager.AppSettings[WebSecurity.EnableSimpleMembershipKey] = "False"; PreApplicationStartCode.Start(); string formsAuthLoginUrl = (string)typeof(FormsAuthentication).GetField("_LoginUrl", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null); Assert.Null(formsAuthLoginUrl); }); }
public void StartTest() { AppDomainUtils.RunInSeparateAppDomain(() => { // Act AppDomainUtils.SetPreAppStartStage(); PreApplicationStartCode.Start(); // Assert var imports = WebPageRazorHost.GetGlobalImports(); Assert.IsTrue(imports.Any(ns => ns.Equals("Microsoft.Web.Helpers"))); }); }
public void StartInitializesSimpleMembershipByDefault() { AppDomainUtils.RunInSeparateAppDomain(() => { AppDomainUtils.SetPreAppStartStage(); PreApplicationStartCode.Start(); // Verify simple membership var providers = Membership.Providers; Assert.NotEmpty(providers.OfType <SimpleMembershipProvider>()); Assert.True(Roles.Enabled); }); }
public void StartDoesNotInitializeSimpleMembershipWhenDisabled() { AppDomainUtils.RunInSeparateAppDomain(() => { AppDomainUtils.SetPreAppStartStage(); ConfigurationManager.AppSettings[WebSecurity.EnableSimpleMembershipKey] = "False"; PreApplicationStartCode.Start(); // Verify simple membership var providers = Membership.Providers; Assert.Empty(providers.OfType <SimpleMembershipProvider>()); Assert.False(Roles.Enabled); }); }
public void StartRegistersRazorNamespaces() { AppDomainUtils.RunInSeparateAppDomain(() => { AppDomainUtils.SetPreAppStartStage(); PreApplicationStartCode.Start(); // Call a second time to ensure multiple calls do not cause issues PreApplicationStartCode.Start(); // Verify namespaces var imports = WebPageRazorHost.GetGlobalImports(); Assert.Contains(imports, ns => ns.Equals("WebMatrix.Data")); Assert.Contains(imports, ns => ns.Equals("WebMatrix.WebData")); }); }
public void StartTest() { AppDomainUtils.RunInSeparateAppDomain(() => { var adminPackageAssembly = typeof(PreApplicationStartCode).Assembly; AppDomainUtils.SetPreAppStartStage(); PreApplicationStartCode.Start(); // Call a second time to ensure multiple calls do not cause issues PreApplicationStartCode.Start(); // TODO: Need a way to see if the module was actually registered var registeredAssemblies = ApplicationPart.GetRegisteredParts().ToList(); Assert.Equal(1, registeredAssemblies.Count); registeredAssemblies.First().Assembly.Equals(adminPackageAssembly); }); }
public static void Configure() { var scriptProvider = new ClientScriptVirtualPathProvider(); if (ClientSettings.BundlingEnabled) { BundleTable.VirtualPathProvider = scriptProvider; } else { RouteTable.Routes.Add(new Route(BundleHelper.CLIENT_SCRIPT_VPATH.TrimStart('/') + "{path}.js", scriptProvider)); } BundleTable.Bundles.UseCdn = ClientSettings.StoreBundles; BundleTable.EnableOptimizations = true; PreApplicationStartCode.Start(); }
public void StartInitializesSimpleMembershipByDefault() { AppDomainUtils.RunInSeparateAppDomain(() => { AppDomainUtils.SetPreAppStartStage(); PreApplicationStartCode.Start(); // Verify simple membership var providers = Membership.Providers; Assert.Equal(1, providers.Count); foreach (var provider in providers) { Assert.IsAssignableFrom <SimpleMembershipProvider>(provider); } Assert.True(Roles.Enabled); }); }
public void StartTest() { AppDomainUtils.RunInSeparateAppDomain(() => { AppDomainUtils.SetPreAppStartStage(); PreApplicationStartCode.Start(); // Call a second time to ensure multiple calls do not cause issues PreApplicationStartCode.Start(); Assert.IsFalse(RouteTable.Routes.RouteExistingFiles, "We should not be setting RouteExistingFiles"); Assert.AreEqual(0, RouteTable.Routes.Count, "We should not be adding any routes"); Assert.IsFalse(PageParser.EnableLongStringsAsResources); string formsAuthLoginUrl = (string)typeof(FormsAuthentication).GetField("_LoginUrl", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null); Assert.IsNull(formsAuthLoginUrl, "Form Auth should not be set up by this assembly's PreAppStart - it should happen in WebMatrix.WebData.dll"); }); }
public void StartDoesNotInitializeSimpleMembershipWhenDisabled() { AppDomainUtils.RunInSeparateAppDomain(() => { AppDomainUtils.SetPreAppStartStage(); ConfigurationManager.AppSettings[WebSecurity.EnableSimpleMembershipKey] = "False"; PreApplicationStartCode.Start(); // Verify simple membership var providers = Membership.Providers; Assert.Equal(1, providers.Count); foreach (var provider in providers) { Assert.IsAssignableFrom <SqlMembershipProvider>(provider); } Assert.False(Roles.Enabled); }); }
public void PreApplicationStartCodeDoesNotLoadCurrentWebPagesIfOnlyVersionIsListedInConfigAndNoFilesAreFoundInSiteRoot() { // Arrange Version loadedVersion = null; bool registeredForChangeNotification = false; Version webPagesVersion = AssemblyUtils.ThisAssemblyName.Version; IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(LatestVersion); var fileSystem = new TestFileSystem(); var buildManager = new TestBuildManager(); var nameValueCollection = GetAppSettings( enabled: null, webPagesVersion: webPagesVersion ); Action <Version> loadWebPages = (version) => { loadedVersion = version; }; Action registerForChange = () => { registeredForChangeNotification = true; }; // Arrange bool loaded = PreApplicationStartCode.StartCore( fileSystem, "", "bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, null ); // Assert Assert.False(loaded); Assert.Null(loadedVersion); Assert.True(registeredForChangeNotification); Assert.Equal(0, buildManager.Stream.Length); }
public void PreApplicationStartCodeRegistersForChangeNotificationIfNotExplicitlyDisabledAndNoFilesFoundInSiteRoot() { // Arrange Version loadedVersion = null; bool registeredForChangeNotification = false; IEnumerable <AssemblyName> loadedAssemblies = GetAssemblies(LatestVersion); var fileSystem = new TestFileSystem(); var buildManager = new TestBuildManager(); var nameValueCollection = GetAppSettings(enabled: null, webPagesVersion: null); Action <Version> loadWebPages = (version) => { loadedVersion = version; }; Action registerForChange = () => { registeredForChangeNotification = true; }; // Act bool loaded = PreApplicationStartCode.StartCore(fileSystem, "", "bin", nameValueCollection, loadedAssemblies, buildManager, loadWebPages, registerForChange, null); // Assert Assert.False(loaded); Assert.Null(loadedVersion); Assert.True(registeredForChangeNotification); Assert.Equal(0, buildManager.Stream.Length); }