aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/csharp/Grpc.Core.Testing
diff options
context:
space:
mode:
authorGravatar Jan Tattermusch <jtattermusch@google.com>2018-04-27 17:01:00 +0200
committerGravatar Jan Tattermusch <jtattermusch@google.com>2018-04-27 17:01:00 +0200
commit4ea4727ac5d7aec4e8c60f19b05196316c737ef3 (patch)
tree9972911b391297ff48e73bc975e594bb1bf4bda6 /src/csharp/Grpc.Core.Testing
parent198d0f56ce3125ebe60df62f313203034b21d743 (diff)
Allow creating instances of ServerCallContext in tests
Diffstat (limited to 'src/csharp/Grpc.Core.Testing')
-rw-r--r--src/csharp/Grpc.Core.Testing/TestServerCallContext.cs58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/csharp/Grpc.Core.Testing/TestServerCallContext.cs b/src/csharp/Grpc.Core.Testing/TestServerCallContext.cs
new file mode 100644
index 0000000000..5418417d7e
--- /dev/null
+++ b/src/csharp/Grpc.Core.Testing/TestServerCallContext.cs
@@ -0,0 +1,58 @@
+#region Copyright notice and license
+
+// Copyright 2015 gRPC authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#endregion
+
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using Grpc.Core;
+
+namespace Grpc.Core.Testing
+{
+ /// <summary>
+ /// Creates test doubles for <c>ServerCallContext</c>.
+ /// </summary>
+ public static class TestServerCallContext
+ {
+ /// <summary>
+ /// Creates a test double for <c>ServerCallContext</c>. Only for testing.
+ /// Note: experimental API that can change or be removed without any prior notice.
+ /// </summary>
+ public static ServerCallContext 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)
+ {
+ return new ServerCallContext(null, method, host, deadline, requestHeaders, cancellationToken,
+ writeHeadersFunc, new WriteOptionsHolder(writeOptionsGetter, writeOptionsSetter),
+ () => peer, () => authContext, () => contextPropagationToken);
+ }
+
+ private class WriteOptionsHolder : IHasWriteOptions
+ {
+ Func<WriteOptions> writeOptionsGetter;
+ Action<WriteOptions> writeOptionsSetter;
+
+ public WriteOptionsHolder(Func<WriteOptions> writeOptionsGetter, Action<WriteOptions> writeOptionsSetter)
+ {
+ this.writeOptionsGetter = writeOptionsGetter;
+ this.writeOptionsSetter = writeOptionsSetter;
+ }
+
+ public WriteOptions WriteOptions { get => writeOptionsGetter(); set => writeOptionsSetter(value); }
+ }
+ }
+}