diff --git a/thread/tests/cts/src/android/net/thread/cts/ActiveOperationalDatasetTest.java b/thread/tests/cts/src/android/net/thread/cts/ActiveOperationalDatasetTest.java index 0e76930fb2..996d22d2e6 100644 --- a/thread/tests/cts/src/android/net/thread/cts/ActiveOperationalDatasetTest.java +++ b/thread/tests/cts/src/android/net/thread/cts/ActiveOperationalDatasetTest.java @@ -30,6 +30,8 @@ import android.net.thread.ActiveOperationalDataset; import android.net.thread.ActiveOperationalDataset.Builder; import android.net.thread.ActiveOperationalDataset.SecurityPolicy; import android.net.thread.OperationalDatasetTimestamp; +import android.net.thread.utils.ThreadFeatureCheckerRule; +import android.net.thread.utils.ThreadFeatureCheckerRule.RequiresThreadFeature; import android.util.SparseArray; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -38,6 +40,7 @@ import androidx.test.filters.SmallTest; import com.google.common.primitives.Bytes; import com.google.common.testing.EqualsTester; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -46,6 +49,7 @@ import java.util.Arrays; /** CTS tests for {@link ActiveOperationalDataset}. */ @SmallTest +@RequiresThreadFeature @RunWith(AndroidJUnit4.class) public final class ActiveOperationalDatasetTest { private static final int TYPE_ACTIVE_TIMESTAMP = 14; @@ -81,6 +85,8 @@ public final class ActiveOperationalDatasetTest { private static final ActiveOperationalDataset DEFAULT_DATASET = ActiveOperationalDataset.fromThreadTlvs(VALID_DATASET_TLVS); + @Rule public final ThreadFeatureCheckerRule mThreadRule = new ThreadFeatureCheckerRule(); + private static byte[] removeTlv(byte[] dataset, int type) { ByteArrayOutputStream os = new ByteArrayOutputStream(dataset.length); int i = 0; diff --git a/thread/tests/cts/src/android/net/thread/cts/OperationalDatasetTimestampTest.java b/thread/tests/cts/src/android/net/thread/cts/OperationalDatasetTimestampTest.java index 9be3d56401..4d7c7f1f1f 100644 --- a/thread/tests/cts/src/android/net/thread/cts/OperationalDatasetTimestampTest.java +++ b/thread/tests/cts/src/android/net/thread/cts/OperationalDatasetTimestampTest.java @@ -21,12 +21,15 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; import android.net.thread.OperationalDatasetTimestamp; +import android.net.thread.utils.ThreadFeatureCheckerRule; +import android.net.thread.utils.ThreadFeatureCheckerRule.RequiresThreadFeature; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.google.common.testing.EqualsTester; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -34,8 +37,11 @@ import java.time.Instant; /** Tests for {@link OperationalDatasetTimestamp}. */ @SmallTest +@RequiresThreadFeature @RunWith(AndroidJUnit4.class) public final class OperationalDatasetTimestampTest { + @Rule public final ThreadFeatureCheckerRule mThreadRule = new ThreadFeatureCheckerRule(); + @Test public void fromInstant_tooLargeInstant_throwsIllegalArgument() { assertThrows( diff --git a/thread/tests/cts/src/android/net/thread/cts/PendingOperationalDatasetTest.java b/thread/tests/cts/src/android/net/thread/cts/PendingOperationalDatasetTest.java index 0bb18ce275..76be0549b1 100644 --- a/thread/tests/cts/src/android/net/thread/cts/PendingOperationalDatasetTest.java +++ b/thread/tests/cts/src/android/net/thread/cts/PendingOperationalDatasetTest.java @@ -28,6 +28,8 @@ import android.net.thread.ActiveOperationalDataset; import android.net.thread.ActiveOperationalDataset.SecurityPolicy; import android.net.thread.OperationalDatasetTimestamp; import android.net.thread.PendingOperationalDataset; +import android.net.thread.utils.ThreadFeatureCheckerRule; +import android.net.thread.utils.ThreadFeatureCheckerRule.RequiresThreadFeature; import android.util.SparseArray; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -36,6 +38,7 @@ import androidx.test.filters.SmallTest; import com.google.common.primitives.Bytes; import com.google.common.testing.EqualsTester; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -44,8 +47,11 @@ import java.time.Duration; /** Tests for {@link PendingOperationalDataset}. */ @SmallTest +@RequiresThreadFeature @RunWith(AndroidJUnit4.class) public final class PendingOperationalDatasetTest { + @Rule public final ThreadFeatureCheckerRule mThreadRule = new ThreadFeatureCheckerRule(); + private static ActiveOperationalDataset createActiveDataset() throws Exception { SparseArray channelMask = new SparseArray<>(1); channelMask.put(0, new byte[] {0x00, 0x1f, (byte) 0xff, (byte) 0xe0}); diff --git a/thread/tests/cts/src/android/net/thread/cts/ThreadNetworkExceptionTest.java b/thread/tests/cts/src/android/net/thread/cts/ThreadNetworkExceptionTest.java index 7d9ae81fc1..4de2e13f08 100644 --- a/thread/tests/cts/src/android/net/thread/cts/ThreadNetworkExceptionTest.java +++ b/thread/tests/cts/src/android/net/thread/cts/ThreadNetworkExceptionTest.java @@ -25,17 +25,23 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; import android.net.thread.ThreadNetworkException; +import android.net.thread.utils.ThreadFeatureCheckerRule; +import android.net.thread.utils.ThreadFeatureCheckerRule.RequiresThreadFeature; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; /** CTS tests for {@link ThreadNetworkException}. */ @SmallTest +@RequiresThreadFeature @RunWith(AndroidJUnit4.class) public final class ThreadNetworkExceptionTest { + @Rule public final ThreadFeatureCheckerRule mThreadRule = new ThreadFeatureCheckerRule(); + @Test public void constructor_validValues_valuesAreConnectlySet() throws Exception { ThreadNetworkException errorThreadDisabled = diff --git a/thread/tests/utils/src/android/net/thread/utils/ThreadFeatureCheckerRule.java b/thread/tests/utils/src/android/net/thread/utils/ThreadFeatureCheckerRule.java index bee9ceba01..38a6e90aa4 100644 --- a/thread/tests/utils/src/android/net/thread/utils/ThreadFeatureCheckerRule.java +++ b/thread/tests/utils/src/android/net/thread/utils/ThreadFeatureCheckerRule.java @@ -21,7 +21,6 @@ import static com.android.testutils.DeviceInfoUtils.isKernelVersionAtLeast; import static org.junit.Assume.assumeTrue; import android.content.Context; -import android.net.thread.ThreadNetworkManager; import android.os.SystemProperties; import android.os.VintfRuntimeInfo; @@ -122,7 +121,10 @@ public final class ThreadFeatureCheckerRule implements TestRule { /** Returns {@code true} if this device has the Thread feature supported. */ private static boolean hasThreadFeature() { final Context context = ApplicationProvider.getApplicationContext(); - return context.getSystemService(ThreadNetworkManager.class) != null; + + // Use service name rather than `ThreadNetworkManager.class` to avoid + // `ClassNotFoundException` on U- devices. + return context.getSystemService("thread_network") != null; } /**