in src/LibraryTest/Library/Inputs/GrpcInputTests.cs [174:221]
public async Task GrpcInputTests_StopsAndRestarts()
{
// ARRANGE
int instancesReceived = 0;
InstanceMsg receivedInstance = null;
int port = Common.GetPort();
var input = new GrpcInput("localhost", port, instance =>
{
instancesReceived++;
receivedInstance = instance;
});
input.Start();
Assert.IsTrue(SpinWait.SpinUntil(() => input.IsRunning, GrpcInputTests.DefaultTimeout));
var grpcWriter = new GrpcWriter(port);
var request = new HandleTraceSpanRequest();
request.Instances.Add(new InstanceMsg() {SourceName = "SourceName1"});
await grpcWriter.Write(request).ConfigureAwait(false);
Common.AssertIsTrueEventually(
() => input.GetStats().InstancesSucceeded == 1 && instancesReceived == 1 &&
receivedInstance.SourceName == "SourceName1", GrpcInputTests.DefaultTimeout);
// ACT
input.Stop();
Common.AssertIsTrueEventually(
() => !input.IsRunning && input.GetStats().InstancesSucceeded == 1 && instancesReceived == 1 &&
receivedInstance.SourceName == "SourceName1", GrpcInputTests.DefaultTimeout);
input.Start();
Assert.IsTrue(SpinWait.SpinUntil(() => input.IsRunning, GrpcInputTests.DefaultTimeout));
grpcWriter = new GrpcWriter(port);
request.Instances.Single().SourceName = "SourceName2";
await grpcWriter.Write(request).ConfigureAwait(false);
// ASSERT
Common.AssertIsTrueEventually(
() => input.IsRunning && input.GetStats().InstancesSucceeded == 1 && instancesReceived == 2 &&
receivedInstance.SourceName == "SourceName2", GrpcInputTests.DefaultTimeout);
}