Merge "Revamp BinaryTransparencyService."

This commit is contained in:
TreeHugger Robot
2022-11-16 22:40:58 +00:00
committed by Android (Google) Code Review
4 changed files with 646 additions and 274 deletions

View File

@@ -24,7 +24,7 @@ import android.util.Slog;
import com.android.internal.os.IBinaryTransparencyService;
import java.util.Map;
import java.util.List;
/**
* BinaryTransparencyManager defines a number of system interfaces that other system apps or
@@ -66,12 +66,15 @@ public class BinaryTransparencyManager {
}
/**
* Returns a map of all installed APEXs consisting of package name to SHA256 hash of the
* package.
* @return A Map with the following entries: {apex package name : sha256 digest of package}
* Gets binary measurements of all installed APEXs, each packed in a Bundle.
* @return A List of {@link android.os.Bundle}s with the following keys:
* {@link com.android.server.BinaryTransparencyService#BUNDLE_PACKAGE_INFO}
* {@link com.android.server.BinaryTransparencyService#BUNDLE_CONTENT_DIGEST_ALGORITHM}
* {@link com.android.server.BinaryTransparencyService#BUNDLE_CONTENT_DIGEST}
*/
// TODO(b/259422958): Fix static constants referenced here - should be defined here
@NonNull
public Map getApexInfo() {
public List getApexInfo() {
try {
Slog.d(TAG, "Calling backend's getApexInfo()");
return mService.getApexInfo();

View File

@@ -26,5 +26,7 @@ package com.android.internal.os;
interface IBinaryTransparencyService {
String getSignedImageInfo();
Map getApexInfo();
List getApexInfo();
List getMeasurementsForAllPackages();
}

View File

@@ -23,6 +23,7 @@ import android.app.job.JobScheduler;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.SystemProperties;
@@ -36,8 +37,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import java.io.FileDescriptor;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
@RunWith(AndroidJUnit4.class)
public class BinaryTransparencyServiceTest {
@@ -96,7 +96,7 @@ public class BinaryTransparencyServiceTest {
@Test
public void getApexInfo_postInitialize_returnsValidEntries() throws RemoteException {
prepApexInfo();
Map result = mTestInterface.getApexInfo();
List result = mTestInterface.getApexInfo();
Assert.assertNotNull("Apex info map should not be null", result);
Assert.assertFalse("Apex info map should not be empty", result.isEmpty());
}
@@ -105,13 +105,18 @@ public class BinaryTransparencyServiceTest {
public void getApexInfo_postInitialize_returnsActualApexs()
throws RemoteException, PackageManager.NameNotFoundException {
prepApexInfo();
Map result = mTestInterface.getApexInfo();
List resultList = mTestInterface.getApexInfo();
PackageManager pm = mContext.getPackageManager();
Assert.assertNotNull(pm);
HashMap<PackageInfo, String> castedResult = (HashMap<PackageInfo, String>) result;
for (PackageInfo packageInfo : castedResult.keySet()) {
Assert.assertTrue(packageInfo.packageName + "is not an APEX!", packageInfo.isApex);
List<Bundle> castedResult = (List<Bundle>) resultList;
for (Bundle resultBundle : castedResult) {
PackageInfo resultPackageInfo = resultBundle.getParcelable(
BinaryTransparencyService.BUNDLE_PACKAGE_INFO, PackageInfo.class);
Assert.assertNotNull("PackageInfo for APEX should not be null",
resultPackageInfo);
Assert.assertTrue(resultPackageInfo.packageName + "is not an APEX!",
resultPackageInfo.isApex);
}
}