aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java102
1 files changed, 102 insertions, 0 deletions
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 8a02188df2..a5a79d082d 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
@@ -20,11 +20,14 @@ import static org.junit.Assert.assertTrue;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.buildeventstream.BuildEvent;
import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
import com.google.devtools.build.lib.buildeventstream.BuildEventTransport;
+import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
import com.google.devtools.build.lib.buildeventstream.ProgressEvent;
import com.google.devtools.build.lib.buildtool.buildevent.BuildCompleteEvent;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -54,6 +57,43 @@ public class BuildEventStreamerTest {
}
}
+ private static class GenericOrderEvent implements BuildEventWithOrderConstraint {
+ private final BuildEventId id;
+ private final Collection<BuildEventId> children;
+ private final Collection<BuildEventId> after;
+
+ GenericOrderEvent(
+ BuildEventId id, Collection<BuildEventId> children, Collection<BuildEventId> after) {
+ this.id = id;
+ this.children = children;
+ this.after = after;
+ }
+
+ GenericOrderEvent(BuildEventId id, Collection<BuildEventId> children) {
+ this(id, children, children);
+ }
+
+ @Override
+ public BuildEventId getEventId() {
+ return id;
+ }
+
+ @Override
+ public Collection<BuildEventId> getChildrenEvents() {
+ return children;
+ }
+
+ @Override
+ public BuildEventStreamProtos.BuildEvent asStreamProto() {
+ return GenericBuildEvent.protoChaining(this).build();
+ }
+
+ @Override
+ public Collection<BuildEventId> postedAfter() {
+ return after;
+ }
+ }
+
private static BuildEventId testId(String opaque) {
return BuildEventId.unknownBuildEventId(opaque);
}
@@ -188,4 +228,66 @@ public class BuildEventStreamerTest {
// The early event should be reported precisely once.
assertEquals(1, earlyEventCount);
}
+
+ @Test
+ public void testReodering() {
+ // Verify that an event requiring to be posted after another one is indeed.
+
+ RecordingBuildEventTransport transport = new RecordingBuildEventTransport();
+ BuildEventStreamer streamer =
+ new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport));
+
+ BuildEventId expectedId = testId("the target");
+ BuildEvent startEvent =
+ new GenericBuildEvent(
+ testId("Initial"),
+ ImmutableSet.<BuildEventId>of(ProgressEvent.INITIAL_PROGRESS_UPDATE, expectedId));
+ BuildEvent rootCause =
+ new GenericBuildEvent(testId("failure event"), ImmutableSet.<BuildEventId>of());
+ BuildEvent failedTarget =
+ new GenericOrderEvent(expectedId, ImmutableSet.<BuildEventId>of(rootCause.getEventId()));
+
+ streamer.buildEvent(startEvent);
+ streamer.buildEvent(failedTarget);
+ streamer.buildEvent(rootCause);
+
+ List<BuildEvent> allEventsSeen = transport.getEvents();
+ assertThat(allEventsSeen).hasSize(4);
+ assertEquals(startEvent.getEventId(), allEventsSeen.get(0).getEventId());
+ BuildEvent linkEvent = allEventsSeen.get(1);
+ assertEquals(ProgressEvent.INITIAL_PROGRESS_UPDATE, linkEvent.getEventId());
+ assertEquals(rootCause.getEventId(), allEventsSeen.get(2).getEventId());
+ assertEquals(failedTarget.getEventId(), allEventsSeen.get(3).getEventId());
+ }
+
+ @Test
+ public void testMissingPrerequisits() {
+ // Verify that an event where the prerequisite is never coming till the end of
+ // the build still gets posted, with the prerequisite aborted.
+
+ RecordingBuildEventTransport transport = new RecordingBuildEventTransport();
+ BuildEventStreamer streamer =
+ new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport));
+
+ BuildEventId expectedId = testId("the target");
+ BuildEvent startEvent =
+ new GenericBuildEvent(
+ testId("Initial"),
+ ImmutableSet.<BuildEventId>of(ProgressEvent.INITIAL_PROGRESS_UPDATE, expectedId));
+ BuildEventId rootCauseId = testId("failure event");
+ BuildEvent failedTarget =
+ new GenericOrderEvent(expectedId, ImmutableSet.<BuildEventId>of(rootCauseId));
+
+ streamer.buildEvent(startEvent);
+ streamer.buildEvent(failedTarget);
+ streamer.buildComplete(new BuildCompleteEvent(null));
+
+ List<BuildEvent> allEventsSeen = transport.getEvents();
+ assertThat(allEventsSeen).hasSize(5);
+ assertEquals(startEvent.getEventId(), allEventsSeen.get(0).getEventId());
+ BuildEvent linkEvent = allEventsSeen.get(1);
+ assertEquals(ProgressEvent.INITIAL_PROGRESS_UPDATE, linkEvent.getEventId());
+ assertEquals(rootCauseId, allEventsSeen.get(2).getEventId());
+ assertEquals(failedTarget.getEventId(), allEventsSeen.get(3).getEventId());
+ }
}