public async Task LoadUnmanagedFromDependencyContext_PreferInstalledRuntime_Returns_RuntimeCandidate() { var testContext = await SetupLoadedPluginTextContext((plc) => plc.NativeDependencyLoadPreference = NativeDependencyLoadPreference.PreferInstalledRuntime); var loadContext = testContext.Sut(); var initialPluginLoadDirectory = testContext.InitialPluginLoadDirectory; var resolver = testContext.GetMock <IAssemblyDependencyResolver>(); var pluginDependencyContext = testContext.GetMock <IPluginDependencyContext>(); var pluginDependencyResolver = testContext.GetMock <IPluginDependencyResolver>(); var nativeDependency = "Nativelib.dll"; var pathToDependency = "/var/path/to/dependency/Nativelib.dll"; var runtimeCandidate = "/var/path/to/runtime/Nativelib.dll"; resolver.Setup(r => r.ResolveUnmanagedDllToPath(nativeDependency)).Returns((string)null); var platformDependency = new PlatformDependency { DependencyNameWithoutExtension = "Nativelib" }; var additionalProbingPaths = Enumerable.Empty <string>(); pluginDependencyContext.SetupGet(c => c.AdditionalProbingPaths).Returns(additionalProbingPaths); pluginDependencyContext.SetupGet(c => c.PlatformDependencies).Returns(new[] { platformDependency, new PlatformDependency { DependencyNameWithoutExtension = "OtherNativelib" } }); pluginDependencyResolver .Setup(r => r.ResolvePlatformDependencyToPath(initialPluginLoadDirectory, platformDependency, additionalProbingPaths)) .Returns(pathToDependency); pluginDependencyResolver.Setup(r => r.ResolvePlatformDependencyPathToRuntime(It.IsAny <PluginPlatformVersion>(), pathToDependency)).Returns(runtimeCandidate); var result = InvokeProtectedMethodOnLoadContextAndGetResult <ValueOrProceed <string> >( loadContext, "LoadUnmanagedFromDependencyContext", new object[] { initialPluginLoadDirectory, nativeDependency }); Assert.IsNotNull(result.Value); Assert.AreEqual(runtimeCandidate, result.Value); Assert.IsFalse(result.CanProceed); }
public virtual string ResolvePlatformDependencyToPath(string dependencyPath, IEnumerable <string> probingPaths, PlatformDependency dependency) { foreach (var candidate in runtimePlatformContext.GetPlatformDependencyNames(dependency.DependencyNameWithoutExtension)) { var candidateLocation = Path.Combine(dependencyPath, candidate); if (File.Exists(candidateLocation)) { return(candidateLocation); } } var local = Path.Combine(dependencyPath, dependency.DependencyPath); if (File.Exists(local)) { return(local); } foreach (var searchPath in probingPaths) { var candidate = Path.Combine(searchPath, dependency.ProbingPath); if (File.Exists(candidate)) { return(candidate); } } return(null); }
public string ResolvePlatformDependencyToPath(string dependencyPath, IEnumerable <string> probingPaths, PlatformDependency dependency) { foreach (var candidate in runtimePlatformContext.GetPlatformDependencyNames(dependency.DependencyNameWithoutExtension)) { var platformNetworkFileLocation = $"{this.options.BaseUrl}/{candidate}"; var platformNetworkFile = NetworkUtil.Download(this.httpClient, platformNetworkFileLocation); if (platformNetworkFile != null) { var localLocation = NetworkUtil.SaveToTempFolder(this.tempPathProvider.ProvideTempPath(Path.GetFileName(candidate)), platformNetworkFile); return(localLocation); } } var networkFileLocation = $"{this.options.BaseUrl}/{dependency.DependencyPath}"; var networkFile = NetworkUtil.Download(this.httpClient, networkFileLocation); if (networkFile != null) { var localLocation = NetworkUtil.SaveToTempFolder(this.tempPathProvider.ProvideTempPath(Path.GetFileName(dependency.DependencyPath)), networkFile); return(localLocation); } foreach (var searchPath in probingPaths) { networkFileLocation = $"{this.options.BaseUrl}/{Path.Combine(searchPath, dependency.ProbingPath)}"; networkFile = NetworkUtil.Download(this.httpClient, networkFileLocation); if (networkFile != null) { var localLocation = NetworkUtil.SaveToTempFolder(this.tempPathProvider.ProvideTempPath(Path.GetFileName(dependency.ProbingPath)), networkFile); return(localLocation); } } return(null); }