解决CTS测试 CtsOsTestCases
平台C6490,android13
测试项:
| Test | Result | Details |
| android.os.storage.cts.StorageManagerCrossProfileUSBTest#testGetStorageVolumeUSBWorkProfile | fail |
The USB storage volume: C608-180E mounted on the main user is not present in /storage/emulated/111
|
fail 项的log:
10-09 03:47:31.187 13860 14521 I Fitness : (REDACTED) FitCleanupIntentOperation received Intent %s 10-09 03:47:31.187 13722 13894 E StorageManager: Failed to set extended attributes for /storage/emulated/13/Android to set project id.: Permission denied 10-09 03:47:31.187 16132 16235 D CompatibilityChangeReporter: Compat change id reported: 160794467; UID 1310180; state: ENABLED 10-09 03:47:31.187 13722 13894 W MediaProvider: Failed to update quota type for /storage/emulated/13/Android 10-09 03:47:31.187 13722 13894 W MediaProvider: java.io.IOException: Failed to update quota type for /storage/emulated/13/Android 10-09 03:47:31.187 13722 13894 W MediaProvider: >---at android.os.storage.StorageManager.updateExternalStorageFileQuotaType(StorageManager.java:2618) 10-09 03:47:31.187 13722 13894 W MediaProvider: >---at com.android.providers.media.MediaProvider.updateQuotaTypeForFileInternal(MediaProvider.java:716) 10-09 03:47:31.187 13722 13894 W MediaProvider: >---at com.android.providers.media.MediaProvider.updateQuotaTypeForUri(MediaProvider.java:690) 10-09 03:47:31.187 13722 13894 W MediaProvider: >---at com.android.providers.media.MediaProvider.-$$Nest$mupdateQuotaTypeForUri(Unknown Source:0) 10-09 03:47:31.187 13722 13894 W MediaProvider: >---at com.android.providers.media.MediaProvider$4.lambda$onInsert$0(MediaProvider.java:743) 10-09 03:47:31.187 13722 13894 W MediaProvider: >---at com.android.providers.media.MediaProvider$4.$r8$lambda$DnIEye5Sx8fODP4Bt_qvKpm3U-Q(Unknown Source:0) 10-09 03:47:31.187 13722 13894 W MediaProvider: >---at com.android.providers.media.MediaProvider$4$$ExternalSyntheticLambda0.run(Unknown Source:6) 10-09 03:47:31.187 13722 13894 W MediaProvider: >---at android.os.Handler.handleCallback(Handler.java:942) 10-09 03:47:31.187 13722 13894 W MediaProvider: >---at android.os.Handler.dispatchMessage(Handler.java:99) 10-09 03:47:31.187 13722 13894 W MediaProvider: >---at android.os.Looper.loopOnce(Looper.java:201) 10-09 03:47:31.187 13722 13894 W MediaProvider: >---at android.os.Looper.loop(Looper.java:288) 10-09 03:47:31.187 13722 13894 W MediaProvider: >---at android.os.HandlerThread.run(HandlerThread.java:67) 10-09 03:47:31.190 2309 2309 D CarrierSvcBindHelper: onPackageModified: com.google.android.contacts
一开始以为是 cts case创建虚拟分区时的权限问题。后面检查代码发现是下面这个修改导致了这个问题。u盘自动挂载功能,如果去掉这个修改是能测试PASS的。
===================================================================
--- LINUX/android/device/qcom/lahaina/default/fstab.qcom (revision 2539)
+++ LINUX/android/device/qcom/lahaina/default/fstab.qcom (revision 2540)
@@ -51,3 +51,5 @@
/dev/block/bootdevice/by-name/dsp /vendor/dsp ext4 ro,nosuid,nodev,barrier=1 wait,slotselect
/dev/block/bootdevice/by-name/bluetooth /vendor/bt_firmware vfat ro,shortname=lower,uid=1002,gid=3002,dmask=227,fmask=337,context=u:object_r:bt_firmware_file:s0 wait,slotselect
/dev/block/bootdevice/by-name/qmcs /mnt/vendor/qmcs vfat noatime,nosuid,nodev,context=u:object_r:vendor_qmcs_file:s0 wait,check,formattable
+/devices/platform/*usb* auto auto defaults voldmanaged=usb:auto
+/devices/platform/fe320000.dwmmc/mmc_host* auto auto defaults voldmanaged=sdcard1:auto
Index: QCM6490_apps_qssi13/LINUX/android/frameworks/base/services/core/java/com/android/server/StorageManagerService.java
===================================================================
--- QCM6490_apps_qssi13/LINUX/android/frameworks/base/services/core/java/com/android/server/StorageManagerService.java (revision 2781)
+++ QCM6490_apps_qssi13/LINUX/android/frameworks/base/services/core/java/com/android/server/StorageManagerService.java (revision 2782)
@@ -1617,9 +1617,9 @@
// Adoptable public disks are visible to apps, since they meet
// public API requirement of being in a stable location.
- if (vol.disk.isAdoptable()) {
+ // if (vol.disk.isAdoptable()) {
vol.mountFlags |= VolumeInfo.MOUNT_FLAG_VISIBLE_FOR_WRITE;
- }
+ // }
查看这条case的代码。发现这条case是测试创建虚拟盘符的。是挂载后路径不匹配导致测试失败,不是权限问题。
public static String createDiskAndGetVolumeName(boolean visible) throws Exception {
//remove any existing volume that was mounted before
removeVirtualDisk();
String existingPublicVolume = getPublicVolumeExcluding(null);
executeShellCommand("sm set-force-adoptable " + (visible ? "on" : "off"));
executeShellCommand("sm set-virtual-disk true");
Thread.sleep(10000);
pollForCondition(StorageManagerHelper::partitionDisks,
"Could not create public volume in time");
return getPublicVolumeExcluding(existingPublicVolume);
}
这条case创建的 set-force-adoptable 为 off的,是not visible, 但是上面的修改直接在mount的时候加了visible的flag,导致后面检测路径不匹配导致失败。
case具体逻辑请查看 android/cts/tests/tests/os/src/android/os/storage/cts/StorageManagerHelper.java?fi=createUSBVirtualDisk#53
如果需要保留修改需要在 android/frameworks/base/cmds/sm/src/com/android/commands/sm/Sm.java#166
runSetForceAdoptable()中添加额外的flag,然后在以下位置添加判断条件, 具体修改如下:
diff --git a/QCM6490_apps_qssi13/LINUX/android/frameworks/base/services/core/java/com/android/server/StorageManagerService.java b/QCM6490_apps_qssi13/LINUX/android/frameworks/base/services/core/java/com/andro id/server/StorageManagerService.java index 0e4ea057aea..0f2d04b3344 100755 --- a/QCM6490_apps_qssi13/LINUX/android/frameworks/base/services/core/java/com/android/server/StorageManagerService.java +++ b/QCM6490_apps_qssi13/LINUX/android/frameworks/base/services/core/java/com/android/server/StorageManagerService.java @ -1615,11 +1615,19 @ class StorageManagerService extends IStorageManager.Stub vol.mountFlags |= VolumeInfo.MOUNT_FLAG_VISIBLE_FOR_WRITE; } + String value = SystemProperties.get(StorageManager.PROP_ADOPTABLE); + boolean isForceOff = "force_off".equals(value); // Adoptable public disks are visible to apps, since they meet // public API requirement of being in a stable location. + if (isForceOff) { + if (vol.disk.isAdoptable()) { + vol.mountFlags |= VolumeInfo.MOUNT_FLAG_VISIBLE_FOR_WRITE; + } + } else { // if (vol.disk.isAdoptable()) { vol.mountFlags |= VolumeInfo.MOUNT_FLAG_VISIBLE_FOR_WRITE; // } + }
修改后这条case可以pass
浙公网安备 33010602011771号