1 #region Copyright notice and license
2 
3 // Copyright 2018 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.Threading;
21 using System.Threading.Tasks;
22 using Grpc.Core;
23 using Grpc.Core.Testing;
24 using Grpc.Core.Utils;
25 using NUnit.Framework;
26 
27 namespace Math.Tests
28 {
29     /// <summary>
30     /// Demonstrates how to unit test implementations of generated server stubs.
31     /// </summary>
32     public class MathServiceImplTestabilityTest
33     {
34         [Test]
ServerCallImplIsTestable()35         public async Task ServerCallImplIsTestable()
36         {
37             var mathImpl = new MathServiceImpl();
38 
39             // Use a factory method provided by Grpc.Core.Testing.TestServerCallContext to create an instance of server call context.
40             // This allows testing even those server-side implementations that rely on the contents of ServerCallContext.
41             var fakeServerCallContext = TestServerCallContext.Create("fooMethod", null, DateTime.UtcNow.AddHours(1), new Metadata(), CancellationToken.None, "127.0.0.1", null, null, (metadata) => TaskUtils.CompletedTask, () => new WriteOptions(), (writeOptions) => { });
42             var response = await mathImpl.Div(new DivArgs { Dividend = 10, Divisor = 2 }, fakeServerCallContext);
43             Assert.AreEqual(5, response.Quotient);
44             Assert.AreEqual(0, response.Remainder);
45         }
46     }
47 }
48