Improve error reporting in RateLimitTest
This change moves the logic to read /proc/config.gz from the static
initializer to a function that runs the first time setUp is called. This
improves error reporting as exceptions thrown inside
ensureKernelConfigLoaded get reported as test failures.
Test: atest RateLimitTest
Change-Id: I3b7913c567507dec8ecad26602cfccdad3d6f4bd
diff --git a/tests/cts/net/src/android/net/cts/RateLimitTest.java b/tests/cts/net/src/android/net/cts/RateLimitTest.java
index 26ea2da..423f213 100644
--- a/tests/cts/net/src/android/net/cts/RateLimitTest.java
+++ b/tests/cts/net/src/android/net/cts/RateLimitTest.java
@@ -83,7 +83,8 @@
@RunWith(DevSdkIgnoreRunner.class)
@DevSdkIgnoreRule.IgnoreUpTo(SC_V2)
public class RateLimitTest {
- private static final HashSet<String> sKernelConfig;
+ // cannot be final as it gets initialized inside ensureKernelConfigLoaded().
+ private static HashSet<String> sKernelConfig;
private static final String TAG = "RateLimitTest";
private static final LinkAddress LOCAL_IP4_ADDR = new LinkAddress("10.0.0.1/8");
@@ -108,18 +109,21 @@
private Network mNetwork;
private DatagramSocket mSocket;
- static {
+ // Note: exceptions thrown in @BeforeClass or @ClassRule methods are not reported correctly.
+ // This function is called from setUp and loads the kernel config options the first time it is
+ // invoked. This ensures proper error reporting.
+ private static synchronized void ensureKernelConfigLoaded() {
+ if (sKernelConfig != null) return;
final String result = SystemUtil.runShellCommandOrThrow("gzip -cd /proc/config.gz");
sKernelConfig = Arrays.stream(result.split("\\R")).collect(
Collectors.toCollection(HashSet::new));
// make sure that if for some reason /proc/config.gz returns an empty string, this test
// does not silently fail.
- assertNotEquals(0, result.length());
+ assertNotEquals("gzip -cd /proc/config.gz returned an empty string", 0, result.length());
}
private static void assumeKernelSupport() {
- // Note: assumptions that fail in @BeforeClass annotated methods are not handled correctly.
assumeTrue(sKernelConfig.contains("CONFIG_NET_CLS_MATCHALL=y"));
assumeTrue(sKernelConfig.contains("CONFIG_NET_ACT_POLICE=y"));
assumeTrue(sKernelConfig.contains("CONFIG_NET_ACT_BPF=y"));
@@ -127,6 +131,8 @@
@Before
public void setUp() throws IOException {
+ ensureKernelConfigLoaded();
+
mHandler = new Handler(Looper.getMainLooper());
runAsShell(MANAGE_TEST_NETWORKS, () -> {