diff options
author | Jan Tattermusch <jtattermusch@google.com> | 2018-09-28 11:39:32 +0200 |
---|---|---|
committer | Jan Tattermusch <jtattermusch@google.com> | 2018-09-28 11:39:32 +0200 |
commit | ea5aa4a34af3f605d641d805889f005133512cec (patch) | |
tree | 233447c5bed91a1c91c86ea778c630420691237d /src | |
parent | 59f8157123fa1f1040ee525f7886861850281809 (diff) |
addressing a few nits
Diffstat (limited to 'src')
-rw-r--r-- | src/csharp/Grpc.Core.Tests/MetadataTest.cs | 17 | ||||
-rw-r--r-- | src/csharp/Grpc.Core/Internal/MarshalUtils.cs | 4 | ||||
-rw-r--r-- | src/csharp/Grpc.Core/Metadata.cs | 3 |
3 files changed, 24 insertions, 0 deletions
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 @@ -73,6 +73,23 @@ namespace Grpc.Core.Tests } [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() { Assert.Throws(typeof(ArgumentNullException), () => new Metadata.Entry(null, "xyz")); 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(); } |