Merge "Export provenance metadata for prebuilt APKs and APEXes." am: c055d88c16 am: c41308e05e am: d58ecd96a8

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2045371

Change-Id: Idd4f83b79dd05e7f299cd26110bdc1f22d7b2e49
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Wei Li
2022-04-06 05:32:38 +00:00
committed by Automerger Merge Worker
15 changed files with 672 additions and 41 deletions

View File

@@ -53,6 +53,11 @@ func TestAndroidAppImport(t *testing.T) {
if expected != signingFlag {
t.Errorf("Incorrect signing flags, expected: %q, got: %q", expected, signingFlag)
}
rule := variant.Rule("genProvenanceMetaData")
android.AssertStringEquals(t, "Invalid input", "prebuilts/apk/app.apk", rule.Inputs[0].String())
android.AssertStringEquals(t, "Invalid output", "out/soong/.intermediates/provenance_metadata/foo/provenance_metadata.textproto", rule.Output.String())
android.AssertStringEquals(t, "Invalid args", "foo", rule.Args["module_name"])
android.AssertStringEquals(t, "Invalid args", "/system/app/foo/foo.apk", rule.Args["install_path"])
}
func TestAndroidAppImport_NoDexPreopt(t *testing.T) {
@@ -74,6 +79,12 @@ func TestAndroidAppImport_NoDexPreopt(t *testing.T) {
variant.MaybeOutput("dexpreopt/oat/arm64/package.odex").Rule != nil {
t.Errorf("dexpreopt shouldn't have run.")
}
rule := variant.Rule("genProvenanceMetaData")
android.AssertStringEquals(t, "Invalid input", "prebuilts/apk/app.apk", rule.Inputs[0].String())
android.AssertStringEquals(t, "Invalid output", "out/soong/.intermediates/provenance_metadata/foo/provenance_metadata.textproto", rule.Output.String())
android.AssertStringEquals(t, "Invalid args", "foo", rule.Args["module_name"])
android.AssertStringEquals(t, "Invalid args", "/system/app/foo/foo.apk", rule.Args["install_path"])
}
func TestAndroidAppImport_Presigned(t *testing.T) {
@@ -102,6 +113,12 @@ func TestAndroidAppImport_Presigned(t *testing.T) {
if variant.MaybeOutput("zip-aligned/foo.apk").Rule == nil {
t.Errorf("can't find aligning rule")
}
rule := variant.Rule("genProvenanceMetaData")
android.AssertStringEquals(t, "Invalid input", "prebuilts/apk/app.apk", rule.Inputs[0].String())
android.AssertStringEquals(t, "Invalid output", "out/soong/.intermediates/provenance_metadata/foo/provenance_metadata.textproto", rule.Output.String())
android.AssertStringEquals(t, "Invalid args", "foo", rule.Args["module_name"])
android.AssertStringEquals(t, "Invalid args", "/system/app/foo/foo.apk", rule.Args["install_path"])
}
func TestAndroidAppImport_SigningLineage(t *testing.T) {
@@ -139,6 +156,12 @@ func TestAndroidAppImport_SigningLineage(t *testing.T) {
if expectedCertSigningFlags != actualCertSigningFlags {
t.Errorf("Incorrect signing flags, expected: %q, got: %q", expectedCertSigningFlags, actualCertSigningFlags)
}
rule := variant.Rule("genProvenanceMetaData")
android.AssertStringEquals(t, "Invalid input", "prebuilts/apk/app.apk", rule.Inputs[0].String())
android.AssertStringEquals(t, "Invalid output", "out/soong/.intermediates/provenance_metadata/foo/provenance_metadata.textproto", rule.Output.String())
android.AssertStringEquals(t, "Invalid args", "foo", rule.Args["module_name"])
android.AssertStringEquals(t, "Invalid args", "/system/app/foo/foo.apk", rule.Args["install_path"])
}
func TestAndroidAppImport_SigningLineageFilegroup(t *testing.T) {
@@ -165,6 +188,12 @@ func TestAndroidAppImport_SigningLineageFilegroup(t *testing.T) {
if expected != signingFlag {
t.Errorf("Incorrect signing flags, expected: %q, got: %q", expected, signingFlag)
}
rule := variant.Rule("genProvenanceMetaData")
android.AssertStringEquals(t, "Invalid input", "prebuilts/apk/app.apk", rule.Inputs[0].String())
android.AssertStringEquals(t, "Invalid output", "out/soong/.intermediates/provenance_metadata/foo/provenance_metadata.textproto", rule.Output.String())
android.AssertStringEquals(t, "Invalid args", "foo", rule.Args["module_name"])
android.AssertStringEquals(t, "Invalid args", "/system/app/foo/foo.apk", rule.Args["install_path"])
}
func TestAndroidAppImport_DefaultDevCert(t *testing.T) {
@@ -194,6 +223,12 @@ func TestAndroidAppImport_DefaultDevCert(t *testing.T) {
if expected != signingFlag {
t.Errorf("Incorrect signing flags, expected: %q, got: %q", expected, signingFlag)
}
rule := variant.Rule("genProvenanceMetaData")
android.AssertStringEquals(t, "Invalid input", "prebuilts/apk/app.apk", rule.Inputs[0].String())
android.AssertStringEquals(t, "Invalid output", "out/soong/.intermediates/provenance_metadata/foo/provenance_metadata.textproto", rule.Output.String())
android.AssertStringEquals(t, "Invalid args", "foo", rule.Args["module_name"])
android.AssertStringEquals(t, "Invalid args", "/system/app/foo/foo.apk", rule.Args["install_path"])
}
func TestAndroidAppImport_DpiVariants(t *testing.T) {
@@ -216,40 +251,46 @@ func TestAndroidAppImport_DpiVariants(t *testing.T) {
}
`
testCases := []struct {
name string
aaptPreferredConfig *string
aaptPrebuiltDPI []string
expected string
name string
aaptPreferredConfig *string
aaptPrebuiltDPI []string
expected string
expectedProvenanceMetaDataArtifactPath string
}{
{
name: "no preferred",
aaptPreferredConfig: nil,
aaptPrebuiltDPI: []string{},
expected: "verify_uses_libraries/apk/app.apk",
name: "no preferred",
aaptPreferredConfig: nil,
aaptPrebuiltDPI: []string{},
expected: "verify_uses_libraries/apk/app.apk",
expectedProvenanceMetaDataArtifactPath: "prebuilts/apk/app.apk",
},
{
name: "AAPTPreferredConfig matches",
aaptPreferredConfig: proptools.StringPtr("xhdpi"),
aaptPrebuiltDPI: []string{"xxhdpi", "ldpi"},
expected: "verify_uses_libraries/apk/app_xhdpi.apk",
name: "AAPTPreferredConfig matches",
aaptPreferredConfig: proptools.StringPtr("xhdpi"),
aaptPrebuiltDPI: []string{"xxhdpi", "ldpi"},
expected: "verify_uses_libraries/apk/app_xhdpi.apk",
expectedProvenanceMetaDataArtifactPath: "prebuilts/apk/app_xhdpi.apk",
},
{
name: "AAPTPrebuiltDPI matches",
aaptPreferredConfig: proptools.StringPtr("mdpi"),
aaptPrebuiltDPI: []string{"xxhdpi", "xhdpi"},
expected: "verify_uses_libraries/apk/app_xxhdpi.apk",
name: "AAPTPrebuiltDPI matches",
aaptPreferredConfig: proptools.StringPtr("mdpi"),
aaptPrebuiltDPI: []string{"xxhdpi", "xhdpi"},
expected: "verify_uses_libraries/apk/app_xxhdpi.apk",
expectedProvenanceMetaDataArtifactPath: "prebuilts/apk/app_xxhdpi.apk",
},
{
name: "non-first AAPTPrebuiltDPI matches",
aaptPreferredConfig: proptools.StringPtr("mdpi"),
aaptPrebuiltDPI: []string{"ldpi", "xhdpi"},
expected: "verify_uses_libraries/apk/app_xhdpi.apk",
name: "non-first AAPTPrebuiltDPI matches",
aaptPreferredConfig: proptools.StringPtr("mdpi"),
aaptPrebuiltDPI: []string{"ldpi", "xhdpi"},
expected: "verify_uses_libraries/apk/app_xhdpi.apk",
expectedProvenanceMetaDataArtifactPath: "prebuilts/apk/app_xhdpi.apk",
},
{
name: "no matches",
aaptPreferredConfig: proptools.StringPtr("mdpi"),
aaptPrebuiltDPI: []string{"ldpi", "xxxhdpi"},
expected: "verify_uses_libraries/apk/app.apk",
name: "no matches",
aaptPreferredConfig: proptools.StringPtr("mdpi"),
aaptPrebuiltDPI: []string{"ldpi", "xxxhdpi"},
expected: "verify_uses_libraries/apk/app.apk",
expectedProvenanceMetaDataArtifactPath: "prebuilts/apk/app.apk",
},
}
@@ -272,6 +313,12 @@ func TestAndroidAppImport_DpiVariants(t *testing.T) {
if strings.HasSuffix(matches[1], test.expected) {
t.Errorf("wrong src apk, expected: %q got: %q", test.expected, matches[1])
}
provenanceMetaDataRule := variant.Rule("genProvenanceMetaData")
android.AssertStringEquals(t, "Invalid input", test.expectedProvenanceMetaDataArtifactPath, provenanceMetaDataRule.Inputs[0].String())
android.AssertStringEquals(t, "Invalid output", "out/soong/.intermediates/provenance_metadata/foo/provenance_metadata.textproto", provenanceMetaDataRule.Output.String())
android.AssertStringEquals(t, "Invalid args", "foo", provenanceMetaDataRule.Args["module_name"])
android.AssertStringEquals(t, "Invalid args", "/system/app/foo/foo.apk", provenanceMetaDataRule.Args["install_path"])
}
}
@@ -292,16 +339,25 @@ func TestAndroidAppImport_Filename(t *testing.T) {
`)
testCases := []struct {
name string
expected string
name string
expected string
onDevice string
expectedArtifactPath string
expectedMetaDataPath string
}{
{
name: "foo",
expected: "foo.apk",
name: "foo",
expected: "foo.apk",
onDevice: "/system/app/foo/foo.apk",
expectedArtifactPath: "prebuilts/apk/app.apk",
expectedMetaDataPath: "out/soong/.intermediates/provenance_metadata/foo/provenance_metadata.textproto",
},
{
name: "bar",
expected: "bar_sample.apk",
name: "bar",
expected: "bar_sample.apk",
onDevice: "/system/app/bar/bar_sample.apk",
expectedArtifactPath: "prebuilts/apk/app.apk",
expectedMetaDataPath: "out/soong/.intermediates/provenance_metadata/bar/provenance_metadata.textproto",
},
}
@@ -318,15 +374,23 @@ func TestAndroidAppImport_Filename(t *testing.T) {
t.Errorf("Incorrect LOCAL_INSTALLED_MODULE_STEM value '%s', expected '%s'",
actualValues, expectedValues)
}
rule := variant.Rule("genProvenanceMetaData")
android.AssertStringEquals(t, "Invalid input", test.expectedArtifactPath, rule.Inputs[0].String())
android.AssertStringEquals(t, "Invalid output", test.expectedMetaDataPath, rule.Output.String())
android.AssertStringEquals(t, "Invalid args", test.name, rule.Args["module_name"])
android.AssertStringEquals(t, "Invalid args", test.onDevice, rule.Args["install_path"])
}
}
func TestAndroidAppImport_ArchVariants(t *testing.T) {
// The test config's target arch is ARM64.
testCases := []struct {
name string
bp string
expected string
name string
bp string
expected string
artifactPath string
metaDataPath string
installPath string
}{
{
name: "matching arch",
@@ -345,7 +409,9 @@ func TestAndroidAppImport_ArchVariants(t *testing.T) {
},
}
`,
expected: "verify_uses_libraries/apk/app_arm64.apk",
expected: "verify_uses_libraries/apk/app_arm64.apk",
artifactPath: "prebuilts/apk/app_arm64.apk",
installPath: "/system/app/foo/foo.apk",
},
{
name: "no matching arch",
@@ -364,7 +430,9 @@ func TestAndroidAppImport_ArchVariants(t *testing.T) {
},
}
`,
expected: "verify_uses_libraries/apk/app.apk",
expected: "verify_uses_libraries/apk/app.apk",
artifactPath: "prebuilts/apk/app.apk",
installPath: "/system/app/foo/foo.apk",
},
{
name: "no matching arch without default",
@@ -382,7 +450,9 @@ func TestAndroidAppImport_ArchVariants(t *testing.T) {
},
}
`,
expected: "",
expected: "",
artifactPath: "prebuilts/apk/app_arm.apk",
installPath: "/system/app/foo/foo.apk",
},
}
@@ -395,6 +465,8 @@ func TestAndroidAppImport_ArchVariants(t *testing.T) {
if variant.Module().Enabled() {
t.Error("module should have been disabled, but wasn't")
}
rule := variant.MaybeRule("genProvenanceMetaData")
android.AssertDeepEquals(t, "Provenance metadata is not empty", android.TestingBuildParams{}, rule)
continue
}
jniRuleCommand := variant.Output("jnis-uncompressed/foo.apk").RuleParams.Command
@@ -405,6 +477,11 @@ func TestAndroidAppImport_ArchVariants(t *testing.T) {
if strings.HasSuffix(matches[1], test.expected) {
t.Errorf("wrong src apk, expected: %q got: %q", test.expected, matches[1])
}
rule := variant.Rule("genProvenanceMetaData")
android.AssertStringEquals(t, "Invalid input", test.artifactPath, rule.Inputs[0].String())
android.AssertStringEquals(t, "Invalid output", "out/soong/.intermediates/provenance_metadata/foo/provenance_metadata.textproto", rule.Output.String())
android.AssertStringEquals(t, "Invalid args", "foo", rule.Args["module_name"])
android.AssertStringEquals(t, "Invalid args", test.installPath, rule.Args["install_path"])
}
}