// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System.Collections.Generic; using System.Collections.Specialized; using System.Web.WebPages.TestUtils; using Moq; using Xunit; namespace System.Web.Helpers.Test { public class InfoTest { [Fact] public void ConfigurationReturnsExpectedInfo() { var configInfo = ServerInfo.Configuration(); // verification // checks only subset of values Assert.NotNull(configInfo); VerifyKey(configInfo, "Machine Name"); VerifyKey(configInfo, "OS Version"); VerifyKey(configInfo, "ASP.NET Version"); VerifyKey(configInfo, "ASP.NET Web Pages Version"); } [Fact] public void EnvironmentVariablesReturnsExpectedInfo() { var envVariables = ServerInfo.EnvironmentVariables(); // verification // checks only subset of values Assert.NotNull(envVariables); VerifyKey(envVariables, "Path"); VerifyKey(envVariables, "SystemDrive"); } [Fact] public void ServerVariablesReturnsExpectedInfoWithNoContext() { var serverVariables = ServerInfo.ServerVariables(); // verification // since there is no HttpContext this will be empty Assert.NotNull(serverVariables); } [Fact] public void ServerVariablesReturnsExpectedInfoWthContext() { var serverVariables = new NameValueCollection(); serverVariables.Add("foo", "bar"); var request = new Mock(); request.Setup(c => c.ServerVariables).Returns(serverVariables); var context = new Mock(); context.Setup(c => c.Request).Returns(request.Object); // verification Assert.NotNull(serverVariables); IDictionary returnedValues = ServerInfo.ServerVariables(context.Object); Assert.Equal(serverVariables.Count, returnedValues.Count); foreach (var item in returnedValues) { Assert.Equal(serverVariables[item.Key], item.Value); } } [Fact] public void HttpRuntimeInfoReturnsExpectedInfo() { var httpRuntimeInfo = ServerInfo.HttpRuntimeInfo(); // verification // checks only subset of values Assert.NotNull(httpRuntimeInfo); VerifyKey(httpRuntimeInfo, "CLR Install Directory"); VerifyKey(httpRuntimeInfo, "Asp Install Directory"); VerifyKey(httpRuntimeInfo, "On UNC Share"); } [Fact] public void ServerInfoDoesNotProduceLegacyCasForHomogenousAppDomain() { // Act and Assert Action action = () => { IDictionary configValue = ServerInfo.LegacyCAS(AppDomain.CurrentDomain); Assert.NotNull(configValue); Assert.Equal(0, configValue.Count); }; AppDomainUtils.RunInSeparateAppDomain(GetAppDomainSetup(legacyCasEnabled: false), action); } [Fact] public void ServerInfoProducesLegacyCasForNonHomogenousAppDomain() { // Arrange Action action = () => { // Act and Assert IDictionary configValue = ServerInfo.LegacyCAS(AppDomain.CurrentDomain); // Assert Assert.True(configValue.ContainsKey("Legacy Code Access Security")); Assert.Equal(configValue["Legacy Code Access Security"], "Legacy Code Access Security has been detected on your system. Microsoft WebPage features require the ASP.NET 4 Code Access Security model. For information about how to resolve this, contact your server administrator."); }; AppDomainUtils.RunInSeparateAppDomain(GetAppDomainSetup(legacyCasEnabled: true), action); } //[Fact] //public void SqlServerInfoReturnsExpectedInfo() { // var sqlInfo = ServerInfo.SqlServerInfo(); // // verification // // just verifies that we don't get any unexpected exceptions // Assert.NotNull(sqlInfo); //} [Fact] public void RenderResultContainsExpectedTags() { var htmlString = ServerInfo.GetHtml().ToString(); // just verify that the final HTML produced contains some expected info Assert.True(htmlString.Contains("")); Assert.True(htmlString.Contains("")); Assert.True(htmlString.Contains("Server Configuration")); } [Fact] public void RenderGeneratesValidXhtml() { // Result does not validate against XHTML 1.1 and HTML5 because ServerInfo generates //