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