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>