public async Task SendRequestAndReceiveResponseAsync_TimesOut() { using (var test = await PluginTest.CreateAsync()) { Assert.Equal(PluginProtocolConstants.CurrentVersion, test.Plugin.Connection.ProtocolVersion); var serviceIndex = JObject.Parse("{}"); var payload = new GetOperationClaimsRequest(packageSourceRepository: "a", serviceIndex: serviceIndex); var stopwatch = Stopwatch.StartNew(); await Assert.ThrowsAsync <TaskCanceledException>( () => test.Plugin.Connection.SendRequestAndReceiveResponseAsync <GetOperationClaimsRequest, GetOperationClaimsResponse>( MessageMethod.GetOperationClaims, payload, test.CancellationToken)); var requestTimeout = test.Plugin.Connection.Options.RequestTimeout; var low = requestTimeout.Add(TimeSpan.FromSeconds(-2)); var high = TimeSpan.FromSeconds(requestTimeout.TotalSeconds * 2); Assert.InRange(stopwatch.Elapsed, low, high); } }
private async Task <IReadOnlyList <OperationClaim> > GetPluginOperationClaimsAsync( IPlugin plugin, string packageSourceRepository, JObject serviceIndex, CancellationToken cancellationToken) { if (plugin.Connection.ProtocolVersion.Equals(Plugins.ProtocolConstants.Version100) && (string.IsNullOrEmpty(packageSourceRepository) || serviceIndex == null)) { throw new ArgumentException("Cannot invoke get operation claims with null arguments on a " + Plugins.ProtocolConstants.Version100 + " plugin"); } var payload = new GetOperationClaimsRequest(packageSourceRepository, serviceIndex); var response = await plugin.Connection.SendRequestAndReceiveResponseAsync <GetOperationClaimsRequest, GetOperationClaimsResponse>( MessageMethod.GetOperationClaims, payload, cancellationToken); if (response == null) { return(Array.Empty <OperationClaim>()); } return(response.Claims); }
public async Task GetOperationClaims_ReturnsSupportedClaims() { using (var test = await PluginTest.CreateAsync()) { Assert.Equal(PluginProtocolConstants.CurrentVersion, test.Plugin.Connection.ProtocolVersion); // Send canned response var responseSenderTask = Task.Run(() => test.ResponseSender.StartSendingAsync(test.CancellationToken)); await test.ResponseSender.SendAsync( MessageType.Response, MessageMethod.GetOperationClaims, new GetOperationClaimsResponse(new OperationClaim[] { OperationClaim.DownloadPackage })); var serviceIndex = JObject.Parse("{}"); var payload = new GetOperationClaimsRequest(packageSourceRepository: "a", serviceIndex: serviceIndex); var response = await test.Plugin.Connection.SendRequestAndReceiveResponseAsync <GetOperationClaimsRequest, GetOperationClaimsResponse>( MessageMethod.GetOperationClaims, payload, test.CancellationToken); Assert.NotNull(response); Assert.Equal(1, response.Claims.Count); Assert.Equal(OperationClaim.DownloadPackage, response.Claims[0]); } }
public void Constructor_InitializesProperties() { var request = new GetOperationClaimsRequest(_packageSourceRepository, _serviceIndexJson); Assert.Equal(_packageSourceRepository, request.PackageSourceRepository); Assert.Equal("{\"B\":\"C\"}", request.ServiceIndex.ToString(Formatting.None)); }
public void JsonSerialization_ReturnsCorrectJson() { var request = new GetOperationClaimsRequest(_packageSourceRepository, _serviceIndexJson); var json = TestUtilities.Serialize(request); Assert.Equal("{\"PackageSourceRepository\":\"A\",\"ServiceIndex\":{\"B\":\"C\"}}", json); }
public async Task Fault_WritesExceptionToConsole() { using (var test = await PluginTest.CreateAsync()) using (var closedEvent = new ManualResetEventSlim(initialState: false)) { Assert.Equal(PluginProtocolConstants.CurrentVersion, test.Plugin.Connection.ProtocolVersion); test.Plugin.Closed += (object sender, EventArgs e) => { closedEvent.Set(); }; // Send canned response // This response is unexpected and will generate a protocol error. var responseSenderTask = Task.Run(() => test.ResponseSender.StartSendingAsync(test.CancellationToken)); await test.ResponseSender.SendAsync( MessageType.Response, MessageMethod.Initialize, new InitializeResponse(MessageResponseCode.Success)); var serviceIndex = JObject.Parse("{}"); var payload = new GetOperationClaimsRequest(packageSourceRepository: "a", serviceIndex: serviceIndex); string consoleOutput; using (var spy = new ConsoleOutputSpy()) { var requestTask = Task.Run( () => test.Plugin.Connection.SendRequestAndReceiveResponseAsync <GetOperationClaimsRequest, GetOperationClaimsResponse>( MessageMethod.GetOperationClaims, payload, test.CancellationToken)); closedEvent.Wait(); consoleOutput = spy.GetOutput(); } Assert.Contains( $"Terminating plugin '{test.Plugin.Name}' due to an unrecoverable fault: NuGet.Protocol.Plugins.ProtocolException: A plugin protocol exception occurred.", consoleOutput); } }
private async Task <IReadOnlyList <OperationClaim> > GetPluginOperationClaimsAsync( IPlugin plugin, string packageSourceRepository, JObject serviceIndex, CancellationToken cancellationToken) { var payload = new GetOperationClaimsRequest(packageSourceRepository, serviceIndex); var response = await plugin.Connection.SendRequestAndReceiveResponseAsync <GetOperationClaimsRequest, GetOperationClaimsResponse>( MessageMethod.GetOperationClaims, payload, cancellationToken); if (response == null) { return(new List <OperationClaim>()); } return(response.Claims); }