/// <summary> /// Check the result to make sure it is valid. /// </summary> /// <param name="result">The <see cref="GrpcAgentResult"/>.</param> /// <param name="sw">The <see cref="Stopwatch"/> used to measure <see cref="GrpcAgentBase{TClient}"/> invocation.</param> protected void ResultCheck(GrpcAgentResult result, Stopwatch sw) { if (result == null) { throw new ArgumentNullException(nameof(result)); } // Log to output. TestContext.Out.WriteLine(""); TestContext.Out.WriteLine("GRPC AGENT TESTER..."); TestContext.Out.WriteLine(""); TestContext.Out.WriteLine($"REQUEST >"); if (!string.IsNullOrEmpty(Username)) { TestContext.Out.WriteLine($"Username: {Username}"); } TestContext.Out.WriteLine($"gRPC Request: {(result.Request == null ? "null" : $"{result.Request.CalculateSize()}bytes [JSON representation]")}"); if (result.Request != null) { TestContext.Out.WriteLine(JsonConvert.SerializeObject(result.Request, Formatting.Indented)); } TestContext.Out.WriteLine(""); TestContext.Out.WriteLine($"RESPONSE >"); if (result.Status.Detail == null) { TestContext.Out.WriteLine($"gRPC Status: {result.Status.StatusCode}"); } else { TestContext.Out.WriteLine($"gRPC Status: {result.Status.StatusCode} ({result.Status.Detail})"); } TestContext.Out.WriteLine($"HttpStatusCode: {result.HttpStatusCode} ({(int)result.HttpStatusCode})"); TestContext.Out.WriteLine($"Elapsed (ms): {(sw == null ? "none" : sw.ElapsedMilliseconds.ToString(System.Globalization.CultureInfo.InvariantCulture))}"); TestContext.Out.WriteLine($"Messages: {(result.Messages == null || result.Messages.Count == 0 ? "none" : "")}"); if (result.Messages != null && result.Messages.Count > 0) { foreach (var m in result.Messages) { TestContext.Out.WriteLine($" {m.Type}: {m.Text} {(m.Property == null ? "" : "(" + m.Property + ")")}"); } TestContext.Out.WriteLine(); } var bytes = (result.Response is IMessage respm) ? respm.CalculateSize() : 0; TestContext.Out.WriteLine($"gRPC Response: {(result.Response == null ? "null" : $"{bytes}bytes [JSON representation]")}");
/// <summary> /// Runs the <paramref name="func"/> where the agent is self-instantied and executed asynchonously checking against the expected outcomes. /// </summary> /// <param name="func">The function to execute.</param> /// <returns>The corresponding <see cref="Task{TResult}"/>.</returns> public async Task <GrpcAgentResult> RunOverrideAsync(Func <Task <GrpcAgentResult> > func) { if (func == null) { throw new ArgumentNullException(nameof(func)); } var sw = Stopwatch.StartNew(); GrpcAgentResult result = await func().ConfigureAwait(false); sw.Stop(); ResultCheck(result, sw); PublishedEventsCheck(); return(result); }