diff --git a/src/csharp/.nuget/packages.config b/src/csharp/.nuget/packages.config
index acb43ae4b3d..6154b3561f4 100644
--- a/src/csharp/.nuget/packages.config
+++ b/src/csharp/.nuget/packages.config
@@ -1,6 +1,6 @@

-
+
\ No newline at end of file
diff --git a/src/csharp/Grpc.Core.Tests/ChannelTest.cs b/src/csharp/Grpc.Core.Tests/ChannelTest.cs
index ed0ec14df5c..6330f50faed 100644
--- a/src/csharp/Grpc.Core.Tests/ChannelTest.cs
+++ b/src/csharp/Grpc.Core.Tests/ChannelTest.cs
@@ -70,7 +70,7 @@ namespace Grpc.Core.Tests
public void WaitForStateChangedAsync_InvalidArgument()
{
var channel = new Channel("localhost", ChannelCredentials.Insecure);
- Assert.Throws(typeof(ArgumentException), () => channel.WaitForStateChangedAsync(ChannelState.FatalFailure));
+ Assert.ThrowsAsync(typeof(ArgumentException), async () => await channel.WaitForStateChangedAsync(ChannelState.FatalFailure));
channel.ShutdownAsync().Wait();
}
@@ -87,7 +87,7 @@ namespace Grpc.Core.Tests
{
var channel = new Channel("localhost", ChannelCredentials.Insecure);
channel.ShutdownAsync().Wait();
- Assert.Throws(typeof(InvalidOperationException), () => channel.ShutdownAsync().GetAwaiter().GetResult());
+ Assert.ThrowsAsync(typeof(InvalidOperationException), async () => await channel.ShutdownAsync());
}
}
}
diff --git a/src/csharp/Grpc.Core.Tests/ClientServerTest.cs b/src/csharp/Grpc.Core.Tests/ClientServerTest.cs
index 77f6a63156b..6c13a4fa483 100644
--- a/src/csharp/Grpc.Core.Tests/ClientServerTest.cs
+++ b/src/csharp/Grpc.Core.Tests/ClientServerTest.cs
@@ -93,7 +93,7 @@ namespace Grpc.Core.Tests
var ex = Assert.Throws(() => Calls.BlockingUnaryCall(helper.CreateUnaryCall(), "abc"));
Assert.AreEqual(StatusCode.Unknown, ex.Status.StatusCode);
- var ex2 = Assert.Throws(async () => await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "abc"));
+ var ex2 = Assert.ThrowsAsync(async () => await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "abc"));
Assert.AreEqual(StatusCode.Unknown, ex2.Status.StatusCode);
}
@@ -108,7 +108,7 @@ namespace Grpc.Core.Tests
var ex = Assert.Throws(() => Calls.BlockingUnaryCall(helper.CreateUnaryCall(), "abc"));
Assert.AreEqual(StatusCode.Unauthenticated, ex.Status.StatusCode);
- var ex2 = Assert.Throws(async () => await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "abc"));
+ var ex2 = Assert.ThrowsAsync(async () => await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "abc"));
Assert.AreEqual(StatusCode.Unauthenticated, ex2.Status.StatusCode);
}
@@ -124,7 +124,7 @@ namespace Grpc.Core.Tests
var ex = Assert.Throws(() => Calls.BlockingUnaryCall(helper.CreateUnaryCall(), "abc"));
Assert.AreEqual(StatusCode.Unauthenticated, ex.Status.StatusCode);
- var ex2 = Assert.Throws(async () => await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "abc"));
+ var ex2 = Assert.ThrowsAsync(async () => await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "abc"));
Assert.AreEqual(StatusCode.Unauthenticated, ex2.Status.StatusCode);
}
@@ -204,7 +204,7 @@ namespace Grpc.Core.Tests
await barrier.Task; // make sure the handler has started.
cts.Cancel();
- var ex = Assert.Throws(async () => await call.ResponseAsync);
+ var ex = Assert.ThrowsAsync(async () => await call.ResponseAsync);
Assert.AreEqual(StatusCode.Cancelled, ex.Status.StatusCode);
}
@@ -290,7 +290,7 @@ namespace Grpc.Core.Tests
return request;
});
- Assert.Throws(typeof(TaskCanceledException),
+ Assert.ThrowsAsync(typeof(TaskCanceledException),
async () => await channel.WaitForStateChangedAsync(channel.State, DateTime.UtcNow.AddMilliseconds(10)));
var stateChangedTask = channel.WaitForStateChangedAsync(channel.State);
diff --git a/src/csharp/Grpc.Core.Tests/ContextPropagationTest.cs b/src/csharp/Grpc.Core.Tests/ContextPropagationTest.cs
index 90c510ec61f..cec8c7ce6bb 100644
--- a/src/csharp/Grpc.Core.Tests/ContextPropagationTest.cs
+++ b/src/csharp/Grpc.Core.Tests/ContextPropagationTest.cs
@@ -105,7 +105,7 @@ namespace Grpc.Core.Tests
var parentCall = Calls.AsyncClientStreamingCall(helper.CreateClientStreamingCall(new CallOptions(cancellationToken: cts.Token)));
await readyToCancelTcs.Task;
cts.Cancel();
- Assert.Throws(typeof(RpcException), async () => await parentCall);
+ Assert.ThrowsAsync(typeof(RpcException), async () => await parentCall);
Assert.AreEqual("CHILD_CALL_CANCELLED", await successTcs.Task);
}
diff --git a/src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj b/src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj
index 3bfd49b10fe..0cd059c2327 100644
--- a/src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj
+++ b/src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj
@@ -4,7 +4,7 @@
Debug
AnyCPU
{86EC5CB4-4EA2-40A2-8057-86542A0353BB}
- Library
+ Exe
Grpc.Core.Tests
Grpc.Core.Tests
v4.5
@@ -35,29 +35,18 @@
..\keys\Grpc.snk
-
- ..\packages\NUnitTestAdapter.2.0.0\lib\nunit.core.dll
- False
-
-
- ..\packages\NUnitTestAdapter.2.0.0\lib\nunit.core.interfaces.dll
- False
-
+
- ..\packages\NUnit.2.6.4\lib\nunit.framework.dll
+ ..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll
-
- ..\packages\NUnitTestAdapter.2.0.0\lib\nunit.util.dll
- False
+
+ ..\packages\Ix-Async.1.2.5\lib\net45\System.Interactive.Async.dll
-
- ..\packages\NUnitTestAdapter.2.0.0\lib\NUnit.VisualStudio.TestAdapter.dll
- False
+
+ ..\packages\NUnitLite.3.2.0\lib\net45\nunitlite.dll
-
-
- False
- ..\packages\Ix-Async.1.2.5\lib\net45\System.Interactive.Async.dll
+
+ ..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll
@@ -94,6 +83,7 @@
+
diff --git a/src/csharp/Grpc.Core.Tests/HalfcloseTest.cs b/src/csharp/Grpc.Core.Tests/HalfcloseTest.cs
index fe6edb858bb..b4cb451d944 100644
--- a/src/csharp/Grpc.Core.Tests/HalfcloseTest.cs
+++ b/src/csharp/Grpc.Core.Tests/HalfcloseTest.cs
@@ -91,7 +91,7 @@ namespace Grpc.Core.Tests
await call.RequestStream.CompleteAsync();
// Second attempt to close from client is not allowed.
- Assert.Throws(typeof(InvalidOperationException), async () => await call.RequestStream.CompleteAsync());
+ Assert.ThrowsAsync(typeof(InvalidOperationException), async () => await call.RequestStream.CompleteAsync());
}
}
}
diff --git a/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs b/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs
index 543f6375df1..60530d32508 100644
--- a/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs
+++ b/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs
@@ -84,7 +84,7 @@ namespace Grpc.Core.Internal.Tests
Assert.AreEqual(StatusCode.Internal, asyncCall.GetStatus().StatusCode);
Assert.IsNull(asyncCall.GetTrailers());
- var ex = Assert.Throws(() => resultTask.GetAwaiter().GetResult());
+ var ex = Assert.ThrowsAsync(async () => await resultTask);
Assert.AreEqual(StatusCode.Internal, ex.Status.StatusCode);
}
diff --git a/src/csharp/Grpc.Core.Tests/MarshallingErrorsTest.cs b/src/csharp/Grpc.Core.Tests/MarshallingErrorsTest.cs
index 37fb36946af..0663e77d1ea 100644
--- a/src/csharp/Grpc.Core.Tests/MarshallingErrorsTest.cs
+++ b/src/csharp/Grpc.Core.Tests/MarshallingErrorsTest.cs
@@ -112,7 +112,7 @@ namespace Grpc.Core.Tests
});
var call = Calls.AsyncServerStreamingCall(helper.CreateServerStreamingCall(), "REQUEST");
- var ex = Assert.Throws(async () => await call.ResponseStream.MoveNext());
+ var ex = Assert.ThrowsAsync(async () => await call.ResponseStream.MoveNext());
Assert.AreEqual(StatusCode.Internal, ex.Status.StatusCode);
}
@@ -134,7 +134,7 @@ namespace Grpc.Core.Tests
{
helper.ClientStreamingHandler = new ClientStreamingServerMethod(async (requestStream, context) =>
{
- Assert.Throws(async () => await requestStream.MoveNext());
+ Assert.ThrowsAsync(async () => await requestStream.MoveNext());
return "RESPONSE";
});
@@ -153,7 +153,7 @@ namespace Grpc.Core.Tests
[Test]
public void RequestSerializationError_AsyncUnary()
{
- Assert.Throws(async () => await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "UNSERIALIZABLE_VALUE"));
+ Assert.ThrowsAsync(async () => await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "UNSERIALIZABLE_VALUE"));
}
[Test]
@@ -166,7 +166,7 @@ namespace Grpc.Core.Tests
});
var call = Calls.AsyncClientStreamingCall(helper.CreateClientStreamingCall());
await call.RequestStream.WriteAsync("A");
- Assert.Throws(async () => await call.RequestStream.WriteAsync("UNSERIALIZABLE_VALUE"));
+ Assert.ThrowsAsync(async () => await call.RequestStream.WriteAsync("UNSERIALIZABLE_VALUE"));
await call.RequestStream.WriteAsync("B");
await call.RequestStream.CompleteAsync();
diff --git a/src/csharp/Grpc.Core.Tests/NUnitMain.cs b/src/csharp/Grpc.Core.Tests/NUnitMain.cs
new file mode 100644
index 00000000000..9c1d7bf3c8a
--- /dev/null
+++ b/src/csharp/Grpc.Core.Tests/NUnitMain.cs
@@ -0,0 +1,59 @@
+#region Copyright notice and license
+
+// Copyright 2016, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Reflection;
+using Grpc.Core;
+using Grpc.Core.Logging;
+using NUnit.Common;
+using NUnitLite;
+
+namespace Grpc.Core.Tests
+{
+ ///
+ /// Provides entry point for NUnitLite
+ ///
+ public class NUnitMain
+ {
+ public static int Main(string[] args)
+ {
+ // Make logger immune to NUnit capturing stdout and stderr to workaround https://github.com/nunit/nunit/issues/1406.
+ GrpcEnvironment.SetLogger(new TextWriterLogger(Console.Error));
+#if DOTNET5_4
+ return new AutoRun(typeof(NUnitMain).GetTypeInfo().Assembly).Execute(args, new ExtendedTextWrapper(Console.Out), Console.In);
+#else
+ return new AutoRun().Execute(args);
+#endif
+ }
+ }
+}
diff --git a/src/csharp/Grpc.Core.Tests/ResponseHeadersTest.cs b/src/csharp/Grpc.Core.Tests/ResponseHeadersTest.cs
index a1648f36712..772beadd4a3 100644
--- a/src/csharp/Grpc.Core.Tests/ResponseHeadersTest.cs
+++ b/src/csharp/Grpc.Core.Tests/ResponseHeadersTest.cs
@@ -155,7 +155,7 @@ namespace Grpc.Core.Tests
{
helper.UnaryHandler = new UnaryServerMethod(async (request, context) =>
{
- Assert.Throws(typeof(ArgumentNullException), async () => await context.WriteResponseHeadersAsync(null));
+ Assert.ThrowsAsync(typeof(ArgumentNullException), async () => await context.WriteResponseHeadersAsync(null));
return "PASS";
});
diff --git a/src/csharp/Grpc.Core.Tests/SanityTest.cs b/src/csharp/Grpc.Core.Tests/SanityTest.cs
index 343ab1e85a1..3830f0cbacf 100644
--- a/src/csharp/Grpc.Core.Tests/SanityTest.cs
+++ b/src/csharp/Grpc.Core.Tests/SanityTest.cs
@@ -38,6 +38,7 @@ using System.Reflection;
using Grpc.Core;
using Grpc.Core.Internal;
using Grpc.Core.Utils;
+using Newtonsoft.Json;
using NUnit.Framework;
namespace Grpc.Core.Tests
@@ -55,27 +56,23 @@ namespace Grpc.Core.Tests
[Test]
public void TestsJsonUpToDate()
{
- var testClasses = DiscoverAllTestClasses();
- string testsJson = GetTestsJson();
+ var discoveredTests = DiscoverAllTestClasses();
+ string discoveredTestsJson = JsonConvert.SerializeObject(discoveredTests, Formatting.Indented);
- // we don't have a JSON parser at hand, but check that the test class
- // name is contained in the file instead.
- foreach (var className in testClasses) {
- Assert.IsTrue(testsJson.Contains(className),
- string.Format("Test class \"{0}\" is missing in C# tests.json file", className));
- }
+ Assert.AreEqual(discoveredTestsJson, ReadTestsJson());
}
///
/// Gets list of all test classes obtained by inspecting all the test assemblies.
///
- private List DiscoverAllTestClasses()
+ private Dictionary> DiscoverAllTestClasses()
{
var assemblies = GetTestAssemblies();
- var testClasses = new List();
+ var testsByAssembly = new Dictionary>();
foreach (var assembly in assemblies)
{
+ var testClasses = new List();
foreach (var t in assembly.GetTypes())
{
foreach (var m in t.GetMethods())
@@ -89,16 +86,19 @@ namespace Grpc.Core.Tests
}
}
+ testClasses.Sort();
+ testsByAssembly.Add(assembly.GetName().Name, testClasses);
}
- testClasses.Sort();
- return testClasses;
+ return testsByAssembly;
}
- private string GetTestsJson()
+ ///
+ /// Reads contents of tests.json file.
+ ///
+ private string ReadTestsJson()
{
var assemblyDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var testsJsonFile = Path.Combine(assemblyDir, "..", "..", "..", "tests.json");
-
return File.ReadAllText(testsJsonFile);
}
diff --git a/src/csharp/Grpc.Core.Tests/packages.config b/src/csharp/Grpc.Core.Tests/packages.config
index 610831dfe1e..aa7d951fdc7 100644
--- a/src/csharp/Grpc.Core.Tests/packages.config
+++ b/src/csharp/Grpc.Core.Tests/packages.config
@@ -1,6 +1,7 @@

-
-
+
+
+
\ No newline at end of file
diff --git a/src/csharp/Grpc.Core/Grpc.Core.csproj b/src/csharp/Grpc.Core/Grpc.Core.csproj
index 251a6889464..95077a6ca5a 100644
--- a/src/csharp/Grpc.Core/Grpc.Core.csproj
+++ b/src/csharp/Grpc.Core/Grpc.Core.csproj
@@ -58,6 +58,7 @@
+
@@ -140,9 +141,7 @@
-
-
-
+
Resources\roots.pem
diff --git a/src/csharp/Grpc.Core/Logging/ConsoleLogger.cs b/src/csharp/Grpc.Core/Logging/ConsoleLogger.cs
index da74e55a95f..5e8dced6414 100644
--- a/src/csharp/Grpc.Core/Logging/ConsoleLogger.cs
+++ b/src/csharp/Grpc.Core/Logging/ConsoleLogger.cs
@@ -38,117 +38,28 @@ using System.Globalization;
namespace Grpc.Core.Logging
{
/// Logger that logs to System.Console.
- public class ConsoleLogger : ILogger
+ public class ConsoleLogger : TextWriterLogger
{
- // Format similar enough to C core log format except nanosecond precision is not supported.
- const string DateTimeFormatString = "MMdd HH:mm:ss.ffffff";
-
- readonly Type forType;
- readonly string forTypeString;
-
/// Creates a console logger not associated to any specific type.
public ConsoleLogger() : this(null)
{
}
/// Creates a console logger that logs messsage specific for given type.
- private ConsoleLogger(Type forType)
+ private ConsoleLogger(Type forType) : base(() => Console.Error, forType)
{
- this.forType = forType;
- if (forType != null)
- {
- var namespaceStr = forType.Namespace ?? "";
- if (namespaceStr.Length > 0)
- {
- namespaceStr += ".";
- }
- this.forTypeString = namespaceStr + forType.Name + " ";
- }
- else
- {
- this.forTypeString = "";
- }
}
///
/// Returns a logger associated with the specified type.
///
- public ILogger ForType()
+ public override ILogger ForType()
{
- if (typeof(T) == forType)
+ if (typeof(T) == AssociatedType)
{
return this;
}
return new ConsoleLogger(typeof(T));
}
-
- /// Logs a message with severity Debug.
- public void Debug(string message)
- {
- Log("D", message);
- }
-
- /// Logs a formatted message with severity Debug.
- public void Debug(string format, params object[] formatArgs)
- {
- Debug(string.Format(format, formatArgs));
- }
-
- /// Logs a message with severity Info.
- public void Info(string message)
- {
- Log("I", message);
- }
-
- /// Logs a formatted message with severity Info.
- public void Info(string format, params object[] formatArgs)
- {
- Info(string.Format(format, formatArgs));
- }
-
- /// Logs a message with severity Warning.
- public void Warning(string message)
- {
- Log("W", message);
- }
-
- /// Logs a formatted message with severity Warning.
- public void Warning(string format, params object[] formatArgs)
- {
- Warning(string.Format(format, formatArgs));
- }
-
- /// Logs a message and an associated exception with severity Warning.
- public void Warning(Exception exception, string message)
- {
- Warning(message + " " + exception);
- }
-
- /// Logs a message with severity Error.
- public void Error(string message)
- {
- Log("E", message);
- }
-
- /// Logs a formatted message with severity Error.
- public void Error(string format, params object[] formatArgs)
- {
- Error(string.Format(format, formatArgs));
- }
-
- /// Logs a message and an associated exception with severity Error.
- public void Error(Exception exception, string message)
- {
- Error(message + " " + exception);
- }
-
- private void Log(string severityString, string message)
- {
- Console.Error.WriteLine("{0}{1} {2}{3}",
- severityString,
- DateTime.Now.ToString(DateTimeFormatString, CultureInfo.InvariantCulture),
- forTypeString,
- message);
- }
}
}
diff --git a/src/csharp/Grpc.Core/Logging/TextWriterLogger.cs b/src/csharp/Grpc.Core/Logging/TextWriterLogger.cs
new file mode 100644
index 00000000000..397320ddffa
--- /dev/null
+++ b/src/csharp/Grpc.Core/Logging/TextWriterLogger.cs
@@ -0,0 +1,176 @@
+#region Copyright notice and license
+
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using Grpc.Core.Utils;
+
+namespace Grpc.Core.Logging
+{
+ /// Logger that logs to an arbitrary System.IO.TextWriter.
+ public class TextWriterLogger : ILogger
+ {
+ // Format similar enough to C core log format except nanosecond precision is not supported.
+ const string DateTimeFormatString = "MMdd HH:mm:ss.ffffff";
+
+ readonly Func textWriterProvider;
+ readonly Type forType;
+ readonly string forTypeString;
+
+ ///
+ /// Creates a console logger not associated to any specific type and writes to given System.IO.TextWriter.
+ /// User is responsible for providing an instance of TextWriter that is thread-safe.
+ ///
+ public TextWriterLogger(TextWriter textWriter) : this(() => textWriter)
+ {
+ GrpcPreconditions.CheckNotNull(textWriter);
+ }
+
+ ///
+ /// Creates a console logger not associated to any specific type and writes to a System.IO.TextWriter obtained from given provider.
+ /// User is responsible for providing an instance of TextWriter that is thread-safe.
+ ///
+ public TextWriterLogger(Func textWriterProvider) : this(textWriterProvider, null)
+ {
+ }
+
+ /// Creates a console logger that logs messsage specific for given type.
+ protected TextWriterLogger(Func textWriterProvider, Type forType)
+ {
+ this.textWriterProvider = GrpcPreconditions.CheckNotNull(textWriterProvider);
+ this.forType = forType;
+ if (forType != null)
+ {
+ var namespaceStr = forType.Namespace ?? "";
+ if (namespaceStr.Length > 0)
+ {
+ namespaceStr += ".";
+ }
+ this.forTypeString = namespaceStr + forType.Name + " ";
+ }
+ else
+ {
+ this.forTypeString = "";
+ }
+ }
+
+ ///
+ /// Returns a logger associated with the specified type.
+ ///
+ public virtual ILogger ForType()
+ {
+ if (typeof(T) == forType)
+ {
+ return this;
+ }
+ return new TextWriterLogger(this.textWriterProvider, typeof(T));
+ }
+
+ /// Logs a message with severity Debug.
+ public void Debug(string message)
+ {
+ Log("D", message);
+ }
+
+ /// Logs a formatted message with severity Debug.
+ public void Debug(string format, params object[] formatArgs)
+ {
+ Debug(string.Format(format, formatArgs));
+ }
+
+ /// Logs a message with severity Info.
+ public void Info(string message)
+ {
+ Log("I", message);
+ }
+
+ /// Logs a formatted message with severity Info.
+ public void Info(string format, params object[] formatArgs)
+ {
+ Info(string.Format(format, formatArgs));
+ }
+
+ /// Logs a message with severity Warning.
+ public void Warning(string message)
+ {
+ Log("W", message);
+ }
+
+ /// Logs a formatted message with severity Warning.
+ public void Warning(string format, params object[] formatArgs)
+ {
+ Warning(string.Format(format, formatArgs));
+ }
+
+ /// Logs a message and an associated exception with severity Warning.
+ public void Warning(Exception exception, string message)
+ {
+ Warning(message + " " + exception);
+ }
+
+ /// Logs a message with severity Error.
+ public void Error(string message)
+ {
+ Log("E", message);
+ }
+
+ /// Logs a formatted message with severity Error.
+ public void Error(string format, params object[] formatArgs)
+ {
+ Error(string.Format(format, formatArgs));
+ }
+
+ /// Logs a message and an associated exception with severity Error.
+ public void Error(Exception exception, string message)
+ {
+ Error(message + " " + exception);
+ }
+
+ /// Gets the type associated with this logger.
+ protected Type AssociatedType
+ {
+ get { return forType; }
+ }
+
+ private void Log(string severityString, string message)
+ {
+ textWriterProvider().WriteLine("{0}{1} {2}{3}",
+ severityString,
+ DateTime.Now.ToString(DateTimeFormatString, CultureInfo.InvariantCulture),
+ forTypeString,
+ message);
+ }
+ }
+}
diff --git a/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj b/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj
index 9aeab059f95..cfe668b6bed 100644
--- a/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj
+++ b/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj
@@ -3,10 +3,8 @@
Debug
AnyCPU
- 10.0.0
- 2.0
{143B1C29-C442-4BE0-BF3F-A8F92288AC9F}
- Library
+ Exe
Grpc.Examples.Tests
Grpc.Examples.Tests
v4.5
@@ -37,18 +35,19 @@
..\keys\Grpc.snk
-
- False
+
+
..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll
- ..\packages\NUnit.2.6.4\lib\nunit.framework.dll
+ ..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll
-
-
- False
+
..\packages\Ix-Async.1.2.5\lib\net45\System.Interactive.Async.dll
+
+ ..\packages\NUnitLite.3.2.0\lib\net45\nunitlite.dll
+
@@ -56,6 +55,7 @@
+
diff --git a/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs b/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs
index 290d42808e7..875202b9509 100644
--- a/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs
+++ b/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs
@@ -149,7 +149,7 @@ namespace Math.Tests
using (var call = client.Fib(new FibArgs { Limit = 0 },
deadline: DateTime.UtcNow.AddMilliseconds(500)))
{
- var ex = Assert.Throws(async () => await call.ResponseStream.ToListAsync());
+ var ex = Assert.ThrowsAsync(async () => await call.ResponseStream.ToListAsync());
// We can't guarantee the status code always DeadlineExceeded. See issue #2685.
Assert.Contains(ex.Status.StatusCode, new[] { StatusCode.DeadlineExceeded, StatusCode.Internal });
diff --git a/src/csharp/Grpc.Examples.Tests/NUnitMain.cs b/src/csharp/Grpc.Examples.Tests/NUnitMain.cs
new file mode 100644
index 00000000000..ea87802766b
--- /dev/null
+++ b/src/csharp/Grpc.Examples.Tests/NUnitMain.cs
@@ -0,0 +1,59 @@
+#region Copyright notice and license
+
+// Copyright 2016, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Reflection;
+using Grpc.Core;
+using Grpc.Core.Logging;
+using NUnit.Common;
+using NUnitLite;
+
+namespace Grpc.Examples.Tests
+{
+ ///
+ /// Provides entry point for NUnitLite
+ ///
+ public class NUnitMain
+ {
+ public static int Main(string[] args)
+ {
+ // Make logger immune to NUnit capturing stdout and stderr to workaround https://github.com/nunit/nunit/issues/1406.
+ GrpcEnvironment.SetLogger(new TextWriterLogger(Console.Error));
+#if DOTNET5_4
+ return new AutoRun(typeof(NUnitMain).GetTypeInfo().Assembly).Execute(args, new ExtendedTextWrapper(Console.Out), Console.In);
+#else
+ return new AutoRun().Execute(args);
+#endif
+ }
+ }
+}
diff --git a/src/csharp/Grpc.Examples.Tests/packages.config b/src/csharp/Grpc.Examples.Tests/packages.config
index ed30d2d428e..ce030f9d777 100644
--- a/src/csharp/Grpc.Examples.Tests/packages.config
+++ b/src/csharp/Grpc.Examples.Tests/packages.config
@@ -1,6 +1,7 @@
-
-
-
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/csharp/Grpc.Examples/Grpc.Examples.csproj b/src/csharp/Grpc.Examples/Grpc.Examples.csproj
index 15b04c8d8b7..f0a0aa3a266 100644
--- a/src/csharp/Grpc.Examples/Grpc.Examples.csproj
+++ b/src/csharp/Grpc.Examples/Grpc.Examples.csproj
@@ -41,6 +41,9 @@
False
..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll
+
+ ..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll
+
diff --git a/src/csharp/Grpc.Examples/packages.config b/src/csharp/Grpc.Examples/packages.config
index dfb8304ad10..a424cd2ea02 100644
--- a/src/csharp/Grpc.Examples/packages.config
+++ b/src/csharp/Grpc.Examples/packages.config
@@ -2,5 +2,5 @@
-
+
\ No newline at end of file
diff --git a/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj b/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj
index bb6488b4f12..0bea9c03e7a 100644
--- a/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj
+++ b/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj
@@ -1,11 +1,11 @@

-
+
Debug
AnyCPU
{F8C6D937-C44B-4EE3-A431-B0FBAEACE47D}
- Library
+ Exe
Properties
Grpc.HealthCheck.Tests
Grpc.HealthCheck.Tests
@@ -37,13 +37,6 @@
..\keys\Grpc.snk
-
- False
- ..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll
-
-
- ..\packages\NUnit.2.6.4\lib\nunit.framework.dll
-
@@ -51,6 +44,15 @@
+
+ ..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll
+
+
+ ..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll
+
+
+ ..\packages\NUnitLite.3.2.0\lib\net45\nunitlite.dll
+
@@ -59,14 +61,15 @@
+
- {ccc4440e-49f7-4790-b0af-feabb0837ae7}
+ {CCC4440E-49F7-4790-B0AF-FEABB0837AE7}
Grpc.Core
- {aa5e328a-8835-49d7-98ed-c29f2b3049f0}
+ {AA5E328A-8835-49D7-98ED-C29F2B3049F0}
Grpc.HealthCheck
diff --git a/src/csharp/Grpc.HealthCheck.Tests/NUnitMain.cs b/src/csharp/Grpc.HealthCheck.Tests/NUnitMain.cs
new file mode 100644
index 00000000000..0820523f35c
--- /dev/null
+++ b/src/csharp/Grpc.HealthCheck.Tests/NUnitMain.cs
@@ -0,0 +1,59 @@
+#region Copyright notice and license
+
+// Copyright 2016, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Reflection;
+using Grpc.Core;
+using Grpc.Core.Logging;
+using NUnit.Common;
+using NUnitLite;
+
+namespace Grpc.HealthCheck.Tests
+{
+ ///
+ /// Provides entry point for NUnitLite
+ ///
+ public class NUnitMain
+ {
+ public static int Main(string[] args)
+ {
+ // Make logger immune to NUnit capturing stdout and stderr to workaround https://github.com/nunit/nunit/issues/1406.
+ GrpcEnvironment.SetLogger(new TextWriterLogger(Console.Error));
+#if DOTNET5_4
+ return new AutoRun(typeof(NUnitMain).GetTypeInfo().Assembly).Execute(args, new ExtendedTextWrapper(Console.Out), Console.In);
+#else
+ return new AutoRun().Execute(args);
+#endif
+ }
+ }
+}
diff --git a/src/csharp/Grpc.HealthCheck.Tests/packages.config b/src/csharp/Grpc.HealthCheck.Tests/packages.config
index 47280939791..8066d8fcebd 100644
--- a/src/csharp/Grpc.HealthCheck.Tests/packages.config
+++ b/src/csharp/Grpc.HealthCheck.Tests/packages.config
@@ -1,5 +1,6 @@

-
+
+
\ No newline at end of file
diff --git a/src/csharp/Grpc.IntegrationTesting/GeneratedServiceBaseTest.cs b/src/csharp/Grpc.IntegrationTesting/GeneratedServiceBaseTest.cs
index 99aa7290301..5fd0e14e78d 100644
--- a/src/csharp/Grpc.IntegrationTesting/GeneratedServiceBaseTest.cs
+++ b/src/csharp/Grpc.IntegrationTesting/GeneratedServiceBaseTest.cs
@@ -84,7 +84,7 @@ namespace Grpc.IntegrationTesting
{
var call = client.StreamingInputCall();
- var ex = Assert.Throws(async () => await call);
+ var ex = Assert.ThrowsAsync(async () => await call);
Assert.AreEqual(StatusCode.Unimplemented, ex.Status.StatusCode);
}
@@ -93,7 +93,7 @@ namespace Grpc.IntegrationTesting
{
var call = client.StreamingOutputCall(new StreamingOutputCallRequest());
- var ex = Assert.Throws(async () => await call.ResponseStream.MoveNext());
+ var ex = Assert.ThrowsAsync(async () => await call.ResponseStream.MoveNext());
Assert.AreEqual(StatusCode.Unimplemented, ex.Status.StatusCode);
}
@@ -102,7 +102,7 @@ namespace Grpc.IntegrationTesting
{
var call = client.FullDuplexCall();
- var ex = Assert.Throws(async () => await call.ResponseStream.MoveNext());
+ var ex = Assert.ThrowsAsync(async () => await call.ResponseStream.MoveNext());
Assert.AreEqual(StatusCode.Unimplemented, ex.Status.StatusCode);
}
diff --git a/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj b/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj
index 7ea80b11f0d..c16d0e5c5d0 100644
--- a/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj
+++ b/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj
@@ -4,7 +4,7 @@
Debug
AnyCPU
{C61154BA-DD4A-4838-8420-0162A28925E0}
- Library
+ Exe
Grpc.IntegrationTesting
Grpc.IntegrationTesting
v4.5
@@ -38,47 +38,43 @@
..\keys\Grpc.snk
-
- False
- ..\packages\BouncyCastle.1.7.0\lib\Net40-Client\BouncyCastle.Crypto.dll
-
..\packages\CommandLineParser.1.9.71\lib\net45\CommandLine.dll
-
- False
+
+ ..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll
+
+
+
+
+
+
+ ..\packages\BouncyCastle.1.7.0\lib\Net40-Client\BouncyCastle.Crypto.dll
+
+
..\packages\Google.Apis.Auth.1.11.1\lib\net45\Google.Apis.Auth.dll
-
- False
+
..\packages\Google.Apis.Auth.1.11.1\lib\net45\Google.Apis.Auth.PlatformServices.dll
-
- False
+
..\packages\Google.Apis.Core.1.11.1\lib\net45\Google.Apis.Core.dll
-
- False
+
..\packages\Google.Protobuf.3.0.0-beta2\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll
-
- ..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll
-
-
- False
+
..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll
- ..\packages\NUnit.2.6.4\lib\nunit.framework.dll
+ ..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll
-
-
- False
+
..\packages\Ix-Async.1.2.5\lib\net45\System.Interactive.Async.dll
-
-
-
+
+ ..\packages\NUnitLite.3.2.0\lib\net45\nunitlite.dll
+
@@ -116,6 +112,7 @@
+
diff --git a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
index 7ca52219360..54365179603 100644
--- a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
+++ b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
@@ -445,7 +445,7 @@ namespace Grpc.IntegrationTesting
await Task.Delay(1000);
cts.Cancel();
- var ex = Assert.Throws(async () => await call.ResponseAsync);
+ var ex = Assert.ThrowsAsync(async () => await call.ResponseAsync);
Assert.AreEqual(StatusCode.Cancelled, ex.Status.StatusCode);
}
Console.WriteLine("Passed!");
@@ -471,7 +471,7 @@ namespace Grpc.IntegrationTesting
cts.Cancel();
- var ex = Assert.Throws(async () => await call.ResponseStream.MoveNext());
+ var ex = Assert.ThrowsAsync(async () => await call.ResponseStream.MoveNext());
Assert.AreEqual(StatusCode.Cancelled, ex.Status.StatusCode);
}
Console.WriteLine("Passed!");
@@ -493,7 +493,7 @@ namespace Grpc.IntegrationTesting
// Deadline was reached before write has started. Eat the exception and continue.
}
- var ex = Assert.Throws(async () => await call.ResponseStream.MoveNext());
+ var ex = Assert.ThrowsAsync(async () => await call.ResponseStream.MoveNext());
Assert.AreEqual(StatusCode.DeadlineExceeded, ex.Status.StatusCode);
}
Console.WriteLine("Passed!");
@@ -572,7 +572,7 @@ namespace Grpc.IntegrationTesting
await call.RequestStream.WriteAsync(request);
await call.RequestStream.CompleteAsync();
- var e = Assert.Throws(async () => await call.ResponseStream.ToListAsync());
+ var e = Assert.ThrowsAsync(async () => await call.ResponseStream.ToListAsync());
Assert.AreEqual(StatusCode.Unknown, e.Status.StatusCode);
Assert.AreEqual(echoStatus.Message, e.Status.Detail);
}
diff --git a/src/csharp/Grpc.IntegrationTesting/NUnitMain.cs b/src/csharp/Grpc.IntegrationTesting/NUnitMain.cs
new file mode 100644
index 00000000000..d8902de08f5
--- /dev/null
+++ b/src/csharp/Grpc.IntegrationTesting/NUnitMain.cs
@@ -0,0 +1,59 @@
+#region Copyright notice and license
+
+// Copyright 2016, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Reflection;
+using Grpc.Core;
+using Grpc.Core.Logging;
+using NUnit.Common;
+using NUnitLite;
+
+namespace Grpc.IntegrationTesting
+{
+ ///
+ /// Provides entry point for NUnitLite
+ ///
+ public class NUnitMain
+ {
+ public static int Main(string[] args)
+ {
+ // Make logger immune to NUnit capturing stdout and stderr to workaround https://github.com/nunit/nunit/issues/1406.
+ GrpcEnvironment.SetLogger(new TextWriterLogger(Console.Error));
+#if DOTNET5_4
+ return new AutoRun(typeof(NUnitMain).GetTypeInfo().Assembly).Execute(args, new ExtendedTextWrapper(Console.Out), Console.In);
+#else
+ return new AutoRun().Execute(args);
+#endif
+ }
+ }
+}
diff --git a/src/csharp/Grpc.IntegrationTesting/TestCredentials.cs b/src/csharp/Grpc.IntegrationTesting/TestCredentials.cs
index ce108d808b6..774563d752f 100644
--- a/src/csharp/Grpc.IntegrationTesting/TestCredentials.cs
+++ b/src/csharp/Grpc.IntegrationTesting/TestCredentials.cs
@@ -35,6 +35,7 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
+using System.Reflection;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Grpc.Core;
@@ -50,9 +51,29 @@ namespace Grpc.IntegrationTesting
{
public const string DefaultHostOverride = "foo.test.google.fr";
- public const string ClientCertAuthorityPath = "data/ca.pem";
- public const string ServerCertChainPath = "data/server1.pem";
- public const string ServerPrivateKeyPath = "data/server1.key";
+ public static string ClientCertAuthorityPath
+ {
+ get
+ {
+ return GetPath("data/ca.pem");
+ }
+ }
+
+ public static string ServerCertChainPath
+ {
+ get
+ {
+ return GetPath("data/server1.pem");
+ }
+ }
+
+ public static string ServerPrivateKeyPath
+ {
+ get
+ {
+ return GetPath("data/server1.key");
+ }
+ }
public static SslCredentials CreateSslCredentials()
{
@@ -66,5 +87,11 @@ namespace Grpc.IntegrationTesting
File.ReadAllText(ServerPrivateKeyPath));
return new SslServerCredentials(new[] { keyCertPair });
}
+
+ private static string GetPath(string relativePath)
+ {
+ var assemblyDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+ return Path.Combine(assemblyDir, relativePath);
+ }
}
}
diff --git a/src/csharp/Grpc.IntegrationTesting/packages.config b/src/csharp/Grpc.IntegrationTesting/packages.config
index 0ae8bf4e707..3fef67dca4f 100644
--- a/src/csharp/Grpc.IntegrationTesting/packages.config
+++ b/src/csharp/Grpc.IntegrationTesting/packages.config
@@ -8,5 +8,6 @@
-
+
+
\ No newline at end of file
diff --git a/src/csharp/tests.json b/src/csharp/tests.json
index 718bfa3287b..f733352a310 100644
--- a/src/csharp/tests.json
+++ b/src/csharp/tests.json
@@ -1,11 +1,5 @@
{
- "assemblies": [
- "Grpc.Core.Tests",
- "Grpc.Examples.Tests",
- "Grpc.HealthCheck.Tests",
- "Grpc.IntegrationTesting"
- ],
- "tests": [
+ "Grpc.Core.Tests": [
"Grpc.Core.Internal.Tests.AsyncCallTest",
"Grpc.Core.Internal.Tests.ChannelArgsSafeHandleTest",
"Grpc.Core.Internal.Tests.CompletionQueueEventTest",
@@ -32,13 +26,19 @@
"Grpc.Core.Tests.ServerTest",
"Grpc.Core.Tests.ShutdownTest",
"Grpc.Core.Tests.TimeoutsTest",
- "Grpc.Core.Tests.UserAgentStringTest",
- "Math.Tests.MathClientServerTest",
+ "Grpc.Core.Tests.UserAgentStringTest"
+ ],
+ "Grpc.Examples.Tests": [
+ "Math.Tests.MathClientServerTest"
+ ],
+ "Grpc.HealthCheck.Tests": [
"Grpc.HealthCheck.Tests.HealthClientServerTest",
- "Grpc.HealthCheck.Tests.HealthServiceImplTest",
- "Grpc.IntegrationTesting.HistogramTest",
+ "Grpc.HealthCheck.Tests.HealthServiceImplTest"
+ ],
+ "Grpc.IntegrationTesting": [
"Grpc.IntegrationTesting.GeneratedClientTest",
"Grpc.IntegrationTesting.GeneratedServiceBaseTest",
+ "Grpc.IntegrationTesting.HistogramTest",
"Grpc.IntegrationTesting.InteropClientServerTest",
"Grpc.IntegrationTesting.MetadataCredentialsTest",
"Grpc.IntegrationTesting.RunnerClientServerTest",
diff --git a/test/core/client_config/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342 b/test/core/client_config/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342
new file mode 100644
index 00000000000..a85e7a8c217
--- /dev/null
+++ b/test/core/client_config/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342
@@ -0,0 +1,2 @@
+::nix::ii///ii/\a‡?=n;iI_!';&b.cii??nn!%i!*%
+*;
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f b/test/core/client_config/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f
new file mode 100644
index 00000000000..5b913f1bb87
--- /dev/null
+++ b/test/core/client_config/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f
@@ -0,0 +1,2 @@
+:ipip~6:‡i:::1
+v:miP/ii:::/iu?n?n)i!=
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118 b/test/core/client_config/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118
new file mode 100644
index 00000000000..76f157cda5a
--- /dev/null
+++ b/test/core/client_config/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118
@@ -0,0 +1 @@
+i:i:‡ii:i?nip~??ni=niI&6.u/n_!'p~
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327 b/test/core/client_config/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327
new file mode 100644
index 00000000000..694d51dc9a0
--- /dev/null
+++ b/test/core/client_config/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327
@@ -0,0 +1 @@
+uni:/i:i:‡i:i:‡i??ni=niIi??ni=niI__!!i?n!i'p'pR2p~~
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c b/test/core/client_config/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c
new file mode 100644
index 00000000000..af80f07d192
--- /dev/null
+++ b/test/core/client_config/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c
@@ -0,0 +1 @@
+i:i:‡i??ni=niI_!'p~
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c b/test/core/client_config/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c
new file mode 100644
index 00000000000..7f0f2ea6eac
--- /dev/null
+++ b/test/core/client_config/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c
@@ -0,0 +1 @@
+:‡i?=niI_!';;
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab b/test/core/client_config/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab
new file mode 100644
index 00000000000..f975f970596
--- /dev/null
+++ b/test/core/client_config/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab
@@ -0,0 +1 @@
+i:i?nip~&6.u/n
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822 b/test/core/client_config/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822
new file mode 100644
index 00000000000..d5fb7ba2746
--- /dev/null
+++ b/test/core/client_config/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822
@@ -0,0 +1,2 @@
+:unix://ii//a.b.ci?n!%
+*
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb b/test/core/client_config/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb
new file mode 100644
index 00000000000..1860e1c5b49
--- /dev/null
+++ b/test/core/client_config/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb
@@ -0,0 +1 @@
+:‡i?P=niIii-i?%n'!%*i=
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58 b/test/core/client_config/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58
new file mode 100644
index 00000000000..fe908d213a8
--- /dev/null
+++ b/test/core/client_config/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58
@@ -0,0 +1 @@
+uni::.ilP:%:%i:i‡i:‡i?=nii?n(!ipRI_&/.i;;!?=ii/?n#lniiI_!*Kii!/?ni*
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb b/test/core/client_config/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb
new file mode 100644
index 00000000000..0e7f44caf26
--- /dev/null
+++ b/test/core/client_config/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb
@@ -0,0 +1 @@
+i:i:‡i:i:‡i??ni=niIi??ni=niI__!!'p'p~~
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d b/test/core/client_config/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d
new file mode 100644
index 00000000000..679f13e3071
--- /dev/null
+++ b/test/core/client_config/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d
@@ -0,0 +1,2 @@
+unix:///a/:.:ii/i?nc!%
+i*
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb b/test/core/client_config/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb
new file mode 100644
index 00000000000..ffd807b39ea
--- /dev/null
+++ b/test/core/client_config/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb
@@ -0,0 +1 @@
+ilP:%i:‡i?=niI_.i;;!ii/?nni*!
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4 b/test/core/client_config/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4
new file mode 100644
index 00000000000..8ad79f9eb90
--- /dev/null
+++ b/test/core/client_config/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4
@@ -0,0 +1 @@
+:‡i?P-niI%'i=
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6 b/test/core/client_config/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6
new file mode 100644
index 00000000000..facb11c5ed8
--- /dev/null
+++ b/test/core/client_config/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6
@@ -0,0 +1 @@
+:%i:‡i?=niI_!ii/?ni*!
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/aba1472880406a318ce207ee79815b7acf087757 b/test/core/client_config/uri_corpus/aba1472880406a318ce207ee79815b7acf087757
new file mode 100644
index 00000000000..b7e7e970f8b
--- /dev/null
+++ b/test/core/client_config/uri_corpus/aba1472880406a318ce207ee79815b7acf087757
@@ -0,0 +1 @@
+:iI/i?n!%š*
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4 b/test/core/client_config/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4
new file mode 100644
index 00000000000..119b0808c9f
--- /dev/null
+++ b/test/core/client_config/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4
@@ -0,0 +1 @@
+:%i:i‡?=#liI_!Kii/?ni*
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807 b/test/core/client_config/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807
new file mode 100644
index 00000000000..01db5d8aa44
--- /dev/null
+++ b/test/core/client_config/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807
@@ -0,0 +1,2 @@
+::unix://ii//a‡?=niI_!';.b.ci?n!%
+*;
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d b/test/core/client_config/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d
new file mode 100644
index 00000000000..2ccb535449a
--- /dev/null
+++ b/test/core/client_config/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d
@@ -0,0 +1 @@
+uni::.i?n(!ipR&/
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9 b/test/core/client_config/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9
new file mode 100644
index 00000000000..f3c0404be7b
--- /dev/null
+++ b/test/core/client_config/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9
@@ -0,0 +1 @@
+::nix::ii///ii/\a:‡?=n;iI_!';&b.ciii
\ No newline at end of file
diff --git a/test/core/client_config/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd b/test/core/client_config/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd
new file mode 100644
index 00000000000..497bfd37ee4
--- /dev/null
+++ b/test/core/client_config/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd
@@ -0,0 +1 @@
+ilP:%:%i:i‡i:‡i?=niI_.i;;!?=ii/?n#lniiI_!*Kii!/?ni*
\ No newline at end of file
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/15afdcf2cadb93f56dbe36233d8cd7ea9d2bd6fe b/test/core/end2end/fuzzers/server_fuzzer_corpus/15afdcf2cadb93f56dbe36233d8cd7ea9d2bd6fe
new file mode 100644
index 00000000000..b63ef6bacc1
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/15afdcf2cadb93f56dbe36233d8cd7ea9d2bd6fe differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/1d614f3d6b826f844178a77094bedb534748a362 b/test/core/end2end/fuzzers/server_fuzzer_corpus/1d614f3d6b826f844178a77094bedb534748a362
new file mode 100644
index 00000000000..ece6c2f4d95
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/1d614f3d6b826f844178a77094bedb534748a362 differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/546367bfdd2b9464fbfe5d74f55d8cd220accbab b/test/core/end2end/fuzzers/server_fuzzer_corpus/546367bfdd2b9464fbfe5d74f55d8cd220accbab
new file mode 100644
index 00000000000..d2711d91044
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/546367bfdd2b9464fbfe5d74f55d8cd220accbab differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/5841d898d2cd804f2d6373538e341dfba8a4dfab b/test/core/end2end/fuzzers/server_fuzzer_corpus/5841d898d2cd804f2d6373538e341dfba8a4dfab
new file mode 100644
index 00000000000..e17f047eabc
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/5841d898d2cd804f2d6373538e341dfba8a4dfab differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/6c5bb78b51cf5006c92258292de19550985c00ba b/test/core/end2end/fuzzers/server_fuzzer_corpus/6c5bb78b51cf5006c92258292de19550985c00ba
new file mode 100644
index 00000000000..d1af2812d99
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/6c5bb78b51cf5006c92258292de19550985c00ba differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/7839f12a8410a73d66e191cb5183d36d09a375e8 b/test/core/end2end/fuzzers/server_fuzzer_corpus/7839f12a8410a73d66e191cb5183d36d09a375e8
new file mode 100644
index 00000000000..b03b904e1de
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/7839f12a8410a73d66e191cb5183d36d09a375e8 differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/7ddfac7d7845b424bf670070781ca6ff8586c63b b/test/core/end2end/fuzzers/server_fuzzer_corpus/7ddfac7d7845b424bf670070781ca6ff8586c63b
new file mode 100644
index 00000000000..027cb69617d
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/7ddfac7d7845b424bf670070781ca6ff8586c63b differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/8ec00f45afb097066f47d0bad256a8b856b1efe8 b/test/core/end2end/fuzzers/server_fuzzer_corpus/8ec00f45afb097066f47d0bad256a8b856b1efe8
new file mode 100644
index 00000000000..6561c1c4409
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/8ec00f45afb097066f47d0bad256a8b856b1efe8 differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/986c9ca7db83b2cddbae2a0db2dca87f52277074 b/test/core/end2end/fuzzers/server_fuzzer_corpus/986c9ca7db83b2cddbae2a0db2dca87f52277074
new file mode 100644
index 00000000000..6ba16352c17
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/986c9ca7db83b2cddbae2a0db2dca87f52277074 differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/9a176b6f7e0dc5f681a1788d8954f76fabd08cad b/test/core/end2end/fuzzers/server_fuzzer_corpus/9a176b6f7e0dc5f681a1788d8954f76fabd08cad
new file mode 100644
index 00000000000..ef52cd7c81a
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/9a176b6f7e0dc5f681a1788d8954f76fabd08cad differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/aefcbc29f2caea5038cda4dbc927cdadd9b844c4 b/test/core/end2end/fuzzers/server_fuzzer_corpus/aefcbc29f2caea5038cda4dbc927cdadd9b844c4
new file mode 100644
index 00000000000..a95b626ec70
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/aefcbc29f2caea5038cda4dbc927cdadd9b844c4 differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/c5ff50ae447ac7a0c8fb3363b2458824d405e64c b/test/core/end2end/fuzzers/server_fuzzer_corpus/c5ff50ae447ac7a0c8fb3363b2458824d405e64c
new file mode 100644
index 00000000000..ccebb3610d0
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/c5ff50ae447ac7a0c8fb3363b2458824d405e64c differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/crash-7af5da2a8da23d197d9336e32da72c9ff64c15b3 b/test/core/end2end/fuzzers/server_fuzzer_corpus/crash-7af5da2a8da23d197d9336e32da72c9ff64c15b3
new file mode 100644
index 00000000000..f713daabbe7
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/crash-7af5da2a8da23d197d9336e32da72c9ff64c15b3 differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/e7ad0c4b7d0f289c90a3988309e9e03b78f7eea3 b/test/core/end2end/fuzzers/server_fuzzer_corpus/e7ad0c4b7d0f289c90a3988309e9e03b78f7eea3
new file mode 100644
index 00000000000..a4fd83a79f4
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/e7ad0c4b7d0f289c90a3988309e9e03b78f7eea3 differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/f5f0615030439dda162e8862b6bbd09f81f14d81 b/test/core/end2end/fuzzers/server_fuzzer_corpus/f5f0615030439dda162e8862b6bbd09f81f14d81
new file mode 100644
index 00000000000..9b44f752aa3
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/f5f0615030439dda162e8862b6bbd09f81f14d81 differ
diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-6e980a9d12c392175b5f66683e608626ae983276 b/test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-6e980a9d12c392175b5f66683e608626ae983276
new file mode 100644
index 00000000000..f0489f8266e
Binary files /dev/null and b/test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-6e980a9d12c392175b5f66683e608626ae983276 differ
diff --git a/tools/dockerfile/grpc_interop_csharp/Dockerfile b/tools/dockerfile/grpc_interop_csharp/Dockerfile
index 3789cd32038..93cd25010ef 100644
--- a/tools/dockerfile/grpc_interop_csharp/Dockerfile
+++ b/tools/dockerfile/grpc_interop_csharp/Dockerfile
@@ -80,13 +80,9 @@ RUN echo "deb http://download.mono-project.com/repo/debian wheezy-libtiff-compat
# Install dependencies
RUN apt-get update && apt-get -y dist-upgrade && apt-get install -y \
mono-devel \
- nunit \
- nunit-console \
- monodevelop
-
-# Download NuGet
-RUN cd /var/local && wget www.nuget.org/NuGet.exe
-ENV NUGET mono /var/local/NuGet.exe
+ ca-certificates-mono \
+ nuget \
+ && apt-get clean
# Define the default command.
CMD ["bash"]
diff --git a/tools/dockerfile/grpc_interop_csharp/build_interop.sh b/tools/dockerfile/grpc_interop_csharp/build_interop.sh
index dc1f7a331ab..fd5436c44ff 100755
--- a/tools/dockerfile/grpc_interop_csharp/build_interop.sh
+++ b/tools/dockerfile/grpc_interop_csharp/build_interop.sh
@@ -40,6 +40,4 @@ cp -r /var/local/jenkins/service_account $HOME || true
cd /var/local/git/grpc
# build C# interop client & server
-make CONFIG=dbg grpc_csharp_ext
-(cd src/csharp && mono /var/local/NuGet.exe restore Grpc.sln)
-(cd src/csharp && xbuild Grpc.sln)
+tools/run_tests/run_tests.py -l csharp -c dbg --build_only
diff --git a/tools/run_tests/post_tests_csharp.bat b/tools/run_tests/post_tests_csharp.bat
new file mode 100644
index 00000000000..7851b9137ac
--- /dev/null
+++ b/tools/run_tests/post_tests_csharp.bat
@@ -0,0 +1,25 @@
+@rem Runs C# tests for given assembly from command line. The Grpc.sln solution needs to be built before running the tests.
+
+setlocal
+
+if not "%CONFIG%" == "gcov" (
+ goto :EOF
+)
+
+@rem enter src/csharp directory
+cd /d %~dp0\..\..\src\csharp
+
+@rem Generate code coverage report
+@rem TODO(jtattermusch): currently the report list is hardcoded
+packages\ReportGenerator.2.4.4.0\tools\ReportGenerator.exe -reports:"coverage_csharp_*.xml" -targetdir:"..\..\reports\csharp_coverage" -reporttypes:"Html;TextSummary" || goto :error
+
+@rem Generate the index.html file
+echo ^^^^^csharp coverage^^
^^ >..\..\reports\index.html
+
+endlocal
+
+goto :EOF
+
+:error
+echo Failed!
+exit /b %errorlevel%
diff --git a/tools/run_tests/run_csharp.sh b/tools/run_tests/post_tests_csharp.sh
similarity index 73%
rename from tools/run_tests/run_csharp.sh
rename to tools/run_tests/post_tests_csharp.sh
index dad44c4e4f6..bb6f5c6e188 100755
--- a/tools/run_tests/run_csharp.sh
+++ b/tools/run_tests/post_tests_csharp.sh
@@ -30,23 +30,15 @@
set -ex
-CONFIG=${CONFIG:-opt}
-NUNIT_CONSOLE="mono packages/NUnit.Runners.2.6.4/tools/nunit-console.exe"
+if [ "$CONFIG" != "gcov" ] ; then exit ; fi
# change to gRPC repo root
cd $(dirname $0)/../..
-(cd src/csharp; $NUNIT_CONSOLE $@)
-
-if [ "$CONFIG" = "gcov" ]
-then
- # Generate the csharp extension coverage report
- gcov objs/gcov/src/csharp/ext/*.o
- lcov --base-directory . --directory . -c -o coverage.info
- lcov -e coverage.info '**/src/csharp/ext/*' -o coverage.info
- genhtml -o reports/csharp_ext_coverage --num-spaces 2 \
- -t 'gRPC C# native extension test coverage' coverage.info \
- --rc genhtml_hi_limit=95 --rc genhtml_med_limit=80 --no-prefix
-fi
-
-
+# Generate the csharp extension coverage report
+gcov objs/gcov/src/csharp/ext/*.o
+lcov --base-directory . --directory . -c -o coverage.info
+lcov -e coverage.info '**/src/csharp/ext/*' -o coverage.info
+genhtml -o reports/csharp_ext_coverage --num-spaces 2 \
+ -t 'gRPC C# native extension test coverage' coverage.info \
+ --rc genhtml_hi_limit=95 --rc genhtml_med_limit=80 --no-prefix
diff --git a/tools/run_tests/run_csharp.bat b/tools/run_tests/run_csharp.bat
deleted file mode 100644
index 29c879e23be..00000000000
--- a/tools/run_tests/run_csharp.bat
+++ /dev/null
@@ -1,27 +0,0 @@
-@rem Runs C# tests for given assembly from command line. The Grpc.sln solution needs to be built before running the tests.
-
-setlocal
-
-@rem enter src/csharp directory
-cd /d %~dp0\..\..\src\csharp
-
-if not "%CONFIG%" == "gcov" (
- packages\NUnit.Runners.2.6.4\tools\nunit-console-x86.exe %* || goto :error
-) else (
- @rem Run all tests with code coverage
-
- packages\OpenCover.4.6.519\tools\OpenCover.Console.exe -target:"packages\NUnit.Runners.2.6.4\tools\nunit-console-x86.exe" -targetdir:"." -targetargs:"%*" -filter:"+[Grpc.Core]*" -register:user -output:coverage_results.xml || goto :error
-
- packages\ReportGenerator.2.4.4.0\tools\ReportGenerator.exe -reports:"coverage_results.xml" -targetdir:"..\..\reports\csharp_coverage" -reporttypes:"Html;TextSummary" || goto :error
-
- @rem Generate the index.html file
- echo ^^^^^csharp coverage^^
^^ >..\..\reports\index.html
-)
-
-endlocal
-
-goto :EOF
-
-:error
-echo Failed!
-exit /b %errorlevel%
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index dfac94660b6..9dff686bbf6 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -486,41 +486,48 @@ class CSharpLanguage(object):
def test_specs(self):
with open('src/csharp/tests.json') as f:
- tests_json = json.load(f)
- assemblies = tests_json['assemblies']
- tests = tests_json['tests']
+ tests_by_assembly = json.load(f)
msbuild_config = _MSBUILD_CONFIG[self.config.build_config]
- assembly_files = ['%s/bin/%s/%s.dll' % (a, msbuild_config, a)
- for a in assemblies]
-
- extra_args = ['-labels'] + assembly_files
-
+ nunit_args = ['--labels=All',
+ '--noresult',
+ '--workers=1']
if self.platform == 'windows':
- script_name = 'tools\\run_tests\\run_csharp.bat'
- extra_args += ['-domain=None']
+ runtime_cmd = []
else:
- script_name = 'tools/run_tests/run_csharp.sh'
-
- if self.config.build_config == 'gcov':
- # On Windows, we only collect C# code coverage.
- # On Linux, we only collect coverage for native extension.
- # For code coverage all tests need to run as one suite.
- return [self.config.job_spec([script_name] + extra_args, None,
- shortname='csharp.coverage',
- environ=_FORCE_ENVIRON_FOR_WRAPPERS)]
- else:
- specs = []
- for test in tests:
- cmdline = [script_name, '-run=%s' % test] + extra_args
- if self.platform == 'windows':
- # use different output directory for each test to prevent
- # TestResult.xml clash between parallel test runs.
- cmdline += ['-work=test-result/%s' % uuid.uuid4()]
- specs.append(self.config.job_spec(cmdline, None,
- shortname='csharp.%s' % test,
+ runtime_cmd = ['mono']
+
+ specs = []
+ for assembly in tests_by_assembly.iterkeys():
+ assembly_file = 'src/csharp/%s/bin/%s/%s.exe' % (assembly, msbuild_config, assembly)
+ if self.config.build_config != 'gcov' or self.platform != 'windows':
+ # normally, run each test as a separate process
+ for test in tests_by_assembly[assembly]:
+ cmdline = runtime_cmd + [assembly_file, '--test=%s' % test] + nunit_args
+ specs.append(self.config.job_spec(cmdline,
+ None,
+ shortname='csharp.%s' % test,
+ environ=_FORCE_ENVIRON_FOR_WRAPPERS))
+ else:
+ # For C# test coverage, run all tests from the same assembly at once
+ # using OpenCover.Console (only works on Windows).
+ cmdline = ['src\\csharp\\packages\\OpenCover.4.6.519\\tools\\OpenCover.Console.exe',
+ '-target:%s' % assembly_file,
+ '-targetdir:src\\csharp',
+ '-targetargs:%s' % ' '.join(nunit_args),
+ '-filter:+[Grpc.Core]*',
+ '-register:user',
+ '-output:src\\csharp\\coverage_csharp_%s.xml' % assembly]
+
+ # set really high cpu_cost to make sure instances of OpenCover.Console run exclusively
+ # to prevent problems with registering the profiler.
+ run_exclusive = 1000000
+ specs.append(self.config.job_spec(cmdline,
+ None,
+ shortname='csharp.coverage.%s' % assembly,
+ cpu_cost=run_exclusive,
environ=_FORCE_ENVIRON_FOR_WRAPPERS))
- return specs
+ return specs
def pre_build_steps(self):
if self.platform == 'windows':
@@ -543,7 +550,10 @@ class CSharpLanguage(object):
return [['tools/run_tests/build_csharp.sh']]
def post_tests_steps(self):
- return []
+ if self.platform == 'windows':
+ return [['tools\\run_tests\\post_tests_csharp.bat']]
+ else:
+ return [['tools/run_tests/post_tests_csharp.sh']]
def makefile_name(self):
return 'Makefile'
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index baf27da1011..4f29584d734 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -46742,6 +46742,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/15afdcf2cadb93f56dbe36233d8cd7ea9d2bd6fe"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/1650b19093c56a1e86ee192bd9cd8d2266a9e353"
@@ -46962,6 +46984,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/1d614f3d6b826f844178a77094bedb534748a362"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/1e92aaa5.bin"
@@ -48722,6 +48766,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/546367bfdd2b9464fbfe5d74f55d8cd220accbab"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/54d0fc6c.bin"
@@ -48832,6 +48898,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/5841d898d2cd804f2d6373538e341dfba8a4dfab"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/58b88a24.bin"
@@ -49338,6 +49426,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/6c5bb78b51cf5006c92258292de19550985c00ba"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/6dc4455c.bin"
@@ -49580,6 +49690,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/7839f12a8410a73d66e191cb5183d36d09a375e8"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/7b453adcb9c4bf31dbc448ff32c2bc90ebcbdf0f"
@@ -49602,6 +49734,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/7ddfac7d7845b424bf670070781ca6ff8586c63b"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/7f15bbce.bin"
@@ -49910,6 +50064,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/8ec00f45afb097066f47d0bad256a8b856b1efe8"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/90224b8e.bin"
@@ -50174,6 +50350,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/986c9ca7db83b2cddbae2a0db2dca87f52277074"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/9953eb28aa1ed661612a4710a9d16a15de4ae353"
@@ -50196,6 +50394,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/9a176b6f7e0dc5f681a1788d8954f76fabd08cad"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/9a6963b0d0fcb0e91a31748c47c6f0e1e842fea9"
@@ -50658,6 +50878,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/aefcbc29f2caea5038cda4dbc927cdadd9b844c4"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/b06ce623.bin"
@@ -51230,6 +51472,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/c5ff50ae447ac7a0c8fb3363b2458824d405e64c"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/c66e84d1.bin"
@@ -51518,7 +51782,7 @@
},
{
"args": [
- "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-7e121dd3be057176369bea160d873040b32a03dc"
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-7af5da2a8da23d197d9336e32da72c9ff64c15b3"
],
"ci_platforms": [
"linux",
@@ -51540,7 +51804,7 @@
},
{
"args": [
- "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-e34b0a9a428001cb4094a9ebca76329f578811a4"
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-7e121dd3be057176369bea160d873040b32a03dc"
],
"ci_platforms": [
"linux",
@@ -51562,7 +51826,29 @@
},
{
"args": [
- "test/core/end2end/fuzzers/server_fuzzer_corpus/d0f7eebc.bin"
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-e34b0a9a428001cb4094a9ebca76329f578811a4"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/d0f7eebc.bin"
],
"ci_platforms": [
"linux",
@@ -51868,6 +52154,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/e7ad0c4b7d0f289c90a3988309e9e03b78f7eea3"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/e9d96662.bin"
@@ -52132,6 +52440,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/f5f0615030439dda162e8862b6bbd09f81f14d81"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/end2end/fuzzers/server_fuzzer_corpus/f74b9428.bin"
@@ -52506,6 +52836,50 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/end2end/fuzzers/server_fuzzer_corpus/slow-unit-6e980a9d12c392175b5f66683e608626ae983276"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "server_fuzzer_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/02d156dc5e6f2c11c90c2e06fcee04adf036a342"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/client_config/uri_corpus/042dc4512fa3d391c5170cf3aa61e6a638f84342"
@@ -52550,6 +52924,50 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/1155aa6ea7ef262a81a63692513ea395f84dad6f"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/13856a5569ffd085a4d5c07af5f8e9310835a118"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/client_config/uri_corpus/14b57bcbf1e17b1db1de491ef2ba3768f704b7dc"
@@ -52726,6 +53144,50 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/396568fc41c8ccb31ec925b4a862e4d29ead1327"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/3b1e7526a99918006b87e499d2beb6c4ac9c3c0c"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/client_config/uri_corpus/3b58860f3451d3e7aad99690a8d39782ca5116fc"
@@ -52748,6 +53210,28 @@
"posix"
]
},
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/41963cc10752f70c3af7e3d85868efb097a0ea9c"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
{
"args": [
"test/core/client_config/uri_corpus/47b5228404451fc9d4071fa69192514bb4ce33c1"
@@ -52772,7 +53256,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8"
+ "test/core/client_config/uri_corpus/56a2da4b2e6fb795243901023ed8d0aa083d1aab"
],
"ci_platforms": [
"linux",
@@ -52794,7 +53278,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a"
+ "test/core/client_config/uri_corpus/574c2f13858a9a6d724654bd913ede9ae3abf822"
],
"ci_platforms": [
"linux",
@@ -52816,7 +53300,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb"
+ "test/core/client_config/uri_corpus/582f789c19033a152094cbf8565f14154a778ddb"
],
"ci_platforms": [
"linux",
@@ -52838,7 +53322,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6"
+ "test/core/client_config/uri_corpus/636c5606fc23713a1bae88c8899c0541cfad4fd8"
],
"ci_platforms": [
"linux",
@@ -52860,7 +53344,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1"
+ "test/core/client_config/uri_corpus/63fe493b270b17426d77a27cbf3abac5b2c2794a"
],
"ci_platforms": [
"linux",
@@ -52882,7 +53366,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266"
+ "test/core/client_config/uri_corpus/655300a902b62662296a8e46bfb04fbcb07182cb"
],
"ci_platforms": [
"linux",
@@ -52904,7 +53388,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb"
+ "test/core/client_config/uri_corpus/6ae3acd9d8507b61bf235748026080a4138dba58"
],
"ci_platforms": [
"linux",
@@ -52926,7 +53410,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8"
+ "test/core/client_config/uri_corpus/6b70979a70a038ff6607d6cf85485ee95baf58e6"
],
"ci_platforms": [
"linux",
@@ -52948,7 +53432,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b"
+ "test/core/client_config/uri_corpus/7314ab3545a7535a26e0e8aad67caea5534d68b1"
],
"ci_platforms": [
"linux",
@@ -52970,7 +53454,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de"
+ "test/core/client_config/uri_corpus/7ff4d8b8d1ffd0d42c48bbb91e5856a9ec31aecb"
],
"ci_platforms": [
"linux",
@@ -52992,7 +53476,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d"
+ "test/core/client_config/uri_corpus/87daa131e0973b77a232a870ed749ef29cf58e6d"
],
"ci_platforms": [
"linux",
@@ -53014,7 +53498,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38"
+ "test/core/client_config/uri_corpus/884dcaee2908ffe5f12b65b8eba81016099c4266"
],
"ci_platforms": [
"linux",
@@ -53036,7 +53520,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2"
+ "test/core/client_config/uri_corpus/8d7e944fd5d0ede94097fcc98b47b09a3f9c76cb"
],
"ci_platforms": [
"linux",
@@ -53058,7 +53542,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd"
+ "test/core/client_config/uri_corpus/9671149af0b444f59bbdf71340d3441dadd8a7b4"
],
"ci_platforms": [
"linux",
@@ -53080,7 +53564,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245"
+ "test/core/client_config/uri_corpus/96c8d266b7dc037288ef305c996608270f72e7fb"
],
"ci_platforms": [
"linux",
@@ -53102,7 +53586,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c"
+ "test/core/client_config/uri_corpus/975536c71ade4800415a7e9c2f1b45c35a6d5ea8"
],
"ci_platforms": [
"linux",
@@ -53124,7 +53608,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca"
+ "test/core/client_config/uri_corpus/99750aa67d30beaea8af565c829d4999aa8cb91b"
],
"ci_platforms": [
"linux",
@@ -53146,7 +53630,7 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a"
+ "test/core/client_config/uri_corpus/a1140f3f8b5cffc1010221b9a4084a25fb75c1f6"
],
"ci_platforms": [
"linux",
@@ -53168,7 +53652,337 @@
},
{
"args": [
- "test/core/client_config/uri_corpus/dns.txt"
+ "test/core/client_config/uri_corpus/a1f0f9b75bb354eb063d7cba4fcfa2d0b88d63de"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/a296eb3d1d436ed7df7195b10aa3c4de3896f98d"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/a8b8e66050b424f1b8c07d46f868199fb7f60e38"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/aba1472880406a318ce207ee79815b7acf087757"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/af55baf8c8855e563befdf1eefbcbd46c5ddb8d2"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/b3c0bf66c2bf5d24ef1daf4cc5a9d6d5bd0e8bfd"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/c28a47409cf5d95bb372238d01e73d8b831408e4"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/c3ef1d41888063a08700c3add1e4465aabcf8807"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/c550a76af21f9b9cc92a386d5c8998b26f8f2e4d"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/c79721406d0ab80495f186fd88e37fba98637ae9"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/ceb4e2264ba7a8d5be47d276b37ec09489e00245"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/cf4395958f5bfb46fd6f535a39657d016c75114c"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/d46668372b7e20154a89409a7430a28e642afdca"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/d6fe7412a0a1d1c733160246f3fa425f4f97682a"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/dns.txt"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
+ "name": "uri_fuzzer_test_one_entry",
+ "platforms": [
+ "linux",
+ "mac",
+ "windows",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "test/core/client_config/uri_corpus/e241f29957b0e30ec11aaaf91b2339f7015fa5fd"
],
"ci_platforms": [
"linux",