blob: e0fc259f087680c199d382159de82e28dadc1af5 [file] [log] [blame]
Jan Tattermusch20831382015-02-24 14:16:04 -08001#region Copyright notice and license
2
Jan Tattermusch7897ae92017-06-07 22:57:36 +02003// Copyright 2015 gRPC authors.
Jan Tattermusch20831382015-02-24 14:16:04 -08004//
Jan Tattermusch7897ae92017-06-07 22:57:36 +02005// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
Jan Tattermusch20831382015-02-24 14:16:04 -08008//
Jan Tattermusch7897ae92017-06-07 22:57:36 +02009// http://www.apache.org/licenses/LICENSE-2.0
Jan Tattermusch20831382015-02-24 14:16:04 -080010//
Jan Tattermusch7897ae92017-06-07 22:57:36 +020011// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
Jan Tattermusch20831382015-02-24 14:16:04 -080016
17#endregion
18
19using System;
20using System.Collections.Generic;
Jan Tattermusch31ba0632015-08-04 22:02:55 -070021using System.Linq;
Jan Tattermusch20831382015-02-24 14:16:04 -080022using System.Threading;
23using System.Threading.Tasks;
24using Grpc.Core;
25using Grpc.Core.Utils;
Jan Tattermusch8644aea2015-08-03 10:21:18 -070026using Grpc.Testing;
Jan Tattermusch20831382015-02-24 14:16:04 -080027using NUnit.Framework;
Jan Tattermusch20831382015-02-24 14:16:04 -080028
29namespace Grpc.IntegrationTesting
30{
31 /// <summary>
32 /// Runs interop tests in-process.
33 /// </summary>
34 public class InteropClientServerTest
35 {
Jan Tattermusch31ba0632015-08-04 22:02:55 -070036 const string Host = "localhost";
Jan Tattermusch20831382015-02-24 14:16:04 -080037 Server server;
38 Channel channel;
Jan Tattermusch809148d2016-03-22 15:09:41 -070039 TestService.TestServiceClient client;
Jan Tattermusch20831382015-02-24 14:16:04 -080040
Jan Tattermuschc152d662017-08-09 09:24:20 +020041 [OneTimeSetUp]
Jan Tattermusch20831382015-02-24 14:16:04 -080042 public void Init()
43 {
Jan Tattermusch09d2f552017-04-20 11:39:37 +020044 // Disable SO_REUSEPORT to prevent https://github.com/grpc/grpc/issues/10755
45 server = new Server(new[] { new ChannelOption(ChannelOptions.SoReuseport, 0) })
Jan Tattermusch021df8a2015-08-04 20:31:11 -070046 {
Jan Tattermusch31ba0632015-08-04 22:02:55 -070047 Services = { TestService.BindService(new TestServiceImpl()) },
Jan Tattermuschbeffc772015-10-22 13:28:22 -070048 Ports = { { Host, ServerPort.PickUnused, TestCredentials.CreateSslServerCredentials() } }
Jan Tattermusch021df8a2015-08-04 20:31:11 -070049 };
Jan Tattermusch20831382015-02-24 14:16:04 -080050 server.Start();
Jan Tattermuschb0829eb2015-03-03 09:30:55 -080051
Jan Tattermuschc8f7d102015-06-08 17:53:45 -070052 var options = new List<ChannelOption>
53 {
Jan Tattermusch2ddb5a62015-06-08 17:51:36 -070054 new ChannelOption(ChannelOptions.SslTargetNameOverride, TestCredentials.DefaultHostOverride)
55 };
Jan Tattermusch31ba0632015-08-04 22:02:55 -070056 int port = server.Ports.Single().BoundPort;
Jan Tattermuschbeffc772015-10-22 13:28:22 -070057 channel = new Channel(Host, port, TestCredentials.CreateSslCredentials(), options);
Jan Tattermuschf41ebc32016-06-22 12:47:14 -070058 client = new TestService.TestServiceClient(channel);
Jan Tattermusch20831382015-02-24 14:16:04 -080059 }
60
Jan Tattermuschc152d662017-08-09 09:24:20 +020061 [OneTimeTearDown]
Jan Tattermusch20831382015-02-24 14:16:04 -080062 public void Cleanup()
63 {
Jan Tattermusch2b357952015-08-20 14:54:33 -070064 channel.ShutdownAsync().Wait();
Jan Tattermusch20831382015-02-24 14:16:04 -080065 server.ShutdownAsync().Wait();
Jan Tattermusch20831382015-02-24 14:16:04 -080066 }
67
68 [Test]
69 public void EmptyUnary()
70 {
Jan Tattermusch503bbac2015-02-26 18:19:47 -080071 InteropClient.RunEmptyUnary(client);
Jan Tattermusch20831382015-02-24 14:16:04 -080072 }
73
74 [Test]
75 public void LargeUnary()
76 {
Jan Tattermuscha5272b62015-04-30 11:56:46 -070077 InteropClient.RunLargeUnary(client);
Jan Tattermusch20831382015-02-24 14:16:04 -080078 }
79
80 [Test]
Jan Tattermuschb98e1dd2015-07-24 21:30:14 -070081 public async Task ClientStreaming()
Jan Tattermusch20831382015-02-24 14:16:04 -080082 {
Jan Tattermuschb98e1dd2015-07-24 21:30:14 -070083 await InteropClient.RunClientStreamingAsync(client);
Jan Tattermusch20831382015-02-24 14:16:04 -080084 }
85
86 [Test]
Jan Tattermuschb98e1dd2015-07-24 21:30:14 -070087 public async Task ServerStreaming()
Jan Tattermusch20831382015-02-24 14:16:04 -080088 {
Jan Tattermuschb98e1dd2015-07-24 21:30:14 -070089 await InteropClient.RunServerStreamingAsync(client);
Jan Tattermusch20831382015-02-24 14:16:04 -080090 }
91
92 [Test]
Jan Tattermuschb98e1dd2015-07-24 21:30:14 -070093 public async Task PingPong()
Jan Tattermusch20831382015-02-24 14:16:04 -080094 {
Jan Tattermuschb98e1dd2015-07-24 21:30:14 -070095 await InteropClient.RunPingPongAsync(client);
Jan Tattermusch20831382015-02-24 14:16:04 -080096 }
97
98 [Test]
Jan Tattermuschb98e1dd2015-07-24 21:30:14 -070099 public async Task EmptyStream()
Jan Tattermusch20831382015-02-24 14:16:04 -0800100 {
Jan Tattermuschb98e1dd2015-07-24 21:30:14 -0700101 await InteropClient.RunEmptyStreamAsync(client);
Jan Tattermusch20831382015-02-24 14:16:04 -0800102 }
103
Jan Tattermusche5c44602015-05-01 11:12:34 -0700104 [Test]
Jan Tattermuschb98e1dd2015-07-24 21:30:14 -0700105 public async Task CancelAfterBegin()
Jan Tattermusche5c44602015-05-01 11:12:34 -0700106 {
Jan Tattermuschb98e1dd2015-07-24 21:30:14 -0700107 await InteropClient.RunCancelAfterBeginAsync(client);
Jan Tattermusche5c44602015-05-01 11:12:34 -0700108 }
Jan Tattermusch20831382015-02-24 14:16:04 -0800109
Jan Tattermusche5c44602015-05-01 11:12:34 -0700110 [Test]
Jan Tattermuschb98e1dd2015-07-24 21:30:14 -0700111 public async Task CancelAfterFirstResponse()
Jan Tattermusche5c44602015-05-01 11:12:34 -0700112 {
Jan Tattermuschb98e1dd2015-07-24 21:30:14 -0700113 await InteropClient.RunCancelAfterFirstResponseAsync(client);
Jan Tattermusche5c44602015-05-01 11:12:34 -0700114 }
Jan Tattermusche4134dd2015-08-12 14:54:40 -0700115
116 [Test]
Jan Tattermusch0ed73152015-12-09 18:21:11 -0800117 public async Task TimeoutOnSleepingServer()
Jan Tattermusche4134dd2015-08-12 14:54:40 -0700118 {
119 await InteropClient.RunTimeoutOnSleepingServerAsync(client);
120 }
Jan Tattermusch0ed73152015-12-09 18:21:11 -0800121
122 [Test]
123 public async Task CustomMetadata()
124 {
125 await InteropClient.RunCustomMetadataAsync(client);
126 }
127
128 [Test]
129 public async Task StatusCodeAndMessage()
130 {
131 await InteropClient.RunStatusCodeAndMessageAsync(client);
132 }
Jan Tattermuschfa20ebc2015-12-09 18:38:10 -0800133
134 [Test]
Noah Eisen9a171c72016-10-21 16:26:40 -0700135 public void UnimplementedService()
Jan Tattermuschfa20ebc2015-12-09 18:38:10 -0800136 {
Noah Eisen9a171c72016-10-21 16:26:40 -0700137 InteropClient.RunUnimplementedService(new UnimplementedService.UnimplementedServiceClient(channel));
Jan Tattermuschfa20ebc2015-12-09 18:38:10 -0800138 }
Noah Eisenb2a26472016-10-21 16:43:57 -0700139
140 [Test]
141 public void UnimplementedMethod()
142 {
143 InteropClient.RunUnimplementedMethod(client);
144 }
Jan Tattermusch20831382015-02-24 14:16:04 -0800145 }
146}