ANCM Test Refactoring: Initial check-in to fix the build issue on AspNetCI (#172)
* Initial check-in to fix the build issue on AspNetCI * Updated with Jimmy's feedbacks
This commit is contained in:
parent
f130330db8
commit
890e49e539
|
|
@ -155,7 +155,7 @@ namespace AspNetCoreModule.Test.Framework
|
|||
{
|
||||
ApppHostTemporaryBackupFileExtention = temporaryBackupFileExtenstion;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -263,7 +263,7 @@ namespace AspNetCoreModule.Test.Framework
|
|||
addElement[attribute] = value;
|
||||
break;
|
||||
}
|
||||
serverManager.CommitChanges();
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -291,7 +291,7 @@ namespace AspNetCoreModule.Test.Framework
|
|||
}
|
||||
}
|
||||
|
||||
public void CreateSite(string siteName, string physicalPath, int siteId, int tcpPort, string appPoolName = "DefaultAppPool")
|
||||
public void CreateSite(string siteName, string hostname, string physicalPath, int siteId, int tcpPort, string appPoolName = "DefaultAppPool")
|
||||
{
|
||||
TestUtility.LogInformation("Creating web site : " + siteName);
|
||||
|
||||
|
|
@ -312,7 +312,7 @@ namespace AspNetCoreModule.Test.Framework
|
|||
|
||||
ConfigurationElement bindingElement = bindingsCollection.CreateElement("binding");
|
||||
bindingElement["protocol"] = @"http";
|
||||
bindingElement["bindingInformation"] = "*:" + tcpPort + ":";
|
||||
bindingElement["bindingInformation"] = "*:" + tcpPort + ":" + hostname;
|
||||
bindingsCollection.Add(bindingElement);
|
||||
|
||||
ConfigurationElementCollection siteCollection = siteElement.GetCollection();
|
||||
|
|
@ -327,7 +327,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
applicationCollection.Add(virtualDirectoryElement);
|
||||
siteCollection.Add(applicationElement);
|
||||
sitesCollection.Add(siteElement);
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -361,7 +360,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
virtualDirectoryElement["physicalPath"] = physicalPath;
|
||||
applicationCollection.Add(virtualDirectoryElement);
|
||||
siteCollection.Add(applicationElement);
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -379,7 +377,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
basicAuthenticationSection["enabled"] = basic;
|
||||
ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", siteName);
|
||||
windowsAuthenticationSection["enabled"] = windows;
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -416,7 +413,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
anonymousAuthenticationSection["enabled"] = false;
|
||||
ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", siteName);
|
||||
windowsAuthenticationSection["enabled"] = false;
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -431,7 +427,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
ConfigurationSection urlCompressionSection = config.GetSection("system.webServer/urlCompression", siteName);
|
||||
urlCompressionSection["doStaticCompression"] = enabled;
|
||||
urlCompressionSection["doDynamicCompression"] = enabled;
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -447,7 +442,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
anonymousAuthenticationSection["enabled"] = true;
|
||||
ConfigurationSection windowsAuthenticationSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication", siteName);
|
||||
windowsAuthenticationSection["enabled"] = false;
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -509,41 +503,10 @@ namespace AspNetCoreModule.Test.Framework
|
|||
errorElement2["subStatusCode"] = subStatusCode;
|
||||
errorElement2["path"] = path;
|
||||
httpErrorsCollection.Add(errorElement2);
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
Thread.Sleep(500);
|
||||
}
|
||||
|
||||
private static bool? _isIISInstalled = null;
|
||||
public static bool? IsIISInstalled
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_isIISInstalled == null)
|
||||
{
|
||||
_isIISInstalled = true;
|
||||
if (_isIISInstalled == true && !File.Exists(Path.Combine(Strings.IIS64BitPath, "iiscore.dll")))
|
||||
{
|
||||
_isIISInstalled = false;
|
||||
}
|
||||
if (_isIISInstalled == true && !File.Exists(Path.Combine(Strings.IIS64BitPath, "config", "applicationhost.config")))
|
||||
{
|
||||
_isIISInstalled = false;
|
||||
}
|
||||
}
|
||||
return _isIISInstalled;
|
||||
}
|
||||
set
|
||||
{
|
||||
_isIISInstalled = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsIISReady {
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
public bool IsAncmInstalled(ServerType servertype)
|
||||
{
|
||||
|
|
@ -646,7 +609,7 @@ namespace AspNetCoreModule.Test.Framework
|
|||
{
|
||||
modulesCollection.Remove(module);
|
||||
}
|
||||
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
return result;
|
||||
|
|
@ -748,7 +711,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
{
|
||||
ApplicationPoolCollection appPools = serverManager.ApplicationPools;
|
||||
appPools[appPoolName].ProcessModel.IdleTimeout = TimeSpan.FromMinutes(idleTimeoutMinutes);
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -767,7 +729,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
{
|
||||
ApplicationPoolCollection appPools = serverManager.ApplicationPools;
|
||||
appPools[appPoolName].ProcessModel.MaxProcesses = maxProcesses;
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -788,7 +749,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
appPools[appPoolName].ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
|
||||
appPools[appPoolName].ProcessModel.UserName = userName;
|
||||
appPools[appPoolName].ProcessModel.Password = password;
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -810,7 +770,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
{
|
||||
ApplicationPoolCollection appPools = serverManager.ApplicationPools;
|
||||
appPools[appPoolName]["startMode"] = startMode;
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -841,11 +800,13 @@ namespace AspNetCoreModule.Test.Framework
|
|||
{
|
||||
ApplicationPoolCollection appPools = serverManager.ApplicationPools;
|
||||
if (start)
|
||||
{
|
||||
appPools[appPoolName].Start();
|
||||
}
|
||||
else
|
||||
{
|
||||
appPools[appPoolName].Stop();
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -902,8 +863,9 @@ namespace AspNetCoreModule.Test.Framework
|
|||
{
|
||||
ApplicationPoolCollection appPools = serverManager.ApplicationPools;
|
||||
while (appPools.Count > 0)
|
||||
{
|
||||
appPools.RemoveAt(0);
|
||||
|
||||
}
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -948,7 +910,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
b.SetAttributeValue("bindingInformation", bindingInfo);
|
||||
|
||||
site.Bindings.Add(b);
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -988,7 +949,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
sites[siteName].Stop();
|
||||
sites[siteName].SetAttributeValue("serverAutoStart", false);
|
||||
}
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -1033,7 +993,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
vdir.SetAttributeValue("physicalPath", physicalPath);
|
||||
|
||||
app.VirtualDirectories.Add(vdir);
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -1176,7 +1135,7 @@ namespace AspNetCoreModule.Test.Framework
|
|||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
|
||||
public string ExportCertificateTo(string thumbPrint, string sslStoreFrom = @"Cert:\LocalMachine\My", string sslStoreTo = @"Cert:\LocalMachine\Root", string pfxPassword = null)
|
||||
{
|
||||
string toolsPath = Path.Combine(InitializeTestMachine.GetSolutionDirectory(), "tools");
|
||||
|
|
@ -1391,8 +1350,9 @@ namespace AspNetCoreModule.Test.Framework
|
|||
|
||||
SiteCollection sites = serverManager.Sites;
|
||||
while (sites.Count > 0)
|
||||
{
|
||||
sites.RemoveAt(0);
|
||||
|
||||
}
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -1406,11 +1366,8 @@ namespace AspNetCoreModule.Test.Framework
|
|||
using (ServerManager serverManager = new ServerManager())
|
||||
{
|
||||
Configuration config = serverManager.GetApplicationHostConfiguration();
|
||||
|
||||
ConfigurationSection webLimitsSection = config.GetSection("system.applicationHost/webLimits");
|
||||
webLimitsSection["dynamicRegistrationThreshold"] = threshold;
|
||||
|
||||
|
||||
serverManager.CommitChanges();
|
||||
}
|
||||
}
|
||||
|
|
@ -1418,6 +1375,6 @@ namespace AspNetCoreModule.Test.Framework
|
|||
{
|
||||
TestUtility.LogTrace(String.Format("#################### Changing dynamicRegistrationThreshold failed. Reason: {0} ####################", ex.Message));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5,58 +5,41 @@ using System;
|
|||
using System.IO;
|
||||
using System.Threading;
|
||||
using Microsoft.Extensions.PlatformAbstractions;
|
||||
using System.Security.Principal;
|
||||
using System.Security.AccessControl;
|
||||
|
||||
namespace AspNetCoreModule.Test.Framework
|
||||
{
|
||||
public static class TestFlags
|
||||
{
|
||||
public const string SkipTest = "SkipTest";
|
||||
public const string UsePrivateANCM = "UsePrivateANCM";
|
||||
public const string UseIISExpress = "UseIISExpress";
|
||||
public const string UseFullIIS = "UseFullIIS";
|
||||
public const string RunAsAdministrator = "RunAsAdministrator";
|
||||
public const string MakeCertExeAvailable = "MakeCertExeAvailable";
|
||||
public const string X86Platform = "X86Platform";
|
||||
public const string Wow64BitMode = "Wow64BitMode";
|
||||
public const string RequireRunAsAdministrator = "RequireRunAsAdministrator";
|
||||
public const string Default = "Default";
|
||||
|
||||
public static bool Enabled(string flagValue)
|
||||
{
|
||||
return InitializeTestMachine.GlobalTestFlags.Contains(flagValue.ToLower());
|
||||
}
|
||||
}
|
||||
|
||||
public class InitializeTestMachine : IDisposable
|
||||
{
|
||||
public const string ANCMTestFlagsEnvironmentVariable = "%ANCMTestFlags%";
|
||||
public const string ANCMTestFlagsDefaultContext = "AdminAnd64Bit";
|
||||
public const string ANCMTestFlagsTestSkipContext = "SkipTest";
|
||||
public const string ANCMTestFlagsUsePrivateAspNetCoreFileContext = "UsePrivate";
|
||||
private const string ANCMTestFlagsUseIISExpressContext = "UseIISExpress";
|
||||
|
||||
private static bool? _usePrivateAspNetCoreFile = null;
|
||||
public static bool? UsePrivateAspNetCoreFile
|
||||
{
|
||||
get {
|
||||
//
|
||||
// By default, we don't use the private AspNetCore.dll that is compiled with this solution.
|
||||
// In order to use the private file, you should add 'UsePrivateAspNetCoreFile' flag to the Environmnet variable %ANCMTestFlag%.
|
||||
//
|
||||
// Set ANCMTestFlag=%ANCMTestFlag%;UsePrivateAspNetCoreFile
|
||||
// Or
|
||||
// $Env:ANCMTestFlag=$Env:ANCMTestFlag + ";UsePrivateAspNetCoreFile"
|
||||
//
|
||||
if (_usePrivateAspNetCoreFile == null)
|
||||
{
|
||||
_usePrivateAspNetCoreFile = false;
|
||||
var envValue = Environment.ExpandEnvironmentVariables(ANCMTestFlagsEnvironmentVariable);
|
||||
if (envValue.ToLower().Contains(ANCMTestFlagsUsePrivateAspNetCoreFileContext.ToLower()))
|
||||
{
|
||||
TestUtility.LogInformation("PrivateAspNetCoreFile is set");
|
||||
_usePrivateAspNetCoreFile = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
TestUtility.LogInformation("PrivateAspNetCoreFile is not set");
|
||||
}
|
||||
}
|
||||
return _usePrivateAspNetCoreFile;
|
||||
}
|
||||
set
|
||||
{
|
||||
_usePrivateAspNetCoreFile = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static int SiteId = 40000;
|
||||
public const string PrivateFileName = "aspnetcore_private.dll";
|
||||
public static string FullIisAspnetcore_path = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "system32", "inetsrv", PrivateFileName);
|
||||
public static string FullIisAspnetcore_path_original = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "system32", "inetsrv", "aspnetcore.dll");
|
||||
public static string FullIisAspnetcore_X86_path = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "syswow64", "inetsrv", PrivateFileName);
|
||||
public static string IisExpressAspnetcore_path = Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles%"), "IIS Express", PrivateFileName);
|
||||
public static string IisExpressAspnetcore_X86_path = Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%"), "IIS Express", PrivateFileName);
|
||||
public static string IisExpressAspnetcore_path;
|
||||
public static string IisExpressAspnetcore_X86_path;
|
||||
|
||||
public static string IisExpressAspnetcoreSchema_path = Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles%"), "IIS Express", "config", "schema", "aspnetcore_schema.xml");
|
||||
public static string IisExpressAspnetcoreSchema_X86_path = Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%"), "IIS Express", "config", "schema", "aspnetcore_schema.xml");
|
||||
|
|
@ -65,27 +48,225 @@ namespace AspNetCoreModule.Test.Framework
|
|||
private static bool _InitializeTestMachineCompleted = false;
|
||||
private string _setupScriptPath = null;
|
||||
|
||||
private bool CheckPerquisiteForANCMTest()
|
||||
private static bool? _makeCertExeAvailable = null;
|
||||
public static bool MakeCertExeAvailable
|
||||
{
|
||||
bool result = true;
|
||||
TestUtility.LogInformation("CheckPerquisiteForANCMTest(): Environment.Is64BitOperatingSystem: {0}, Environment.Is64BitProcess {1}", Environment.Is64BitOperatingSystem, Environment.Is64BitProcess);
|
||||
TestUtility.LogInformation("%ANCMTestFlags%: {0}", Environment.ExpandEnvironmentVariables(ANCMTestFlagsEnvironmentVariable));
|
||||
|
||||
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
|
||||
get
|
||||
{
|
||||
TestUtility.LogInformation("CheckPerquisiteForANCMTest() Failed: ANCM test should be started with x64 process mode on 64 bit machine; if you run this test on Visual Studio, you should set X64 first after selecting 'Test -> Test Settings -> Default Process Architecture' menu");
|
||||
result = false;
|
||||
if (_makeCertExeAvailable == null)
|
||||
{
|
||||
_makeCertExeAvailable = false;
|
||||
try
|
||||
{
|
||||
string makecertExeFilePath = TestUtility.GetMakeCertPath();
|
||||
TestUtility.RunCommand(makecertExeFilePath, null, true, true);
|
||||
TestUtility.LogInformation("Verified makecert.exe is available : " + makecertExeFilePath);
|
||||
_makeCertExeAvailable = true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
_makeCertExeAvailable = false;
|
||||
}
|
||||
}
|
||||
return (_makeCertExeAvailable == true);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static string TestRootDirectory
|
||||
{
|
||||
get
|
||||
{
|
||||
return Path.Combine(Environment.ExpandEnvironmentVariables("%SystemDrive%") + @"\", "_ANCMTest");
|
||||
}
|
||||
}
|
||||
|
||||
private static string _globalTestFlags = null;
|
||||
public static string GlobalTestFlags
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_globalTestFlags == null)
|
||||
{
|
||||
bool isElevated;
|
||||
WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
|
||||
isElevated = principal.IsInRole(WindowsBuiltInRole.Administrator);
|
||||
|
||||
// check if this test process is started with the Run As Administrator start option
|
||||
_globalTestFlags = Environment.ExpandEnvironmentVariables(ANCMTestFlagsEnvironmentVariable);
|
||||
|
||||
//
|
||||
// Check if ANCMTestFlags environment is not defined and the test program was started
|
||||
// without using the Run As Administrator start option.
|
||||
// In that case, we have to use the default TestFlags of UseIISExpress and UsePrivateANCM
|
||||
//
|
||||
if (!isElevated)
|
||||
{
|
||||
if (_globalTestFlags.ToLower().Contains("%" + ANCMTestFlagsEnvironmentVariable.ToLower() + "%"))
|
||||
{
|
||||
_globalTestFlags = TestFlags.UsePrivateANCM + ";" + TestFlags.UseIISExpress;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// convert in lower case
|
||||
//
|
||||
_globalTestFlags = _globalTestFlags.ToLower();
|
||||
|
||||
//
|
||||
// error handling: UseIISExpress and UseFullIIS can be used together.
|
||||
//
|
||||
if (_globalTestFlags.Contains(TestFlags.UseIISExpress.ToLower()) && _globalTestFlags.Contains(TestFlags.UseFullIIS.ToLower()))
|
||||
{
|
||||
_globalTestFlags = _globalTestFlags.Replace(TestFlags.UseFullIIS.ToLower(), "");
|
||||
}
|
||||
|
||||
//
|
||||
// adjust the default test context in run time to figure out wrong test context values
|
||||
//
|
||||
if (isElevated)
|
||||
{
|
||||
// add RunAsAdministrator
|
||||
if (!_globalTestFlags.Contains(TestFlags.RunAsAdministrator.ToLower()))
|
||||
{
|
||||
TestUtility.LogInformation("Added test context of " + TestFlags.RunAsAdministrator);
|
||||
_globalTestFlags += ";" + TestFlags.RunAsAdministrator;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// add UseIISExpress
|
||||
if (!_globalTestFlags.Contains(TestFlags.UseIISExpress.ToLower()))
|
||||
{
|
||||
TestUtility.LogInformation("Added test context of " + TestFlags.UseIISExpress);
|
||||
_globalTestFlags += ";" + TestFlags.UseIISExpress;
|
||||
}
|
||||
|
||||
// remove UseFullIIS
|
||||
if (_globalTestFlags.Contains(TestFlags.UseFullIIS.ToLower()))
|
||||
{
|
||||
_globalTestFlags = _globalTestFlags.Replace(TestFlags.UseFullIIS.ToLower(), "");
|
||||
}
|
||||
|
||||
// remove RunAsAdmistrator
|
||||
if (_globalTestFlags.Contains(TestFlags.RunAsAdministrator.ToLower()))
|
||||
{
|
||||
_globalTestFlags = _globalTestFlags.Replace(TestFlags.RunAsAdministrator.ToLower(), "");
|
||||
}
|
||||
}
|
||||
|
||||
if (MakeCertExeAvailable)
|
||||
{
|
||||
// Add MakeCertExeAvailable
|
||||
if (!_globalTestFlags.Contains(TestFlags.MakeCertExeAvailable.ToLower()))
|
||||
{
|
||||
TestUtility.LogInformation("Added test context of " + TestFlags.MakeCertExeAvailable);
|
||||
_globalTestFlags += ";" + TestFlags.MakeCertExeAvailable;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Environment.Is64BitOperatingSystem)
|
||||
{
|
||||
// Add X86Platform
|
||||
if (!_globalTestFlags.Contains(TestFlags.X86Platform.ToLower()))
|
||||
{
|
||||
TestUtility.LogInformation("Added test context of " + TestFlags.X86Platform);
|
||||
_globalTestFlags += ";" + TestFlags.X86Platform;
|
||||
}
|
||||
}
|
||||
|
||||
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
|
||||
{
|
||||
// Add Wow64bitMode
|
||||
if (!_globalTestFlags.Contains(TestFlags.Wow64BitMode.ToLower()))
|
||||
{
|
||||
TestUtility.LogInformation("Added test context of " + TestFlags.Wow64BitMode);
|
||||
_globalTestFlags += ";" + TestFlags.Wow64BitMode;
|
||||
}
|
||||
|
||||
// remove X86Platform
|
||||
if (_globalTestFlags.Contains(TestFlags.X86Platform.ToLower()))
|
||||
{
|
||||
_globalTestFlags = _globalTestFlags.Replace(TestFlags.X86Platform.ToLower(), "");
|
||||
}
|
||||
}
|
||||
|
||||
_globalTestFlags = _globalTestFlags.ToLower();
|
||||
}
|
||||
|
||||
return _globalTestFlags;
|
||||
}
|
||||
}
|
||||
|
||||
public void InitializeIISServer()
|
||||
{
|
||||
// Check if IIS server is installed or not
|
||||
bool isIISInstalled = true;
|
||||
if (!File.Exists(Path.Combine(IISConfigUtility.Strings.IIS64BitPath, "iiscore.dll")))
|
||||
{
|
||||
isIISInstalled = false;
|
||||
}
|
||||
|
||||
if (!File.Exists(Path.Combine(IISConfigUtility.Strings.IIS64BitPath, "config", "applicationhost.config")))
|
||||
{
|
||||
isIISInstalled = false;
|
||||
}
|
||||
|
||||
if (!isIISInstalled)
|
||||
{
|
||||
throw new System.ApplicationException("IIS server is not installed");
|
||||
}
|
||||
|
||||
// Check websocket is installed
|
||||
if (File.Exists(Path.Combine(IISConfigUtility.Strings.IIS64BitPath, "iiswsock.dll")))
|
||||
{
|
||||
TestUtility.LogInformation("Websocket is installed");
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new System.ApplicationException("websocket module is not installed");
|
||||
}
|
||||
|
||||
// Clean up IIS worker process
|
||||
TestUtility.ResetHelper(ResetHelperMode.KillWorkerProcess);
|
||||
|
||||
// Reset applicationhost.config
|
||||
TestUtility.LogInformation("Restoring applicationhost.config");
|
||||
IISConfigUtility.RestoreAppHostConfig(restoreFromMasterBackupFile: true);
|
||||
TestUtility.StartW3svc();
|
||||
|
||||
// check w3svc is running after resetting applicationhost.config
|
||||
if (IISConfigUtility.GetServiceStatus("w3svc") == "Running")
|
||||
{
|
||||
TestUtility.LogInformation("W3SVC service is restarted after restoring applicationhost.config");
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new System.ApplicationException("WWW service can't start");
|
||||
}
|
||||
|
||||
// check URLRewrite module exists
|
||||
if (File.Exists(Path.Combine(IISConfigUtility.Strings.IIS64BitPath, "rewrite.dll")))
|
||||
{
|
||||
TestUtility.LogInformation("Verified URL Rewrite module installed for IIS server");
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new System.ApplicationException("URL Rewrite module is not installed");
|
||||
}
|
||||
|
||||
if (IISConfigUtility.ApppHostTemporaryBackupFileExtention == null)
|
||||
{
|
||||
throw new System.ApplicationException("Failed to backup applicationhost.config");
|
||||
}
|
||||
}
|
||||
|
||||
public InitializeTestMachine()
|
||||
{
|
||||
_referenceCount++;
|
||||
|
||||
// This method should be called only one time
|
||||
if (_referenceCount == 1)
|
||||
{
|
||||
CheckPerquisiteForANCMTest();
|
||||
|
||||
TestUtility.LogInformation("InitializeTestMachine::InitializeTestMachine() Start");
|
||||
|
||||
_InitializeTestMachineCompleted = false;
|
||||
|
|
@ -93,94 +274,34 @@ namespace AspNetCoreModule.Test.Framework
|
|||
TestUtility.LogInformation("InitializeTestMachine::Start");
|
||||
if (Environment.ExpandEnvironmentVariables("%ANCMTEST_DEBUG%").ToLower() == "true")
|
||||
{
|
||||
System.Diagnostics.Debugger.Launch();
|
||||
System.Diagnostics.Debugger.Launch();
|
||||
}
|
||||
|
||||
// check Makecert.exe exists
|
||||
try
|
||||
{
|
||||
string makecertExeFilePath = TestUtility.GetMakeCertPath();
|
||||
TestUtility.RunCommand(makecertExeFilePath, null, true, true);
|
||||
TestUtility.LogInformation("Verified makecert.exe is available : " + makecertExeFilePath);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new System.ApplicationException("makecert.exe is not available : " + ex.Message);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Clean up IISExpress processes
|
||||
//
|
||||
TestUtility.ResetHelper(ResetHelperMode.KillIISExpress);
|
||||
|
||||
// check if we can use IIS server instead of IISExpress
|
||||
try
|
||||
//
|
||||
// Initalize IIS server
|
||||
//
|
||||
|
||||
if (TestFlags.Enabled(TestFlags.UseFullIIS))
|
||||
{
|
||||
IISConfigUtility.IsIISReady = false;
|
||||
if (IISConfigUtility.IsIISInstalled == true)
|
||||
{
|
||||
var envValue = Environment.ExpandEnvironmentVariables(ANCMTestFlagsEnvironmentVariable);
|
||||
if (envValue.ToLower().Contains(ANCMTestFlagsUseIISExpressContext.ToLower()))
|
||||
{
|
||||
TestUtility.LogInformation("UseIISExpress is set");
|
||||
throw new System.ApplicationException("'ANCMTestServerType' environment variable is set to 'true'");
|
||||
}
|
||||
else
|
||||
{
|
||||
TestUtility.LogInformation("UseIISExpress is not set");
|
||||
}
|
||||
|
||||
// check websocket is installed
|
||||
if (File.Exists(Path.Combine(IISConfigUtility.Strings.IIS64BitPath, "iiswsock.dll")))
|
||||
{
|
||||
TestUtility.LogInformation("Websocket is installed");
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new System.ApplicationException("websocket module is not installed");
|
||||
}
|
||||
|
||||
TestUtility.ResetHelper(ResetHelperMode.KillWorkerProcess);
|
||||
|
||||
// Reset applicationhost.config
|
||||
TestUtility.LogInformation("Restoring applicationhost.config");
|
||||
IISConfigUtility.RestoreAppHostConfig(restoreFromMasterBackupFile:true);
|
||||
TestUtility.StartW3svc();
|
||||
|
||||
// check w3svc is running after resetting applicationhost.config
|
||||
if (IISConfigUtility.GetServiceStatus("w3svc") == "Running")
|
||||
{
|
||||
TestUtility.LogInformation("W3SVC service is restarted after restoring applicationhost.config");
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new System.ApplicationException("WWW service can't start");
|
||||
}
|
||||
|
||||
// check URLRewrite module exists
|
||||
if (File.Exists(Path.Combine(IISConfigUtility.Strings.IIS64BitPath, "rewrite.dll")))
|
||||
{
|
||||
TestUtility.LogInformation("Verified URL Rewrite module installed for IIS server");
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new System.ApplicationException("URL Rewrite module is not installed");
|
||||
}
|
||||
|
||||
if (IISConfigUtility.ApppHostTemporaryBackupFileExtention == null)
|
||||
{
|
||||
throw new System.ApplicationException("Failed to backup applicationhost.config");
|
||||
}
|
||||
IISConfigUtility.IsIISReady = true;
|
||||
}
|
||||
InitializeIISServer();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
RollbackIISApplicationhostConfigFile();
|
||||
TestUtility.LogInformation("We will use IISExpress instead of IIS: " + ex.Message);
|
||||
}
|
||||
|
||||
string siteRootPath = Path.Combine(Environment.ExpandEnvironmentVariables("%SystemDrive%") + @"\", "inetpub", "ANCMTest");
|
||||
|
||||
string siteRootPath = TestRootDirectory;
|
||||
if (!Directory.Exists(siteRootPath))
|
||||
{
|
||||
//
|
||||
// Create a new directory and set the write permission for the SID of AuthenticatedUser
|
||||
//
|
||||
Directory.CreateDirectory(siteRootPath);
|
||||
DirectorySecurity sec = Directory.GetAccessControl(siteRootPath);
|
||||
SecurityIdentifier authenticatedUser = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null);
|
||||
sec.AddAccessRule(new FileSystemAccessRule(authenticatedUser, FileSystemRights.Modify | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
|
||||
Directory.SetAccessControl(siteRootPath, sec);
|
||||
}
|
||||
|
||||
foreach (string directory in Directory.GetDirectories(siteRootPath))
|
||||
|
|
@ -208,18 +329,12 @@ namespace AspNetCoreModule.Test.Framework
|
|||
}
|
||||
}
|
||||
|
||||
if (InitializeTestMachine.UsePrivateAspNetCoreFile == true)
|
||||
//
|
||||
// Intialize Private ANCM files for Full IIS server or IISExpress
|
||||
//
|
||||
if (TestFlags.Enabled(TestFlags.UsePrivateANCM))
|
||||
{
|
||||
PreparePrivateANCMFiles();
|
||||
|
||||
// update applicationhost.config for IIS server
|
||||
if (IISConfigUtility.IsIISReady)
|
||||
{
|
||||
using (var iisConfig = new IISConfigUtility(ServerType.IIS, null))
|
||||
{
|
||||
iisConfig.AddModule("AspNetCoreModule", FullIisAspnetcore_path, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_InitializeTestMachineCompleted = true;
|
||||
|
|
@ -231,7 +346,7 @@ namespace AspNetCoreModule.Test.Framework
|
|||
if (_InitializeTestMachineCompleted)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TestUtility.LogInformation("InitializeTestMachine::InitializeTestMachine() Waiting...");
|
||||
|
|
@ -312,12 +427,24 @@ namespace AspNetCoreModule.Test.Framework
|
|||
{
|
||||
throw new ApplicationException("aspnetcore.dll is not available; check if there is any build issue!!!");
|
||||
}
|
||||
|
||||
// create an extra private copy of the private file on IIS directory
|
||||
if (InitializeTestMachine.UsePrivateAspNetCoreFile == true)
|
||||
{
|
||||
bool updateSuccess = false;
|
||||
|
||||
//
|
||||
// NOTE:
|
||||
// ANCM schema file can't be overwritten here
|
||||
// If there is any schema change, that should be updated with installing setup or manually copied with the new schema file.
|
||||
//
|
||||
|
||||
if (TestFlags.Enabled(TestFlags.UseIISExpress))
|
||||
{
|
||||
//
|
||||
// Initialize 32 bit IisExpressAspnetcore_path
|
||||
//
|
||||
IisExpressAspnetcore_path = Path.Combine(outputPath, "x64", "aspnetcore.dll");
|
||||
IisExpressAspnetcore_X86_path = Path.Combine(outputPath, "Win32", "aspnetcore.dll");
|
||||
}
|
||||
else // if use Full IIS server
|
||||
{
|
||||
bool updateSuccess = false;
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
updateSuccess = false;
|
||||
|
|
@ -326,28 +453,16 @@ namespace AspNetCoreModule.Test.Framework
|
|||
TestUtility.ResetHelper(ResetHelperMode.KillWorkerProcess);
|
||||
TestUtility.ResetHelper(ResetHelperMode.StopW3svcStartW3svc);
|
||||
Thread.Sleep(1000);
|
||||
|
||||
string from = Path.Combine(outputPath, "x64", "aspnetcore.dll");
|
||||
TestUtility.FileCopy(from, FullIisAspnetcore_path, overWrite:true, ignoreExceptionWhileDeletingExistingFile:false);
|
||||
TestUtility.FileCopy(from, IisExpressAspnetcore_path, overWrite: true, ignoreExceptionWhileDeletingExistingFile: false);
|
||||
|
||||
// NOTE: schema file can't be overwritten, if there is any schema change, that should be updated manually
|
||||
from = Path.Combine(outputPath, "x64", "aspnetcore_schema.xml");
|
||||
TestUtility.FileCopy(from, FullIisAspnetcoreSchema_path, overWrite: false, ignoreExceptionWhileDeletingExistingFile: false);
|
||||
TestUtility.FileCopy(from, IisExpressAspnetcoreSchema_path, overWrite: false, ignoreExceptionWhileDeletingExistingFile: false);
|
||||
|
||||
|
||||
// Copy private file on Inetsrv directory
|
||||
TestUtility.FileCopy(Path.Combine(outputPath, "x64", "aspnetcore.dll"), FullIisAspnetcore_path, overWrite: true, ignoreExceptionWhileDeletingExistingFile: false);
|
||||
|
||||
if (TestUtility.IsOSAmd64)
|
||||
{
|
||||
from = Path.Combine(outputPath, "Win32", "aspnetcore.dll");
|
||||
TestUtility.FileCopy(from, FullIisAspnetcore_X86_path, overWrite: true, ignoreExceptionWhileDeletingExistingFile: false);
|
||||
TestUtility.FileCopy(from, IisExpressAspnetcore_X86_path, overWrite: true, ignoreExceptionWhileDeletingExistingFile: false);
|
||||
|
||||
// NOTE: schema file can't be overwritten, if there is any schema change, that should be updated manually
|
||||
from = Path.Combine(outputPath, "Win32", "aspnetcore_schema.xml");
|
||||
TestUtility.FileCopy(from, IisExpressAspnetcoreSchema_X86_path, overWrite: false, ignoreExceptionWhileDeletingExistingFile: false);
|
||||
|
||||
// Copy 32bit private file on Inetsrv directory
|
||||
TestUtility.FileCopy(Path.Combine(outputPath, "Win32", "aspnetcore.dll"), FullIisAspnetcore_X86_path, overWrite: true, ignoreExceptionWhileDeletingExistingFile: false);
|
||||
}
|
||||
|
||||
|
||||
updateSuccess = true;
|
||||
}
|
||||
catch
|
||||
|
|
@ -363,6 +478,15 @@ namespace AspNetCoreModule.Test.Framework
|
|||
{
|
||||
throw new System.ApplicationException("Failed to update aspnetcore.dll");
|
||||
}
|
||||
|
||||
// update applicationhost.config for IIS server with the new private ASPNET Core file name
|
||||
if (TestFlags.Enabled(TestFlags.UseFullIIS))
|
||||
{
|
||||
using (var iisConfig = new IISConfigUtility(ServerType.IIS, null))
|
||||
{
|
||||
iisConfig.AddModule("AspNetCoreModule", FullIisAspnetcore_path, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -287,7 +287,7 @@ namespace AspNetCoreModule.Test.Framework
|
|||
}
|
||||
if (File.Exists(from))
|
||||
{
|
||||
if (File.Exists(to) && overWrite == false)
|
||||
if (File.Exists(to) && !overWrite)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -326,7 +326,7 @@ namespace AspNetCoreModule.Test.Framework
|
|||
|
||||
if (File.Exists(from))
|
||||
{
|
||||
if (File.Exists(to) && overWrite == false)
|
||||
if (File.Exists(to) && !overWrite)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -130,6 +130,21 @@ namespace AspNetCoreModule.Test.Framework
|
|||
}
|
||||
}
|
||||
|
||||
public string HostNameBinding
|
||||
{
|
||||
get
|
||||
{
|
||||
if (IisServerType == ServerType.IISExpress)
|
||||
{
|
||||
return "localhost";
|
||||
}
|
||||
else
|
||||
{
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ServerType IisServerType { get; set; }
|
||||
public string IisExpressConfigPath { get; set; }
|
||||
private int _siteId { get; set; }
|
||||
|
|
@ -138,15 +153,36 @@ namespace AspNetCoreModule.Test.Framework
|
|||
public TestWebSite(IISConfigUtility.AppPoolBitness appPoolBitness, string loggerPrefix = "ANCMTest", bool startIISExpress = true, bool copyAllPublishedFiles = false, bool attachAppVerifier = false)
|
||||
{
|
||||
_appPoolBitness = appPoolBitness;
|
||||
|
||||
|
||||
//
|
||||
// Default server type is IISExpress. we, however, should use IIS server instead if IIS server is ready to use.
|
||||
// Initialize IisServerType
|
||||
//
|
||||
IisServerType = ServerType.IISExpress;
|
||||
if (IISConfigUtility.IsIISReady)
|
||||
if (TestFlags.Enabled(TestFlags.UseFullIIS))
|
||||
{
|
||||
IisServerType = ServerType.IIS;
|
||||
}
|
||||
else
|
||||
{
|
||||
IisServerType = ServerType.IISExpress;
|
||||
}
|
||||
|
||||
//
|
||||
// Use localhost hostname for IISExpress
|
||||
//
|
||||
|
||||
|
||||
if (IisServerType == ServerType.IISExpress
|
||||
&& TestFlags.Enabled(TestFlags.Wow64BitMode))
|
||||
{
|
||||
//
|
||||
// In Wow64/IISExpress test context, always use 32 bit worker process
|
||||
//
|
||||
if (_appPoolBitness == IISConfigUtility.AppPoolBitness.noChange)
|
||||
{
|
||||
TestUtility.LogInformation("Warning!!! In Wow64, _appPoolBitness should be set with enable32bit");
|
||||
_appPoolBitness = IISConfigUtility.AppPoolBitness.enable32Bit;
|
||||
}
|
||||
}
|
||||
|
||||
TestUtility.LogInformation("TestWebSite::TestWebSite() Start");
|
||||
|
||||
|
|
@ -177,7 +213,7 @@ namespace AspNetCoreModule.Test.Framework
|
|||
{
|
||||
postfix = Path.GetRandomFileName();
|
||||
siteName = loggerPrefix.Replace(" ", "") + "_" + postfix;
|
||||
siteRootPath = Path.Combine(Environment.ExpandEnvironmentVariables("%SystemDrive%") + @"\", "inetpub", "ANCMTest", siteName);
|
||||
siteRootPath = Path.Combine(InitializeTestMachine.TestRootDirectory, siteName);
|
||||
if (!Directory.Exists(siteRootPath))
|
||||
{
|
||||
break;
|
||||
|
|
@ -199,14 +235,14 @@ namespace AspNetCoreModule.Test.Framework
|
|||
// Currently we use DotnetCore v2.0
|
||||
//
|
||||
string publishPath = Path.Combine(srcPath, "bin", "Debug", "netcoreapp2.0", "publish");
|
||||
string publishPathOutput = Path.Combine(Environment.ExpandEnvironmentVariables("%SystemDrive%") + @"\", "inetpub", "ANCMTest", "publishPathOutput");
|
||||
string publishPathOutput = Path.Combine(InitializeTestMachine.TestRootDirectory, "publishPathOutput");
|
||||
|
||||
//
|
||||
// Publish aspnetcore app
|
||||
//
|
||||
if (_publishedAspnetCoreApp != true)
|
||||
{
|
||||
string argumentForDotNet = "publish " + srcPath;
|
||||
string argumentForDotNet = "publish " + srcPath + " --framework netcoreapp2.0";
|
||||
TestUtility.LogInformation("TestWebSite::TestWebSite() StandardTestApp is not published, trying to publish on the fly: dotnet.exe " + argumentForDotNet);
|
||||
TestUtility.DeleteDirectory(publishPath);
|
||||
TestUtility.RunCommand("dotnet", argumentForDotNet);
|
||||
|
|
@ -227,7 +263,7 @@ namespace AspNetCoreModule.Test.Framework
|
|||
{
|
||||
argumentFileName = "AspNetCoreModule.TestSites.Standard.dll";
|
||||
}
|
||||
iisConfig.CreateSite(tempSiteName, publishPathOutput, tempId, tempId);
|
||||
iisConfig.CreateSite(tempSiteName, HostNameBinding, publishPathOutput, tempId, tempId);
|
||||
iisConfig.SetANCMConfig(tempSiteName, "/", "arguments", Path.Combine(publishPathOutput, argumentFileName));
|
||||
iisConfig.DeleteSite(tempSiteName);
|
||||
}
|
||||
|
|
@ -306,12 +342,26 @@ namespace AspNetCoreModule.Test.Framework
|
|||
}
|
||||
}
|
||||
|
||||
if (InitializeTestMachine.UsePrivateAspNetCoreFile == true && IisServerType == ServerType.IISExpress)
|
||||
if (TestFlags.Enabled(TestFlags.UsePrivateANCM) && IisServerType == ServerType.IISExpress)
|
||||
{
|
||||
iisConfig.AddModule("AspNetCoreModule", ("%IIS_BIN%\\" + InitializeTestMachine.PrivateFileName), null);
|
||||
if (TestUtility.IsOSAmd64)
|
||||
{
|
||||
if (_appPoolBitness == IISConfigUtility.AppPoolBitness.enable32Bit)
|
||||
{
|
||||
iisConfig.AddModule("AspNetCoreModule", (InitializeTestMachine.IisExpressAspnetcore_X86_path), null);
|
||||
}
|
||||
else
|
||||
{
|
||||
iisConfig.AddModule("AspNetCoreModule", (InitializeTestMachine.IisExpressAspnetcore_path), null);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
iisConfig.AddModule("AspNetCoreModule", (InitializeTestMachine.IisExpressAspnetcore_path), null);
|
||||
}
|
||||
}
|
||||
|
||||
iisConfig.CreateSite(siteName, RootAppContext.PhysicalPath, _siteId, TcpPort, appPoolName);
|
||||
iisConfig.CreateSite(siteName, HostNameBinding, RootAppContext.PhysicalPath, _siteId, TcpPort, appPoolName);
|
||||
iisConfig.CreateApp(siteName, AspNetCoreApp.Name, AspNetCoreApp.PhysicalPath, appPoolName);
|
||||
iisConfig.CreateApp(siteName, WebSocketApp.Name, WebSocketApp.PhysicalPath, appPoolName);
|
||||
iisConfig.CreateApp(siteName, URLRewriteApp.Name, URLRewriteApp.PhysicalPath, appPoolName);
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ namespace AspNetCoreModule.Test
|
|||
public class FunctionalTest : FunctionalTestHelper, IClassFixture<InitializeTestMachine>
|
||||
{
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.Default)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.noChange)]
|
||||
|
|
@ -23,7 +23,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.noChange, 5)]
|
||||
|
|
@ -36,7 +36,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit, 25, 19, false)]
|
||||
|
|
@ -57,7 +57,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit, 10)]
|
||||
|
|
@ -70,7 +70,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit)]
|
||||
|
|
@ -81,7 +81,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit)]
|
||||
|
|
@ -92,7 +92,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit)]
|
||||
|
|
@ -103,7 +103,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit)]
|
||||
|
|
@ -114,7 +114,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit)]
|
||||
|
|
@ -125,7 +125,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData("ANCMTestBar", "bar", "bar", IISConfigUtility.AppPoolBitness.enable32Bit)]
|
||||
|
|
@ -142,7 +142,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit)]
|
||||
|
|
@ -153,7 +153,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit)]
|
||||
|
|
@ -164,7 +164,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.Default)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit, "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789")]
|
||||
|
|
@ -175,7 +175,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.Default)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit)]
|
||||
|
|
@ -186,7 +186,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit, 10)]
|
||||
|
|
@ -197,7 +197,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit, "00:02:00")]
|
||||
|
|
@ -210,7 +210,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit)]
|
||||
|
|
@ -221,7 +221,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit, "dotnet.exe", "./")]
|
||||
|
|
@ -234,7 +234,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit, true)]
|
||||
|
|
@ -247,7 +247,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit, true, true)]
|
||||
|
|
@ -260,7 +260,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit)]
|
||||
|
|
@ -271,7 +271,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit)]
|
||||
|
|
@ -282,7 +282,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit, "MS-ASPNETCORE", "f")]
|
||||
|
|
@ -297,7 +297,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit, true)]
|
||||
|
|
@ -309,7 +309,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.noChange, false, DoAppVerifierTest_StartUpMode.UseGracefulShutdown, DoAppVerifierTest_ShutDownMode.RecycleAppPool, 1)]
|
||||
|
|
@ -325,7 +325,7 @@ namespace AspNetCoreModule.Test
|
|||
//////////////////////////////////////////////////////////
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[InlineData(IISConfigUtility.AppPoolBitness.enable32Bit)]
|
||||
|
|
@ -339,7 +339,7 @@ namespace AspNetCoreModule.Test
|
|||
// NOTE: below test scenarios are not valid for Win7 OS
|
||||
//////////////////////////////////////////////////////////
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "IIS does not support Websocket on Win7")]
|
||||
|
|
@ -353,7 +353,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
[ConditionalTheory]
|
||||
[ANCMTestSkipCondition("%ANCMTestFlags%")]
|
||||
[ANCMTestFlags(TestFlags.RequireRunAsAdministrator)]
|
||||
[OSSkipCondition(OperatingSystems.Linux)]
|
||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||
[OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "WAS does not handle private memory limitation with Job object on Win7")]
|
||||
|
|
@ -363,5 +363,5 @@ namespace AspNetCoreModule.Test
|
|||
{
|
||||
return DoRecylingAppPoolTest(appPoolBitness);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -23,68 +23,31 @@ using Microsoft.AspNetCore.Testing.xunit;
|
|||
namespace AspNetCoreModule.Test
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
|
||||
public class ANCMTestSkipCondition : Attribute, ITestCondition
|
||||
public class ANCMTestFlags : Attribute, ITestCondition
|
||||
{
|
||||
private readonly string _environmentVariableName;
|
||||
public ANCMTestSkipCondition(string environmentVariableName)
|
||||
private readonly string _attributeValue;
|
||||
public ANCMTestFlags(string attributeValue)
|
||||
{
|
||||
_environmentVariableName = environmentVariableName;
|
||||
_attributeValue = attributeValue.ToString();
|
||||
}
|
||||
|
||||
public bool IsMet
|
||||
{
|
||||
get
|
||||
{
|
||||
bool result = true;
|
||||
if (_environmentVariableName == InitializeTestMachine.ANCMTestFlagsEnvironmentVariable)
|
||||
if (InitializeTestMachine.GlobalTestFlags.Contains(TestFlags.SkipTest))
|
||||
{
|
||||
var envValue = Environment.ExpandEnvironmentVariables(_environmentVariableName);
|
||||
if (string.IsNullOrEmpty(envValue))
|
||||
{
|
||||
envValue = InitializeTestMachine.ANCMTestFlagsDefaultContext;
|
||||
}
|
||||
else
|
||||
{
|
||||
envValue += ";" + InitializeTestMachine.ANCMTestFlagsDefaultContext;
|
||||
}
|
||||
|
||||
// split tokens with ';'
|
||||
var tokens = envValue.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
foreach (string token in tokens)
|
||||
{
|
||||
if (token.Equals(InitializeTestMachine.ANCMTestFlagsDefaultContext, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
|
||||
{
|
||||
throw new System.InvalidOperationException("this should be started with x64 process mode on 64 bit machine");
|
||||
}
|
||||
|
||||
bool isElevated;
|
||||
WindowsIdentity identity = WindowsIdentity.GetCurrent();
|
||||
WindowsPrincipal principal = new WindowsPrincipal(identity);
|
||||
isElevated = principal.IsInRole(WindowsBuiltInRole.Administrator);
|
||||
if (!isElevated)
|
||||
{
|
||||
throw new System.ApplicationException("this should be started as an administrator");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
AdditionalInfo = ex.Message;
|
||||
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
if (token.Equals(InitializeTestMachine.ANCMTestFlagsTestSkipContext, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
AdditionalInfo = InitializeTestMachine.ANCMTestFlagsTestSkipContext + " is set";
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
AdditionalInfo = TestFlags.SkipTest + " is set";
|
||||
return false;
|
||||
}
|
||||
return result;
|
||||
|
||||
if (_attributeValue == TestFlags.RequireRunAsAdministrator
|
||||
&& !InitializeTestMachine.GlobalTestFlags.Contains(TestFlags.RunAsAdministrator))
|
||||
{
|
||||
AdditionalInfo = _attributeValue + " is not belong to the given global test context(" + InitializeTestMachine.GlobalTestFlags + ")";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -92,7 +55,7 @@ namespace AspNetCoreModule.Test
|
|||
{
|
||||
get
|
||||
{
|
||||
return $"Skip condition: {_environmentVariableName}: this test case is skipped becauset {AdditionalInfo}.";
|
||||
return $"Skip condition: ANCMTestFlags: this test case is skipped becauset {AdditionalInfo}.";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -998,7 +961,7 @@ namespace AspNetCoreModule.Test
|
|||
}
|
||||
|
||||
int y = Convert.ToInt32(TestUtility.GetProcessWMIAttributeValue("w3wp.exe", "Handle", userName));
|
||||
Assert.True(x == y && foundVSJit == false, "worker process is not recycled after 30 seconds");
|
||||
Assert.True(x == y && !foundVSJit, "worker process is not recycled after 30 seconds");
|
||||
|
||||
string backupPocessIdBackendProcess = await GetResponse(testSite.AspNetCoreApp.GetUri("GetProcessId"), HttpStatusCode.OK);
|
||||
string newPocessIdBackendProcess = backupPocessIdBackendProcess;
|
||||
|
|
@ -1322,7 +1285,7 @@ namespace AspNetCoreModule.Test
|
|||
string publicKey = iisConfig.GetCertificatePublicKey(thumbPrintForClientAuthentication, @"Cert:\CurrentUser\My");
|
||||
|
||||
bool setPasswordSeperately = false;
|
||||
if (testSite.IisServerType == ServerType.IISExpress && IISConfigUtility.IsIISInstalled == true)
|
||||
if (testSite.IisServerType == ServerType.IISExpress)
|
||||
{
|
||||
setPasswordSeperately = true;
|
||||
iisConfig.EnableOneToOneClientCertificateMapping(testSite.SiteName, ".\\" + userName, null, publicKey);
|
||||
|
|
@ -1934,7 +1897,7 @@ namespace AspNetCoreModule.Test
|
|||
TestUtility.ResetHelper(ResetHelperMode.KillWorkerProcess);
|
||||
|
||||
// cleanup windbg process incase it is still running
|
||||
if (testResult == false)
|
||||
if (!testResult)
|
||||
{
|
||||
TestUtility.RunPowershellScript("stop-process -Name windbg -Force -Confirm:$false 2> $null");
|
||||
}
|
||||
|
|
@ -1984,7 +1947,7 @@ namespace AspNetCoreModule.Test
|
|||
// Verify test result
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
if (DoVerifyDataSentAndReceived(websocketClient) == false)
|
||||
if (!DoVerifyDataSentAndReceived(websocketClient))
|
||||
{
|
||||
// retrying after 1 second sleeping
|
||||
Thread.Sleep(1000);
|
||||
|
|
@ -2210,7 +2173,7 @@ namespace AspNetCoreModule.Test
|
|||
result = reader.ReadToEnd();
|
||||
outputStream.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue