blob: 5418417d7ed423e4b889e90c2e4efe03a95845f9 [file] [log] [blame]
Jan Tattermusch4ea47272018-04-27 17:01:00 +02001#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
19using System;
20using System.Threading;
21using System.Threading.Tasks;
22using Grpc.Core;
23
24namespace 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>
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
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}