aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Klaus Aehlig <aehlig@google.com>2017-09-14 19:03:25 +0200
committerGravatar Philipp Wollermann <philwo@google.com>2017-09-15 11:28:06 +0200
commit82d6e8a847813737a5c05148225fb8094f851bd9 (patch)
tree9b64c7a6fe0f9e173215ce4d96943a0db597628f /src/main/java/com/google/devtools
parente67c012bbf1c3c04f96fc2cdfd748ff709f96b38 (diff)
BEP: Upon missing test targets, still generate a finished event
If a test command is aborted as no tests are found, still generate a BuildComplete event in the sequence of build events to properly report the exit status. Change-Id: Id811a116b309a26e67332947b3a5c66363b1ce9c PiperOrigin-RevId: 168703240
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/NoTestsFound.java50
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/TestCommand.java8
3 files changed, 57 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java
index 189ce3fb06..7b4ac281d6 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java
@@ -375,11 +375,6 @@ public class BuildEventStreamer implements EventHandler {
}
@Subscribe
- public void noTestsFound(NoTestsFound event) {
- buildComplete();
- }
-
- @Subscribe
public void buildEvent(BuildEvent event) {
if (isActionWithoutError(event)
|| bufferUntilPrerequisitesReceived(event)
@@ -421,7 +416,8 @@ public class BuildEventStreamer implements EventHandler {
if (event instanceof BuildCompleteEvent
|| event instanceof TestingCompleteEvent
- || event instanceof NoBuildRequestFinishedEvent) {
+ || event instanceof NoBuildRequestFinishedEvent
+ || event instanceof NoTestsFound) {
buildComplete();
}
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/NoTestsFound.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/NoTestsFound.java
index ba2d3b98ef..d21ce069fb 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/NoTestsFound.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/NoTestsFound.java
@@ -14,5 +14,53 @@
package com.google.devtools.build.lib.runtime.commands;
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.buildeventstream.BuildEvent;
+import com.google.devtools.build.lib.buildeventstream.BuildEventConverters;
+import com.google.devtools.build.lib.buildeventstream.BuildEventId;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
+import com.google.devtools.build.lib.util.ExitCode;
+import java.util.Collection;
+
/** This event is posted by the {@link TestCommand} if no tests were found. */
-public class NoTestsFound {}
+public class NoTestsFound implements BuildEvent {
+ private final ExitCode exitCode;
+ private final long finishTimeMillis;
+
+ public NoTestsFound(ExitCode exitCode, long finishTimeMillis) {
+ this.exitCode = exitCode;
+ this.finishTimeMillis = finishTimeMillis;
+ }
+
+ public ExitCode getExitCode() {
+ return exitCode;
+ }
+
+ @Override
+ public BuildEventId getEventId() {
+ return BuildEventId.buildFinished();
+ }
+
+ @Override
+ public Collection<BuildEventId> getChildrenEvents() {
+ return ImmutableList.of();
+ }
+
+ @Override
+ public BuildEventStreamProtos.BuildEvent asStreamProto(BuildEventConverters converters) {
+ BuildEventStreamProtos.BuildFinished.ExitCode protoExitCode =
+ BuildEventStreamProtos.BuildFinished.ExitCode.newBuilder()
+ .setName(exitCode.name())
+ .setCode(exitCode.getNumericExitCode())
+ .build();
+
+ BuildEventStreamProtos.BuildFinished finished =
+ BuildEventStreamProtos.BuildFinished.newBuilder()
+ .setOverallSuccess(ExitCode.SUCCESS.equals(exitCode))
+ .setExitCode(protoExitCode)
+ .setFinishTimeMillis(finishTimeMillis)
+ .build();
+ return GenericBuildEvent.protoChaining(this).setFinished(finished).build();
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/TestCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/TestCommand.java
index db2797d3cd..06cf1fefe4 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/TestCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/TestCommand.java
@@ -137,8 +137,12 @@ public class TestCommand implements BlazeCommand {
if (testTargets.isEmpty()) {
env.getReporter().handle(Event.error(
null, "No test targets were found, yet testing was requested"));
- env.getEventBus().post(new NoTestsFound());
- return buildResult.getSuccess() ? ExitCode.NO_TESTS_FOUND : buildResult.getExitCondition();
+
+ ExitCode exitCode =
+ buildResult.getSuccess() ? ExitCode.NO_TESTS_FOUND : buildResult.getExitCondition();
+ env.getEventBus()
+ .post(new NoTestsFound(exitCode, env.getRuntime().getClock().currentTimeMillis()));
+ return exitCode;
}
boolean buildSuccess = buildResult.getSuccess();