diff --git a/test/AspNetCoreModule.Test/Framework/IISConfigUtility.cs b/test/AspNetCoreModule.Test/Framework/IISConfigUtility.cs index 5e122c900b..284ef9148a 100644 --- a/test/AspNetCoreModule.Test/Framework/IISConfigUtility.cs +++ b/test/AspNetCoreModule.Test/Framework/IISConfigUtility.cs @@ -81,7 +81,7 @@ namespace AspNetCoreModule.Test.Framework public static void RestoreAppHostConfig(bool restoreFromMasterBackupFile = true) { - string masterBackupFileExtension = ".ancmtest.mastebackup"; + string masterBackupFileExtension = ".ancmtest.masterbackup"; string masterBackupFilePath = Strings.AppHostConfigPath + masterBackupFileExtension; string temporaryBackupFileExtenstion = null; string temporaryBackupFilePath = null; @@ -532,14 +532,14 @@ namespace AspNetCoreModule.Test.Framework bool result = true; if (servertype == ServerType.IIS) { - if (!File.Exists(InitializeTestMachine.IISAspnetcoreSchema_path)) + if (!File.Exists(InitializeTestMachine.FullIisAspnetcoreSchema_path)) { result = false; } } else { - if (!File.Exists(InitializeTestMachine.IISExpressAspnetcoreSchema_path)) + if (!File.Exists(InitializeTestMachine.IisExpressAspnetcoreSchema_path)) { result = false; } diff --git a/test/AspNetCoreModule.Test/Framework/InitializeTestMachine.cs b/test/AspNetCoreModule.Test/Framework/InitializeTestMachine.cs index 12df0ca755..0b9aee8cbf 100644 --- a/test/AspNetCoreModule.Test/Framework/InitializeTestMachine.cs +++ b/test/AspNetCoreModule.Test/Framework/InitializeTestMachine.cs @@ -17,24 +17,34 @@ namespace AspNetCoreModule.Test.Framework public static int SiteId = 40000; public const string PrivateFileName = "aspnetcore_private.dll"; - public static string Aspnetcore_path = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "system32", "inetsrv", PrivateFileName); - public static string Aspnetcore_path_original = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "system32", "inetsrv", "aspnetcore.dll"); - public static string Aspnetcore_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 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 IISExpressAspnetcoreSchema_path = Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles%"), "IIS Express", "config", "schema", "aspnetcore_schema.xml"); - public static string IISAspnetcoreSchema_path = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "system32", "inetsrv", "config", "schema", "aspnetcore_schema.xml"); + 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"); + public static string FullIisAspnetcoreSchema_path = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "system32", "inetsrv", "config", "schema", "aspnetcore_schema.xml"); public static int _referenceCount = 0; private static bool _InitializeTestMachineCompleted = false; private string _setupScriptPath = null; + private void CheckPerquisiteForANCMTEst() + { + if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess) + { + throw new System.InvalidOperationException(@"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"); + } + } public InitializeTestMachine() { _referenceCount++; if (_referenceCount == 1) { + CheckPerquisiteForANCMTEst(); + TestUtility.LogInformation("InitializeTestMachine::InitializeTestMachine() Start"); _InitializeTestMachineCompleted = false; @@ -160,7 +170,7 @@ namespace AspNetCoreModule.Test.Framework { using (var iisConfig = new IISConfigUtility(ServerType.IIS, null)) { - iisConfig.AddModule("AspNetCoreModule", Aspnetcore_path, null); + iisConfig.AddModule("AspNetCoreModule", FullIisAspnetcore_path, null); } } } @@ -269,16 +279,28 @@ 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, Aspnetcore_path, overWrite:true, ignoreExceptionWhileDeletingExistingFile:false); - TestUtility.FileCopy(from, IISExpressAspnetcore_path, overWrite: true, ignoreExceptionWhileDeletingExistingFile: false); + 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); if (TestUtility.IsOSAmd64) { from = Path.Combine(outputPath, "Win32", "aspnetcore.dll"); - TestUtility.FileCopy(from, Aspnetcore_X86_path, overWrite: true, ignoreExceptionWhileDeletingExistingFile: false); - TestUtility.FileCopy(from, IISExpressAspnetcore_X86_path, overWrite: true, ignoreExceptionWhileDeletingExistingFile: false); + 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); } + + updateSuccess = true; } catch diff --git a/test/AspNetCoreModule.Test/Framework/TestUtility.cs b/test/AspNetCoreModule.Test/Framework/TestUtility.cs index e7373e2299..67c6947e0f 100644 --- a/test/AspNetCoreModule.Test/Framework/TestUtility.cs +++ b/test/AspNetCoreModule.Test/Framework/TestUtility.cs @@ -437,25 +437,41 @@ namespace AspNetCoreModule.Test.Framework public static string GetMakeCertPath() { string makecertExeFilePath = "makecert.exe"; - var makecertExeFilePaths = new string[] + var makecertExeFilePaths = new Dictionary(); + makecertExeFilePaths.Add("default", Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles%"), "Windows Kits")); + if (IsOSAmd64) { - Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%"), "Windows Kits", "8.1", "bin", "x64", "makecert.exe"), - Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles%"), "Windows Kits", "8.1", "bin", "x86", "makecert.exe"), - Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%"), "Windows Kits", "8.0", "bin", "x64", "makecert.exe"), - Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles%"), "Windows Kits", "8.0", "bin", "x86", "makecert.exe"), - Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%"), "Windows SKDs", "Windows", "v7.1A", "bin", "x64", "makecert.exe"), - Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles%"), "Windows SKDs", "Windows", "v7.1A", "bin", "makecert.exe") - }; + makecertExeFilePaths.Add("wow64mode", Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%"), "Windows Kits")); + } - foreach (string item in makecertExeFilePaths) + foreach (var item in makecertExeFilePaths) { - if (File.Exists(item)) + string[] files = null; + if (!Directory.Exists(item.Value)) { - makecertExeFilePath = item; + continue; + } + files = Directory.GetFiles(item.Value, "makecert.exe", SearchOption.AllDirectories); + + foreach (string makecert in files) + { + if (makecert.Contains("arm")) + { + // arm process version is skipped here + continue; + } + makecertExeFilePath = makecert; + try + { + TestUtility.RunCommand(makecertExeFilePath, null, true, true); + } + catch + { + continue; + } break; } } - return makecertExeFilePath; } diff --git a/test/AspNetCoreModule.Test/Framework/TestWebSite.cs b/test/AspNetCoreModule.Test/Framework/TestWebSite.cs index cf062ef1e9..6c887dff34 100644 --- a/test/AspNetCoreModule.Test/Framework/TestWebSite.cs +++ b/test/AspNetCoreModule.Test/Framework/TestWebSite.cs @@ -187,6 +187,10 @@ namespace AspNetCoreModule.Test.Framework string tempSiteName = "ANCMTest_Temp"; int tempId = InitializeTestMachine.SiteId - 1; string argumentFileName = (new TestWebApplication("/", publishPathOutput, null)).GetArgumentFileName(); + if (string.IsNullOrEmpty(argumentFileName)) + { + argumentFileName = "AspNetCoreModule.TestSites.Standard.dll"; + } iisConfig.CreateSite(tempSiteName, publishPathOutput, tempId, tempId); iisConfig.SetANCMConfig(tempSiteName, "/", "arguments", Path.Combine(publishPathOutput, argumentFileName)); iisConfig.DeleteSite(tempSiteName); @@ -322,7 +326,6 @@ namespace AspNetCoreModule.Test.Framework catch { statusCode = "ExceptionError"; - } if ("200" == statusCode) { diff --git a/test/AspNetCoreModule.Test/FunctionalTestHelper.cs b/test/AspNetCoreModule.Test/FunctionalTestHelper.cs index ad2da5c40c..51e12a52c8 100644 --- a/test/AspNetCoreModule.Test/FunctionalTestHelper.cs +++ b/test/AspNetCoreModule.Test/FunctionalTestHelper.cs @@ -40,7 +40,7 @@ namespace AspNetCoreModule.Test if (_environmentVariableName == "%ANCMTestFlags%") { var envValue = Environment.ExpandEnvironmentVariables(_environmentVariableName); - if (envValue == "") + if (string.IsNullOrEmpty(envValue)) { envValue = "AdminAnd64Bit"; }