1 #region Copyright notice and license 2 3 // Copyright 2015 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 24 namespace Grpc.Core.Testing 25 { 26 /// <summary> 27 /// Creates test doubles for <c>ServerCallContext</c>. 28 /// </summary> 29 public static class TestServerCallContext 30 { 31 /// <summary> 32 /// Creates a test double for <c>ServerCallContext</c>. Only for testing. 33 /// Note: experimental API that can change or be removed without any prior notice. 34 /// </summary> Create(string method, string host, DateTime deadline, Metadata requestHeaders, CancellationToken cancellationToken, string peer, AuthContext authContext, ContextPropagationToken contextPropagationToken, Func<Metadata, Task> writeHeadersFunc, Func<WriteOptions> writeOptionsGetter, Action<WriteOptions> writeOptionsSetter)35 public static ServerCallContext Create(string method, string host, DateTime deadline, Metadata requestHeaders, CancellationToken cancellationToken, 36 string peer, AuthContext authContext, ContextPropagationToken contextPropagationToken, 37 Func<Metadata, Task> writeHeadersFunc, Func<WriteOptions> writeOptionsGetter, Action<WriteOptions> writeOptionsSetter) 38 { 39 return new ServerCallContext(null, method, host, deadline, requestHeaders, cancellationToken, 40 writeHeadersFunc, new WriteOptionsHolder(writeOptionsGetter, writeOptionsSetter), 41 () => peer, () => authContext, () => contextPropagationToken); 42 } 43 44 private class WriteOptionsHolder : IHasWriteOptions 45 { 46 Func<WriteOptions> writeOptionsGetter; 47 Action<WriteOptions> writeOptionsSetter; 48 WriteOptionsHolder(Func<WriteOptions> writeOptionsGetter, Action<WriteOptions> writeOptionsSetter)49 public WriteOptionsHolder(Func<WriteOptions> writeOptionsGetter, Action<WriteOptions> writeOptionsSetter) 50 { 51 this.writeOptionsGetter = writeOptionsGetter; 52 this.writeOptionsSetter = writeOptionsSetter; 53 } 54 55 public WriteOptions WriteOptions { get => writeOptionsGetter(); set => writeOptionsSetter(value); } 56 } 57 } 58 } 59