示例#1
0
        /// <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]")}");
示例#2
0
        /// <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);
        }