diff options
author | buchgr <buchgr@google.com> | 2017-04-25 16:38:45 +0200 |
---|---|---|
committer | Vladimir Moskva <vladmos@google.com> | 2017-04-25 20:38:12 +0200 |
commit | 9e0308e0f7f18f752cf11350520313cf75c228e5 (patch) | |
tree | 3c243271c765bc7e193fe8fa3b36c09cc7f5de2f /src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java | |
parent | 941a4ca5e046f83dcedec51b456ad1f5058c8c08 (diff) |
Automated g4 rollback of commit d9fea57268ff01c001fbcbdc2bd057c86c362e6f.
*** Reason for rollback ***
Rollforward with fix for test flakiness. BEP transport closed
events are delivered via their own threadpool and thus might
not have been sent immediately. BuildEventStreamerTest#testSimpleStream
now waits for a bit until the event has been delivered. I ran the test
with --runs_per_test=1000 several times and had no further failures.
*** Original change description ***
Automated g4 rollback of commit 3d596d63f883fff56001ed7b2e5cf51dba45f082.
*** Reason for rollback ***
Made BuildEventStreamerTest#testSimpleStream 3% flaky based on --runs_per_test=1000.
RELNOTES: None
PiperOrigin-RevId: 154170833
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.java | 67 |
1 files changed, 56 insertions, 11 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 3e7fe5d2dd..a360598077 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 @@ -15,13 +15,17 @@ package com.google.devtools.build.lib.runtime; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import com.google.common.collect.ImmutableSet; +import com.google.common.eventbus.Subscribe; import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.EventReportingArtifacts; import com.google.devtools.build.lib.actions.Root; +import com.google.devtools.build.lib.buildeventstream.AnnounceBuildEventTransportsEvent; import com.google.devtools.build.lib.buildeventstream.ArtifactGroupNamer; import com.google.devtools.build.lib.buildeventstream.BuildEvent; import com.google.devtools.build.lib.buildeventstream.BuildEventConverters; @@ -29,6 +33,7 @@ import com.google.devtools.build.lib.buildeventstream.BuildEventId; import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos; import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId.NamedSetOfFilesId; import com.google.devtools.build.lib.buildeventstream.BuildEventTransport; +import com.google.devtools.build.lib.buildeventstream.BuildEventTransportClosedEvent; import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint; import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent; import com.google.devtools.build.lib.buildeventstream.PathConverter; @@ -43,11 +48,17 @@ import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; import java.util.List; -import java.util.concurrent.Future; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.LockSupport; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import org.mockito.MockitoAnnotations; /** Tests {@link BuildEventStreamer}. */ @RunWith(JUnit4.class) @@ -58,6 +69,11 @@ public class BuildEventStreamerTest extends FoundationTestCase { private final List<BuildEventStreamProtos.BuildEvent> eventsAsProtos = new ArrayList<>(); @Override + public String name() { + return this.getClass().getSimpleName(); + } + + @Override public void sendBuildEvent(BuildEvent event, final ArtifactGroupNamer namer) { events.add(event); eventsAsProtos.add( @@ -81,7 +97,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { } @Override - public Future<Void> close() { + public ListenableFuture<Void> close() { return Futures.immediateFuture(null); } @@ -182,14 +198,38 @@ public class BuildEventStreamerTest extends FoundationTestCase { return BuildEventId.unknownBuildEventId(opaque); } - @Test + private static class EventBusHandler { + + Set<BuildEventTransport> transportSet; + + @Subscribe + void transportsAnnounced(AnnounceBuildEventTransportsEvent evt) { + transportSet = Collections.synchronizedSet(new HashSet<>(evt.transports())); + } + + @Subscribe + void transportClosed(BuildEventTransportClosedEvent evt) { + transportSet.remove(evt.transport()); + } + } + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + } + + @Test(timeout = 5000) public void testSimpleStream() { // Verify that a well-formed event is passed through and that completion of the // build clears the pending progress-update event. + EventBusHandler handler = new EventBusHandler(); + eventBus.register(handler); + assertNull(handler.transportSet); + RecordingBuildEventTransport transport = new RecordingBuildEventTransport(); BuildEventStreamer streamer = - new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport)); + new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport), reporter); BuildEvent startEvent = new GenericBuildEvent( @@ -201,6 +241,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { List<BuildEvent> afterFirstEvent = transport.getEvents(); assertThat(afterFirstEvent).hasSize(1); assertEquals(startEvent.getEventId(), afterFirstEvent.get(0).getEventId()); + assertEquals(1, handler.transportSet.size()); streamer.buildEvent(new BuildCompleteEvent(new BuildResult(0))); @@ -208,6 +249,10 @@ public class BuildEventStreamerTest extends FoundationTestCase { assertThat(finalStream).hasSize(3); assertEquals(BuildEventId.buildFinished(), finalStream.get(1).getEventId()); assertEquals(ProgressEvent.INITIAL_PROGRESS_UPDATE, finalStream.get(2).getEventId()); + + while (!handler.transportSet.isEmpty()) { + LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(100)); + } } @Test @@ -217,7 +262,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { RecordingBuildEventTransport transport = new RecordingBuildEventTransport(); BuildEventStreamer streamer = - new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport)); + new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport), reporter); BuildEvent startEvent = new GenericBuildEvent( @@ -247,7 +292,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { RecordingBuildEventTransport transport = new RecordingBuildEventTransport(); BuildEventStreamer streamer = - new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport)); + new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport), reporter); BuildEvent unexpectedStartEvent = new GenericBuildEvent(testId("unexpected start"), ImmutableSet.<BuildEventId>of()); @@ -288,7 +333,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { // late-referenced event is not expected again. RecordingBuildEventTransport transport = new RecordingBuildEventTransport(); BuildEventStreamer streamer = - new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport)); + new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport), reporter); BuildEvent startEvent = new GenericBuildEvent( @@ -322,7 +367,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { RecordingBuildEventTransport transport = new RecordingBuildEventTransport(); BuildEventStreamer streamer = - new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport)); + new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport), reporter); BuildEventId expectedId = testId("the target"); BuildEvent startEvent = @@ -354,7 +399,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { RecordingBuildEventTransport transport = new RecordingBuildEventTransport(); BuildEventStreamer streamer = - new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport)); + new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport), reporter); BuildEventId expectedId = testId("the target"); BuildEvent startEvent = @@ -385,7 +430,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { // Verify that we can handle an first event waiting for another event. RecordingBuildEventTransport transport = new RecordingBuildEventTransport(); BuildEventStreamer streamer = - new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport)); + new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport), reporter); BuildEventId initialId = testId("Initial"); BuildEventId waitId = testId("Waiting for initial event"); @@ -415,7 +460,7 @@ public class BuildEventStreamerTest extends FoundationTestCase { // Verify that reported artifacts are correctly unfolded into the stream RecordingBuildEventTransport transport = new RecordingBuildEventTransport(); BuildEventStreamer streamer = - new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport)); + new BuildEventStreamer(ImmutableSet.<BuildEventTransport>of(transport), reporter); BuildEvent startEvent = new GenericBuildEvent( |