xref: /aosp_15_r20/build/soong/linkerconfig/linkerconfig_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright (C) 2020 The Android Open Source Project
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage linkerconfig
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"os"
19*333d2b36SAndroid Build Coastguard Worker	"reflect"
20*333d2b36SAndroid Build Coastguard Worker	"testing"
21*333d2b36SAndroid Build Coastguard Worker
22*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
23*333d2b36SAndroid Build Coastguard Worker)
24*333d2b36SAndroid Build Coastguard Worker
25*333d2b36SAndroid Build Coastguard Workerfunc TestMain(m *testing.M) {
26*333d2b36SAndroid Build Coastguard Worker	os.Exit(m.Run())
27*333d2b36SAndroid Build Coastguard Worker}
28*333d2b36SAndroid Build Coastguard Worker
29*333d2b36SAndroid Build Coastguard Workervar prepareForLinkerConfigTest = android.GroupFixturePreparers(
30*333d2b36SAndroid Build Coastguard Worker	android.PrepareForTestWithAndroidBuildComponents,
31*333d2b36SAndroid Build Coastguard Worker	android.FixtureRegisterWithContext(registerLinkerConfigBuildComponent),
32*333d2b36SAndroid Build Coastguard Worker	android.FixtureAddFile("linker.config.json", nil),
33*333d2b36SAndroid Build Coastguard Worker)
34*333d2b36SAndroid Build Coastguard Worker
35*333d2b36SAndroid Build Coastguard Workerfunc TestBaseLinkerConfig(t *testing.T) {
36*333d2b36SAndroid Build Coastguard Worker	result := prepareForLinkerConfigTest.RunTestWithBp(t, `
37*333d2b36SAndroid Build Coastguard Worker		linker_config {
38*333d2b36SAndroid Build Coastguard Worker			name: "linker-config-base",
39*333d2b36SAndroid Build Coastguard Worker			src: "linker.config.json",
40*333d2b36SAndroid Build Coastguard Worker		}
41*333d2b36SAndroid Build Coastguard Worker	`)
42*333d2b36SAndroid Build Coastguard Worker
43*333d2b36SAndroid Build Coastguard Worker	expected := map[string][]string{
44*333d2b36SAndroid Build Coastguard Worker		"LOCAL_MODULE":                {"linker-config-base"},
45*333d2b36SAndroid Build Coastguard Worker		"LOCAL_MODULE_CLASS":          {"ETC"},
46*333d2b36SAndroid Build Coastguard Worker		"LOCAL_INSTALLED_MODULE_STEM": {"linker.config.pb"},
47*333d2b36SAndroid Build Coastguard Worker	}
48*333d2b36SAndroid Build Coastguard Worker
49*333d2b36SAndroid Build Coastguard Worker	p := result.ModuleForTests("linker-config-base", "android_arm64_armv8-a").Module().(*linkerConfig)
50*333d2b36SAndroid Build Coastguard Worker
51*333d2b36SAndroid Build Coastguard Worker	if p.outputFilePath.Base() != "linker.config.pb" {
52*333d2b36SAndroid Build Coastguard Worker		t.Errorf("expected linker.config.pb, got %q", p.outputFilePath.Base())
53*333d2b36SAndroid Build Coastguard Worker	}
54*333d2b36SAndroid Build Coastguard Worker
55*333d2b36SAndroid Build Coastguard Worker	entries := android.AndroidMkEntriesForTest(t, result.TestContext, p)[0]
56*333d2b36SAndroid Build Coastguard Worker	for k, expectedValue := range expected {
57*333d2b36SAndroid Build Coastguard Worker		if value, ok := entries.EntryMap[k]; ok {
58*333d2b36SAndroid Build Coastguard Worker			if !reflect.DeepEqual(value, expectedValue) {
59*333d2b36SAndroid Build Coastguard Worker				t.Errorf("Value of %s is '%s', but expected as '%s'", k, value, expectedValue)
60*333d2b36SAndroid Build Coastguard Worker			}
61*333d2b36SAndroid Build Coastguard Worker		} else {
62*333d2b36SAndroid Build Coastguard Worker			t.Errorf("%s is not defined", k)
63*333d2b36SAndroid Build Coastguard Worker		}
64*333d2b36SAndroid Build Coastguard Worker	}
65*333d2b36SAndroid Build Coastguard Worker
66*333d2b36SAndroid Build Coastguard Worker	if value, ok := entries.EntryMap["LOCAL_UNINSTALLABLE_MODULE"]; ok {
67*333d2b36SAndroid Build Coastguard Worker		t.Errorf("Value of LOCAL_UNINSTALLABLE_MODULE is %s, but expected as empty", value)
68*333d2b36SAndroid Build Coastguard Worker	}
69*333d2b36SAndroid Build Coastguard Worker}
70*333d2b36SAndroid Build Coastguard Worker
71*333d2b36SAndroid Build Coastguard Workerfunc TestUninstallableLinkerConfig(t *testing.T) {
72*333d2b36SAndroid Build Coastguard Worker	result := prepareForLinkerConfigTest.RunTestWithBp(t, `
73*333d2b36SAndroid Build Coastguard Worker		linker_config {
74*333d2b36SAndroid Build Coastguard Worker			name: "linker-config-base",
75*333d2b36SAndroid Build Coastguard Worker			src: "linker.config.json",
76*333d2b36SAndroid Build Coastguard Worker			installable: false,
77*333d2b36SAndroid Build Coastguard Worker		}
78*333d2b36SAndroid Build Coastguard Worker	`)
79*333d2b36SAndroid Build Coastguard Worker
80*333d2b36SAndroid Build Coastguard Worker	expected := []string{"true"}
81*333d2b36SAndroid Build Coastguard Worker
82*333d2b36SAndroid Build Coastguard Worker	p := result.ModuleForTests("linker-config-base", "android_arm64_armv8-a").Module().(*linkerConfig)
83*333d2b36SAndroid Build Coastguard Worker	entries := android.AndroidMkEntriesForTest(t, result.TestContext, p)[0]
84*333d2b36SAndroid Build Coastguard Worker	if value, ok := entries.EntryMap["LOCAL_UNINSTALLABLE_MODULE"]; ok {
85*333d2b36SAndroid Build Coastguard Worker		if !reflect.DeepEqual(value, expected) {
86*333d2b36SAndroid Build Coastguard Worker			t.Errorf("LOCAL_UNINSTALLABLE_MODULE is expected to be true but %s", value)
87*333d2b36SAndroid Build Coastguard Worker		}
88*333d2b36SAndroid Build Coastguard Worker	} else {
89*333d2b36SAndroid Build Coastguard Worker		t.Errorf("LOCAL_UNINSTALLABLE_MODULE is not defined")
90*333d2b36SAndroid Build Coastguard Worker	}
91*333d2b36SAndroid Build Coastguard Worker}
92