addressing a few nits

pull/16631/head
Jan Tattermusch 7 years ago
parent 59f8157123
commit ea5aa4a34a
  1. 17
      src/csharp/Grpc.Core.Tests/MetadataTest.cs
  2. 4
      src/csharp/Grpc.Core/Internal/MarshalUtils.cs
  3. 3
      src/csharp/Grpc.Core/Metadata.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()
{

@ -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);

@ -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();
}

Loading…
Cancel
Save