Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

166 lines
5.8 KiB
C#

// 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<HttpRequestBase>();
request.Setup(c => c.ServerVariables).Returns(serverVariables);
var context = new Mock<HttpContextBase>();
context.Setup(c => c.Request).Returns(request.Object);
// verification
Assert.NotNull(serverVariables);
IDictionary<string, string> 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<string, string> 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<string, string> 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("<table class=\"server-info\" dir=\"ltr\">"));
Assert.True(htmlString.Contains("</style>"));
Assert.True(htmlString.Contains("Server Configuration"));
}
[Fact]
public void RenderGeneratesValidXhtml()
{
// Result does not validate against XHTML 1.1 and HTML5 because ServerInfo generates
// <style> inside <body>. This is by design however since we only use ServerInfo
// as debugging aid, not something to be permanently added to a web page.
XhtmlAssert.Validate1_0(
ServerInfo.GetHtml(),
addRoot: true
);
}
private void VerifyKey(IDictionary<string, string> info, string key)
{
Assert.True(info.ContainsKey(key));
Assert.False(String.IsNullOrEmpty(info[key]));
}
private AppDomainSetup GetAppDomainSetup(bool legacyCasEnabled)
{
var setup = new AppDomainSetup();
if (legacyCasEnabled)
{
setup.SetCompatibilitySwitches(new[] { "NetFx40_LegacySecurityPolicy" });
}
return setup;
}
}
}