aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-11-23 00:16:48 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-11-23 00:16:48 +0000
commit4704486d6dd9b06b6cdbe16a4e2dd1d523ef9fe2 (patch)
treeb9a4db340e2e9708ce567c7290708cb53cbdca66
parent4011df1a36184bfc55da9a4990cdd36d19dcbbbc (diff)
parent1f320423d12aef8058a3230892b9b8512458ab21 (diff)
downloadvogar-android14-qpr2-release.tar.gz
Change-Id: I31b1c938f7d814b82f25b88fc6216304717ad1b8
-rw-r--r--src/vogar/Run.java4
-rw-r--r--src/vogar/Vogar.java5
-rw-r--r--src/vogar/target/CaliperRunnerFactory.java3
-rw-r--r--src/vogar/target/MainRunnerFactory.java3
-rw-r--r--src/vogar/target/RunnerFactory.java2
-rw-r--r--src/vogar/target/TestRunner.java16
-rw-r--r--src/vogar/target/junit/ExcludeFilter.java49
-rw-r--r--src/vogar/target/junit/JUnitRunnerFactory.java5
-rw-r--r--src/vogar/target/junit/JUnitTargetRunner.java12
-rw-r--r--src/vogar/target/testng/TestNgRunnerFactory.java2
-rw-r--r--src/vogar/target/testng/TestNgTargetRunner.java1
11 files changed, 93 insertions, 9 deletions
diff --git a/src/vogar/Run.java b/src/vogar/Run.java
index 402b1c4..2725935 100644
--- a/src/vogar/Run.java
+++ b/src/vogar/Run.java
@@ -22,6 +22,7 @@ import com.google.common.base.Supplier;
import java.io.File;
import java.io.IOException;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
@@ -72,6 +73,7 @@ public final class Run {
public final int firstMonitorPort;
public final int timeoutSeconds;
public final File javaHome;
+ public final List<String> excludeFilters;
public final Integer debugPort;
public final Language language;
public final List<String> javacArgs;
@@ -138,6 +140,8 @@ public final class Run {
this.javacArgs = vogar.javacArgs;
this.multidex = vogar.multidex;
this.javaHome = vogar.javaHome;
+ this.excludeFilters = new ArrayList<>();
+ this.excludeFilters.addAll(vogar.excludeFilters);
this.largeTimeoutSeconds = vogar.timeoutSeconds * Vogar.LARGE_TIMEOUT_MULTIPLIER;
this.maxConcurrentActions = (vogar.stream || vogar.modeId == ModeId.ACTIVITY)
? 1
diff --git a/src/vogar/Vogar.java b/src/vogar/Vogar.java
index 7fba4aa..c2136e2 100644
--- a/src/vogar/Vogar.java
+++ b/src/vogar/Vogar.java
@@ -155,6 +155,9 @@ public final class Vogar {
@Option(names = { "--java-home" })
File javaHome;
+ @Option(names = { "--exclude-filter" })
+ List<String> excludeFilters = new ArrayList<>();
+
@Option(names = { "--javac-arg" })
List<String> javacArgs = new ArrayList<String>();
@@ -371,6 +374,8 @@ public final class Vogar {
System.out.println(" using the specified java home directory. This does not impact");
System.out.println(" which javac gets used. When unset, java is used from the PATH.");
System.out.println();
+ System.out.println(" --exclude-filter <java_annotation>: exclude the annotated tests");
+ System.out.println();
System.out.println("EXOTIC OPTIONS");
System.out.println();
System.out.println(" --suggest-classpaths: build an index of jar files under the");
diff --git a/src/vogar/target/CaliperRunnerFactory.java b/src/vogar/target/CaliperRunnerFactory.java
index f1dab97..2955c74 100644
--- a/src/vogar/target/CaliperRunnerFactory.java
+++ b/src/vogar/target/CaliperRunnerFactory.java
@@ -51,7 +51,8 @@ public class CaliperRunnerFactory implements RunnerFactory {
@Override @Nullable
public TargetRunner newRunner(TargetMonitor monitor, String qualification,
Class<?> klass, AtomicReference<String> skipPastReference,
- TestEnvironment testEnvironment, int timeoutSeconds, String[] args) {
+ TestEnvironment testEnvironment, int timeoutSeconds, String[] excludeFilters,
+ String[] args) {
if (benchmarkClassChecker != null && benchmarkClassChecker.isBenchmark(klass)) {
return new CaliperTargetRunner(monitor, klass, args);
} else {
diff --git a/src/vogar/target/MainRunnerFactory.java b/src/vogar/target/MainRunnerFactory.java
index cca463f..41280c3 100644
--- a/src/vogar/target/MainRunnerFactory.java
+++ b/src/vogar/target/MainRunnerFactory.java
@@ -28,7 +28,8 @@ public class MainRunnerFactory implements RunnerFactory {
@Override @Nullable
public TargetRunner newRunner(TargetMonitor monitor, String qualification,
Class<?> klass, AtomicReference<String> skipPastReference,
- TestEnvironment testEnvironment, int timeoutSeconds, String[] args) {
+ TestEnvironment testEnvironment, int timeoutSeconds, String[] excludeFilters,
+ String[] args) {
if (new ClassAnalyzer(klass).hasMethod(true, void.class, "main", String[].class)) {
return new MainTargetRunner(monitor, klass, args);
} else {
diff --git a/src/vogar/target/RunnerFactory.java b/src/vogar/target/RunnerFactory.java
index 993acd4..e90c070 100644
--- a/src/vogar/target/RunnerFactory.java
+++ b/src/vogar/target/RunnerFactory.java
@@ -32,5 +32,5 @@ public interface RunnerFactory {
@Nullable
TargetRunner newRunner(TargetMonitor monitor, String qualification, Class<?> klass,
AtomicReference<String> skipPastReference, TestEnvironment testEnvironment,
- int timeoutSeconds, String[] args);
+ int timeoutSeconds, String[] excludeFilters, String[] args);
}
diff --git a/src/vogar/target/TestRunner.java b/src/vogar/target/TestRunner.java
index 7edc5b5..5b6f539 100644
--- a/src/vogar/target/TestRunner.java
+++ b/src/vogar/target/TestRunner.java
@@ -52,6 +52,7 @@ public final class TestRunner {
private final RunnerFactory runnerFactory;
private final String[] args;
+ private final String[] excludeFilters;
private boolean useSocketMonitor;
public TestRunner(Properties properties, List<String> argsList) {
@@ -60,6 +61,8 @@ public final class TestRunner {
int monitorPort = Integer.parseInt(properties.getProperty(TestProperties.MONITOR_PORT));
String skipPast = null;
+ List<String> excludeFilters = new ArrayList<>();
+
for (Iterator<String> i = argsList.iterator(); i.hasNext(); ) {
String arg = i.next();
@@ -73,6 +76,11 @@ public final class TestRunner {
skipPast = i.next();
i.remove();
}
+ if (arg.equals("--exclude-filter")) {
+ i.remove();
+ excludeFilters.add(i.next());
+ i.remove();
+ }
}
// Select the RunnerFactory instances to use based on the selected runner type.
@@ -95,6 +103,7 @@ public final class TestRunner {
this.monitorPort = monitorPort;
this.skipPastReference = new AtomicReference<>(skipPast);
+ this.excludeFilters = excludeFilters.toArray(String[]::new);
this.args = argsList.toArray(new String[argsList.size()]);
}
@@ -201,7 +210,7 @@ public final class TestRunner {
TargetRunner targetRunner;
try {
targetRunner = runnerFactory.newRunner(monitor, qualification, klass,
- skipPastReference, testEnvironment, timeoutSeconds, args);
+ skipPastReference, testEnvironment, timeoutSeconds, excludeFilters, args);
} catch (RuntimeException e) {
monitor.outcomeStarted(klass.getName());
e.printStackTrace();
@@ -246,10 +255,11 @@ public final class TestRunner {
@Override @Nullable
public TargetRunner newRunner(TargetMonitor monitor, String qualification,
Class<?> klass, AtomicReference<String> skipPastReference,
- TestEnvironment testEnvironment, int timeoutSeconds, String[] args) {
+ TestEnvironment testEnvironment, int timeoutSeconds, String[] excludeFilters,
+ String[] args) {
for (RunnerFactory runnerFactory : runnerFactories) {
TargetRunner targetRunner = runnerFactory.newRunner(monitor, qualification, klass,
- skipPastReference, testEnvironment, timeoutSeconds, args);
+ skipPastReference, testEnvironment, timeoutSeconds, excludeFilters, args);
if (targetRunner != null) {
return targetRunner;
}
diff --git a/src/vogar/target/junit/ExcludeFilter.java b/src/vogar/target/junit/ExcludeFilter.java
new file mode 100644
index 0000000..1e98f3d
--- /dev/null
+++ b/src/vogar/target/junit/ExcludeFilter.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package vogar.target.junit;
+
+import org.junit.runner.Description;
+import org.junit.runner.manipulation.Filter;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public class ExcludeFilter extends Filter {
+
+ private final Set<String> excludeFilters;
+
+ public ExcludeFilter(String[] excludeFilters) {
+ Set<String> set = new HashSet<>();
+ if (excludeFilters != null) {
+ set.addAll(List.of(excludeFilters));
+ }
+ this.excludeFilters = set;
+ }
+
+ @Override
+ public boolean shouldRun(Description description) {
+ return !description.getAnnotations().stream()
+ .anyMatch(annotation ->
+ excludeFilters.contains(annotation.annotationType().getName()));
+ }
+
+ @Override
+ public String describe() {
+ return "ExcludeFilter[" + String.join(",", excludeFilters) + "]";
+ }
+}
diff --git a/src/vogar/target/junit/JUnitRunnerFactory.java b/src/vogar/target/junit/JUnitRunnerFactory.java
index 2719356..3a83576 100644
--- a/src/vogar/target/junit/JUnitRunnerFactory.java
+++ b/src/vogar/target/junit/JUnitRunnerFactory.java
@@ -30,10 +30,11 @@ public class JUnitRunnerFactory implements RunnerFactory {
@Override @Nullable
public TargetRunner newRunner(TargetMonitor monitor, String qualification,
Class<?> klass, AtomicReference<String> skipPastReference,
- TestEnvironment testEnvironment, int timeoutSeconds, String[] args) {
+ TestEnvironment testEnvironment, int timeoutSeconds, String[] excludeFilters,
+ String[] args) {
if (supports(klass)) {
return new JUnitTargetRunner(monitor, skipPastReference, testEnvironment,
- timeoutSeconds, klass, qualification, args);
+ timeoutSeconds, klass, qualification, excludeFilters, args);
} else {
return null;
}
diff --git a/src/vogar/target/junit/JUnitTargetRunner.java b/src/vogar/target/junit/JUnitTargetRunner.java
index 3fd2232..906115a 100644
--- a/src/vogar/target/junit/JUnitTargetRunner.java
+++ b/src/vogar/target/junit/JUnitTargetRunner.java
@@ -44,19 +44,23 @@ public final class JUnitTargetRunner implements TargetRunner {
private final Class<?> testClass;
private final RunnerParams runnerParams;
+ private final String[] excludeFilters;
+
public JUnitTargetRunner(TargetMonitor monitor, AtomicReference<String> skipPastReference,
TestEnvironment testEnvironment,
int timeoutSeconds, Class<?> testClass,
- String qualification, String[] args) {
+ String qualification, String[] excludeFilters, String[] args) {
this.monitor = monitor;
this.skipPastReference = skipPastReference;
this.testEnvironment = testEnvironment;
this.testClass = testClass;
+ this.excludeFilters = excludeFilters;
TimeoutAndAbortRunRule timeoutRule = new TimeoutAndAbortRunRule(timeoutSeconds);
runnerParams = new RunnerParams(qualification, args, timeoutRule);
}
+ @Override
public boolean run() {
// Use JUnit infrastructure to run the tests.
RunnerBuilder builder = new VogarRunnerBuilder(runnerParams);
@@ -79,6 +83,12 @@ public final class JUnitTargetRunner implements TargetRunner {
}
try {
+ new ExcludeFilter(excludeFilters).apply(runner);
+ } catch (NoTestsRemainException e) {
+ return true;
+ }
+
+ try {
JUnitCore core = new JUnitCore();
// The TestEnvironmentRunListener resets static state between tests.
core.addListener(new TestEnvironmentRunListener(testEnvironment));
diff --git a/src/vogar/target/testng/TestNgRunnerFactory.java b/src/vogar/target/testng/TestNgRunnerFactory.java
index 2e214fd..f6cd279 100644
--- a/src/vogar/target/testng/TestNgRunnerFactory.java
+++ b/src/vogar/target/testng/TestNgRunnerFactory.java
@@ -35,6 +35,7 @@ public class TestNgRunnerFactory implements RunnerFactory {
AtomicReference<String> skipPastReference,
TestEnvironment testEnvironment,
int timeoutSeconds,
+ String[] excludeFilters,
String[] args) {
if (supports(klass)) {
return new TestNgTargetRunner(
@@ -44,6 +45,7 @@ public class TestNgRunnerFactory implements RunnerFactory {
timeoutSeconds,
klass,
qualification,
+ excludeFilters,
args);
} else {
return null;
diff --git a/src/vogar/target/testng/TestNgTargetRunner.java b/src/vogar/target/testng/TestNgTargetRunner.java
index 6b10509..40824c7 100644
--- a/src/vogar/target/testng/TestNgTargetRunner.java
+++ b/src/vogar/target/testng/TestNgTargetRunner.java
@@ -39,6 +39,7 @@ public class TestNgTargetRunner implements TargetRunner {
int timeoutSeconds,
Class<?> testClass,
String qualification,
+ String[] excludeFilters,
String[] args) {
this.monitor = monitor;
this.testClass = testClass;