aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/csharp
diff options
context:
space:
mode:
authorGravatar Jan Tattermusch <jtattermusch@google.com>2018-09-28 11:39:32 +0200
committerGravatar Jan Tattermusch <jtattermusch@google.com>2018-09-28 11:39:32 +0200
commitea5aa4a34af3f605d641d805889f005133512cec (patch)
tree233447c5bed91a1c91c86ea778c630420691237d /src/csharp
parent59f8157123fa1f1040ee525f7886861850281809 (diff)
addressing a few nits
Diffstat (limited to 'src/csharp')
-rw-r--r--src/csharp/Grpc.Core.Tests/MetadataTest.cs17
-rw-r--r--src/csharp/Grpc.Core/Internal/MarshalUtils.cs4
-rw-r--r--src/csharp/Grpc.Core/Metadata.cs3
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();
}