Merge changes I4c373b29,I9ccda6fc,I1b390b0e,I30151217

* changes:
  Do not propagate strict updatability linting to libcore/
  Create allowlist to skip strict updatability lint check
  Propagate strict_updatability_linting to transitive deps of updatable apexes
  Export LintDepSetsIntf from java package
This commit is contained in:
Spandan Das
2022-03-24 16:38:20 +00:00
committed by Gerrit Code Review
4 changed files with 242 additions and 15 deletions

View File

@@ -9051,6 +9051,185 @@ func ensureDoesNotContainRequiredDeps(t *testing.T, ctx *android.TestContext, mo
}
}
func TestApexStrictUpdtabilityLint(t *testing.T) {
bpTemplate := `
apex {
name: "myapex",
key: "myapex.key",
java_libs: ["myjavalib"],
updatable: %v,
min_sdk_version: "29",
}
apex_key {
name: "myapex.key",
}
java_library {
name: "myjavalib",
srcs: ["MyClass.java"],
apex_available: [ "myapex" ],
lint: {
strict_updatability_linting: %v,
},
sdk_version: "current",
min_sdk_version: "29",
}
`
fs := android.MockFS{
"lint-baseline.xml": nil,
}
testCases := []struct {
testCaseName string
apexUpdatable bool
javaStrictUpdtabilityLint bool
lintFileExists bool
disallowedFlagExpected bool
}{
{
testCaseName: "lint-baseline.xml does not exist, no disallowed flag necessary in lint cmd",
apexUpdatable: true,
javaStrictUpdtabilityLint: true,
lintFileExists: false,
disallowedFlagExpected: false,
},
{
testCaseName: "non-updatable apex respects strict_updatability of javalib",
apexUpdatable: false,
javaStrictUpdtabilityLint: false,
lintFileExists: true,
disallowedFlagExpected: false,
},
{
testCaseName: "non-updatable apex respects strict updatability of javalib",
apexUpdatable: false,
javaStrictUpdtabilityLint: true,
lintFileExists: true,
disallowedFlagExpected: true,
},
{
testCaseName: "updatable apex sets strict updatability of javalib to true",
apexUpdatable: true,
javaStrictUpdtabilityLint: false, // will be set to true by mutator
lintFileExists: true,
disallowedFlagExpected: true,
},
}
for _, testCase := range testCases {
bp := fmt.Sprintf(bpTemplate, testCase.apexUpdatable, testCase.javaStrictUpdtabilityLint)
fixtures := []android.FixturePreparer{}
if testCase.lintFileExists {
fixtures = append(fixtures, fs.AddToFixture())
}
result := testApex(t, bp, fixtures...)
myjavalib := result.ModuleForTests("myjavalib", "android_common_apex29")
sboxProto := android.RuleBuilderSboxProtoForTests(t, myjavalib.Output("lint.sbox.textproto"))
disallowedFlagActual := strings.Contains(*sboxProto.Commands[0].Command, "--baseline lint-baseline.xml --disallowed_issues NewApi")
if disallowedFlagActual != testCase.disallowedFlagExpected {
t.Errorf("Failed testcase: %v \nActual lint cmd: %v", testCase.testCaseName, *sboxProto.Commands[0].Command)
}
}
}
func TestUpdatabilityLintSkipLibcore(t *testing.T) {
bp := `
apex {
name: "myapex",
key: "myapex.key",
java_libs: ["myjavalib"],
updatable: true,
min_sdk_version: "29",
}
apex_key {
name: "myapex.key",
}
java_library {
name: "myjavalib",
srcs: ["MyClass.java"],
apex_available: [ "myapex" ],
sdk_version: "current",
min_sdk_version: "29",
}
`
testCases := []struct {
testCaseName string
moduleDirectory string
disallowedFlagExpected bool
}{
{
testCaseName: "lintable module defined outside libcore",
moduleDirectory: "",
disallowedFlagExpected: true,
},
{
testCaseName: "lintable module defined in libcore root directory",
moduleDirectory: "libcore/",
disallowedFlagExpected: false,
},
{
testCaseName: "lintable module defined in libcore child directory",
moduleDirectory: "libcore/childdir/",
disallowedFlagExpected: true,
},
}
for _, testCase := range testCases {
lintFileCreator := android.FixtureAddTextFile(testCase.moduleDirectory+"lint-baseline.xml", "")
bpFileCreator := android.FixtureAddTextFile(testCase.moduleDirectory+"Android.bp", bp)
result := testApex(t, "", lintFileCreator, bpFileCreator)
myjavalib := result.ModuleForTests("myjavalib", "android_common_apex29")
sboxProto := android.RuleBuilderSboxProtoForTests(t, myjavalib.Output("lint.sbox.textproto"))
cmdFlags := fmt.Sprintf("--baseline %vlint-baseline.xml --disallowed_issues NewApi", testCase.moduleDirectory)
disallowedFlagActual := strings.Contains(*sboxProto.Commands[0].Command, cmdFlags)
if disallowedFlagActual != testCase.disallowedFlagExpected {
t.Errorf("Failed testcase: %v \nActual lint cmd: %v", testCase.testCaseName, *sboxProto.Commands[0].Command)
}
}
}
// checks transtive deps of an apex coming from bootclasspath_fragment
func TestApexStrictUpdtabilityLintBcpFragmentDeps(t *testing.T) {
bp := `
apex {
name: "myapex",
key: "myapex.key",
bootclasspath_fragments: ["mybootclasspathfragment"],
updatable: true,
min_sdk_version: "29",
}
apex_key {
name: "myapex.key",
}
bootclasspath_fragment {
name: "mybootclasspathfragment",
contents: ["myjavalib"],
apex_available: ["myapex"],
}
java_library {
name: "myjavalib",
srcs: ["MyClass.java"],
apex_available: [ "myapex" ],
sdk_version: "current",
min_sdk_version: "29",
compile_dex: true,
}
`
fs := android.MockFS{
"lint-baseline.xml": nil,
}
result := testApex(t, bp, dexpreopt.FixtureSetApexBootJars("myapex:myjavalib"), fs.AddToFixture())
myjavalib := result.ModuleForTests("myjavalib", "android_common_apex29")
sboxProto := android.RuleBuilderSboxProtoForTests(t, myjavalib.Output("lint.sbox.textproto"))
if !strings.Contains(*sboxProto.Commands[0].Command, "--baseline lint-baseline.xml --disallowed_issues NewApi") {
t.Errorf("Strict updabality lint missing in myjavalib coming from bootclasspath_fragment mybootclasspath-fragment\nActual lint cmd: %v", *sboxProto.Commands[0].Command)
}
}
func TestMain(m *testing.M) {
os.Exit(m.Run())
}