// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Threading.Tasks; using InteropTests.Helpers; using Microsoft.AspNetCore.Testing; using Xunit; using Xunit.Abstractions; namespace InteropTests { public class InteropTests : IClassFixture { private static readonly TimeSpan DefaultTimeout = TimeSpan.FromSeconds(30); private readonly string _clientPath = Path.Combine(Directory.GetCurrentDirectory(), "InteropClient", "InteropClient.dll"); private readonly InteropTestsFixture _fixture; private readonly ITestOutputHelper _output; public InteropTests(InteropTestsFixture fixture, ITestOutputHelper output) { var attributes = Assembly.GetExecutingAssembly() .GetCustomAttributes(); fixture.Path = Path.Combine(Directory.GetCurrentDirectory(), "InteropWebsite", "InteropWebsite.dll"); _fixture = fixture; _output = output; } [Theory] [MemberData(nameof(TestCaseData))] public async Task InteropTestCase(string name) { await _fixture.EnsureStarted(_output).TimeoutAfter(DefaultTimeout); using (var clientProcess = new ClientProcess(_output, _clientPath, _fixture.ServerPort, name)) { await clientProcess.WaitForReady().TimeoutAfter(DefaultTimeout); await clientProcess.Exited.TimeoutAfter(DefaultTimeout); Assert.Equal(0, clientProcess.ExitCode); } } #region TestData // All interop test cases, minus GCE authentication specific tests private static string[] AllTests = new string[] { "empty_unary", "large_unary", "client_streaming", "server_streaming", "ping_pong", "empty_stream", "cancel_after_begin", "cancel_after_first_response", "timeout_on_sleeping_server", "custom_metadata", "status_code_and_message", "special_status_message", "unimplemented_service", "unimplemented_method", "client_compressed_unary", "client_compressed_streaming", "server_compressed_unary", "server_compressed_streaming" }; public static IEnumerable TestCaseData => AllTests.Select(t => new object[] { t }); #endregion } }