Merge "Skip "DeviceSuspendTestActivity" for battery less device" into android12L-tests-dev
diff --git a/common/device-side/util-axt/src/com/android/compatibility/common/util/SettingsStateKeeperRule.java b/common/device-side/util-axt/src/com/android/compatibility/common/util/SettingsStateKeeperRule.java
index 18ca88a..a0baa2c 100644
--- a/common/device-side/util-axt/src/com/android/compatibility/common/util/SettingsStateKeeperRule.java
+++ b/common/device-side/util-axt/src/com/android/compatibility/common/util/SettingsStateKeeperRule.java
@@ -34,6 +34,11 @@
      * @param key prefence key.
      */
     public SettingsStateKeeperRule(@NonNull Context context, @NonNull String key) {
-        super(new SettingsStateManager(context, SettingsUtils.NAMESPACE_SECURE, key));
+        this(context, SettingsUtils.NAMESPACE_SECURE, key);
+    }
+
+    public SettingsStateKeeperRule(@NonNull Context context,
+            @NonNull String namespace, @NonNull String key) {
+        super(new SettingsStateManager(context, namespace, key));
     }
 }
diff --git a/hostsidetests/hdmicec/README.md b/hostsidetests/hdmicec/README.md
index b774e46..a2aac09 100644
--- a/hostsidetests/hdmicec/README.md
+++ b/hostsidetests/hdmicec/README.md
@@ -19,10 +19,10 @@
 *   Install `cec-client` binary, see [install instructions](cec_adapter.md#software)
 *   HDMI Display (aka a TV) with CEC disabled to avoid interference, or an HDMI fake plug
 
-It is recommended that the playback device has an HDMI physical address of `1.0.0.0` while running
-the tests. In case the DUT takes a physical address other than `1.0.0.0` and this is unavoidable,
-the tests can be configured to expect a different physical address by appending these arguments to
-the tradefed command:
+It is recommended that the source device has an HDMI physical address of `1.0.0.0` while running
+the tests. [DEPRECATED] In case the DUT takes a physical address other than `1.0.0.0` and this is
+unavoidable, the tests can be configured to expect a different physical address by appending these
+arguments to the tradefed command:
 ```
 --module-arg CtsHdmiCecHostTestCases:set-option:cec-phy-addr:<address_in_decimal>
 ```
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/BaseHdmiCecCtsTest.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/BaseHdmiCecCtsTest.java
index 4278eaf..8d590d9 100644
--- a/hostsidetests/hdmicec/src/android/hdmicec/cts/BaseHdmiCecCtsTest.java
+++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/BaseHdmiCecCtsTest.java
@@ -126,6 +126,8 @@
         }
     }
 
+    /** @deprecated not used anymore **/
+    @Deprecated
     @Option(name = HdmiCecConstants.PHYSICAL_ADDRESS_NAME,
         description = "HDMI CEC physical address of the DUT",
         mandatory = false)
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecConstants.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecConstants.java
index c6d0911..126c95e 100644
--- a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecConstants.java
+++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecConstants.java
@@ -22,6 +22,8 @@
 
     private HdmiCecConstants() {}
 
+    /** @deprecated not used anymore **/
+    @Deprecated
     public static final String PHYSICAL_ADDRESS_NAME = "cec-phy-addr";
     public static final int REBOOT_TIMEOUT = 60000;
     public static final int TIMEOUT_CEC_REINIT_SECONDS = 5;
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/common/HdmiCecDeviceTypeTest.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/common/HdmiCecDeviceTypeTest.java
index 5f2df84..8e7ed42 100644
--- a/hostsidetests/hdmicec/src/android/hdmicec/cts/common/HdmiCecDeviceTypeTest.java
+++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/common/HdmiCecDeviceTypeTest.java
@@ -48,6 +48,9 @@
     @Rule
     public RuleChain ruleChain = RuleChain.outerRule(CecRules.requiresLeanback(this));
 
+
+    /** @deprecated not used anymore **/
+    @Deprecated
     @Option(name = HdmiCecConstants.PHYSICAL_ADDRESS_NAME,
         description = "HDMI CEC physical address of the DUT",
         mandatory = false)
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/common/HdmiCecPhysicalAddressTest.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/common/HdmiCecPhysicalAddressTest.java
index 94bfa51..9d3fd05 100644
--- a/hostsidetests/hdmicec/src/android/hdmicec/cts/common/HdmiCecPhysicalAddressTest.java
+++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/common/HdmiCecPhysicalAddressTest.java
@@ -19,15 +19,14 @@
 import android.hdmicec.cts.BaseHdmiCecCtsTest;
 import android.hdmicec.cts.CecMessage;
 import android.hdmicec.cts.CecOperand;
-import android.hdmicec.cts.HdmiCecConstants;
 
 import com.android.tradefed.device.ITestDevice;
 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
 
 import org.junit.Rule;
+import org.junit.Test;
 import org.junit.rules.RuleChain;
 import org.junit.runner.RunWith;
-import org.junit.Test;
 
 /** HDMI CEC test to verify physical address after device reboot (Section 10.1.2) */
 @RunWith(DeviceJUnit4ClassRunner.class)
@@ -47,11 +46,7 @@
     @Test
     public void cect_10_1_2_1_RebootPhysicalAddress() throws Exception {
         ITestDevice device = getDevice();
-        String deviceType = device.getProperty(HdmiCecConstants.HDMI_DEVICE_TYPE_PROPERTY);
-        int physicalAddress =
-                deviceType.equals(Integer.toString(HdmiCecConstants.CEC_DEVICE_TYPE_TV))
-                        ? 0x0000
-                        : dutPhysicalAddress;
+        int physicalAddress = getDumpsysPhysicalAddress();
         device.reboot();
         String message = hdmiCecClient.checkExpectedOutput(CecOperand.REPORT_PHYSICAL_ADDRESS);
         CecMessage.assertPhysicalAddressValid(message, physicalAddress);
diff --git a/hostsidetests/mediaparser/src/android/media/mediaparser/cts/MediaParserHostSideTest.java b/hostsidetests/mediaparser/src/android/media/mediaparser/cts/MediaParserHostSideTest.java
index 088dfeb..a9abfbb 100644
--- a/hostsidetests/mediaparser/src/android/media/mediaparser/cts/MediaParserHostSideTest.java
+++ b/hostsidetests/mediaparser/src/android/media/mediaparser/cts/MediaParserHostSideTest.java
@@ -28,7 +28,6 @@
 import com.android.internal.os.StatsdConfigProto.StatsdConfig;
 import com.android.os.AtomsProto;
 import com.android.os.AtomsProto.MediametricsMediaParserReported;
-import com.android.os.StatsLog;
 import com.android.os.StatsLog.ConfigMetricsReportList;
 import com.android.os.StatsLog.EventMetricData;
 import com.android.tradefed.build.IBuildInfo;
@@ -42,9 +41,7 @@
 import com.google.common.io.Files;
 
 import java.io.File;
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -203,12 +200,12 @@
     }
 
     public void testTrackCodecs() throws Exception {
-        String[] expectedCodecs = new String[] {"", "mp4a.40.2"};
         runDeviceTest("testMp4");
-        String trackMimeTypesField = getSingleMediaParserReportedEvent().getTrackCodecs();
-        List<String> actualTrackMimeTypes =
-                Arrays.asList(trackMimeTypesField.split(MEDIAPARSER_METRICS_SEPARATOR));
-        assertThat(actualTrackMimeTypes).containsExactlyElementsIn(expectedCodecs);
+        String trackCodecs = getSingleMediaParserReportedEvent().getTrackCodecs();
+        List<String> actualTrackCodecs =
+                Arrays.asList(trackCodecs.split(MEDIAPARSER_METRICS_SEPARATOR));
+        assertThat(actualTrackCodecs).hasSize(2);
+        assertThat(actualTrackCodecs).contains("mp4a.40.2");
     }
 
     public void testAlteredParameters() throws Exception {
diff --git a/hostsidetests/statsdatom/apps/statsdapp/src/com/android/server/cts/device/statsdatom/AtomTests.java b/hostsidetests/statsdatom/apps/statsdapp/src/com/android/server/cts/device/statsdatom/AtomTests.java
index 4eac939..f7eabad 100644
--- a/hostsidetests/statsdatom/apps/statsdapp/src/com/android/server/cts/device/statsdatom/AtomTests.java
+++ b/hostsidetests/statsdatom/apps/statsdapp/src/com/android/server/cts/device/statsdatom/AtomTests.java
@@ -869,8 +869,13 @@
     }
 
     @Test
-    public void testWifiLockHighPerf() {
+    public void testWifiLockHighPerf() throws Exception {
         Context context = InstrumentationRegistry.getContext();
+        boolean wifiConnected = isWifiConnected(context);
+        Assert.assertTrue(
+                "Wifi is not connected. The test expects Wifi to be connected before the run",
+                wifiConnected);
+
         WifiManager wm = context.getSystemService(WifiManager.class);
         WifiManager.WifiLock lock =
                 wm.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "StatsdCTSWifiLock");
@@ -880,14 +885,12 @@
     }
 
     @Test
-    public void testWifiLockLowLatency() {
+    public void testWifiConnected() throws Exception {
         Context context = InstrumentationRegistry.getContext();
-        WifiManager wm = context.getSystemService(WifiManager.class);
-        WifiManager.WifiLock lock =
-                wm.createWifiLock(WifiManager.WIFI_MODE_FULL_LOW_LATENCY, "StatsdCTSWifiLock");
-        lock.acquire();
-        sleep(500);
-        lock.release();
+        boolean wifiConnected = isWifiConnected(context);
+        Assert.assertTrue(
+                "Wifi is not connected. The test expects Wifi to be connected before the run",
+                wifiConnected);
     }
 
     @Test
diff --git a/hostsidetests/statsdatom/apps/statsdapp/src/com/android/server/cts/device/statsdatom/StatsdCtsForegroundActivity.java b/hostsidetests/statsdatom/apps/statsdapp/src/com/android/server/cts/device/statsdatom/StatsdCtsForegroundActivity.java
index df11114..193fc95 100644
--- a/hostsidetests/statsdatom/apps/statsdapp/src/com/android/server/cts/device/statsdatom/StatsdCtsForegroundActivity.java
+++ b/hostsidetests/statsdatom/apps/statsdapp/src/com/android/server/cts/device/statsdatom/StatsdCtsForegroundActivity.java
@@ -27,6 +27,7 @@
 import android.graphics.Color;
 import android.graphics.Point;
 import android.net.ConnectivityManager;
+import android.net.wifi.WifiManager;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.RemoteException;
@@ -52,6 +53,8 @@
     public static final String ACTION_POLL_NETWORK_STATS = "action.poll_network_stats";
     public static final String ACTION_LMK = "action.lmk";
     public static final String ACTION_DRAIN_POWER = "action.drain_power";
+    public static final String ACTION_WIFI_LL_LOCK = "action.acquire_release_wifi_ll_lock";
+    public static final String ACTION_WIFI_HIPERF_LOCK = "action.acquire_release_wifi_hiperf_lock";
 
     public static final int SLEEP_OF_ACTION_SLEEP_WHILE_TOP = 2_000;
     public static final int SLEEP_OF_ACTION_SHOW_APPLICATION_OVERLAY = 2_000;
@@ -108,6 +111,13 @@
             case ACTION_DRAIN_POWER:
                 doBusyWork();
                 break;
+            case ACTION_WIFI_LL_LOCK:
+                doAcquireReleaseLock(WifiManager.WIFI_MODE_FULL_LOW_LATENCY);
+                break;
+            case ACTION_WIFI_HIPERF_LOCK:
+                doAcquireReleaseLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF);
+                break;
+
             default:
                 Log.e(TAG, "Intent had invalid action " + action);
                 finish();
@@ -241,4 +251,13 @@
     }
 
     private native void segfault();
+
+    private void doAcquireReleaseLock(int lockMode) {
+        WifiManager wm = getSystemService(WifiManager.class);
+        WifiManager.WifiLock lock = wm.createWifiLock(lockMode, "StatsdCTSWifiLock");
+        lock.acquire();
+        AtomTests.sleep(500);
+        lock.release();
+        finish();
+    }
 }
diff --git a/hostsidetests/statsdatom/src/android/cts/statsdatom/perfetto/PerfettoTests.java b/hostsidetests/statsdatom/src/android/cts/statsdatom/perfetto/PerfettoTests.java
index 22b2b49..ebfb320 100644
--- a/hostsidetests/statsdatom/src/android/cts/statsdatom/perfetto/PerfettoTests.java
+++ b/hostsidetests/statsdatom/src/android/cts/statsdatom/perfetto/PerfettoTests.java
@@ -38,6 +38,8 @@
 import com.android.os.AtomsProto.PerfettoUploaded;
 import com.android.os.StatsLog.EventMetricData;
 import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.log.LogUtil;
+import com.android.tradefed.log.LogUtil.CLog;
 import com.android.tradefed.testtype.DeviceTestCase;
 import com.android.tradefed.testtype.IBuildReceiver;
 import com.android.tradefed.util.CommandResult;
@@ -65,9 +67,20 @@
     private static final int ALERT_ID = 11;
     private static final int SUBSCRIPTION_ID_PERFETTO = 42;
 
+    private boolean defaultSystemTracingConfigurationHasChanged = false;
+
     @Override
     protected void setUp() throws Exception {
         super.setUp();
+
+        // Default Android configuration can only change for device type that doesn't require SystemTracingEnabled
+        // by default in CDD.
+        String chars = getDevice().getProperty("ro.build.characteristics");
+        if (!isSystemTracingEnabled() && chars.contains("automotive")) {
+            enableSystemTracing();
+            defaultSystemTracingConfigurationHasChanged = true;
+        }
+
         ConfigUtils.removeConfig(getDevice());
         ReportUtils.clearReports(getDevice());
         Thread.sleep(AtomTestUtils.WAIT_TIME_LONG);
@@ -75,6 +88,22 @@
 
     @Override
     protected void tearDown() throws Exception {
+        // Disable SystemTracing if previously enabled at test setUp()
+        if (defaultSystemTracingConfigurationHasChanged) {
+            disableSystemTracing();
+            defaultSystemTracingConfigurationHasChanged = false;
+        }
+        // Deadline to finish trace collection
+        final long deadLine = System.currentTimeMillis() + 10000;
+        while (isSystemTracingEnabled()) {
+            if (System.currentTimeMillis() > deadLine) {
+                CLog.w("/sys/kernel/debug/tracing/tracing_on is still 1 after 10 secs : " + isSystemTracingEnabled());
+                break;
+            }
+            CLog.d("Waiting to finish collecting traces. ");
+            Thread.sleep(AtomTestUtils.WAIT_TIME_SHORT);
+        }
+
         ConfigUtils.removeConfig(getDevice());
         ReportUtils.clearReports(getDevice());
         super.tearDown();
@@ -267,4 +296,37 @@
                                 .setTriggerIfSumGt(0))
                 .addNoReportMetric(METRIC_ID);
     }
+
+    private String probe(String path) throws Exception {
+        return getDevice().executeShellCommand("if [ -e " + path + " ] ; then"
+                + " cat " + path + " ; else echo -1 ; fi");
+    }
+
+    private void enableSystemTracing() throws Exception {
+        getDevice().executeShellCommand("setprop persist.traced.enable 1");
+    }
+
+    private void disableSystemTracing() throws Exception {
+        getDevice().executeShellCommand("setprop persist.traced.enable 0");
+    }
+
+    /**
+     * Determines whether perfetto enabled the kernel ftrace tracer.
+     */
+    protected boolean isSystemTracingEnabled() throws Exception {
+        final String traceFsPath = "/sys/kernel/tracing/tracing_on";
+        String tracing_on = probe(traceFsPath);
+        if (tracing_on.startsWith("0")) return false;
+        if (tracing_on.startsWith("1")) return true;
+
+        // fallback to debugfs
+        LogUtil.CLog.d("Unexpected state for %s = %s. Falling back to debugfs", traceFsPath,
+                tracing_on);
+
+        final String debugFsPath = "/sys/kernel/debug/tracing/tracing_on";
+        tracing_on = probe(debugFsPath);
+        if (tracing_on.startsWith("0")) return false;
+        if (tracing_on.startsWith("1")) return true;
+        throw new Exception(String.format("Unexpected state for %s = %s", traceFsPath, tracing_on));
+    }
 }
diff --git a/hostsidetests/statsdatom/src/android/cts/statsdatom/statsd/UidAtomTests.java b/hostsidetests/statsdatom/src/android/cts/statsdatom/statsd/UidAtomTests.java
index 0a00c67..759f2d9 100644
--- a/hostsidetests/statsdatom/src/android/cts/statsdatom/statsd/UidAtomTests.java
+++ b/hostsidetests/statsdatom/src/android/cts/statsdatom/statsd/UidAtomTests.java
@@ -635,32 +635,25 @@
 
         final int atomTag = Atom.SCREEN_BRIGHTNESS_CHANGED_FIELD_NUMBER;
 
-        Set<Integer> screenMin = new HashSet<>(Arrays.asList(47));
-        Set<Integer> screen100 = new HashSet<>(Arrays.asList(100));
-        Set<Integer> screen140 = new HashSet<>(Arrays.asList(140));
-        // Set<Integer> screenMax = new HashSet<>(Arrays.asList(255));
-
-        // Add state sets to the list in order.
-        List<Set<Integer>> stateSet = Arrays.asList(screenMin, screen100, screen140);
-
         ConfigUtils.uploadConfigForPushedAtom(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG,
                 atomTag);
         DeviceUtils.runDeviceTestsOnStatsdApp(getDevice(), ".AtomTests", "testScreenBrightness");
 
-        // Sorted list of events in order in which they occurred.
-        List<EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice());
+        List<Integer> expectedValues = Arrays.asList(47, 100);
+
+        // Sorted list of brightness values in order in which they occurred, filtered to only
+        // contain expectedValues if they are present.
+        List<Integer> data = ReportUtils.getEventMetricDataList(getDevice())
+                                     .stream()
+                                     .map(e -> e.getAtom().getScreenBrightnessChanged().getLevel())
+                                     .filter(expectedValues::contains)
+                                     .collect(Collectors.toList());
 
         // Restore initial screen brightness
         setScreenBrightness(initialBrightness);
         setScreenBrightnessMode(isInitialManual);
 
-        AtomTestUtils.popUntilFind(data, screenMin,
-                atom -> atom.getScreenBrightnessChanged().getLevel());
-        AtomTestUtils.popUntilFindFromEnd(data, screen140,
-                atom -> atom.getScreenBrightnessChanged().getLevel());
-        // Assert that the events happened in the expected order.
-        AtomTestUtils.assertStatesOccurred(stateSet, data, AtomTestUtils.WAIT_TIME_SHORT,
-                atom -> atom.getScreenBrightnessChanged().getLevel());
+        assertThat(data).containsExactlyElementsIn(expectedValues).inOrder();
     }
 
     public void testSyncState() throws Exception {
diff --git a/hostsidetests/statsdatom/src/android/cts/statsdatom/wifi/WifiStatsTests.java b/hostsidetests/statsdatom/src/android/cts/statsdatom/wifi/WifiStatsTests.java
index c4bec178..302130e 100644
--- a/hostsidetests/statsdatom/src/android/cts/statsdatom/wifi/WifiStatsTests.java
+++ b/hostsidetests/statsdatom/src/android/cts/statsdatom/wifi/WifiStatsTests.java
@@ -78,6 +78,7 @@
         ConfigUtils.uploadConfigForPushedAtomWithUid(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG,
                 AtomsProto.Atom.WIFI_LOCK_STATE_CHANGED_FIELD_NUMBER, true);
         DeviceUtils.runDeviceTestsOnStatsdApp(getDevice(), ".AtomTests", "testWifiLockHighPerf");
+        Thread.sleep(AtomTestUtils.WAIT_TIME_LONG);
 
         // Sorted list of events in order in which they occurred.
         List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice());
@@ -106,7 +107,22 @@
 
         ConfigUtils.uploadConfigForPushedAtomWithUid(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG,
                 AtomsProto.Atom.WIFI_LOCK_STATE_CHANGED_FIELD_NUMBER, true);
-        DeviceUtils.runDeviceTestsOnStatsdApp(getDevice(), ".AtomTests", "testWifiLockLowLatency");
+
+        // For low latency lock to be active following conditions need to be met,
+        //    - Wi-Fi is connected
+        //    - Screen On
+        //    - Application is foreground.
+
+        // Check Wi-Fi is connected.
+        DeviceUtils.runDeviceTestsOnStatsdApp(getDevice(), ".AtomTests", "testWifiConnected");
+
+        // Turn screen on.
+        DeviceUtils.turnScreenOn(getDevice());
+
+        // Acquire and release low latency lock in foreground activity.
+        DeviceUtils.runActivity(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG,
+                "StatsdCtsForegroundActivity", "action", "action.acquire_release_wifi_ll_lock");
+        Thread.sleep(AtomTestUtils.WAIT_TIME_LONG);
 
         // Sorted list of events in order in which they occurred.
         List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice());
@@ -136,6 +152,7 @@
         ConfigUtils.uploadConfigForPushedAtomWithUid(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG,
                 AtomsProto.Atom.WIFI_MULTICAST_LOCK_STATE_CHANGED_FIELD_NUMBER, true);
         DeviceUtils.runDeviceTestsOnStatsdApp(getDevice(), ".AtomTests", "testWifiMulticastLock");
+        Thread.sleep(AtomTestUtils.WAIT_TIME_LONG);
 
         // Sorted list of events in order in which they occurred.
         List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice());
@@ -213,7 +230,7 @@
         ConfigUtils.uploadConfigForPushedAtom(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG,
                 AtomsProto.Atom.WIFI_SCAN_REPORTED_FIELD_NUMBER);
         DeviceUtils.runDeviceTestsOnStatsdApp(getDevice(), ".AtomTests", "testWifiScan");
-        Thread.sleep(AtomTestUtils.WAIT_TIME_SHORT);
+        Thread.sleep(AtomTestUtils.WAIT_TIME_LONG);
 
         List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice());
         assertThat(data).hasSize(2);
@@ -244,7 +261,7 @@
         ConfigUtils.uploadConfigForPushedAtomWithUid(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG,
                 AtomsProto.Atom.WIFI_SCAN_STATE_CHANGED_FIELD_NUMBER,  true);
         DeviceUtils.runDeviceTestsOnStatsdApp(getDevice(), ".AtomTests", "testWifiScan");
-        Thread.sleep(AtomTestUtils.WAIT_TIME_SHORT);
+        Thread.sleep(AtomTestUtils.WAIT_TIME_LONG);
 
         final int stateOn = AtomsProto.WifiScanStateChanged.State.ON_VALUE;
         final int stateOff = AtomsProto.WifiScanStateChanged.State.OFF_VALUE;
diff --git a/tests/app/src/android/app/cts/SystemFeaturesTest.java b/tests/app/src/android/app/cts/SystemFeaturesTest.java
index 19dc7a3..6d46448 100644
--- a/tests/app/src/android/app/cts/SystemFeaturesTest.java
+++ b/tests/app/src/android/app/cts/SystemFeaturesTest.java
@@ -70,6 +70,10 @@
  */
 @RunWith(JUnit4.class)
 public class SystemFeaturesTest {
+    private static final String FEATURE_GOOGLE_LARGE_DISPLAY =
+            "com.google.android.feature.large_display";
+    private static final String FEATURE_GOOGLE_OTHER_FORM_FACTOR =
+            "com.google.android.feature.other_form_factor";
 
     private Context mContext;
     private PackageManager mPackageManager;
@@ -331,7 +335,9 @@
         if (NfcAdapter.getDefaultAdapter(mContext) != null) {
             // Watches MAY support all FEATURE_NFC features when an NfcAdapter is available, but
             // non-watches MUST support them both.
-            if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_WATCH)) {
+            if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_WATCH)
+                    || (mPackageManager.hasSystemFeature(FEATURE_GOOGLE_LARGE_DISPLAY)
+                    && mPackageManager.hasSystemFeature(FEATURE_GOOGLE_OTHER_FORM_FACTOR))) {
                 assertOneAvailable(PackageManager.FEATURE_NFC,
                     PackageManager.FEATURE_NFC_HOST_CARD_EMULATION);
             } else {
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsAnimationTests.java b/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsAnimationTests.java
index 87c0fc8..2fcf5ce 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsAnimationTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/WindowInsetsAnimationTests.java
@@ -258,7 +258,8 @@
 
         waitForOrFail("Waiting until animation done", () -> mActivity.mCallback.animationDone);
 
-        assertFalse(getWmState().isWindowVisible("StatusBar"));
+        mWmState.computeState();
+        assertFalse(mWmState.isWindowVisible("StatusBar"));
         verify(mActivity.mCallback).onPrepare(any());
         verify(mActivity.mCallback).onStart(any(), any());
         verify(mActivity.mCallback, atLeastOnce()).onProgress(any(), any());
diff --git a/tests/media/src/android/mediav2/cts/EncoderProfileLevelTest.java b/tests/media/src/android/mediav2/cts/EncoderProfileLevelTest.java
index f24a4b1..3400e06 100644
--- a/tests/media/src/android/mediav2/cts/EncoderProfileLevelTest.java
+++ b/tests/media/src/android/mediav2/cts/EncoderProfileLevelTest.java
@@ -668,10 +668,29 @@
                 Log.e(LOG_TAG, "profile in output doesn't match configured input");
                 return false;
             }
-            if (outFormat.getInteger(MediaFormat.KEY_LEVEL)
-                    != inpFormat.getInteger(MediaFormat.KEY_LEVEL)) {
-                Log.e(LOG_TAG, "level key in output doesn't match configured input");
-                return false;
+
+            int inputLevel = inpFormat.getInteger(MediaFormat.KEY_LEVEL);
+            int outputLevel = outFormat.getInteger(MediaFormat.KEY_LEVEL);
+
+            // H263 level 45 is out of order.
+            if (outMime.equals(MediaFormat.MIMETYPE_VIDEO_H263) && inputLevel == H263Level45) {
+                // If we are expecting a min level45, then any level other than the ones below
+                // level45 (level10) should be ok
+                if (H263Level10 == outputLevel) {
+                    return false;
+                }
+            } else if (outMime.equals(MediaFormat.MIMETYPE_VIDEO_H263)
+                    && outputLevel == H263Level45) {
+                // If we got level45, then input level must be level10 or level45
+                if (H263Level10 != inputLevel) {
+                    return false;
+                }
+            } else {
+                if (outputLevel < inputLevel) {
+                    Log.e(LOG_TAG, "output level: " + outputLevel + " is < input level: "
+                            + inputLevel);
+                    return false;
+                }
             }
         } else {
             Log.w(LOG_TAG, "non media mime:" + outMime);
diff --git a/tests/signature/intent-check/DynamicConfig.xml b/tests/signature/intent-check/DynamicConfig.xml
index 591bb57..ea9d16d 100644
--- a/tests/signature/intent-check/DynamicConfig.xml
+++ b/tests/signature/intent-check/DynamicConfig.xml
@@ -33,6 +33,7 @@
     Bug: 234104089 android.intent.action.VIEW_SAFETY_CENTER_QS
     Bug: 238841916 android.intent.action.TIPS_CONFIG_PROVIDER
     Bug: 237978237 android.intent.action.REMOTE_COPY
+    Bug: 286793759 android.intent.action.REVIEW_APP_DATA_SHARING_UPDATES (system in API 34)
 -->
 <dynamicConfig>
     <entry key ="intent_whitelist">
@@ -54,5 +55,6 @@
       <value>android.intent.action.VIEW_SAFETY_CENTER_QS</value>
       <value>android.intent.action.TIPS_CONFIG_PROVIDER</value>
       <value>android.intent.action.REMOTE_COPY</value>
+      <value>android.intent.action.REVIEW_APP_DATA_SHARING_UPDATES</value>
     </entry>
 </dynamicConfig>
diff --git a/tests/tests/display/src/android/display/cts/VirtualDisplayTest.java b/tests/tests/display/src/android/display/cts/VirtualDisplayTest.java
index 30cfa99..76a3afb 100644
--- a/tests/tests/display/src/android/display/cts/VirtualDisplayTest.java
+++ b/tests/tests/display/src/android/display/cts/VirtualDisplayTest.java
@@ -56,6 +56,7 @@
 
 import com.android.compatibility.common.util.AdoptShellPermissionsRule;
 import com.android.compatibility.common.util.SettingsStateKeeperRule;
+import com.android.compatibility.common.util.SettingsUtils;
 
 import org.junit.After;
 import org.junit.Before;
@@ -110,11 +111,13 @@
     @ClassRule
     public static final SettingsStateKeeperRule mAreUserDisabledHdrFormatsAllowedSettingsKeeper =
             new SettingsStateKeeperRule(InstrumentationRegistry.getTargetContext(),
+                    SettingsUtils.NAMESPACE_GLOBAL,
                     Settings.Global.ARE_USER_DISABLED_HDR_FORMATS_ALLOWED);
 
     @ClassRule
     public static final SettingsStateKeeperRule mUserDisabledHdrFormatsSettingsKeeper =
             new SettingsStateKeeperRule(InstrumentationRegistry.getTargetContext(),
+                    SettingsUtils.NAMESPACE_GLOBAL,
                     Settings.Global.USER_DISABLED_HDR_FORMATS);
 
     @Before
@@ -557,4 +560,3 @@
         }
     }
 }
-
diff --git a/tests/tests/media/src/android/media/cts/AudioManagerTest.java b/tests/tests/media/src/android/media/cts/AudioManagerTest.java
index 18356c9..daacab0 100644
--- a/tests/tests/media/src/android/media/cts/AudioManagerTest.java
+++ b/tests/tests/media/src/android/media/cts/AudioManagerTest.java
@@ -80,6 +80,7 @@
 import com.android.compatibility.common.util.ApiLevelUtil;
 import com.android.compatibility.common.util.CddTest;
 import com.android.compatibility.common.util.MediaUtils;
+import com.android.compatibility.common.util.SettingsUtils;
 import com.android.compatibility.common.util.SettingsStateKeeperRule;
 import com.android.internal.annotations.GuardedBy;
 
@@ -144,11 +145,13 @@
     @ClassRule
     public static final SettingsStateKeeperRule mSurroundSoundFormatsSettingsKeeper =
             new SettingsStateKeeperRule(InstrumentationRegistry.getTargetContext(),
+                    SettingsUtils.NAMESPACE_GLOBAL,
                     Settings.Global.ENCODED_SURROUND_OUTPUT_ENABLED_FORMATS);
 
     @ClassRule
     public static final SettingsStateKeeperRule mSurroundSoundModeSettingsKeeper =
             new SettingsStateKeeperRule(InstrumentationRegistry.getTargetContext(),
+                    SettingsUtils.NAMESPACE_GLOBAL,
                     Settings.Global.ENCODED_SURROUND_OUTPUT);
 
     @Override
diff --git a/tests/tests/midi/src/android/midi/cts/MidiEchoTest.java b/tests/tests/midi/src/android/midi/cts/MidiEchoTest.java
index 4ed2853..767b31d 100644
--- a/tests/tests/midi/src/android/midi/cts/MidiEchoTest.java
+++ b/tests/tests/midi/src/android/midi/cts/MidiEchoTest.java
@@ -554,7 +554,7 @@
 
     // Store history of status changes.
     private class MyDeviceCallback extends MidiManager.DeviceCallback {
-        private MidiDeviceStatus mStatus;
+        private volatile MidiDeviceStatus mStatus;
         private MidiDeviceInfo mInfo;
 
         public MyDeviceCallback(MidiDeviceInfo info) {
@@ -613,7 +613,19 @@
             midiManager.registerDeviceCallback(deviceCallback, null);
 
             MidiDeviceStatus status = deviceCallback.waitForStatus(TIMEOUT_STATUS_MSEC);
-            assertEquals("we should not have any status yet", null, status);
+            // The DeviceStatus callback is supposed to be "sticky".
+            // That means we expect to get the status of every device that is
+            // already available when we register for the callback.
+            // If it was not "sticky" then we would only get a callback when there
+            // was a change in the available devices.
+            // This may be null the first time it is run.
+            if (status == null) {
+                Log.d(TAG, "testDeviceCallback() first status was null!");
+            } else {
+                // InputPort should be closed because we have not opened it yet.
+                assertEquals("input port should be closed before we open it.",
+                             false, status.isInputPortOpen(0));
+            }
 
             // Open input port.
             MidiInputPort echoInputPort = echoDevice.openInputPort(0);
@@ -621,13 +633,13 @@
 
             status = deviceCallback.waitForStatus(TIMEOUT_STATUS_MSEC);
             assertTrue("should have status by now", null != status);
-            assertEquals("input port open?", true, status.isInputPortOpen(0));
+            assertEquals("input port should be open", true, status.isInputPortOpen(0));
 
             deviceCallback.clear();
             echoInputPort.close();
             status = deviceCallback.waitForStatus(TIMEOUT_STATUS_MSEC);
             assertTrue("should have status by now", null != status);
-            assertEquals("input port closed?", false, status.isInputPortOpen(0));
+            assertEquals("input port should be closed", false, status.isInputPortOpen(0));
 
             // Make sure we do NOT get called after unregistering.
             midiManager.unregisterDeviceCallback(deviceCallback);
diff --git a/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/invalid_chain.pem b/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/invalid_chain.pem
index ed33e7f..1a1b2d7 100644
--- a/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/invalid_chain.pem
+++ b/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/invalid_chain.pem
@@ -1,35 +1,36 @@
 -----BEGIN CERTIFICATE-----
-MIICvjCCAaagAwIBAgIDDUD7MA0GCSqGSIb3DQEBCwUAMCMxITAfBgNVBAMTGEFu
-ZHJvaWQgQ1RTIHVudHJ1c3RlZCBDQTAqGBMyMDE1MDEwMTAwMDAwMCswMDAwGBMy
-MDI1MDEwMTAwMDAwMCswMDAwMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKH+IdnzoDeGaE1SWn4L8dhfd59AJVYO
-Wxz88ntK55iPCxPGdNdqL5MX0On9K0iBf+e839mRMIdjY1BtEo5Ln9MA6RTLQwt6
-OPaWF/HQQHkmrLOOShNZcerea+rJHPfN7NedSg6Ufb2bcVn7DrKBwUigAJDWVn02
-IB6wHO9slF+NsAcpyecxtvY/p7t0lguAe0j1IiVfX+xGdNFU7WjmGRQzk5KavFi3
-BwDc25rXP7JJ/6M66TnzI54iRI918P0AbhE+3K/5Bbe8qPFtdlEOChP6npUW1Nhm
-z99KolkcW/uCXUBHAsm27QPdW3wYX6hwa5eS8VGTWuhEOddPdBvGGPcCAwEAATAN
-BgkqhkiG9w0BAQsFAAOCAQEAgABDM5HU2+XE6Hx/Ti8LpnJXLdNk6Y1uZro2Vvmz
-MqwdKBC/k5RrdIyalN5lZzCRWKi4f4wgWGGnqbxlAugwa5N0+LWgw2Em4W8HEk6c
-DK9TPVnh7y87ibwGmyeU+bHMyFuVV8Yp+tXUCV2aQhM/yBEyCOEei/twWeZ7uVaw
-ANraJ0UDDeznqJX3rTsvwwBfKLmFm98YhzB3EYVo332oCuvC90RLmEerI5JmpNAw
-jg6Z0DMShcfdN2kIW1NEUTGBbd5sGsPRJVba0giEwXtDKorPLe+kJJMzji8HRk0x
-51tpxEseBrS3DjiIS7CT1RuiBfVJAdfzOHyDeFCX9t7tFQ==
+MIIC+zCCAeOgAwIBAgIBATANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDExhBbmRy
+b2lkIENUUyB1bnRydXN0ZWQgQ0EwIBcNMTUwMTAxMDAwMDAwWhgPMzAwMDAxMDEw
+MDAwMDBaMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAKH+IdnzoDeGaE1SWn4L8dhfd59AJVYOWxz88ntK55iPCxPG
+dNdqL5MX0On9K0iBf+e839mRMIdjY1BtEo5Ln9MA6RTLQwt6OPaWF/HQQHkmrLOO
+ShNZcerea+rJHPfN7NedSg6Ufb2bcVn7DrKBwUigAJDWVn02IB6wHO9slF+NsAcp
+yecxtvY/p7t0lguAe0j1IiVfX+xGdNFU7WjmGRQzk5KavFi3BwDc25rXP7JJ/6M6
+6TnzI54iRI918P0AbhE+3K/5Bbe8qPFtdlEOChP6npUW1Nhmz99KolkcW/uCXUBH
+Asm27QPdW3wYX6hwa5eS8VGTWuhEOddPdBvGGPcCAwEAAaNHMEUwDAYDVR0TAQH/
+BAIwADAfBgNVHSMEGDAWgBShmbz1UJc37NwCMcW49/562dTpczAUBgNVHREEDTAL
+gglsb2NhbGhvc3QwDQYJKoZIhvcNAQELBQADggEBAIusEEDMMg3DStbmm4Xo1w+D
+28SvONHgQI2U7VxzeUM6lzMujsBWJwnX1iXK7bdNqy9Z5JkNoMbtF5B9poygelqY
+6Bk31pWuHzxucHLPENAfnGZZ5PiCjZZGegEcwmIdYFELBMfWbvU9atG9akChv2Fu
+Q/BYtEgPK3mfVBvIQt/b4I3LYjjPADODAmrZFfWuc7HqGMzR8wiHskb0E31+R/Of
+dalL6fbGRQh0j1P1euelZaYfNaegyRP2eNpHhw8my3RctQFZ9ob00KZAsq7bKzwQ
+K5ouEYLke7pQ+6xNs60W1QwF7ezmvusKeZpjZve69fW91Hkanf8odlTCWSXdzWQ=
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
-MIIC4jCCAcqgAwIBAgIDBxMgMA0GCSqGSIb3DQEBCwUAMCMxITAfBgNVBAMTGEFu
-ZHJvaWQgQ1RTIHVudHJ1c3RlZCBDQTAqGBMyMDE1MDEwMTAwMDAwMCswMDAwGBMy
-MDI1MDEwMTAwMDAwMCswMDAwMCMxITAfBgNVBAMTGEFuZHJvaWQgQ1RTIHVudHJ1
-c3RlZCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMWCkHZZHBs7
-m1njBgF2yh4zEHOO1jN3nl9tNJwXWK6O3qAr4UC/CbokIu4onG26I9kHbaCAcM3L
-7qmuz2cL5gqSrwUD7nVC38+EnP8WpMt/SFljJYlbNqGMep8/ZvybtK8wJm+dAY3w
-Cj4vU9w9XPakG6m0FkSLtS5+XaAIM0rRbWGcPWBv+nHOwXBNpggoe63L2uJ6wra7
-NwW0epXT4FuMzY+f3/ZSdNbhMs4/gJbLHYMt81w7YZ2DY/fgGbZGjLc6PQvV8bZb
-+Wib/Lg0o2rFb9O+pdU0azZQ/kyD/+CBjuEewJCcl6dsQX5k8A71di4uWBHaopVr
-gN2MTL2pqRECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsF
-AAOCAQEAORmso2dZmTmaUHQKRnbpDoVcUDeDJWSnkgCbP1ZgpQ+B7t5ZWnLXqpVy
-eyK/ENscNPMpbyyQ8eaeydpSD6jipJfmH3O8NhtWZPA/1oY0Wm4/lsosZGFSadWg
-nSLfqxZtBy+VIZBGZrhPhlJ2U2WKmrTaMYS7TJy1t9RcQIw79pnnLKXAAhZx72U5
-FtPMAGREDaFMt7pVcM63ipytUPtrXH6nzOFHmsGGT0sbA0+/QkN5NkYYbHbFP6oI
-BJ4xZHVLCoyt+5kscsIZXsLb6jd1d/8RoD1w+559uE3T5AyPmfGRnq9+QjKbf0hx
-MC5lBV/nTWSf+GM0Q/hy2CPvvB7WNA==
+MIIC9TCCAd2gAwIBAgIBADANBgkqhkiG9w0BAQsFADAjMSEwHwYDVQQDExhBbmRy
+b2lkIENUUyB1bnRydXN0ZWQgQ0EwIBcNMTUwMTAxMDAwMDAwWhgPMzAwMDAxMDEw
+MDAwMDBaMCMxITAfBgNVBAMTGEFuZHJvaWQgQ1RTIHVudHJ1c3RlZCBDQTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJxrWVqyvdBqIS2GFxQ+2oGR8ONN
+QCZAI8gTsev3uA7Wz3K7AHaNPHLV8AQa6XKdeS8pKdAiIRLg6oL74AcAwAZMR6hp
+Ie4av/GxB5ZXTMi8Zv2XiXwMPDbOW6VPre0eP3dZAJjrdw7/PlrXaTZL2NMAuw5J
+68jghKWT+s+xSNheqUVZZWIj8LPjXZEa9E7jROIRb8itefCbEWBRTB44H8JHz6ov
+ROuRJW3kwAbVYU+CZ6dBnccNCfk44CynLWmOxQOl4IiBx3d13mHE1UmwReAKgfWU
+s0tpTgp/JJkY67utCeglRobUZDHBbaGrX3GE8lp9ewruFKh6Bec7kKOLWn0CAwEA
+AaMyMDAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoZm89VCXN+zcAjHFuPf+
+etnU6XMwDQYJKoZIhvcNAQELBQADggEBAEzGPABpHWXWSRisW3OSd772kg67zIfd
+DRTlLEewhEmyYNpzfVKOuCAA8pR09wezxUwU/9ZzU1dkQ7lnu7YEfVdLXgKrcQlv
+fzvrd/WK1p4VXRlexmBPI6gWzOjYBUmeMFSXyPeS1ItDSpnG2aBxYoTjGxdZvW5V
+eAQeFVJVKwDlXaw403a/Kl+BUWLt5yuJOhFdTbSnsjFKnoK4a/xbbSINXjPFbRA7
+6l40CLLdfkLGDJ3sTIRRO9c8fBfuHXO5/0K/7n+jP/C6emxw5o7ca7H094UDO4oy
+V52LTVFgL003MyLLKSlmSFqw5ykwFgjkCJ7m3A2S/lHox2e1aXlXg08=
 -----END CERTIFICATE-----
diff --git a/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/make_certs.go b/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/make_certs.go
new file mode 100644
index 0000000..e160484
--- /dev/null
+++ b/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/make_certs.go
@@ -0,0 +1,197 @@
+package main

+

+import (

+	"crypto/rand"

+	"crypto/rsa"

+	"crypto/x509"

+	"crypto/x509/pkix"

+	"encoding/pem"

+	"fmt"

+	"math/big"

+	"os"

+	"time"

+)

+

+func mustDecodePEMKey(in string) ([]byte, *rsa.PrivateKey) {

+	block, _ := pem.Decode([]byte(in))

+	if block == nil || block.Type != "PRIVATE KEY" {

+		panic("could not find PEM block of type PRIVATE KEY")

+	}

+	key, err := x509.ParsePKCS8PrivateKey(block.Bytes)

+	if err != nil {

+		panic(fmt.Sprintf("error decoding private key: %s", err))

+	}

+	return block.Bytes, key.(*rsa.PrivateKey)

+}

+

+func mustWriteFile(name string, data []byte) {

+	if err := os.WriteFile(name, data, 0666); err != nil {

+		panic(err)

+	}

+}

+

+func mustWritePEMBlocks(name string, blocks ...*pem.Block) {

+	var data []byte

+	for _, b := range blocks {

+		data = append(data, pem.EncodeToMemory(b)...)

+	}

+	mustWriteFile(name, data)

+}

+

+func mustMakeCertChain(caName string, eeKey, caKey *rsa.PrivateKey) (eeCert, caCert *x509.Certificate) {

+	notBefore, err := time.Parse(time.DateOnly, "2015-01-01")

+	if err != nil {

+		panic(err)

+	}

+	notAfter, err := time.Parse(time.DateOnly, "3000-01-01")

+	if err != nil {

+		panic(err)

+	}

+

+	caTemplate := x509.Certificate{

+		SerialNumber:          new(big.Int).SetUint64(0),

+		Subject:               pkix.Name{CommonName: caName},

+		NotBefore:             notBefore,

+		NotAfter:              notAfter,

+		BasicConstraintsValid: true,

+		IsCA:                  true,

+		SignatureAlgorithm:    x509.SHA256WithRSA,

+	}

+	caBytes, err := x509.CreateCertificate(rand.Reader, &caTemplate, &caTemplate, caKey.Public(), caKey)

+	if err != nil {

+		panic(err)

+	}

+	caCert, err = x509.ParseCertificate(caBytes)

+	if err != nil {

+		panic(err)

+	}

+

+	eeTemplate := x509.Certificate{

+		SerialNumber:          new(big.Int).SetUint64(1),

+		Subject:               pkix.Name{CommonName: "localhost"},

+		NotBefore:             notBefore,

+		NotAfter:              notAfter,

+		DNSNames:              []string{"localhost"},

+		BasicConstraintsValid: true,

+		SignatureAlgorithm:    x509.SHA256WithRSA,

+	}

+	eeBytes, err := x509.CreateCertificate(rand.Reader, &eeTemplate, caCert, eeKey.Public(), caKey)

+	if err != nil {

+		panic(err)

+	}

+	eeCert, err = x509.ParseCertificate(eeBytes)

+	if err != nil {

+		panic(err)

+	}

+

+	return

+}

+

+func main() {

+	trustedCAKeyDER, trustedCAKey := mustDecodePEMKey(trustedCAKeyPEM)

+	_, untrustedCAKey := mustDecodePEMKey(untrustedCAKeyPEM)

+	endEntityKeyDER, endEntityKey := mustDecodePEMKey(endEntityKeyPEM)

+

+	eeTrusted, caTrusted := mustMakeCertChain("Android CTS trusted CA", endEntityKey, trustedCAKey)

+	eeUntrusted, caUntrusted := mustMakeCertChain("Android CTS untrusted CA", endEntityKey, untrustedCAKey)

+

+	mustWriteFile("test_key.pkcs8", endEntityKeyDER)

+	mustWritePEMBlocks("valid_chain.pem", &pem.Block{Type: "CERTIFICATE", Bytes: eeTrusted.Raw}, &pem.Block{Type: "CERTIFICATE", Bytes: caTrusted.Raw})

+	mustWritePEMBlocks("invalid_chain.pem", &pem.Block{Type: "CERTIFICATE", Bytes: eeUntrusted.Raw}, &pem.Block{Type: "CERTIFICATE", Bytes: caUntrusted.Raw})

+	mustWritePEMBlocks("valid_ca.pem", &pem.Block{Type: "CERTIFICATE", Bytes: caTrusted.Raw}, &pem.Block{Type: "PRIVATE KEY", Bytes: trustedCAKeyDER})

+}

+

+const (

+	endEntityKeyPEM = `

+-----BEGIN PRIVATE KEY-----

+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCh/iHZ86A3hmhN

+Ulp+C/HYX3efQCVWDlsc/PJ7SueYjwsTxnTXai+TF9Dp/StIgX/nvN/ZkTCHY2NQ

+bRKOS5/TAOkUy0MLejj2lhfx0EB5JqyzjkoTWXHq3mvqyRz3zezXnUoOlH29m3FZ

++w6ygcFIoACQ1lZ9NiAesBzvbJRfjbAHKcnnMbb2P6e7dJYLgHtI9SIlX1/sRnTR

+VO1o5hkUM5OSmrxYtwcA3Nua1z+ySf+jOuk58yOeIkSPdfD9AG4RPtyv+QW3vKjx

+bXZRDgoT+p6VFtTYZs/fSqJZHFv7gl1ARwLJtu0D3Vt8GF+ocGuXkvFRk1roRDnX

+T3Qbxhj3AgMBAAECggEAUWzaOyG4kPBgkS0qC12ZrPcfu86UddM1fTav88VM8GRG

+XyRMKtNXIorAGj2FeiaN0kAgDM5sJEGS9CQ/RYNBzOASSL967dP7ugbr9kKFheAo

+wwBsv5kgJ7yxZgy9INpDiIWpafa91YbCzUXit1t9ejHi1urGAp4oOwSvJrHfSr+y

+0tBlT1FeNcMd/11me/lmsanzdli0v/xzkzinRmzesI0d4Z+2XTxBFtlos/vrMMAV

+O5Rlg1VVKnpF6wYf+/he5/q8y2TKr61J2FSFX66VoGvHYzegFCO8Shk2ojYXbcJb

+mvcAHqLnllkGQ5TeqMIOldlewlbbwoIsKtrM981LcQKBgQDOnJvfQJdz4SwjQfyR

+rXqrYnjr70OL5CFMQFcWcLg0NUpCsKlWj+HxeOJ5TMm4WdDCpoqJNGb2dpIH0F8c

+Hvmat3lztMuiTSpHQ4mHdo8v5hBr3m79TNmPVOVbSpXJ6ZzTpgzoIO69NZypSjvr

+CyDNIpm7kSfsAfIIrbkeWjc32wKBgQDItxtqDfxeqVNWM2h10Q2r4VHxaweNZsYe

+oyS1JAIGRqir5L5nIRvYsHpVRPyb/xA7wwd/Z21t89ulcitPA8rHOY3q3llnbDA8

+DczS3CSyHlyHrSq3DDK+tzVavOwM102dZK2vX1n1M2n04f7BgYfzMfhhqU+chZHZ

+RwBp6PTMFQKBgQC/eRVe9V4mLtQXrKxjWRDoyW5kwCyp9PYC01Gh4z5ia8xxN4UH

+SnpKrQu8/DOpG9tCuNKESsLsv3+frDSoO/B3uHbeivt4Yui+eFF475/M9Pnc7ZuQ

+NOseUL/pNZrRLyV+Y1FswjBdutR/cuNKdNqmIN21nNURe9AQyOZYwaSQpwKBgAEw

+/QurG5VgQetgEL2qSP99LeRV80yGkKR76Wrd1Nk+sB+dEvg/vQ+TNJau+yTd5bXF

+GZVLAt5FNUeNHu6wIhL+p3X+bd9sR/kDR/T0c49PGNOBVqCRhPeW1M0+E9Sbro1B

+nLpOwZTwAi/+62kwoKLz5/qEa8GNFWmJv1nhlRplAoGAPpMGm9GP8gB+XMOGQFLE

+kBOoYD3xhFKH9HH83vY878dfDJKdHEBJurUiEsv0/1bs1czrWtFuWGoyOjuvPk7s

+E6CB0HYGPjBw+naDFXgQw69OcucysDS6r3YrkTGFfnu1s20nrRcmP6Dk4c6jCp+i

+9gweslZFc4sWLBohJr1/DxQ=

+-----END PRIVATE KEY-----

+`

+

+	trustedCAKeyPEM = `

+-----BEGIN PRIVATE KEY-----

+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDK7USDnAqJ7Kuj

+uotcjH6pqpsTyY+pEvzWLSa1AGOereCxdXd/uiRSyyD/xBHNiJgY/+yGXLvQw6op

+RE/+CXs61SPxJcvBAXNnoH2GdZNcZGcFjgkVyBLLoskzCj5k+DBW1uN/UMBY04tG

+Gpgn1TGvQ9fkpnkBp8VWHRj4lWZoV8Y/En9QGLzcZDtOgoG8dMU3lJCODlC2VbkN

+oQ1xs7uXMH864qciUs/paURXAJL5xOhkDNpNp85VlpRqtYeK3SSr7zHLGX6SjGAt

+wIqWQNilkJ7NjdQDEaF5GeZK5qHosr0FHHZxIw4qR43ewChUHoBGLsXfQxiPtEfZ

+dHMu6ZctAgMBAAECggEAezX1E7P68iOxU4hAdcEYZwwffLQ1dgMBYUmo5t2FnyMT

++qvIEtWCmIKdVq5F4PW+4+8APdSwdOFYwBWqPCSlneMsH49DV7z5xUG89ZcOElsj

+8kt7WK5SOzJr14GwwL2xHAj9uJ/fKg/H0Jj1KbpYoIIg48PwVQD44IBqWQTdWRxd

+QVbxczDIHAjXSD14P4uUAXQrFyYEQXgksu4FNNGFr6JnuNe6eSreKxrw8/7J9OXZ

+7VUfN0Iuw/M4HF1dKQKVK2R0W34wuS2KyI3fKUS7RoSrfXfBuZ1hQ1gWoATiXkbR

+AAMUSWuaj5RQ4lj0wxdRAO+e4QB2yUXHgzCr8pH6QQKBgQDuiXtcdZ2FVN9ezxJt

+XDd6225Rvh8XtWEUwTaJmOtZz2AKlKTQr06u/BqqpKWc5SWQSf88K7WPxF6EMizB

+4D3wVGzCFkeRMMriZmrRe+8IVCq+mAZnRahV4SSH35ZQoNd8/3Mv6o59/UR0x7Nl

+5yTqruROK0Ycz8S0GlvfKiDyywKBgQDZyGaIYqZ63piagmRx3EB1Z+8yfXnn8g2d

+iVYU3UTDWxAFtzq6cfPRUdDxGHgAjmVmLvSGEaxqYNOftxwC3zk1E03w4/KvXg+y

+Vt+1qPZ7Hj1OcGMYA+1/Qy6+GMneYnUkmO9zHoNzSDG5hfNkQ+3SyMx53FfTO8oA

+Lrpl4gFG5wKBgQCtCGXIKDlf4rU13RgM5HwKTuqzuSps1FHb8FxTa+4tc9TDWBhG

+mSSGorHlXxITwdWB2WughkRqSZQWaR82dCf6EgPitq6rj61cldaepzw52nQ3Vagv

+ecQmp+8L8RDk5Afs0JEKDSfYFMR3wfVM0mNhKgTK/3EYrU6PJx/FvpWwCQKBgDrk

+ICXdV1t+ehG+FN9dSej1tA8ZMy/vmpLxIl/9/aw+IbUJ+U2VpvMBhtjLXxf3aaAa

+LnFash8KE+/qmh6EsnmRwM/VNDkL3H7DUzdSe2SLptRhO8qwtTZmumsZVO1X/olo

++cdNhwpTiW67tDd2zwbi2bhSR0WNs3AdMrZ+SQ4dAoGBANkjgWwzVN8KGOe9GdEo

+opcwVzC1l9xkUcB6ykIG+DKw5p1ChGLA+2uufdpNWfPqXixCt5X3qIOy1q/VIdlj

+EHNurGEld93H86V0ieLMRPg5llXWfKND2W8vezZSCGqFcSo+bAVi0YzA6XbLu+TV

+GyyCD8Jk/efmdN0DKjERIKDH

+-----END PRIVATE KEY-----

+`

+

+	untrustedCAKeyPEM = `

+-----BEGIN PRIVATE KEY-----

+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCca1lasr3QaiEt

+hhcUPtqBkfDjTUAmQCPIE7Hr97gO1s9yuwB2jTxy1fAEGulynXkvKSnQIiES4OqC

+++AHAMAGTEeoaSHuGr/xsQeWV0zIvGb9l4l8DDw2zlulT63tHj93WQCY63cO/z5a

+12k2S9jTALsOSevI4ISlk/rPsUjYXqlFWWViI/Cz412RGvRO40TiEW/IrXnwmxFg

+UUweOB/CR8+qL0TrkSVt5MAG1WFPgmenQZ3HDQn5OOAspy1pjsUDpeCIgcd3dd5h

+xNVJsEXgCoH1lLNLaU4KfySZGOu7rQnoJUaG1GQxwW2hq19xhPJafXsK7hSoegXn

+O5Cji1p9AgMBAAECggEAGrReGTS2YNBZsTi5FHkFm4TjvB66cr1VDonEQL22U/w7

+BwKjmdnTheR9+WlxzSJS5+kObS0CegNhrjKbxP5NClY4DqnCQ/EXr4byfWmSn5vA

+to9KRt4c4pt4/IBduIOHQNQ2XKUomqwbhG1N1ln9Hsr7ZH1czpr8MnuQ4KgLAHtm

+Zd3xibhULlE/5S9uYpvBaqwZx3RJk3CMcseio4aFtpx/yi+UPyDWekS0ch2Fz5MF

+G8wnYqXHt2NZhRWdBrQ7n7ZCQT2zNGvKkekAd2jIl5H+mxIRFSlArgdx+TeDJrxZ

+J+mmYooOY7gE8GL+7pSpCb2yNHcA/CkDQspM14QqOQKBgQDQtnanCgAbxW5pDgT4

+fdi4EVWPt9nF18mMXwDZuSqrwPj1kKx9CqhVXbRT4kMaYgMuhn1coC4m+j95kaG+

+dTLtrfnl8mTr/4HBImaacisn1i9gYKfYwoKscBrK9B5n/zaH/HnCKehbTaeinnID

+vvbd7cI2f/YFPVgiq2W6yxDGyQKBgQC/29Frc5rZyNCellT/583AU240PY5b3yhd

+FsYdkCBdI5suq/shvEmwxDqKv8eJt+MRXdPiFub6Wk3wcsiR20saQSsM09sUA5dQ

+CuKZlD2w93DzsbRXinRtwwBYyGFS4C89Bz1AO6rGyi3+GDlJuTAo7XYP9HVwUVos

+rvYB6rysFQKBgQDDj2Qn6a/mVZy5pOA1cb2B4wQXsL3FqgZ4l3/1gZGg8ySS+2cT

+lsvZiP5xZt1XOCUhD/UguBnmfa7CGxnBmpEIsW4o7nFvy63pqHEZIAadwgwMMySy

+brcAGd6Q8iIXccPHsWLo8ll8S4vaTLoqFmG72o6SgF2l1S/i9FRSrPjgOQKBgG+O

+xo9/MewuezerXBNM2vNYz7yqiktbT+II6vunoVnm6UXTFHxCOmsBPrUM3F50wSCI

++Tn+bSHnPmhwpbVB2MKUYA7eZQWXLPWKzsXUT6bFyjS5AI7iX96uw1XcddK1rmID

+ApeF2kAqsWGM/kqi1qEFql+OmnbLpu5ScZMdxcUdAoGBAIkyMaBNiWyImkyl/bxv

+pnhP/eZf435ZQoXRRKR9ONejT9moJoWfNKqwZKgnnHuYA7XmG45N3vSLZgocggDm

+1XWL2XxS0Qs90JOgM3lY3VUfxRwCCWAiYy4a1O8OxaP8dURgy4uqrtH08xRunsIL

+9G6RWORMdSgKMYvi9bJYoHQZ

+-----END PRIVATE KEY-----

+`

+)
\ No newline at end of file
diff --git a/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/valid_ca.pem b/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/valid_ca.pem
index d70b4d6..d894941 100644
--- a/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/valid_ca.pem
+++ b/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/valid_ca.pem
@@ -1,20 +1,20 @@
 -----BEGIN CERTIFICATE-----
-MIIC3jCCAcagAwIBAgIDDGqSMA0GCSqGSIb3DQEBCwUAMCExHzAdBgNVBAMTFkFu
-ZHJvaWQgQ1RTIHRydXN0ZWQgQ0EwKhgTMjAxNTAxMDEwMDAwMDArMDAwMBgTMjAy
-NTAxMDEwMDAwMDArMDAwMDAhMR8wHQYDVQQDExZBbmRyb2lkIENUUyB0cnVzdGVk
-IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyu1Eg5wKieyro7qL
-XIx+qaqbE8mPqRL81i0mtQBjnq3gsXV3f7okUssg/8QRzYiYGP/shly70MOqKURP
-/gl7OtUj8SXLwQFzZ6B9hnWTXGRnBY4JFcgSy6LJMwo+ZPgwVtbjf1DAWNOLRhqY
-J9Uxr0PX5KZ5AafFVh0Y+JVmaFfGPxJ/UBi83GQ7ToKBvHTFN5SQjg5QtlW5DaEN
-cbO7lzB/OuKnIlLP6WlEVwCS+cToZAzaTafOVZaUarWHit0kq+8xyxl+koxgLcCK
-lkDYpZCezY3UAxGheRnmSuah6LK9BRx2cSMOKkeN3sAoVB6ARi7F30MYj7RH2XRz
-LumXLQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IB
-AQBJi4SF/k1KVUZrweqUZ/QJ5HBDxWo4kE4iNw415qw2fAfNsKJknH1bcqgHa7Ea
-nokT8a1KOQlicInptNRbkwBd3Xakt9k9aCWRqyqBzZZersakZ1cB3SNxameelGzl
-a3dvGqVreE3LWhiQR7A3g84hS1kH5oNiY6GVZRk8BsmUUsvKaS6FJSMb9bAGSijQ
-EZwsBk+HoSuLSVxUDtLZgbs1NYVK8jCG6GPv8cWis03pK3VKqjTi3DDs7mHioViG
-G/TUZPq5ok8BemctNPLZAMLVlWPVB389iTOmgJWdR2Lu7LKh4B952+SeHMo3huUR
-Hn/e+Sq5FmJfDVvFG6U3PEDd
+MIIC8TCCAdmgAwIBAgIBADANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDExZBbmRy
+b2lkIENUUyB0cnVzdGVkIENBMCAXDTE1MDEwMTAwMDAwMFoYDzMwMDAwMTAxMDAw
+MDAwWjAhMR8wHQYDVQQDExZBbmRyb2lkIENUUyB0cnVzdGVkIENBMIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyu1Eg5wKieyro7qLXIx+qaqbE8mPqRL8
+1i0mtQBjnq3gsXV3f7okUssg/8QRzYiYGP/shly70MOqKURP/gl7OtUj8SXLwQFz
+Z6B9hnWTXGRnBY4JFcgSy6LJMwo+ZPgwVtbjf1DAWNOLRhqYJ9Uxr0PX5KZ5AafF
+Vh0Y+JVmaFfGPxJ/UBi83GQ7ToKBvHTFN5SQjg5QtlW5DaENcbO7lzB/OuKnIlLP
+6WlEVwCS+cToZAzaTafOVZaUarWHit0kq+8xyxl+koxgLcCKlkDYpZCezY3UAxGh
+eRnmSuah6LK9BRx2cSMOKkeN3sAoVB6ARi7F30MYj7RH2XRzLumXLQIDAQABozIw
+MDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQQPJNSlR06lnK1Omt7gm+rjW1d
+jDANBgkqhkiG9w0BAQsFAAOCAQEAR7FWtOyGzPp8FsDCqNcPKpUO6hhIrPsbbHJV
+jYo7a5tEwKTqebjJ1+ffPWnS3hfQzb9RVSXeJlDW3kCGe/FWHC7m0lvRMsYBshcP
+WTNhY5WHkxyW/U3pxmgkCaV5eglNQrWyQBkhBLrtK3br7GoLAgG9seHmrYOBlYob
+vyWD1byoLyK44bjNB4kZtx4EbjxUNGWSNaUloeZ0LDrgnLXdRJ5mD4kxDMwd1rEC
+ArxEM7aAvQoJ3kjCTN24RqpwcbLL3B/qAsN7H5rW1WQxeaWNBpksOIXSQm4J+F5U
+OTcqCJMPoPbJRbAbERz/8vI2+rEAcYQqSkYEHl2Vt9l7y1S/NA==
 -----END CERTIFICATE-----
 -----BEGIN PRIVATE KEY-----
 MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDK7USDnAqJ7Kuj
diff --git a/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/valid_chain.pem b/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/valid_chain.pem
index a55c643..fe9cc25 100644
--- a/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/valid_chain.pem
+++ b/tests/tests/networksecurityconfig/networksecurityconfig-downloadmanager/res/raw/valid_chain.pem
@@ -1,36 +1,36 @@
 -----BEGIN CERTIFICATE-----
-MIIC2zCCAcOgAwIBAgIJAKee5CFociA2MA0GCSqGSIb3DQEBCwUAMCExHzAdBgNV
-BAMTFkFuZHJvaWQgQ1RTIHRydXN0ZWQgQ0EwHhcNMTgwNTE3MTkyODQ2WhcNMzQx
-MDIwMTkyODQ2WjAUMRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCh/iHZ86A3hmhNUlp+C/HYX3efQCVWDlsc/PJ7SueY
-jwsTxnTXai+TF9Dp/StIgX/nvN/ZkTCHY2NQbRKOS5/TAOkUy0MLejj2lhfx0EB5
-JqyzjkoTWXHq3mvqyRz3zezXnUoOlH29m3FZ+w6ygcFIoACQ1lZ9NiAesBzvbJRf
-jbAHKcnnMbb2P6e7dJYLgHtI9SIlX1/sRnTRVO1o5hkUM5OSmrxYtwcA3Nua1z+y
-Sf+jOuk58yOeIkSPdfD9AG4RPtyv+QW3vKjxbXZRDgoT+p6VFtTYZs/fSqJZHFv7
-gl1ARwLJtu0D3Vt8GF+ocGuXkvFRk1roRDnXT3Qbxhj3AgMBAAGjIzAhMAkGA1Ud
-EwQCMAAwFAYDVR0RBA0wC4IJbG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4IBAQCD
-lghY2E4wRutn52RxI9rwd/Ljp13RLLVIKIgyqHTNc4HxC8rlV02rSAcVo1MasDom
-rye3xr/7CVfWF1zu8AFgLZTd83TOf8z62zk4FhiOCmSMKTzCRiab221X4nyHvegI
-EbtukUYmSaPMvSVOFQQLM7+0yCO9GOC3n3YxOaWUsdDPb8oMn86Y0lOHF1MhzFAS
-uh7oF31AEktgDI8J47HQbIQ8dJVCS4gkB42vyX5gY/xD/dTi2oWBMYdcyiDl4Fxi
-mRCuXvj6vkDxLUKoroav5oYUyMB3oZVZe/74YQ+4Yggb+0tOhQhiz26hwcnF0DMI
-m5NKweDumNzCtPfXfNgJ
+MIIC+TCCAeGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDExZBbmRy
+b2lkIENUUyB0cnVzdGVkIENBMCAXDTE1MDEwMTAwMDAwMFoYDzMwMDAwMTAxMDAw
+MDAwWjAUMRIwEAYDVQQDEwlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQCh/iHZ86A3hmhNUlp+C/HYX3efQCVWDlsc/PJ7SueYjwsTxnTX
+ai+TF9Dp/StIgX/nvN/ZkTCHY2NQbRKOS5/TAOkUy0MLejj2lhfx0EB5JqyzjkoT
+WXHq3mvqyRz3zezXnUoOlH29m3FZ+w6ygcFIoACQ1lZ9NiAesBzvbJRfjbAHKcnn
+Mbb2P6e7dJYLgHtI9SIlX1/sRnTRVO1o5hkUM5OSmrxYtwcA3Nua1z+ySf+jOuk5
+8yOeIkSPdfD9AG4RPtyv+QW3vKjxbXZRDgoT+p6VFtTYZs/fSqJZHFv7gl1ARwLJ
+tu0D3Vt8GF+ocGuXkvFRk1roRDnXT3Qbxhj3AgMBAAGjRzBFMAwGA1UdEwEB/wQC
+MAAwHwYDVR0jBBgwFoAUEDyTUpUdOpZytTpre4Jvq41tXYwwFAYDVR0RBA0wC4IJ
+bG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4IBAQB3EE58O/0qE13Gx+Y91/+BOJRs
+ETGpRiaU3xA1uCqRWcvNXpJ+/U6tK3apHv/XEXjUnnfeqWzGIJ9sx4jFZbSoL+kD
+vJhv7q5O+0NAkuNwCtfgXsWfivqn9+1jJbjGpMMha4wO95JKn4U8YBheDiFJ1dtU
+8A/24YWLyOV0CYp+jUhaXm1kYtErE2xKqKUqRFjc1F5IbFhnKkgJTltSSQrhEVNj
+cSrphlXdTvWWHS4+WcXcLXWvtTFjsEIap3OD5NKngThSC3aa9TmxDeBvjy+DfI0y
+uRM4IYDlpusmB17odbHfq+ReCqhZpP+f2QTuomk7bFXUAw5e0crnVaxtAGg0
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
-MIIC3jCCAcagAwIBAgIDDGqSMA0GCSqGSIb3DQEBCwUAMCExHzAdBgNVBAMTFkFu
-ZHJvaWQgQ1RTIHRydXN0ZWQgQ0EwKhgTMjAxNTAxMDEwMDAwMDArMDAwMBgTMjAy
-NTAxMDEwMDAwMDArMDAwMDAhMR8wHQYDVQQDExZBbmRyb2lkIENUUyB0cnVzdGVk
-IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyu1Eg5wKieyro7qL
-XIx+qaqbE8mPqRL81i0mtQBjnq3gsXV3f7okUssg/8QRzYiYGP/shly70MOqKURP
-/gl7OtUj8SXLwQFzZ6B9hnWTXGRnBY4JFcgSy6LJMwo+ZPgwVtbjf1DAWNOLRhqY
-J9Uxr0PX5KZ5AafFVh0Y+JVmaFfGPxJ/UBi83GQ7ToKBvHTFN5SQjg5QtlW5DaEN
-cbO7lzB/OuKnIlLP6WlEVwCS+cToZAzaTafOVZaUarWHit0kq+8xyxl+koxgLcCK
-lkDYpZCezY3UAxGheRnmSuah6LK9BRx2cSMOKkeN3sAoVB6ARi7F30MYj7RH2XRz
-LumXLQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IB
-AQBJi4SF/k1KVUZrweqUZ/QJ5HBDxWo4kE4iNw415qw2fAfNsKJknH1bcqgHa7Ea
-nokT8a1KOQlicInptNRbkwBd3Xakt9k9aCWRqyqBzZZersakZ1cB3SNxameelGzl
-a3dvGqVreE3LWhiQR7A3g84hS1kH5oNiY6GVZRk8BsmUUsvKaS6FJSMb9bAGSijQ
-EZwsBk+HoSuLSVxUDtLZgbs1NYVK8jCG6GPv8cWis03pK3VKqjTi3DDs7mHioViG
-G/TUZPq5ok8BemctNPLZAMLVlWPVB389iTOmgJWdR2Lu7LKh4B952+SeHMo3huUR
-Hn/e+Sq5FmJfDVvFG6U3PEDd
+MIIC8TCCAdmgAwIBAgIBADANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDExZBbmRy
+b2lkIENUUyB0cnVzdGVkIENBMCAXDTE1MDEwMTAwMDAwMFoYDzMwMDAwMTAxMDAw
+MDAwWjAhMR8wHQYDVQQDExZBbmRyb2lkIENUUyB0cnVzdGVkIENBMIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyu1Eg5wKieyro7qLXIx+qaqbE8mPqRL8
+1i0mtQBjnq3gsXV3f7okUssg/8QRzYiYGP/shly70MOqKURP/gl7OtUj8SXLwQFz
+Z6B9hnWTXGRnBY4JFcgSy6LJMwo+ZPgwVtbjf1DAWNOLRhqYJ9Uxr0PX5KZ5AafF
+Vh0Y+JVmaFfGPxJ/UBi83GQ7ToKBvHTFN5SQjg5QtlW5DaENcbO7lzB/OuKnIlLP
+6WlEVwCS+cToZAzaTafOVZaUarWHit0kq+8xyxl+koxgLcCKlkDYpZCezY3UAxGh
+eRnmSuah6LK9BRx2cSMOKkeN3sAoVB6ARi7F30MYj7RH2XRzLumXLQIDAQABozIw
+MDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQQPJNSlR06lnK1Omt7gm+rjW1d
+jDANBgkqhkiG9w0BAQsFAAOCAQEAR7FWtOyGzPp8FsDCqNcPKpUO6hhIrPsbbHJV
+jYo7a5tEwKTqebjJ1+ffPWnS3hfQzb9RVSXeJlDW3kCGe/FWHC7m0lvRMsYBshcP
+WTNhY5WHkxyW/U3pxmgkCaV5eglNQrWyQBkhBLrtK3br7GoLAgG9seHmrYOBlYob
+vyWD1byoLyK44bjNB4kZtx4EbjxUNGWSNaUloeZ0LDrgnLXdRJ5mD4kxDMwd1rEC
+ArxEM7aAvQoJ3kjCTN24RqpwcbLL3B/qAsN7H5rW1WQxeaWNBpksOIXSQm4J+F5U
+OTcqCJMPoPbJRbAbERz/8vI2+rEAcYQqSkYEHl2Vt9l7y1S/NA==
 -----END CERTIFICATE-----
diff --git a/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/der_multiple.der b/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/der_multiple.der
index 784263f..6d68c18 100644
--- a/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/der_multiple.der
+++ b/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/der_multiple.der
Binary files differ
diff --git a/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/der_single.der b/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/der_single.der
index 64a1359..8694ac0 100644
--- a/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/der_single.der
+++ b/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/der_single.der
Binary files differ
diff --git a/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/pem_multiple.pem b/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/pem_multiple.pem
index f342f3a..3d8216d 100644
--- a/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/pem_multiple.pem
+++ b/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/pem_multiple.pem
@@ -1,34 +1,36 @@
 -----BEGIN CERTIFICATE-----
-MIICvDCCAaSgAwIBAgIDBwztMA0GCSqGSIb3DQEBCwUAMBAxDjAMBgNVBAMUBVBF
-TV8xMCoYEzIwMTUwMTAxMDAwMDAwKzAwMDAYEzIwMjAwMTAxMDAwMDAwKzAwMDAw
-EDEOMAwGA1UEAxQFUEVNXzEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCq2QLoIjhJW51CpfQcoiXmtCB6GltsM5HEYqA52AQZXOeO4HXzFwizycpwA1Sh
-EWkKnbvONQ7HO/rxb1gWcU4IWOPMY54BI2hOMiOmknTeobLW38WnCJzeD0mOxx7Z
-9dzRFoAcQdEPvWlB7MD5hK0+sS/CAZcx5Qc/DBE5RrWliKXXsYK5lAdtQiXB4L6H
-126SkH1ZmALer8wAMRhhUSeYoWwR4z7w5kRRntO9lAAA8lfS61K0ojSz170cyH41
-/jvkMFXP1MV8ljxVU5CgNdnRmAgogz834btJ9dbZGckt1Trxp0k7Y9CdRBrykaw/
-n2TQymCdeTGoxV0vWa++InVjAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQELBQADggEBAJWI/rlbtVDsVI2w9Ylf+Agzx7n5xFytrz64d8YcqPlm
-MI/8/PlzA32MqWohe7D/DXbsx8lDctii8sI6L9zjYKxkXIhs6bBnXlbTjHgOhloq
-v3yL1VnJSNfXFjL46jvps8pPbTobjzFNCazS2xZTlIs1MQfpF8nG63+FoTcRGmK8
-q500bS2gQ2lEwh3FusrKAyRGiBJtfnw0pyhOsNpO63yi4HGMMtVpC/6rIkpAor/g
-vIaOWsCYa6yllaeSDGbWyu5GBkZJa9pewCjUQLSwktHuhI9RsUMe9CcBwto3y37I
-151kgX4xNlJYDoomE6ORGgEWqS5fB39GY2f7W9URfXE=
+MIIC0DCCAbigAwIBAgIELVMuzzANBgkqhkiG9w0BAQsFADAQMQ4wDAYDVQQDDAVQ
+RU1fMTAeFw0xNTAxMDEwMDAwMDBaFw0yMDAxMDEwMDAwMDBaMBAxDjAMBgNVBAMM
+BVBFTV8xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuR70CIgykOVY
+UmpG9f+kjfrPBf1Ald9J3XhFyABVMtfrkH9Vs9HjoG7GL/pSbTR9lBgHKd8MtHUu
+sZDuj3xm8V74AdO+5R8HUK2ZYVraBpDCUkDltetJQDnJR7Bdz406jT5ROSSyqZco
+rsyprEth51KGZGqSVwgdkkGTEygsDtgLWspbt8Rv9cgayx/2nCUSSaWTJmUiWwJE
+L4xwr+cr/SRntVXMtAH6yCNOXhvxhGLISkyGNvVlvlj+yJ09kZHme/+YSDkJQ1Qk
+1cRjOsonyyDACMkjM7Jl3g6/K24EI7+JvZcVs2TgWK/WJcFKpd0A7kV/zHPLRz5u
+aGUxIydXqwIDAQABozIwMDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQbatWA
+XVmEk8y+i6E53sf2AWvHFDANBgkqhkiG9w0BAQsFAAOCAQEAKSaPw78p2m8ETFCn
+B7Rd42mI+kUc5bCOEXChIUVUau9ixyYrIfXu1HK6w06lDmyiQ8AKMZSbGzhmlyf5
+mYt8Ri0iQ9ROvRShaT7z0gH7rooGP0SJ7K5EOaLo5qtadxO2JUedMCcIBPWlSk3u
+wpDmmuJIvvq7MOdxohrIzrWdZxvj6zD+ioxvSjyeKqcf/5vw6yu5tM1LUrMGwRJ2
+gZIm0nMWTDWM0qvNo2IHEXH+vE+qr5aLxpnfcpwQsVFKUhGVA06LmhCa3KWtf7qo
+bX2E+bECkZ0l/rfcRNuJNf8pJGlxKhOkPBKlcwmqIqbzbrdcvHTDqk9HdY0x2Yea
+W6GOrw==
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
-MIICvDCCAaSgAwIBAgIDC+NwMA0GCSqGSIb3DQEBCwUAMBAxDjAMBgNVBAMUBVBF
-TV8yMCoYEzIwMTUwMTAxMDAwMDAwKzAwMDAYEzIwMjAwMTAxMDAwMDAwKzAwMDAw
-EDEOMAwGA1UEAxQFUEVNXzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCnMte2oRePmLQB8h4+cBoI2ZAC5KWC0O0nPdEXO383IDoPB/V1dRXy/ZXFw2JU
-acPq+fT+tXw8aiiEH7Jq4wPvI1E1YgvcDnl39xmOvRgoHk2/V9SMJ2L1w2h9aK/4
-490ECRNB1MyydSwG9uE9zoYAHoOjMUfjvjPIjURrJoRx0EiVc+6E6qB92DvOloIW
-PZq60Nql19H8Jl6ISj/br8wKiNN0nkZ3M2/Ditbr/bgucEqHAy9p0J0gPQ4mmlRk
-QTk3gRsHZw2zAn4wyaWKgbB+sY1z77IZ0HeS4FbI2h/qfx4IfIEBOT8IVkJoHqN+
-j6+xI8fWOHRACLevj6Cf+WeZAgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQELBQADggEBAIofR+BsrnvRIr+vkABRKJ8shds4mfBCv3Uv0oyLPgoY
-M1X79NuPuT4TmlhX38yk242FTMXwUn1FsTQjA9NNc7BD6aJHZ3/ivdbAViMVs+ND
-1hjlSuzg9N2rDV/+QR2axUBgLNGN4g07IjZpkky4+LB/Havx8e1TQ52NGze1iCjk
-d/+1CjfLCBrIRM2KfQQtqL6Ee6Dy5OIlzk7N1SQ18ON1eVuc/JK7d4bh/vJgUwsq
-wWUOEBkLx1Bu4Na6u+u4pwuKz6XhHN1Sn4TUB7J5p1NS0KEfcuK+qBe0RJbAXhYE
-OF7PYii754/zZBTZYspK2I9WRk9jaXFdKhcA7ptkBfk=
+MIIC0TCCAbmgAwIBAgIFAPYnNg0wDQYJKoZIhvcNAQELBQAwEDEOMAwGA1UEAwwF
+UEVNXzEwHhcNMTUwMTAxMDAwMDAwWhcNMjAwMTAxMDAwMDAwWjAQMQ4wDAYDVQQD
+DAVQRU1fMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALA/CPFWz8VR
+A0Jt+tJKiumipOe3oDqkRwS8AjAHkFoNRA8bsnwQ4WL3hJEYOjx/iMf3LGB5/ky4
+nM+I+SLxTNZGwy3WR2M0EcaYLVIY9y20Kjtx5jqVEPS4SCoDglpPx2fX0UciWX52
+r6uV/WVcVT2BEIHxoEelTODTzxBrG7W8EHiAa8vyldkZ6Jw8gMoOgu41UXdCC+BY
+Jem8jRQXzL+bA5IT28+FtQAqp4llZ4fsddfxa5bVOeVtd7/H9h17MEBH9KWDl1Vp
+vBrpaebP6bVAig6arUM6l2THpkbkD2+RG/y3JMBJCo27PLGfssHn3fLhbXRdkawr
+cQkB2FJXu8MCAwEAAaMyMDAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUNY9/
+eg1VHlJ5JMI2oMMXLq9/nX0wDQYJKoZIhvcNAQELBQADggEBAKVrsyYqb7KBUUp6
+h6Fbv3OA8Z9fsViVq2W8ElWbXSrVuO0Ckv8kuPoAXuKRIXzgSn1ESV0Xi95ETaah
+UymyBbmtJLPAhkt28CJD5btJRvQo8qFSYJ2ZtcBtBHLUY3LcfBQhZc7dVDurqpyD
+tBLW/bxETWnhCBCPB0aJ4I1W8OKPHpKRO/8op3m9sy0foVPa/dbzhVSTvg7kb0d/
+m1SkBPrB3U1Y55TVPNcKI3hSXucblZoN4+QaIsN3NoObR78X6Aivce/djtVbE3wD
+nE7ABWfuuPf0ZVNUTu+Pqdq9yM9CQ/6DymXA460YtzYrq8OIUBHwac1+cRwl0wOy
+XvssHrI=
 -----END CERTIFICATE-----
diff --git a/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/pem_single.pem b/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/pem_single.pem
index b0ebd7b..f70c4d5 100644
--- a/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/pem_single.pem
+++ b/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/res/raw/pem_single.pem
@@ -1,17 +1,18 @@
 -----BEGIN CERTIFICATE-----
-MIICxjCCAa6gAwIBAgIDD0EmMA0GCSqGSIb3DQEBCwUAMBUxEzARBgNVBAMUClBF
-TV9zaW5nbGUwKhgTMjAxNTAxMDEwMDAwMDArMDAwMBgTMjAyMDAxMDEwMDAwMDAr
-MDAwMDAVMRMwEQYDVQQDFApQRU1fc2luZ2xlMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAvvfUKgXYIKc2C3kqwvhtHatNjWU7sTSmAx5Fh3Ok4H41M6XF
-4sTAECkU3UZGIM2kwrb+IJcJBlwg0SG/9s0e5bk1qvvu2iUZjR3y/oOcj/VGNtOT
-DC3TqCkAe4pd6FbydeMIo4H8t1s1Zg0BoGa15o3YvcBS7QOusAMb+h2rj2lVH5+F
-bet+KydK02FUACXYUIL+Em0QcF9ylGLVnfuieGaEtOEwxUhWui1DuDHcJ4V+nG1y
-9jpL+X2EvN7/oXBGV03kEo+i/QnwwI2x8r7yh8ZfkHgUlz5WSWNLQZD+IXOw8DuY
-eAQSvQtqPgYFVi4Zq4dVnWmmmyiKwoLn8eYkZQIDAQABoxMwETAPBgNVHRMBAf8E
-BTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQALfm/CaKleAeAccKEY9wZ796ycfwJn
-H5WdX2LEbosKdr21pbjvna/IPxz6QueX9YAWGWAWNowZDlLRStZR7EAP23cEzWbW
-qQtTuQ+wu1v2M4Zuzw2UAi89ooaXK0VskeMK5AnqY4trAWKMeetOANSdj+J8WIdg
-30jmXuLKX9PLfpq6iNLMcGM3j8Q5cCZmnf6q3KYP/7D5iMeMb/rVGNapfTOyGNFe
-PPhOMFU20BZLpIKpdEAmbWhtX5gzGXADObU6VpBIlG7B2BiUUuQjz3FDKljK7L1r
-bsu+L7mWzAlW4yDt+VwgYmYf1m/RxrCxtLAqQYfJPekQeh3wycLfN9g3
+MIIC2jCCAcKgAwIBAgIEeoeKbzANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDApQ
+RU1fc2luZ2xlMB4XDTE1MDEwMTAwMDAwMFoXDTIwMDEwMTAwMDAwMFowFTETMBEG
+A1UEAwwKUEVNX3NpbmdsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AOtHEG/MPdgUjRmCUONB6jqypVQmk/MzpUTtrxtrJo8G+dQ6gJWuNHcFXzmGWvLF
+I4A725IMrKzonLx8PYOZ4jGFCTC+iFkByVMeGCVsCUWz3XCTm9+DMpCSPHT0y0iP
+ssJah5tCs0vcWVxjW9WUOYfXbLLYTX9qnpIhyTigzRwGH88yCjXxnTY6aWvNms+0
++iy6Wf/p/8m04LCqhvko7LKU0pV+OngLgvhL0rhCfHBHEwRdRrWObskTRUUwj5ly
+tTUllbEhEAZvXLVcMMiyTluA2VbPwBhotC9w4MxxZYfjcvcZu8O5Sb2ngg0LnGhr
++YwiHOvlzuTW3VL0Yo7bJOUCAwEAAaMyMDAwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
+HQ4EFgQUW5+w6QgBPZAjrLN8zk+YnQiDudcwDQYJKoZIhvcNAQELBQADggEBAOek
+b5cObC9TV1yPgeVrT3dYUpDAMh7UGTsRI2ilBHXGcq144ER/vp0epeYcj7V7Y1kF
+Bz2RJo7XKw6U05yhyNfuTwsr0zwV++zpa8tzwV3hrItzgTcIb/a8pgfTVolTQ/e0
+EXfs+nzq76wlPr/L31cdyp4pOKM8OC8VOVr5ENvNWkdZEwOGeViCyDOnJbvEPCC8
+4Pn7H2Y+ipAdm6EPe6LaIXWj7nTcEL/f5wXZv+Y+TLF7mmFhONPvOHqN6By9FjN3
+rBWr211fXHKnI6KUMtpN4oeiFdD4OXKrV9BXKwoJaMtfELoGmu4JgHFQeJ8/qLf9
+mmmhxCkKcwRoERjp0gs=
 -----END CERTIFICATE-----
diff --git a/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/src/android/security/net/config/cts/ResourceSourceTest.java b/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/src/android/security/net/config/cts/ResourceSourceTest.java
index 75d3766..82591a8 100644
--- a/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/src/android/security/net/config/cts/ResourceSourceTest.java
+++ b/tests/tests/networksecurityconfig/networksecurityconfig-resourcesrc/src/android/security/net/config/cts/ResourceSourceTest.java
@@ -17,8 +17,8 @@
 package android.security.net.config.cts;
 
 import android.security.net.config.cts.CtsNetSecConfigResourcesSrcTestCases.R;
-
 import android.test.MoreAsserts;
+
 import java.io.InputStream;
 import java.security.KeyStore;
 import java.security.cert.Certificate;
@@ -26,6 +26,7 @@
 import java.security.cert.X509Certificate;
 import java.util.HashSet;
 import java.util.Set;
+
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.TrustManagerFactory;
 import javax.net.ssl.X509TrustManager;
@@ -35,12 +36,14 @@
     public void testSingleDerPresent() throws Exception {
         Set<X509Certificate> trusted = getTrustedCertificates();
         Set<X509Certificate> singleDer = loadCertificates(R.raw.der_single);
+        assertEquals(1, singleDer.size());
         assertContainsAll(trusted, singleDer);
     }
 
     public void testSinglePemPresent() throws Exception {
         Set<X509Certificate> trusted = getTrustedCertificates();
         Set<X509Certificate> singlePem = loadCertificates(R.raw.pem_single);
+        assertEquals(1, singlePem.size());
         assertContainsAll(trusted, singlePem);
     }
 
diff --git a/tests/tests/networksecurityconfig/src/android/security/net/config/cts/TestUtils.java b/tests/tests/networksecurityconfig/src/android/security/net/config/cts/TestUtils.java
index d114ab5..b527e77 100644
--- a/tests/tests/networksecurityconfig/src/android/security/net/config/cts/TestUtils.java
+++ b/tests/tests/networksecurityconfig/src/android/security/net/config/cts/TestUtils.java
@@ -18,28 +18,29 @@
 
 import android.net.http.AndroidHttpClient;
 
-import java.io.InputStream;
+import junit.framework.Assert;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.HttpURLConnection;
-import java.net.Socket;
 import java.net.URL;
 import java.security.KeyStore;
 import java.security.cert.Certificate;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
-import java.util.List;
 import java.util.ArrayList;
+import java.util.List;
+
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLHandshakeException;
+import javax.net.ssl.SSLSocket;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.TrustManagerFactory;
 import javax.net.ssl.X509TrustManager;
 
-import junit.framework.Assert;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-
 public final class TestUtils extends Assert {
 
     private TestUtils() {
@@ -91,8 +92,9 @@
     private static void assertSslSocketFails(String host, int port)
             throws Exception {
         try {
-            Socket s = SSLContext.getDefault().getSocketFactory().createSocket(host, port);
-            s.getInputStream();
+            SSLSocket s =
+                    (SSLSocket) SSLContext.getDefault().getSocketFactory().createSocket(host, port);
+            s.startHandshake();
             fail("Connection to " + host + ":" + port + " succeeded");
         } catch (SSLHandshakeException expected) {
         }
@@ -100,8 +102,9 @@
 
     private static void assertSslSocketSucceeds(String host, int port)
             throws Exception {
-        Socket s = SSLContext.getDefault().getSocketFactory().createSocket(host, port);
-        s.getInputStream();
+        SSLSocket s =
+                (SSLSocket) SSLContext.getDefault().getSocketFactory().createSocket(host, port);
+        s.startHandshake();
     }
 
     private static void assertUrlConnectionFails(String host, int port, boolean https)
diff --git a/tests/tests/permission3/src/android/permission3/cts/BaseUsePermissionTest.kt b/tests/tests/permission3/src/android/permission3/cts/BaseUsePermissionTest.kt
old mode 100755
new mode 100644
index 0e12285..4b33cc4
--- a/tests/tests/permission3/src/android/permission3/cts/BaseUsePermissionTest.kt
+++ b/tests/tests/permission3/src/android/permission3/cts/BaseUsePermissionTest.kt
@@ -263,18 +263,27 @@
     ) {
         val result = requestAppPermissions(*permissions, block = block)
         assertEquals(Activity.RESULT_OK, result.resultCode)
+
+        val responseSize: Int =
+            result.resultData!!.getStringArrayExtra("$APP_PACKAGE_NAME.PERMISSIONS")!!.size
         assertEquals(
-            result.resultData!!.getStringArrayExtra("$APP_PACKAGE_NAME.PERMISSIONS")!!.size,
+            responseSize,
             result.resultData!!.getIntArrayExtra("$APP_PACKAGE_NAME.GRANT_RESULTS")!!.size
         )
 
+        // Note that the behavior around requesting `null` permissions changed in the platform
+        // in Android U. In Android S, null permissions are included in the result set.
+        assertTrue(permissions.size >= responseSize)
         assertEquals(
-            permissionAndExpectedGrantResults.toList(),
+            permissionAndExpectedGrantResults
+                .filter { it.first != null }
+                .toList(),
             result.resultData!!.getStringArrayExtra("$APP_PACKAGE_NAME.PERMISSIONS")!!
                 .zip(
                     result.resultData!!.getIntArrayExtra("$APP_PACKAGE_NAME.GRANT_RESULTS")!!
                         .map { it == PackageManager.PERMISSION_GRANTED }
                 )
+                .filter { it.first != null }
         )
         permissionAndExpectedGrantResults.forEach {
             it.first?.let { permission ->
diff --git a/tests/tests/security/src/android/security/cts/CertificateTest.java b/tests/tests/security/src/android/security/cts/CertificateTest.java
index 7b1ed9d..2e82260 100644
--- a/tests/tests/security/src/android/security/cts/CertificateTest.java
+++ b/tests/tests/security/src/android/security/cts/CertificateTest.java
@@ -41,11 +41,21 @@
     private static final String DIR_OF_CACERTS_FOR_WFA =
             "/apex/com.android.wifi/etc/security/cacerts_wfa";
 
+    // Fix for b/289965967 due to backport issues. These certs were deleted but may still be on some
+    // devices
+    private Set<String> mOptionalCertificates = new HashSet<String>(
+            Arrays.asList(
+            new String[] {"B8:BE:6D:CB:56:F1:55:B9:63:D4:12:CA:4E:06:34:C7:94:B2:1C:C0",
+                "FF:BD:CD:E7:82:C8:43:5E:3C:6F:26:86:5C:CA:A8:3A:45:5B:C3:0A",
+                "51:C6:E7:08:49:06:6E:F3:92:D4:5C:A0:0D:6D:A3:62:8F:C3:52:39",
+                "58:D1:DF:95:95:67:6B:63:C0:F0:5B:1C:17:4D:8B:84:0B:C8:78:BD"}));
+
     public void testNoRemovedCertificates() throws Exception {
         Set<String> expectedCertificates = new HashSet<String>(
                 Arrays.asList(CertificateData.CERTIFICATE_DATA));
         Set<String> deviceCertificates = getDeviceCertificates();
         expectedCertificates.removeAll(deviceCertificates);
+        expectedCertificates.removeAll(mOptionalCertificates);
         assertEquals("Missing CA certificates", Collections.EMPTY_SET, expectedCertificates);
     }
 
@@ -72,6 +82,7 @@
                 Arrays.asList(CertificateData.CERTIFICATE_DATA));
         Set<String> deviceCertificates = getDeviceCertificates();
         deviceCertificates.removeAll(expectedCertificates);
+        deviceCertificates.removeAll(mOptionalCertificates);
         assertEquals("Unknown CA certificates", Collections.EMPTY_SET, deviceCertificates);
     }
 
diff --git a/tests/tests/view/res/layout/using_views_layout.xml b/tests/tests/view/res/layout/using_views_layout.xml
index b35aa08..7891f50 100644
--- a/tests/tests/view/res/layout/using_views_layout.xml
+++ b/tests/tests/view/res/layout/using_views_layout.xml
@@ -27,16 +27,18 @@
 
     <EditText
         android:id="@+id/entry"
-        android:layout_width="match_parent"
+        android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:background="@android:drawable/editbox_background"
+        android:layout_alignParentLeft="true"
+        android:layout_toLeftOf="@id/ok"
         android:layout_below="@id/country"/>
 
     <Button
         android:id="@+id/cancel"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_below="@id/entry"
+        android:layout_below="@id/country"
         android:layout_alignParentRight="true"
         android:layout_marginLeft="10dip"
         android:text="@string/id_cancel"/>
@@ -45,8 +47,9 @@
         android:id="@+id/ok"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_below="@id/country"
         android:layout_toLeftOf="@id/cancel"
-        android:layout_alignTop="@id/cancel"
+        android:layout_marginLeft="10dip"
         android:text="@string/id_ok"/>
 
     <TextView
diff --git a/tests/tests/view/surfacevalidator/src/android/view/cts/surfacevalidator/SurfacePixelValidator2.java b/tests/tests/view/surfacevalidator/src/android/view/cts/surfacevalidator/SurfacePixelValidator2.java
index 8ecdbd0..4f7cc13 100644
--- a/tests/tests/view/surfacevalidator/src/android/view/cts/surfacevalidator/SurfacePixelValidator2.java
+++ b/tests/tests/view/surfacevalidator/src/android/view/cts/surfacevalidator/SurfacePixelValidator2.java
@@ -66,10 +66,10 @@
             }
             Trace.endSection();
 
-            boolean success = mPixelChecker.validatePlane(plane, mFrameNumber++, mBoundsToCheck,
-                    mWidth, mHeight);
 
             synchronized (mResultLock) {
+                boolean success = mPixelChecker.validatePlane(plane, mFrameNumber++, mBoundsToCheck,
+                        mWidth, mHeight);
                 mResultLock.notifyAll();
                 if (success) {
                     mResultSuccessFrames++;
@@ -152,8 +152,8 @@
             for (int i = 0; i < mFirstFailures.size(); i++) {
                 testResult.failures.put(mFirstFailures.keyAt(i), mFirstFailures.valueAt(i));
             }
+            mImageReader.close();
+            mWorkerThread.quitSafely();
         }
-        mImageReader.close();
-        mWorkerThread.quitSafely();
     }
 }
diff --git a/tests/tests/widget/src/android/widget/cts/NumberPickerTest.java b/tests/tests/widget/src/android/widget/cts/NumberPickerTest.java
index 6f08587..21443f1 100644
--- a/tests/tests/widget/src/android/widget/cts/NumberPickerTest.java
+++ b/tests/tests/widget/src/android/widget/cts/NumberPickerTest.java
@@ -376,7 +376,10 @@
                     numberPickerMiddleX,
                     numberPickerStartY,
                     0,
-                    mNumberPicker.getHeight()); // drag down to the bottom of the screen.
+                    mNumberPicker.getHeight(),
+                    /* dragDurationMs= */ 1000,
+                    /* moveEventCount= */ 20,
+                    /* eventInjectionListener= */ null); // drag down to the bottom of the screen.
 
             Assert.assertTrue("Expected to get to IDLE state within 5 seconds",
                     latch.await(5, TimeUnit.SECONDS));
@@ -444,7 +447,10 @@
                     numberPickerMiddleX,
                     numberPickerEndY,
                     0,
-                    -(mNumberPicker.getHeight())); // drag up to the top of the screen.
+                    -(mNumberPicker.getHeight()),
+                    /* dragDurationMs= */ 1000,
+                    /* moveEventCount= */ 20,
+                    /* eventInjectionListener= */ null); // drag up to the top of the screen.
             Assert.assertTrue("Expected to get to IDLE state within 5 seconds",
                     latch.await(5, TimeUnit.SECONDS));
         } catch (Throwable t) {
diff --git a/tests/tests/wifi/src/android/net/wifi/cts/WifiManagerTest.java b/tests/tests/wifi/src/android/net/wifi/cts/WifiManagerTest.java
index 059890b..02eca98 100644
--- a/tests/tests/wifi/src/android/net/wifi/cts/WifiManagerTest.java
+++ b/tests/tests/wifi/src/android/net/wifi/cts/WifiManagerTest.java
@@ -4545,8 +4545,8 @@
     }
 
     /**
-     * Validate that the Passpoint feature is enabled on the device.
-     */
+     * Validate that the Passpoint feature is enabled on the device.
+     */
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.S)
     public void testPasspointCapability() {
         if (!WifiFeature.isWifiSupported(getContext())) {
@@ -4554,8 +4554,17 @@
             return;
         }
         PackageManager packageManager = mContext.getPackageManager();
-        assertTrue("Passpoint must be supported",
-                packageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_PASSPOINT));
+        boolean isPasspointSupported = packageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_PASSPOINT);
+
+        int currentSdkVersion = Build.VERSION.SDK_INT;
+        if ((currentSdkVersion == Build.VERSION_CODES.S || currentSdkVersion == Build.VERSION_CODES.S_V2) && !isPasspointSupported) {
+            // If the Android version is S or S_V2, and Passpoint is not supported,
+            // we will consider the test as passed.
+            return;
+        }
+
+        // For all other cases, we use assertTrue to check the Passpoint support.
+        assertTrue("Passpoint must be supported", isPasspointSupported);
     }
 
     /**
diff --git a/tools/cts-tradefed/res/config/cts-exclude.xml b/tools/cts-tradefed/res/config/cts-exclude.xml
index fdc69ff..dfb4a1b 100644
--- a/tools/cts-tradefed/res/config/cts-exclude.xml
+++ b/tools/cts-tradefed/res/config/cts-exclude.xml
@@ -42,10 +42,4 @@
     <option name="compatibility:exclude-filter" value="CtsJvmtiRunTest913HostTestCases" />
     <option name="compatibility:exclude-filter" value="CtsJvmtiRunTest912HostTestCases" />
     <option name="compatibility:exclude-filter" value="CtsJvmtiRunTest988HostTestCases" />
-
-    <!-- Exclude VirtualMachine_ExitTest#testExit001 that is failing on a known bug in
-         apache-harmony. There is no branch for apache-harmony in these tests.
-         TODO(b/286794967): Remove this temporary exclusion when branch aosp/android12L-tests-dev
-         is created in `platform/external/apache-harmony` (b/289038766) -->
-    <option name="compatibility:exclude-filter" value="CtsJdwpTestCases org.apache.harmony.jpda.tests.jdwp.VirtualMachine_ExitTest#testExit001" />
 </configuration>