1 #region Copyright notice and license 2 3 // Copyright 2019 The gRPC Authors. 4 // 5 // 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 8 // 9 // http://www.apache.org/licenses/LICENSE-2.0 10 // 11 // 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. 16 17 #endregion 18 19 using System; 20 using System.Collections.Generic; 21 using System.Linq; 22 using System.Threading; 23 using System.Threading.Tasks; 24 using Grpc.Core; 25 using Grpc.Core.Utils; 26 using Grpc.Testing; 27 using NUnit.Framework; 28 29 namespace Grpc.IntegrationTesting 30 { 31 /// <summary> 32 /// Runs interop tests in-process, with that client using a target 33 /// name that using a target name that triggers interaction with 34 /// external DNS servers (even though it resolves to the in-proc server). 35 /// This test is a trimmed-down sibling test to the one in 36 /// "ExternalDnsWithTracingClientServerTest", and is meant mostly for 37 /// comparison with that one. 38 /// </summary> 39 public class ExternalDnsClientServerTest 40 { 41 Server server; 42 Channel channel; 43 TestService.TestServiceClient client; 44 45 [OneTimeSetUp] Init()46 public void Init() 47 { 48 // Disable SO_REUSEPORT to prevent https://github.com/grpc/grpc/issues/10755 49 server = new Server(new[] { new ChannelOption(ChannelOptions.SoReuseport, 0) }) 50 { 51 Services = { TestService.BindService(new TestServiceImpl()) }, 52 Ports = { { "[::1]", ServerPort.PickUnused, ServerCredentials.Insecure } } 53 }; 54 server.Start(); 55 56 int port = server.Ports.Single().BoundPort; 57 channel = new Channel("loopback6.unittest.grpc.io", port, ChannelCredentials.Insecure); 58 client = new TestService.TestServiceClient(channel); 59 } 60 61 [OneTimeTearDown] Cleanup()62 public void Cleanup() 63 { 64 channel.ShutdownAsync().Wait(); 65 server.ShutdownAsync().Wait(); 66 } 67 68 [Test] EmptyUnary()69 public void EmptyUnary() 70 { 71 InteropClient.RunEmptyUnary(client); 72 } 73 } 74 } 75