Updated runtime store tests to use the restored Build.RS package instead of downloading it explicitly
This commit is contained in:
parent
f8ccf05715
commit
2c8e1fdc15
|
|
@ -7,7 +7,7 @@
|
||||||
<TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks>
|
<TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks>
|
||||||
<DefineConstants>$(DefineConstants);DEMO</DefineConstants>
|
<DefineConstants>$(DefineConstants);DEMO</DefineConstants>
|
||||||
<MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
|
<MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
|
||||||
<RuntimeIdentifiers Condition="'$(MUSICSTORE_ASPNETCORE_STORE_FEED)' == ''">win7-x86;win7-x64;linux-x64;osx-x64</RuntimeIdentifiers>
|
<RuntimeIdentifiers Condition="'$(RUN_RUNTIME_STORE_TESTS)' != 'true'">win7-x86;win7-x64;linux-x64;osx-x64</RuntimeIdentifiers>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,10 @@
|
||||||
<None Include="remoteDeploymentConfig.json" CopyToOutputDirectory="PreserveNewest" />
|
<None Include="remoteDeploymentConfig.json" CopyToOutputDirectory="PreserveNewest" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup Condition="'$(RUN_RUNTIME_STORE_TESTS)' == 'true'">
|
||||||
|
<PackageReference Include="Build.RS" Version="$(AspNetCoreVersion)" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="NuGet.Packaging" Version="$(NuGetPackagesVersion)" />
|
<PackageReference Include="NuGet.Packaging" Version="$(NuGetPackagesVersion)" />
|
||||||
<PackageReference Include="NuGet.Protocol.Core.v3" Version="$(NuGetPackagesVersion)" />
|
<PackageReference Include="NuGet.Protocol.Core.v3" Version="$(NuGetPackagesVersion)" />
|
||||||
|
|
|
||||||
|
|
@ -3,25 +3,18 @@ using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.IO.Compression;
|
using System.IO.Compression;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Threading;
|
|
||||||
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
using Microsoft.AspNetCore.Server.IntegrationTesting;
|
||||||
|
using Microsoft.Extensions.DependencyModel;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using NuGet.Configuration;
|
|
||||||
using NuGet.Packaging.Core;
|
|
||||||
using NuGet.Protocol;
|
|
||||||
using NuGet.Protocol.Core.Types;
|
|
||||||
using NuGet.Versioning;
|
|
||||||
|
|
||||||
namespace E2ETests
|
namespace E2ETests
|
||||||
{
|
{
|
||||||
internal class Store : IDisposable
|
internal class Store : IDisposable
|
||||||
{
|
{
|
||||||
public const string MusicStoreAspNetCoreStoreFeed = "MUSICSTORE_ASPNETCORE_STORE_FEED";
|
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
private string _storeParentDir;
|
||||||
private string _storeDir;
|
private string _storeDir;
|
||||||
private string _tempDir;
|
|
||||||
|
|
||||||
public Store(ILoggerFactory loggerFactory)
|
public Store(ILoggerFactory loggerFactory)
|
||||||
{
|
{
|
||||||
|
|
@ -30,11 +23,11 @@ namespace E2ETests
|
||||||
|
|
||||||
public string CreateStore()
|
public string CreateStore()
|
||||||
{
|
{
|
||||||
var storeParentDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
_storeParentDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
||||||
|
|
||||||
InstallStore(storeParentDir);
|
InstallStore(_storeParentDir);
|
||||||
|
|
||||||
_storeDir = Path.Combine(storeParentDir, "store");
|
_storeDir = Path.Combine(_storeParentDir, "store");
|
||||||
|
|
||||||
return _storeDir;
|
return _storeDir;
|
||||||
}
|
}
|
||||||
|
|
@ -52,16 +45,10 @@ namespace E2ETests
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Deleting the store...");
|
_logger.LogInformation($"Deleting the store directory {_storeParentDir}...");
|
||||||
|
|
||||||
//RetryHelper.RetryOperation(
|
|
||||||
// () => Directory.Delete(_storeDir, recursive: true),
|
|
||||||
// e => _logger.LogError($"Failed to delete directory : {e.Message}"),
|
|
||||||
// retryCount: 3,
|
|
||||||
// retryDelayMilliseconds: 100);
|
|
||||||
|
|
||||||
RetryHelper.RetryOperation(
|
RetryHelper.RetryOperation(
|
||||||
() => Directory.Delete(_tempDir, recursive: true),
|
() => Directory.Delete(_storeParentDir, recursive: true),
|
||||||
e => _logger.LogError($"Failed to delete directory : {e.Message}"),
|
e => _logger.LogError($"Failed to delete directory : {e.Message}"),
|
||||||
retryCount: 3,
|
retryCount: 3,
|
||||||
retryDelayMilliseconds: 100);
|
retryDelayMilliseconds: 100);
|
||||||
|
|
@ -70,80 +57,29 @@ namespace E2ETests
|
||||||
|
|
||||||
public static bool IsEnabled()
|
public static bool IsEnabled()
|
||||||
{
|
{
|
||||||
var storeFeed = Environment.GetEnvironmentVariable(MusicStoreAspNetCoreStoreFeed);
|
var storeFeed = Environment.GetEnvironmentVariable("RUN_RUNTIME_STORE_TESTS");
|
||||||
return !string.IsNullOrEmpty(storeFeed);
|
return !string.IsNullOrEmpty(storeFeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InstallStore(string storeParentDir)
|
private void InstallStore(string storeParentDir)
|
||||||
{
|
{
|
||||||
var packageId = "Build.RS";
|
var packageId = "Build.RS";
|
||||||
var storeFeed = Environment.GetEnvironmentVariable(MusicStoreAspNetCoreStoreFeed);
|
|
||||||
if (string.IsNullOrEmpty(storeFeed))
|
|
||||||
{
|
|
||||||
_logger.LogError("The feed for the store package was not provided." +
|
|
||||||
$"Set the environment variable '{MusicStoreAspNetCoreStoreFeed}' and try again.");
|
|
||||||
|
|
||||||
throw new InvalidOperationException(
|
var runtimeStoreLibrary = DependencyContext.Default.RuntimeLibraries
|
||||||
$"The environment variable '{MusicStoreAspNetCoreStoreFeed}' is not defined or is empty.");
|
.Where(library => string.Equals("Build.RS", library.Name, StringComparison.OrdinalIgnoreCase))
|
||||||
}
|
.FirstOrDefault();
|
||||||
else
|
if (runtimeStoreLibrary == null)
|
||||||
{
|
{
|
||||||
_logger.LogInformation($"Using the feed {storeFeed} for the store package");
|
throw new InvalidOperationException($"Could not find the package with id '{packageId}' in {nameof(DependencyContext)}.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the version information from the attribute which is typically the same as the nuget package version
|
var runtimeStoreVersion = runtimeStoreLibrary.Version;
|
||||||
// Example:
|
var restoredRuntimeStorePackageDir = Path.Combine(GetNugetPackagesRoot(), runtimeStoreLibrary.Path);
|
||||||
// [assembly: AssemblyInformationalVersion("2.0.0-preview1-24847")]
|
|
||||||
var aspnetCoreHttpAssembly = typeof(Microsoft.AspNetCore.Http.FormCollection).Assembly;
|
|
||||||
var obj = aspnetCoreHttpAssembly.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), inherit: false).FirstOrDefault();
|
|
||||||
var assemblyInformationVersionAttribute = obj as AssemblyInformationalVersionAttribute;
|
|
||||||
if (assemblyInformationVersionAttribute == null)
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException($"Could not find {nameof(assemblyInformationVersionAttribute)} from the assembly {aspnetCoreHttpAssembly.FullName}");
|
|
||||||
}
|
|
||||||
|
|
||||||
_logger.LogInformation($"Downloading package with id {packageId} and version {assemblyInformationVersionAttribute.InformationalVersion} from feed {storeFeed}");
|
|
||||||
|
|
||||||
_tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
|
|
||||||
var sourceRepository = Repository.Factory.GetCoreV2(new PackageSource(storeFeed));
|
|
||||||
var downloadResource = sourceRepository.GetResource<DownloadResource>();
|
|
||||||
var result = downloadResource.GetDownloadResourceResultAsync(
|
|
||||||
new PackageIdentity(packageId, NuGetVersion.Parse(assemblyInformationVersionAttribute.InformationalVersion)),
|
|
||||||
new PackageDownloadContext(
|
|
||||||
new SourceCacheContext() { NoCache = true, DirectDownload = true },
|
|
||||||
_tempDir,
|
|
||||||
directDownload: true),
|
|
||||||
null,
|
|
||||||
NuGet.Common.NullLogger.Instance,
|
|
||||||
CancellationToken.None)
|
|
||||||
.Result;
|
|
||||||
|
|
||||||
if (result.Status != DownloadResourceResultStatus.Available)
|
|
||||||
{
|
|
||||||
_logger.LogError($"Failed to download the package. Status: {result.Status}");
|
|
||||||
throw new InvalidOperationException("Unable to download the store package");
|
|
||||||
}
|
|
||||||
|
|
||||||
var zipFile = Path.Combine(_tempDir, "Build.RS.zip");
|
|
||||||
using (var targetStream = File.Create(zipFile))
|
|
||||||
{
|
|
||||||
using (result.PackageStream)
|
|
||||||
{
|
|
||||||
result.PackageStream.CopyTo(targetStream);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_logger.LogInformation($"Package downloaded and saved as zip file at {zipFile}");
|
|
||||||
|
|
||||||
var zipFileExtracted = Path.Combine(_tempDir, "extracted");
|
|
||||||
ZipFile.ExtractToDirectory(zipFile, zipFileExtracted);
|
|
||||||
|
|
||||||
_logger.LogInformation($"Package extracted at {zipFileExtracted}");
|
|
||||||
|
|
||||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||||
{
|
{
|
||||||
string fileNameWithExtension = null;
|
string fileNameWithExtension = null;
|
||||||
foreach (var file in new DirectoryInfo(zipFileExtracted).GetFiles())
|
foreach (var file in new DirectoryInfo(restoredRuntimeStorePackageDir).GetFiles())
|
||||||
{
|
{
|
||||||
if (file.Name.StartsWith($"{packageId}.winx64"))
|
if (file.Name.StartsWith($"{packageId}.winx64"))
|
||||||
{
|
{
|
||||||
|
|
@ -152,7 +88,7 @@ namespace E2ETests
|
||||||
var mvcCoreDllEntry = zipArchive.Entries
|
var mvcCoreDllEntry = zipArchive.Entries
|
||||||
.Where(entry => string.Equals(entry.Name, "Microsoft.AspNetCore.Mvc.Core.dll", StringComparison.OrdinalIgnoreCase))
|
.Where(entry => string.Equals(entry.Name, "Microsoft.AspNetCore.Mvc.Core.dll", StringComparison.OrdinalIgnoreCase))
|
||||||
.FirstOrDefault();
|
.FirstOrDefault();
|
||||||
if (mvcCoreDllEntry != null && mvcCoreDllEntry.FullName.Contains(assemblyInformationVersionAttribute.InformationalVersion))
|
if (mvcCoreDllEntry != null && mvcCoreDllEntry.FullName.Contains(runtimeStoreVersion))
|
||||||
{
|
{
|
||||||
fileNameWithExtension = file.Name;
|
fileNameWithExtension = file.Name;
|
||||||
break;
|
break;
|
||||||
|
|
@ -163,11 +99,10 @@ namespace E2ETests
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(fileNameWithExtension))
|
if (string.IsNullOrEmpty(fileNameWithExtension))
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException(
|
throw new InvalidOperationException($"Could not find a store zip file with version {runtimeStoreVersion}");
|
||||||
$"Could not find a store zip file with version {assemblyInformationVersionAttribute.InformationalVersion}");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var storeZipFile = Path.Combine(zipFileExtracted, fileNameWithExtension);
|
var storeZipFile = Path.Combine(restoredRuntimeStorePackageDir, fileNameWithExtension);
|
||||||
ZipFile.ExtractToDirectory(storeZipFile, storeParentDir);
|
ZipFile.ExtractToDirectory(storeZipFile, storeParentDir);
|
||||||
_logger.LogInformation($"Extracted the store zip file '{storeZipFile}' to '{storeParentDir}'");
|
_logger.LogInformation($"Extracted the store zip file '{storeZipFile}' to '{storeParentDir}'");
|
||||||
}
|
}
|
||||||
|
|
@ -184,7 +119,7 @@ namespace E2ETests
|
||||||
}
|
}
|
||||||
|
|
||||||
string fileNameWithExtension = null;
|
string fileNameWithExtension = null;
|
||||||
foreach (var file in new DirectoryInfo(zipFileExtracted).GetFiles())
|
foreach (var file in new DirectoryInfo(restoredRuntimeStorePackageDir).GetFiles())
|
||||||
{
|
{
|
||||||
if (file.Name.StartsWith(packageIdPrefix)
|
if (file.Name.StartsWith(packageIdPrefix)
|
||||||
&& !string.Equals($"{packageIdPrefix}.tar.gz", file.Name, StringComparison.OrdinalIgnoreCase))
|
&& !string.Equals($"{packageIdPrefix}.tar.gz", file.Name, StringComparison.OrdinalIgnoreCase))
|
||||||
|
|
@ -197,7 +132,7 @@ namespace E2ETests
|
||||||
if (string.IsNullOrEmpty(fileNameWithExtension))
|
if (string.IsNullOrEmpty(fileNameWithExtension))
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException(
|
throw new InvalidOperationException(
|
||||||
$"Could not find a store zip file with version {assemblyInformationVersionAttribute.InformationalVersion}");
|
$"Could not find a store zip file with version {runtimeStoreVersion}");
|
||||||
}
|
}
|
||||||
|
|
||||||
Directory.CreateDirectory(storeParentDir);
|
Directory.CreateDirectory(storeParentDir);
|
||||||
|
|
@ -225,5 +160,31 @@ namespace E2ETests
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GetNugetPackagesRoot()
|
||||||
|
{
|
||||||
|
var packageDirectory = Environment.GetEnvironmentVariable("NUGET_PACKAGES");
|
||||||
|
if (!string.IsNullOrEmpty(packageDirectory))
|
||||||
|
{
|
||||||
|
return packageDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
string basePath;
|
||||||
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||||
|
{
|
||||||
|
basePath = Environment.GetEnvironmentVariable("USERPROFILE");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
basePath = Environment.GetEnvironmentVariable("HOME");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(basePath))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Path.Combine(basePath, ".nuget", "packages");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,9 @@ namespace E2ETests.SmokeTestsUsingStore
|
||||||
_output = output;
|
_output = output;
|
||||||
}
|
}
|
||||||
|
|
||||||
[EnvironmentVariableSkipCondition(Store.MusicStoreAspNetCoreStoreFeed, null, SkipOnMatch = false)]
|
[SkipIfEnvironmentVariableNotEnabled("RUN_RUNTIME_STORE_TESTS")]
|
||||||
[ConditionalFact]
|
[ConditionalFact]
|
||||||
[Trait("smoketests", "usestore1")]
|
[Trait("smoketests", "usestore")]
|
||||||
public async Task DefaultLocation_Kestrel()
|
public async Task DefaultLocation_Kestrel()
|
||||||
{
|
{
|
||||||
var tests = new TestHelper(_output);
|
var tests = new TestHelper(_output);
|
||||||
|
|
@ -32,7 +32,7 @@ namespace E2ETests.SmokeTestsUsingStore
|
||||||
|
|
||||||
[OSSkipCondition(OperatingSystems.Linux)]
|
[OSSkipCondition(OperatingSystems.Linux)]
|
||||||
[OSSkipCondition(OperatingSystems.MacOSX)]
|
[OSSkipCondition(OperatingSystems.MacOSX)]
|
||||||
[EnvironmentVariableSkipCondition(Store.MusicStoreAspNetCoreStoreFeed, null, SkipOnMatch = false)]
|
[SkipIfEnvironmentVariableNotEnabled("RUN_RUNTIME_STORE_TESTS")]
|
||||||
[ConditionalFact]
|
[ConditionalFact]
|
||||||
[Trait("smoketests", "usestore")]
|
[Trait("smoketests", "usestore")]
|
||||||
public async Task DefaultLocation_WebListener()
|
public async Task DefaultLocation_WebListener()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue