Test that we are running on specific runtime and using right version of store assemblies (#99)

This commit is contained in:
Pavel Krymets 2017-08-29 13:56:36 -07:00 committed by GitHub
parent 4601db9bf6
commit dbb9262d68
2 changed files with 44 additions and 12 deletions

View File

@ -8,23 +8,31 @@ namespace Microsoft.AspNetCore.AzureAppServices.FunctionalTests
{ {
public class PathUtilities public class PathUtilities
{ {
public static string[] GetStoreModules(string dotnetPath) public static StoreModuleInfo[] GetStoreModules(string dotnetPath)
{ {
var dotnetHome = Path.GetDirectoryName(dotnetPath); var dotnetHome = Path.GetDirectoryName(dotnetPath);
return new DirectoryInfo(Path.Combine(dotnetHome, "store", "x64", "netcoreapp2.0")) return new DirectoryInfo(Path.Combine(dotnetHome, "store", "x64", "netcoreapp2.0"))
.GetDirectories() .GetDirectories()
.Select(d => d.Name) .Select(d => new StoreModuleInfo
{
Name = d.Name,
Versions = d.GetDirectories().Select(GetName).ToArray()
})
.ToArray(); .ToArray();
} }
public static string[] GetSharedRuntimeAssemblies(string dotnetPath) public static string[] GetSharedRuntimeAssemblies(string dotnetPath, out string runtimeVersion)
{ {
var dotnetHome = Path.GetDirectoryName(dotnetPath); var dotnetHome = Path.GetDirectoryName(dotnetPath);
return new DirectoryInfo(Path.Combine(dotnetHome, "shared", "Microsoft.NETCore.App")) var runtimeDirectory = new DirectoryInfo(Path.Combine(dotnetHome, "shared", "Microsoft.NETCore.App"))
.GetDirectories() .GetDirectories()
.Single() .Single();
runtimeVersion = runtimeDirectory.Name;
return runtimeDirectory
.GetFiles("*.dll") .GetFiles("*.dll")
.Select(f => f.Name) .Select(GetName)
.ToArray(); .ToArray();
} }
@ -36,5 +44,13 @@ namespace Microsoft.AspNetCore.AzureAppServices.FunctionalTests
.Single() .Single()
.Name; .Name;
} }
private static string GetName(FileSystemInfo info) => info.Name;
public class StoreModuleInfo
{
public string Name { get; set; }
public string[] Versions { get; set; }
}
} }
} }

View File

@ -86,21 +86,37 @@ namespace Microsoft.AspNetCore.AzureAppServices.FunctionalTests
private void ValidateRuntimeInfo(RuntimeInfo runtimeInfo, string dotnetPath) private void ValidateRuntimeInfo(RuntimeInfo runtimeInfo, string dotnetPath)
{ {
var storeModules = PathUtilities.GetStoreModules(dotnetPath); var storeModules = PathUtilities.GetStoreModules(dotnetPath);
var runtimeModules = PathUtilities.GetSharedRuntimeAssemblies(dotnetPath, out var runtimeVersion);
var runtimeModules = PathUtilities.GetSharedRuntimeAssemblies(dotnetPath);
foreach (var runtimeInfoModule in runtimeInfo.Modules) foreach (var runtimeInfoModule in runtimeInfo.Modules)
{ {
if (storeModules.Any(f => runtimeInfoModule.ModuleName.StartsWith(f, StringComparison.InvariantCultureIgnoreCase))) var moduleName = Path.GetFileNameWithoutExtension(runtimeInfoModule.ModuleName);
// Check if module should come from the store, verify that one of the expected versions is loaded
var storeModule = storeModules.SingleOrDefault(f => moduleName.Equals(f.Name, StringComparison.InvariantCultureIgnoreCase));
if (storeModule != null)
{ {
Assert.Contains("store\\x86\\netcoreapp2.0\\", runtimeInfoModule.FileName); var expectedVersion = false;
foreach (var version in storeModule.Versions)
{
var expectedModulePath = $"store\\x86\\netcoreapp2.0\\{storeModule.Name}\\{version}";
if (runtimeInfoModule.FileName.IndexOf(expectedModulePath, StringComparison.InvariantCultureIgnoreCase) != -1)
{
expectedVersion = true;
break;
}
}
Assert.True(expectedVersion, $"{runtimeInfoModule.FileName} doesn't match expected versions: {string.Join(",", storeModule.Versions)}");
} }
// Verify that modules that we expect to come from runtime actually come from there
// Native modules would prefer to be loaded from windows folder, skip them // Native modules would prefer to be loaded from windows folder, skip them
if (runtimeModules.Any(f => runtimeInfoModule.ModuleName.StartsWith(f, StringComparison.InvariantCultureIgnoreCase)) && if (runtimeModules.Any(rutimeModule => runtimeInfoModule.ModuleName.Equals(rutimeModule, StringComparison.InvariantCultureIgnoreCase)) &&
runtimeInfoModule.FileName.IndexOf("windows\\system32", StringComparison.InvariantCultureIgnoreCase) == -1) runtimeInfoModule.FileName.IndexOf("windows\\system32", StringComparison.InvariantCultureIgnoreCase) == -1)
{ {
Assert.Contains("shared\\Microsoft.NETCore.App\\", runtimeInfoModule.FileName); Assert.Contains($"shared\\Microsoft.NETCore.App\\{runtimeVersion}", runtimeInfoModule.FileName);
} }
} }
} }