-
Notifications
You must be signed in to change notification settings - Fork 10k
/
InteropTests.cs
126 lines (98 loc) · 4.29 KB
/
InteropTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// 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.IO;
using System.Threading.Tasks;
using InteropTests.Helpers;
using Microsoft.AspNetCore.Testing;
using Xunit;
using Xunit.Abstractions;
namespace InteropTests
{
// All interop test cases, minus GCE authentication specific tests.
// Tests are separate methods so that they can be quarantined separately.
public class InteropTests
{
private static readonly TimeSpan DefaultTimeout = TimeSpan.FromSeconds(30);
private readonly string _clientPath = Path.Combine(Directory.GetCurrentDirectory(), "InteropClient", "InteropClient.dll");
private readonly string _serverPath = Path.Combine(Directory.GetCurrentDirectory(), "InteropWebsite", "InteropWebsite.dll");
private readonly ITestOutputHelper _output;
public InteropTests(ITestOutputHelper output)
{
_output = output;
}
[Fact]
public Task EmptyUnary() => InteropTestCase("empty_unary");
[Fact]
[QuarantinedTest]
public Task LargeUnary() => InteropTestCase("large_unary");
[Fact]
[QuarantinedTest]
public Task ClientStreaming() => InteropTestCase("client_streaming");
[Fact]
public Task ServerStreaming() => InteropTestCase("server_streaming");
[Fact]
[QuarantinedTest("https://github.com/dotnet/aspnetcore/issues/22101")]
public Task PingPong() => InteropTestCase("ping_pong");
[Fact]
public Task EmptyStream() => InteropTestCase("empty_stream");
[Fact]
public Task CancelAfterBegin() => InteropTestCase("cancel_after_begin");
[Fact]
public Task CancelAfterFirstResponse() => InteropTestCase("cancel_after_first_response");
[Fact]
public Task TimeoutOnSleepingServer() => InteropTestCase("timeout_on_sleeping_server");
[Fact]
[QuarantinedTest]
public Task CustomMetadata() => InteropTestCase("custom_metadata");
[Fact]
public Task StatusCodeAndMessage() => InteropTestCase("status_code_and_message");
[Fact]
public Task SpecialStatusMessage() => InteropTestCase("special_status_message");
[Fact]
public Task UnimplementedService() => InteropTestCase("unimplemented_service");
[Fact]
public Task UnimplementedMethod() => InteropTestCase("unimplemented_method");
[Fact]
[QuarantinedTest]
public Task ClientCompressedUnary() => InteropTestCase("client_compressed_unary");
[Fact]
public Task ClientCompressedStreaming() => InteropTestCase("client_compressed_streaming");
[Fact]
[QuarantinedTest]
public Task ServerCompressedUnary() => InteropTestCase("server_compressed_unary");
[Fact]
public Task ServerCompressedStreaming() => InteropTestCase("server_compressed_streaming");
private async Task InteropTestCase(string name)
{
using (var serverProcess = new WebsiteProcess(_serverPath, _output))
{
await serverProcess.WaitForReady().TimeoutAfter(DefaultTimeout);
using (var clientProcess = new ClientProcess(_output, _clientPath, serverProcess.ServerPort, name))
{
try
{
await clientProcess.WaitForReadyAsync().TimeoutAfter(DefaultTimeout);
await clientProcess.WaitForExitAsync().TimeoutAfter(DefaultTimeout);
Assert.Equal(0, clientProcess.ExitCode);
}
catch (Exception ex)
{
var errorMessage = $@"Error while running client process.
Server ready: {serverProcess.IsReady}
Client ready: {clientProcess.IsReady}
Server process output:
======================================
{serverProcess.GetOutput()}
======================================
Client process output:
======================================
{clientProcess.GetOutput()}
======================================";
throw new InvalidOperationException(errorMessage, ex);
}
}
}
}
}
}