platform_build_soong/android/license_test.go

242 lines
5.7 KiB
Go
Raw Normal View History

package android
import (
"testing"
)
// Common test set up for license tests.
var prepareForLicenseTest = GroupFixturePreparers(
// General preparers in alphabetical order.
PrepareForTestWithDefaults,
PrepareForTestWithLicenses,
PrepareForTestWithOverrides,
PrepareForTestWithPackageModule,
PrepareForTestWithPrebuilts,
PrepareForTestWithVisibility,
// Additional test specific stuff
prepareForTestWithFakePrebuiltModules,
FixtureMergeEnv(map[string]string{"ANDROID_REQUIRE_LICENSES": "1"}),
)
var licenseTests = []struct {
name string
fs MockFS
expectedErrors []string
}{
{
name: "license must not accept licenses property",
fs: map[string][]byte{
"top/Android.bp": []byte(`
license {
name: "top_license",
visibility: ["//visibility:private"],
licenses: ["other_license"],
}`),
},
expectedErrors: []string{
`top/Android.bp:5:14: unrecognized property "licenses"`,
},
},
{
name: "private license",
fs: map[string][]byte{
"top/Android.bp": []byte(`
license_kind {
name: "top_notice",
conditions: ["notice"],
visibility: ["//visibility:private"],
}
license {
name: "top_allowed_as_notice",
license_kinds: ["top_notice"],
visibility: ["//visibility:private"],
}`),
"other/Android.bp": []byte(`
rule {
name: "arule",
licenses: ["top_allowed_as_notice"],
}`),
"yetmore/Android.bp": []byte(`
package {
default_applicable_licenses: ["top_allowed_as_notice"],
}`),
},
expectedErrors: []string{
`other/Android.bp:2:5: module "arule": depends on //top:top_allowed_as_notice ` +
`which is not visible to this module`,
`yetmore/Android.bp:2:5: module "//yetmore": depends on //top:top_allowed_as_notice ` +
`which is not visible to this module`,
},
},
{
name: "must reference license_kind module",
fs: map[string][]byte{
"top/Android.bp": []byte(`
rule {
name: "top_by_exception_only",
}
license {
name: "top_proprietary",
license_kinds: ["top_by_exception_only"],
visibility: ["//visibility:public"],
}`),
},
expectedErrors: []string{
`top/Android.bp:6:5: module "top_proprietary": license_kinds property ` +
`"top_by_exception_only" is not a license_kind module`,
},
},
{
name: "must not duplicate license_kind",
fs: map[string][]byte{
"top/Android.bp": []byte(`
license_kind {
name: "top_by_exception_only",
conditions: ["by_exception_only"],
visibility: ["//visibility:private"],
}
license_kind {
name: "top_by_exception_only_2",
conditions: ["by_exception_only"],
visibility: ["//visibility:private"],
}
license {
name: "top_proprietary",
license_kinds: [
"top_by_exception_only",
"top_by_exception_only_2",
"top_by_exception_only"
],
visibility: ["//visibility:public"],
}`),
},
expectedErrors: []string{
`top/Android.bp:14:5: module "top_proprietary": Duplicated license kind: "top_by_exception_only"`,
},
},
{
name: "license_kind module must exist",
fs: map[string][]byte{
"top/Android.bp": []byte(`
license {
name: "top_notice_allowed",
license_kinds: ["top_notice"],
visibility: ["//visibility:public"],
}`),
},
expectedErrors: []string{
`top/Android.bp:2:5: "top_notice_allowed" depends on undefined module "top_notice"`,
},
},
{
name: "public license",
fs: map[string][]byte{
"top/Android.bp": []byte(`
license_kind {
name: "top_by_exception_only",
conditions: ["by_exception_only"],
visibility: ["//visibility:private"],
}
license {
name: "top_proprietary",
license_kinds: ["top_by_exception_only"],
visibility: ["//visibility:public"],
}`),
"other/Android.bp": []byte(`
rule {
name: "arule",
licenses: ["top_proprietary"],
}`),
"yetmore/Android.bp": []byte(`
package {
default_applicable_licenses: ["top_proprietary"],
}`),
},
},
{
name: "multiple licenses",
fs: map[string][]byte{
"top/Android.bp": []byte(`
package {
default_applicable_licenses: ["top_proprietary"],
}
license_kind {
name: "top_notice",
conditions: ["notice"],
}
license_kind {
name: "top_by_exception_only",
conditions: ["by_exception_only"],
visibility: ["//visibility:public"],
}
license {
name: "top_allowed_as_notice",
license_kinds: ["top_notice"],
}
license {
name: "top_proprietary",
license_kinds: ["top_by_exception_only"],
visibility: ["//visibility:public"],
}
rule {
name: "myrule",
licenses: ["top_allowed_as_notice", "top_proprietary"]
}`),
"other/Android.bp": []byte(`
rule {
name: "arule",
licenses: ["top_proprietary"],
}`),
"yetmore/Android.bp": []byte(`
package {
default_applicable_licenses: ["top_proprietary"],
}`),
},
},
}
func TestLicense(t *testing.T) {
for _, test := range licenseTests {
t.Run(test.name, func(t *testing.T) {
// Customize the common license text fixture factory.
GroupFixturePreparers(
prepareForLicenseTest,
FixtureRegisterWithContext(func(ctx RegistrationContext) {
ctx.RegisterModuleType("rule", newMockRuleModule)
}),
test.fs.AddToFixture(),
).
ExtendWithErrorHandler(FixtureExpectsAllErrorsToMatchAPattern(test.expectedErrors)).
RunTest(t)
})
}
}
func testLicense(t *testing.T, fs MockFS, expectedErrors []string) {
}
type mockRuleModule struct {
ModuleBase
DefaultableModuleBase
}
func newMockRuleModule() Module {
m := &mockRuleModule{}
InitAndroidModule(m)
InitDefaultableModule(m)
return m
}
func (p *mockRuleModule) GenerateAndroidBuildActions(ModuleContext) {
}