diff --git a/Tethering/tests/integration/Android.bp b/Tethering/tests/integration/Android.bp index b93a969059..2593b1b5aa 100644 --- a/Tethering/tests/integration/Android.bp +++ b/Tethering/tests/integration/Android.bp @@ -41,9 +41,10 @@ java_defaults { "libdexmakerjvmtiagent", "libstaticjvmtiagent", ], - jarjar_rules: ":NetworkStackJarJarRules", } +// Library including tethering integration tests targeting the latest stable SDK. +// Use with NetworkStackJarJarRules. android_library { name: "TetheringIntegrationTestsLatestSdkLib", target_sdk_version: "30", @@ -56,6 +57,8 @@ android_library { ] } +// Library including tethering integration tests targeting current development SDK. +// Use with NetworkStackJarJarRules. android_library { name: "TetheringIntegrationTestsLib", target_sdk_version: "current", @@ -76,6 +79,7 @@ android_test { "mts", ], compile_multilib: "both", + jarjar_rules: ":NetworkStackJarJarRules", } android_library { @@ -88,13 +92,33 @@ android_library { "TetheringTestsLatestSdkLib", "TetheringIntegrationTestsLatestSdkLib", ], - jarjar_rules: ":TetheringTestsJarJarRules", + // Jarjar rules should normally be applied on final artifacts and not intermediate libraries as + // applying different rules on intermediate libraries can cause conflicts when combining them + // (the resulting artifact can end up with multiple incompatible implementations of the same + // classes). But this library is used to combine tethering coverage tests with connectivity + // coverage tests into a single coverage target. The tests need to use the same jarjar rules as + // covered production code for coverage to be calculated properly, so jarjar is applied + // separately on each set of tests. + jarjar_rules: ":TetheringCoverageJarJarRules", manifest: "AndroidManifest_coverage.xml", visibility: [ "//packages/modules/Connectivity/tests:__subpackages__" ], } +// Combine NetworkStack and Tethering jarjar rules for coverage target. The jarjar files are +// simply concatenated in the order specified in srcs. +genrule { + name: "TetheringCoverageJarJarRules", + srcs: [ + ":TetheringTestsJarJarRules", + ":NetworkStackJarJarRules", + ], + out: ["jarjar-rules-tethering-coverage.txt"], + cmd: "cat $(in) > $(out)", + visibility: ["//visibility:private"], +} + // Special version of the tethering tests that includes all tests necessary for code coverage // purposes. This is currently the union of TetheringTests, TetheringIntegrationTests and // NetworkStackTests. diff --git a/Tethering/tests/jarjar-rules.txt b/Tethering/tests/jarjar-rules.txt index 9cb143e5aa..23d3f5603c 100644 --- a/Tethering/tests/jarjar-rules.txt +++ b/Tethering/tests/jarjar-rules.txt @@ -17,3 +17,8 @@ rule com.android.net.module.util.** com.android.networkstack.tethering.util.@1 # TestableLooper from "testables" can be used instead of TestLooper from frameworks-base-testutils. zap android.os.test.TestLooperTest* zap com.android.test.filters.SelectTestTests* + +# When used in combined test suites like ConnectivityCoverageTests, these test jarjar rules are +# combined with the jarjar-rules.txt of other included modules (like NetworkStack jarjar rules). +# They will effectively be added after the following line break. Note that jarjar stops at the first +# matching rule, so any rule in this file takes precedence over rules in the following ones. diff --git a/tests/cts/tethering/Android.bp b/tests/cts/tethering/Android.bp index 52ce83a12d..e9c4e5a65d 100644 --- a/tests/cts/tethering/Android.bp +++ b/tests/cts/tethering/Android.bp @@ -71,6 +71,7 @@ android_test { // Include both the 32 and 64 bit versions compile_multilib: "both", + jarjar_rules: ":NetworkStackJarJarRules", } // Tethering CTS tests for development and release. These tests always target the platform SDK @@ -95,4 +96,5 @@ android_test { // Include both the 32 and 64 bit versions compile_multilib: "both", + jarjar_rules: ":NetworkStackJarJarRules", }