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:
@@ -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"])
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user