From c1d2ecb2783a857393b1a1631cb46a551d5ba1c0 Mon Sep 17 00:00:00 2001 From: Mathieu Leenhardt Date: Thu, 4 Feb 2016 22:32:14 +0100 Subject: [PATCH 1/3] Added fluent methods for WriteOptions, ContextPropagationToken and CallCredentials --- src/csharp/Grpc.Core/CallOptions.cs | 51 ++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/src/csharp/Grpc.Core/CallOptions.cs b/src/csharp/Grpc.Core/CallOptions.cs index 1fda80cb901..339552b0b11 100644 --- a/src/csharp/Grpc.Core/CallOptions.cs +++ b/src/csharp/Grpc.Core/CallOptions.cs @@ -100,10 +100,7 @@ namespace Grpc.Core /// public WriteOptions WriteOptions { - get - { - return this.writeOptions; - } + get { return this.writeOptions; } } /// @@ -111,10 +108,7 @@ namespace Grpc.Core /// public ContextPropagationToken PropagationToken { - get - { - return this.propagationToken; - } + get { return this.propagationToken; } } /// @@ -122,10 +116,7 @@ namespace Grpc.Core /// public CallCredentials Credentials { - get - { - return this.credentials; - } + get { return this.credentials; } } /// @@ -164,6 +155,42 @@ namespace Grpc.Core return newOptions; } + /// + /// Returns new instance of with + /// WriteOptions set to the value provided. Values of all other fields are preserved. + /// + /// The write options. + public CallOptions WithWriteOptions(WriteOptions writeOptions) + { + var newOptions = this; + newOptions.writeOptions = writeOptions; + return newOptions; + } + + /// + /// Returns new instance of with + /// PropagationToken set to the value provided. Values of all other fields are preserved. + /// + /// The context propagation token. + public CallOptions WithPropagationToken(ContextPropagationToken propagationToken) + { + var newOptions = this; + newOptions.propagationToken = propagationToken; + return newOptions; + } + + /// + /// Returns new instance of with + /// Credentials set to the value provided. Values of all other fields are preserved. + /// + /// The call credentials. + public CallOptions WithCredentials(CallCredentials credentials) + { + var newOptions = this; + newOptions.credentials = credentials; + return newOptions; + } + /// /// Returns a new instance of with /// all previously unset values set to their defaults and deadline and cancellation From ced274861a469d384fcaedd9cbbc01986033fc67 Mon Sep 17 00:00:00 2001 From: Mathieu Leenhardt Date: Thu, 4 Feb 2016 22:57:49 +0100 Subject: [PATCH 2/3] Fixed WithWriteOptions parameter name in xml comments --- src/csharp/Grpc.Core/CallOptions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/csharp/Grpc.Core/CallOptions.cs b/src/csharp/Grpc.Core/CallOptions.cs index 339552b0b11..10e073aff18 100644 --- a/src/csharp/Grpc.Core/CallOptions.cs +++ b/src/csharp/Grpc.Core/CallOptions.cs @@ -159,7 +159,7 @@ namespace Grpc.Core /// Returns new instance of with /// WriteOptions set to the value provided. Values of all other fields are preserved. /// - /// The write options. + /// The write options. public CallOptions WithWriteOptions(WriteOptions writeOptions) { var newOptions = this; From 9ef407b0d771878ca1c0f35b4554dd64a3492908 Mon Sep 17 00:00:00 2001 From: Mathieu Leenhardt Date: Thu, 4 Feb 2016 23:24:30 +0100 Subject: [PATCH 3/3] Added test coverage for new fluent methods --- src/csharp/Grpc.Core.Tests/CallOptionsTest.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/csharp/Grpc.Core.Tests/CallOptionsTest.cs b/src/csharp/Grpc.Core.Tests/CallOptionsTest.cs index a3a613be746..99a2d47e6e9 100644 --- a/src/csharp/Grpc.Core.Tests/CallOptionsTest.cs +++ b/src/csharp/Grpc.Core.Tests/CallOptionsTest.cs @@ -54,10 +54,20 @@ namespace Grpc.Core.Tests var deadline = DateTime.UtcNow; Assert.AreEqual(deadline, options.WithDeadline(deadline).Deadline.Value); - var token = new CancellationTokenSource().Token; - Assert.AreEqual(token, options.WithCancellationToken(token).CancellationToken); + var cancellationToken = new CancellationTokenSource().Token; + Assert.AreEqual(cancellationToken, options.WithCancellationToken(cancellationToken).CancellationToken); + + var writeOptions = new WriteOptions(); + Assert.AreSame(writeOptions, options.WithWriteOptions(writeOptions).WriteOptions); + + var propagationToken = new ContextPropagationToken(CallSafeHandle.NullInstance, DateTime.UtcNow, + CancellationToken.None, ContextPropagationOptions.Default); + Assert.AreSame(propagationToken, options.WithPropagationToken(propagationToken).PropagationToken); + + var credentials = new FakeCallCredentials(); + Assert.AreSame(credentials, options.WithCredentials(credentials).Credentials); - // Change original instance is unchanged. + // Check that the original instance is unchanged. Assert.IsNull(options.Headers); Assert.IsNull(options.Deadline); Assert.AreEqual(CancellationToken.None, options.CancellationToken);