android_system_sepolicy/build/soong/selinux_test.go
Inseob Kim bf7f4a4401 Support multiple se_flags modules
Instead of centralized one se_flags module under system/sepolicy,
additional se_flags modules can be defined anywhere to support defining
downstream branches' own flagging.

Bug: 321875465
Test: TH
Test: soong test
Change-Id: I6e45c859b7f09e27ba1d60033b0db1424472cb63
2024-02-16 16:14:40 +09:00

97 lines
2.8 KiB
Go

// Copyright 2024 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package selinux
import (
"os"
"reflect"
"testing"
"android/soong/android"
)
func TestMain(m *testing.M) {
os.Exit(m.Run())
}
var prepareForTest = android.GroupFixturePreparers(
android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
buildFlags := make(map[string]string)
buildFlags["RELEASE_FLAGS_BAR"] = "true"
buildFlags["RELEASE_FLAGS_FOO1"] = "false"
// "RELEASE_FLAGS_FOO2" is missing
buildFlags["RELEASE_AVF_ENABLE_DEVICE_ASSIGNMENT"] = "true"
variables.BuildFlags = buildFlags
}),
android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
ctx.RegisterModuleType("se_flags", flagsFactory)
ctx.RegisterModuleType("se_flags_collector", flagsCollectorFactory)
}),
)
func TestFlagCollector(t *testing.T) {
t.Parallel()
ctx := android.GroupFixturePreparers(
prepareForTest,
android.FixtureAddTextFile("package_bar/Android.bp", `
se_flags {
name: "se_flags_bar",
flags: ["RELEASE_FLAGS_BAR"],
export_to: ["se_flags_collector"],
}
`),
android.FixtureAddTextFile("package_foo/Android.bp", `
se_flags {
name: "se_flags_foo",
flags: ["RELEASE_FLAGS_FOO1", "RELEASE_FLAGS_FOO2"],
export_to: ["se_flags_collector"],
}
`),
android.FixtureAddTextFile("system/sepolicy/Android.bp", `
se_flags {
name: "se_flags",
flags: ["RELEASE_AVF_ENABLE_DEVICE_ASSIGNMENT"],
export_to: ["se_flags_collector"],
}
se_flags_collector {
name: "se_flags_collector",
}
`),
).RunTest(t).TestContext
collectorModule := ctx.ModuleForTests("se_flags_collector", "").Module()
collectorData, ok := android.OtherModuleProvider(ctx.OtherModuleProviderAdaptor(), collectorModule, buildFlagsProviderKey)
if !ok {
t.Errorf("se_flags_collector must provide buildFlags")
return
}
actual := flagsToM4Macros(collectorData.BuildFlags)
expected := []string{
"-D target_flag_RELEASE_AVF_ENABLE_DEVICE_ASSIGNMENT=true",
"-D target_flag_RELEASE_FLAGS_BAR=true",
"-D target_flag_RELEASE_FLAGS_FOO1=false",
}
if !reflect.DeepEqual(actual, expected) {
t.Errorf("M4 macros were not exported correctly"+
"\nactual: %v"+
"\nexpected: %v",
actual,
expected,
)
}
}