public async Task GrpcInputTests_StopsAndRestarts()

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