From 03d55f3c4af2b37d1177b7faad68e19276f26344 Mon Sep 17 00:00:00 2001 From: aehlig Date: Thu, 26 Oct 2017 11:45:35 +0200 Subject: BuildEventStreamer: allow final messages After receiving a BuildCompletingEvent, allow some final late messages, but only those not yet seen and announced by that BuildCompletingEvent. This mechanism will be used in a follow-up change to add a message with tool statistics. Change-Id: I979bec5bd946208068faff9a4ddd5245a769f096 PiperOrigin-RevId: 173514552 --- .../build/lib/runtime/BuildEventStreamerTest.java | 74 ++++++++++++++++++++++ 1 file changed, 74 insertions(+) (limited to 'src/test/java') diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java index 452384de81..9588c5cbc0 100644 --- a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java +++ b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java @@ -291,6 +291,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { streamer.buildEvent(startEvent); + assertThat(streamer.isClosed()).isFalse(); List afterFirstEvent = transport.getEvents(); assertThat(afterFirstEvent).hasSize(1); assertThat(afterFirstEvent.get(0).getEventId()).isEqualTo(startEvent.getEventId()); @@ -298,6 +299,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { streamer.buildEvent(new BuildCompleteEvent(new BuildResult(0))); + assertThat(streamer.isClosed()).isTrue(); List finalStream = transport.getEvents(); assertThat(finalStream).hasSize(3); assertThat(ImmutableSet.of(finalStream.get(1).getEventId(), finalStream.get(2).getEventId())) @@ -332,6 +334,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { streamer.buildEvent(startEvent); streamer.buildEvent(unexpectedEvent); + assertThat(streamer.isClosed()).isFalse(); List eventsSeen = transport.getEvents(); assertThat(eventsSeen).hasSize(3); assertThat(eventsSeen.get(0).getEventId()).isEqualTo(startEvent.getEventId()); @@ -374,6 +377,8 @@ public class BuildEventStreamerTest extends FoundationTestCase { new GenericBuildEvent(testId("unexpected"), ImmutableSet.of()); streamer.buildEvent(unexpectedEvent); + + assertThat(streamer.isClosed()).isFalse(); List allEventsSeen = transport.getEvents(); assertThat(allEventsSeen).hasSize(4); assertThat(allEventsSeen.get(3).getEventId()).isEqualTo(unexpectedEvent.getEventId()); @@ -409,6 +414,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { streamer.buildEvent(lateReference); streamer.buildEvent(new BuildCompleteEvent(new BuildResult(0))); + assertThat(streamer.isClosed()).isTrue(); List eventsSeen = transport.getEvents(); int earlyEventCount = 0; for (BuildEvent event : eventsSeen) { @@ -442,6 +448,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { streamer.buildEvent(failedTarget); streamer.buildEvent(rootCause); + assertThat(streamer.isClosed()).isFalse(); List allEventsSeen = transport.getEvents(); assertThat(allEventsSeen).hasSize(4); assertThat(allEventsSeen.get(0).getEventId()).isEqualTo(startEvent.getEventId()); @@ -474,6 +481,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { streamer.buildEvent(failedTarget); streamer.buildEvent(new BuildCompleteEvent(new BuildResult(0))); + assertThat(streamer.isClosed()).isTrue(); List allEventsSeen = transport.getEvents(); assertThat(allEventsSeen).hasSize(6); assertThat(allEventsSeen.get(0).getEventId()).isEqualTo(startEvent.getEventId()); @@ -503,6 +511,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { streamer.buildEvent(waitingForStart); streamer.buildEvent(startEvent); + assertThat(streamer.isClosed()).isFalse(); List allEventsSeen = transport.getEvents(); assertThat(allEventsSeen).hasSize(2); assertThat(allEventsSeen.get(0).getEventId()).isEqualTo(startEvent.getEventId()); @@ -538,6 +547,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { streamer.buildEvent(startEvent); streamer.buildEvent(reportingArtifacts); + assertThat(streamer.isClosed()).isFalse(); List allEventsSeen = transport.getEvents(); List eventProtos = transport.getEventProtos(); assertThat(allEventsSeen).hasSize(7); @@ -582,6 +592,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { streamer.buildEvent(startEvent); streamer.buildEvent(unexpectedEvent); + assertThat(streamer.isClosed()).isFalse(); List eventsSeen = transport.getEvents(); assertThat(eventsSeen).hasSize(3); assertThat(eventsSeen.get(0).getEventId()).isEqualTo(startEvent.getEventId()); @@ -631,6 +642,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { streamer.buildEvent(firstWithConfiguration); streamer.buildEvent(secondWithConfiguration); + assertThat(streamer.isClosed()).isFalse(); List allEventsSeen = transport.getEvents(); assertThat(allEventsSeen).hasSize(7); assertThat(allEventsSeen.get(0).getEventId()).isEqualTo(startEvent.getEventId()); @@ -667,6 +679,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { streamer.flush(); streamer.buildEvent(startEvent); + assertThat(streamer.isClosed()).isFalse(); List eventsSeen = transport.getEvents(); assertThat(eventsSeen).hasSize(3); assertThat(eventsSeen.get(0).getEventId()).isEqualTo(startEvent.getEventId()); @@ -710,6 +723,8 @@ public class BuildEventStreamerTest extends FoundationTestCase { streamer.flush(); streamer.buildEvent(unexpectedStartEvent); + assertThat(streamer.isClosed()).isFalse(); + List eventsSeen = transport.getEvents(); assertThat(eventsSeen).hasSize(3); @@ -754,6 +769,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { streamer.buildEvent(orderEvent); streamer.buildEvent(new BuildCompleteEvent(new BuildResult(0))); + assertThat(streamer.isClosed()).isTrue(); List eventsSeen = transport.getEvents(); assertThat(eventsSeen).hasSize(4); assertThat(eventsSeen.get(0).getEventId()).isEqualTo(BuildEventId.buildStartedId()); @@ -763,4 +779,62 @@ public class BuildEventStreamerTest extends FoundationTestCase { ImmutableSet.of(BuildEventId.buildFinished(), ProgressEvent.INITIAL_PROGRESS_UPDATE)); assertThat(transport.getEventProtos().get(3).getLastMessage()).isTrue(); } + + @Test + public void testFinalEventsLate() throws Exception { + // Verify that we correctly handle late events (i.e., events coming only after the + // BuildCompleteEvent) that are sent to the streamer after the BuildCompleteEvent. + RecordingBuildEventTransport transport = new RecordingBuildEventTransport(); + BuildEventStreamer streamer = + new BuildEventStreamer(ImmutableSet.of(transport), reporter); + BuildEvent startEvent = + new GenericBuildEvent( + testId("Initial"), + ImmutableSet.of(ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventId.buildFinished())); + BuildEventId lateId = testId("late event"); + BuildEvent finishedEvent = new BuildCompleteEvent(new BuildResult(0), ImmutableList.of(lateId)); + + streamer.buildEvent(startEvent); + streamer.buildEvent(finishedEvent); + assertThat(streamer.isClosed()).isFalse(); + streamer.buildEvent(new GenericBuildEvent(lateId, ImmutableSet.of())); + assertThat(streamer.isClosed()).isTrue(); + + List eventsSeen = transport.getEvents(); + assertThat(eventsSeen).hasSize(4); + assertThat(eventsSeen.get(0).getEventId()).isEqualTo(startEvent.getEventId()); + assertThat(eventsSeen.get(1).getEventId()).isEqualTo(BuildEventId.buildFinished()); + assertThat(ImmutableSet.of(eventsSeen.get(2).getEventId(), eventsSeen.get(3).getEventId())) + .isEqualTo(ImmutableSet.of(lateId, ProgressEvent.INITIAL_PROGRESS_UPDATE)); + } + + @Test + public void testFinalEventsEarly() throws Exception { + // Verify that we correctly handle late events (i.e., events coming only after the + // BuildCompleteEvent) that are sent to the streamer before the BuildCompleteEvent, + // but with an order constraint to come afterwards. + RecordingBuildEventTransport transport = new RecordingBuildEventTransport(); + BuildEventStreamer streamer = + new BuildEventStreamer(ImmutableSet.of(transport), reporter); + BuildEvent startEvent = + new GenericBuildEvent( + testId("Initial"), + ImmutableSet.of(ProgressEvent.INITIAL_PROGRESS_UPDATE, BuildEventId.buildFinished())); + BuildEventId lateId = testId("late event"); + BuildEvent finishedEvent = new BuildCompleteEvent(new BuildResult(0), ImmutableList.of(lateId)); + + streamer.buildEvent(startEvent); + streamer.buildEvent( + new GenericOrderEvent( + lateId, ImmutableSet.of(), ImmutableList.of(BuildEventId.buildFinished()))); + streamer.buildEvent(finishedEvent); + assertThat(streamer.isClosed()).isTrue(); + + List eventsSeen = transport.getEvents(); + assertThat(eventsSeen).hasSize(4); + assertThat(eventsSeen.get(0).getEventId()).isEqualTo(startEvent.getEventId()); + assertThat(eventsSeen.get(1).getEventId()).isEqualTo(BuildEventId.buildFinished()); + assertThat(ImmutableSet.of(eventsSeen.get(2).getEventId(), eventsSeen.get(3).getEventId())) + .isEqualTo(ImmutableSet.of(lateId, ProgressEvent.INITIAL_PROGRESS_UPDATE)); + } } -- cgit v1.2.3