diff options
author | Jan Tattermusch <jtattermusch@google.com> | 2018-04-27 17:01:00 +0200 |
---|---|---|
committer | Jan Tattermusch <jtattermusch@google.com> | 2018-04-27 17:01:00 +0200 |
commit | 4ea4727ac5d7aec4e8c60f19b05196316c737ef3 (patch) | |
tree | 9972911b391297ff48e73bc975e594bb1bf4bda6 /src/csharp/Grpc.Core.Testing | |
parent | 198d0f56ce3125ebe60df62f313203034b21d743 (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.cs | 58 |
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); } + } + } +} |