internal static async Task <PluginFindPackageByIdResourceTest> CreateAsync( MessageResponseCode responseCode = MessageResponseCode.Error) { var packageIdentity = new PackageIdentity(id: "a", version: NuGetVersion.Parse("1.0.0")); var testDirectory = TestDirectory.Create(); var packageSource = new PackageSource("http://unit.test"); var package = await SimpleTestPackageUtility.CreateFullPackageAsync( testDirectory.Path, packageIdentity.Id, packageIdentity.Version.ToNormalizedString()); var packageBytes = File.ReadAllBytes(package.FullName); var plugin = new Mock <IPlugin>(); var dispatcher = new Mock <IMessageDispatcher>(); var connection = new Mock <IConnection>(); dispatcher.SetupGet(x => x.RequestHandlers) .Returns(new RequestHandlers()); connection.SetupGet(x => x.MessageDispatcher) .Returns(dispatcher.Object); var versions = responseCode == MessageResponseCode.Success ? new[] { "1.0.0", "2.0.0", "3.0.0" } : null; var response = new GetPackageVersionsResponse(responseCode, versions); connection.Setup(x => x.SendRequestAndReceiveResponseAsync <GetPackageVersionsRequest, GetPackageVersionsResponse>( It.Is <MessageMethod>(m => m == MessageMethod.GetPackageVersions), It.Is <GetPackageVersionsRequest>( c => string.Equals(c.PackageId, packageIdentity.Id, StringComparison.OrdinalIgnoreCase) && c.PackageSourceRepository == packageSource.Source), It.IsAny <CancellationToken>())) .ReturnsAsync(response); plugin.SetupGet(x => x.Connection) .Returns(connection.Object); var utilities = new Mock <IPluginMulticlientUtilities>(); var credentialService = new Mock <ICredentialService>(); var credentialsProvider = new GetCredentialsRequestHandler( plugin.Object, proxy: null, credentialService: credentialService.Object); var resource = new PluginFindPackageByIdResource( plugin.Object, utilities.Object, packageSource); return(new PluginFindPackageByIdResourceTest( resource, package, packageIdentity, connection, new SourceCacheContext(), testDirectory)); }
private PluginFindPackageByIdResourceTest( PluginFindPackageByIdResource resource, FileInfo package, PackageIdentity packageIdentity, Mock <IConnection> connection, SourceCacheContext sourceCacheContext, TestDirectory testDirectory) { Resource = resource; Package = package; PackageIdentity = packageIdentity; Connection = connection; SourceCacheContext = sourceCacheContext; TestDirectory = testDirectory; }
/// <summary> /// Asynchronously attempts to create a resource for the specified source repository. /// </summary> /// <param name="source">A source repository.</param> /// <param name="cancellationToken">A cancellation token.</param> /// <returns>A task that represents the asynchronous operation. /// The task result (<see cref="Task{TResult}.Result" />) returns a Tuple<bool, INuGetResource></returns> /// <exception cref="ArgumentNullException">Thrown if <paramref name="source"/> is <c>null</c>.</exception> /// <exception cref="OperationCanceledException">Thrown if <paramref name="cancellationToken"/> /// is cancelled.</exception> public override async Task <Tuple <bool, INuGetResource> > TryCreate( SourceRepository source, CancellationToken cancellationToken) { if (source == null) { throw new ArgumentNullException(nameof(source)); } cancellationToken.ThrowIfCancellationRequested(); PluginFindPackageByIdResource resource = null; var pluginResource = await source.GetResourceAsync <PluginResource>(cancellationToken); if (pluginResource != null) { var serviceIndexResource = await source.GetResourceAsync <ServiceIndexResourceV3>(cancellationToken); var httpHandlerResource = await source.GetResourceAsync <HttpHandlerResource>(cancellationToken); if (serviceIndexResource != null && httpHandlerResource != null) { var result = await pluginResource.GetPluginAsync(OperationClaim.DownloadPackage, cancellationToken); if (result != null) { AddOrUpdateGetCredentialsRequestHandler(result.Plugin, source, httpHandlerResource); AddOrUpdateGetServiceIndexRequestHandler(result.Plugin, source); resource = new PluginFindPackageByIdResource( result.Plugin, result.PluginMulticlientUtilities, source.PackageSource); } } } return(new Tuple <bool, INuGetResource>(resource != null, resource)); }