From ea5aa4a34af3f605d641d805889f005133512cec Mon Sep 17 00:00:00 2001 From: Jan Tattermusch Date: Fri, 28 Sep 2018 11:39:32 +0200 Subject: addressing a few nits --- src/csharp/Grpc.Core.Tests/MetadataTest.cs | 17 +++++++++++++++++ src/csharp/Grpc.Core/Internal/MarshalUtils.cs | 4 ++++ src/csharp/Grpc.Core/Metadata.cs | 3 +++ 3 files changed, 24 insertions(+) (limited to 'src/csharp') diff --git a/src/csharp/Grpc.Core.Tests/MetadataTest.cs b/src/csharp/Grpc.Core.Tests/MetadataTest.cs index 171c5c470e..d85d7572a6 100644 --- a/src/csharp/Grpc.Core.Tests/MetadataTest.cs +++ b/src/csharp/Grpc.Core.Tests/MetadataTest.cs @@ -72,6 +72,23 @@ namespace Grpc.Core.Tests Assert.Throws(typeof(ArgumentException), () => new Metadata.Entry("abc/", "xyz")); } + [Test] + public void KeysAreNormalized_UppercaseKey() + { + var uppercaseKey = "ABC"; + var entry = new Metadata.Entry(uppercaseKey, "XYZ"); + Assert.AreEqual("abc", entry.Key); + } + + [Test] + public void KeysAreNormalized_LowercaseKey() + { + var lowercaseKey = "abc"; + var entry = new Metadata.Entry(lowercaseKey, "XYZ"); + // no allocation if key already lowercase + Assert.AreSame(lowercaseKey, entry.Key); + } + [Test] public void Entry_ConstructionPreconditions() { diff --git a/src/csharp/Grpc.Core/Internal/MarshalUtils.cs b/src/csharp/Grpc.Core/Internal/MarshalUtils.cs index 73b7a2ef95..09ded1a036 100644 --- a/src/csharp/Grpc.Core/Internal/MarshalUtils.cs +++ b/src/csharp/Grpc.Core/Internal/MarshalUtils.cs @@ -36,8 +36,12 @@ namespace Grpc.Core.Internal public static string PtrToStringUTF8(IntPtr ptr, int len) { if (len == 0) + { return ""; + } + // TODO(jtattermusch): once Span dependency is added, + // use Span-based API to decode the string without copying the buffer. var bytes = new byte[len]; Marshal.Copy(ptr, bytes, 0, len); return EncodingUTF8.GetString(bytes); diff --git a/src/csharp/Grpc.Core/Metadata.cs b/src/csharp/Grpc.Core/Metadata.cs index 122c1e8883..a9aa2cbbfc 100644 --- a/src/csharp/Grpc.Core/Metadata.cs +++ b/src/csharp/Grpc.Core/Metadata.cs @@ -361,7 +361,10 @@ namespace Grpc.Core GrpcPreconditions.CheckArgument(IsValidKey(key, out bool isLowercase), "Metadata entry key not valid. Keys can only contain lowercase alphanumeric characters, underscores, hyphens and dots."); if (isLowercase) + { + // save allocation of a new string if already lowercase return key; + } return key.ToLowerInvariant(); } -- cgit v1.2.3