xref: /aosp_15_r20/system/linkerconfig/contents/tests/configuration/baseconfig_test.cc (revision e5eeaa8e05bc25a862c0c861bda7c8a6bfb42dad)
1*e5eeaa8eSAndroid Build Coastguard Worker /*
2*e5eeaa8eSAndroid Build Coastguard Worker  * Copyright (C) 2019 The Android Open Source Project
3*e5eeaa8eSAndroid Build Coastguard Worker  *
4*e5eeaa8eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*e5eeaa8eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*e5eeaa8eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*e5eeaa8eSAndroid Build Coastguard Worker  *
8*e5eeaa8eSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*e5eeaa8eSAndroid Build Coastguard Worker  *
10*e5eeaa8eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*e5eeaa8eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*e5eeaa8eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*e5eeaa8eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*e5eeaa8eSAndroid Build Coastguard Worker  * limitations under the License.
15*e5eeaa8eSAndroid Build Coastguard Worker  */
16*e5eeaa8eSAndroid Build Coastguard Worker 
17*e5eeaa8eSAndroid Build Coastguard Worker #include "linkerconfig/baseconfig.h"
18*e5eeaa8eSAndroid Build Coastguard Worker #include "configurationtest.h"
19*e5eeaa8eSAndroid Build Coastguard Worker #include "linkerconfig/configwriter.h"
20*e5eeaa8eSAndroid Build Coastguard Worker #include "mockenv.h"
21*e5eeaa8eSAndroid Build Coastguard Worker 
22*e5eeaa8eSAndroid Build Coastguard Worker using android::linkerconfig::contents::Context;
23*e5eeaa8eSAndroid Build Coastguard Worker using android::linkerconfig::contents::CreateBaseConfiguration;
24*e5eeaa8eSAndroid Build Coastguard Worker using android::linkerconfig::modules::ApexInfo;
25*e5eeaa8eSAndroid Build Coastguard Worker using android::linkerconfig::modules::ConfigWriter;
26*e5eeaa8eSAndroid Build Coastguard Worker 
TEST(linkerconfig_configuration_fulltest,baseconfig_test)27*e5eeaa8eSAndroid Build Coastguard Worker TEST(linkerconfig_configuration_fulltest, baseconfig_test) {
28*e5eeaa8eSAndroid Build Coastguard Worker   MockGenericVariables();
29*e5eeaa8eSAndroid Build Coastguard Worker   Context ctx;
30*e5eeaa8eSAndroid Build Coastguard Worker   ctx.SetApexModules({CreateTestVndkApex()});
31*e5eeaa8eSAndroid Build Coastguard Worker   auto base_config = CreateBaseConfiguration(ctx);
32*e5eeaa8eSAndroid Build Coastguard Worker   ConfigWriter config_writer;
33*e5eeaa8eSAndroid Build Coastguard Worker 
34*e5eeaa8eSAndroid Build Coastguard Worker   base_config.WriteConfig(config_writer);
35*e5eeaa8eSAndroid Build Coastguard Worker 
36*e5eeaa8eSAndroid Build Coastguard Worker   VerifyConfiguration(config_writer.ToString());
37*e5eeaa8eSAndroid Build Coastguard Worker }
38*e5eeaa8eSAndroid Build Coastguard Worker 
TEST(linkerconfig_configuration_fulltest,baseconfig_vndk_using_core_variant_test)39*e5eeaa8eSAndroid Build Coastguard Worker TEST(linkerconfig_configuration_fulltest,
40*e5eeaa8eSAndroid Build Coastguard Worker      baseconfig_vndk_using_core_variant_test) {
41*e5eeaa8eSAndroid Build Coastguard Worker   MockGenericVariables();
42*e5eeaa8eSAndroid Build Coastguard Worker   MockVndkUsingCoreVariant();
43*e5eeaa8eSAndroid Build Coastguard Worker   Context ctx;
44*e5eeaa8eSAndroid Build Coastguard Worker   ctx.SetApexModules({CreateTestVndkApex()});
45*e5eeaa8eSAndroid Build Coastguard Worker   auto base_config = CreateBaseConfiguration(ctx);
46*e5eeaa8eSAndroid Build Coastguard Worker   ConfigWriter config_writer;
47*e5eeaa8eSAndroid Build Coastguard Worker 
48*e5eeaa8eSAndroid Build Coastguard Worker   base_config.WriteConfig(config_writer);
49*e5eeaa8eSAndroid Build Coastguard Worker 
50*e5eeaa8eSAndroid Build Coastguard Worker   VerifyConfiguration(config_writer.ToString());
51*e5eeaa8eSAndroid Build Coastguard Worker }
52*e5eeaa8eSAndroid Build Coastguard Worker 
TEST(linkerconfig_configuration_fulltest,baseconfig_vndk_27_test)53*e5eeaa8eSAndroid Build Coastguard Worker TEST(linkerconfig_configuration_fulltest, baseconfig_vndk_27_test) {
54*e5eeaa8eSAndroid Build Coastguard Worker   MockGenericVariables();
55*e5eeaa8eSAndroid Build Coastguard Worker   MockVndkVersion("27");
56*e5eeaa8eSAndroid Build Coastguard Worker   Context ctx;
57*e5eeaa8eSAndroid Build Coastguard Worker   ctx.SetApexModules({CreateTestVndkApex()});
58*e5eeaa8eSAndroid Build Coastguard Worker   auto base_config = CreateBaseConfiguration(ctx);
59*e5eeaa8eSAndroid Build Coastguard Worker   ConfigWriter config_writer;
60*e5eeaa8eSAndroid Build Coastguard Worker 
61*e5eeaa8eSAndroid Build Coastguard Worker   base_config.WriteConfig(config_writer);
62*e5eeaa8eSAndroid Build Coastguard Worker 
63*e5eeaa8eSAndroid Build Coastguard Worker   VerifyConfiguration(config_writer.ToString());
64*e5eeaa8eSAndroid Build Coastguard Worker }
65*e5eeaa8eSAndroid Build Coastguard Worker 
TEST(linkerconfig_configuration_fulltest,apexes_with_jni_are_visible_to_system_section)66*e5eeaa8eSAndroid Build Coastguard Worker TEST(linkerconfig_configuration_fulltest,
67*e5eeaa8eSAndroid Build Coastguard Worker      apexes_with_jni_are_visible_to_system_section) {
68*e5eeaa8eSAndroid Build Coastguard Worker   MockGenericVariables();
69*e5eeaa8eSAndroid Build Coastguard Worker   Context ctx;
70*e5eeaa8eSAndroid Build Coastguard Worker   ctx.SetApexModules(
71*e5eeaa8eSAndroid Build Coastguard Worker       {CreateTestVndkApex(),
72*e5eeaa8eSAndroid Build Coastguard Worker        ApexInfo(
73*e5eeaa8eSAndroid Build Coastguard Worker            "foo", "", {}, {}, {"libjni.so"}, {}, false, true, false, false)});
74*e5eeaa8eSAndroid Build Coastguard Worker   auto config = CreateBaseConfiguration(ctx);
75*e5eeaa8eSAndroid Build Coastguard Worker 
76*e5eeaa8eSAndroid Build Coastguard Worker   auto* section = config.GetSection("system");
77*e5eeaa8eSAndroid Build Coastguard Worker   ASSERT_TRUE(section);
78*e5eeaa8eSAndroid Build Coastguard Worker   auto* ns = section->GetNamespace("foo");
79*e5eeaa8eSAndroid Build Coastguard Worker   ASSERT_TRUE(ns);
80*e5eeaa8eSAndroid Build Coastguard Worker   ASSERT_TRUE(ns->IsVisible());
81*e5eeaa8eSAndroid Build Coastguard Worker 
82*e5eeaa8eSAndroid Build Coastguard Worker   ConfigWriter config_writer;
83*e5eeaa8eSAndroid Build Coastguard Worker   config.WriteConfig(config_writer);
84*e5eeaa8eSAndroid Build Coastguard Worker   VerifyConfiguration(config_writer.ToString());
85*e5eeaa8eSAndroid Build Coastguard Worker }
86*e5eeaa8eSAndroid Build Coastguard Worker 
TEST(linkerconfig_configuration_fulltest,vendor_apex_configured_to_use_vndk_can_load_vndk)87*e5eeaa8eSAndroid Build Coastguard Worker TEST(linkerconfig_configuration_fulltest,
88*e5eeaa8eSAndroid Build Coastguard Worker      vendor_apex_configured_to_use_vndk_can_load_vndk) {
89*e5eeaa8eSAndroid Build Coastguard Worker   MockGenericVariables();
90*e5eeaa8eSAndroid Build Coastguard Worker   Context ctx;
91*e5eeaa8eSAndroid Build Coastguard Worker 
92*e5eeaa8eSAndroid Build Coastguard Worker   android::linkerconfig::proto::LinkerConfig vendor_config;
93*e5eeaa8eSAndroid Build Coastguard Worker   vendor_config.add_requirelibs("libapexprovide.so");
94*e5eeaa8eSAndroid Build Coastguard Worker   vendor_config.add_providelibs("libvendorprovide.so");
95*e5eeaa8eSAndroid Build Coastguard Worker   ctx.SetVendorConfig(vendor_config);
96*e5eeaa8eSAndroid Build Coastguard Worker 
97*e5eeaa8eSAndroid Build Coastguard Worker   // Vendor apex requires :vndk
98*e5eeaa8eSAndroid Build Coastguard Worker   auto vendor_apex = ApexInfo("vendor_apex",
99*e5eeaa8eSAndroid Build Coastguard Worker                               "/apex/vendor_apex",
100*e5eeaa8eSAndroid Build Coastguard Worker                               {"libapexprovide.so"},
101*e5eeaa8eSAndroid Build Coastguard Worker                               {":vndk", "libvendorprovide.so"},
102*e5eeaa8eSAndroid Build Coastguard Worker                               {},
103*e5eeaa8eSAndroid Build Coastguard Worker                               {},
104*e5eeaa8eSAndroid Build Coastguard Worker                               false,
105*e5eeaa8eSAndroid Build Coastguard Worker                               true,
106*e5eeaa8eSAndroid Build Coastguard Worker                               true,
107*e5eeaa8eSAndroid Build Coastguard Worker                               false);
108*e5eeaa8eSAndroid Build Coastguard Worker   vendor_apex.partition = "VENDOR";
109*e5eeaa8eSAndroid Build Coastguard Worker   ctx.SetApexModules({vendor_apex,
110*e5eeaa8eSAndroid Build Coastguard Worker                       // To generate vendor section
111*e5eeaa8eSAndroid Build Coastguard Worker                       ApexInfo("com.android.vndk.v",
112*e5eeaa8eSAndroid Build Coastguard Worker                                "/apex/com.android.vndk.v",
113*e5eeaa8eSAndroid Build Coastguard Worker                                {},
114*e5eeaa8eSAndroid Build Coastguard Worker                                {},
115*e5eeaa8eSAndroid Build Coastguard Worker                                {},
116*e5eeaa8eSAndroid Build Coastguard Worker                                {},
117*e5eeaa8eSAndroid Build Coastguard Worker                                false,
118*e5eeaa8eSAndroid Build Coastguard Worker                                true,
119*e5eeaa8eSAndroid Build Coastguard Worker                                true,
120*e5eeaa8eSAndroid Build Coastguard Worker                                false)});
121*e5eeaa8eSAndroid Build Coastguard Worker 
122*e5eeaa8eSAndroid Build Coastguard Worker   auto config = CreateBaseConfiguration(ctx);
123*e5eeaa8eSAndroid Build Coastguard Worker 
124*e5eeaa8eSAndroid Build Coastguard Worker   auto* section = config.GetSection("vendor");
125*e5eeaa8eSAndroid Build Coastguard Worker   ASSERT_TRUE(section);
126*e5eeaa8eSAndroid Build Coastguard Worker 
127*e5eeaa8eSAndroid Build Coastguard Worker   // vendor apex should be able to load vndk libraries
128*e5eeaa8eSAndroid Build Coastguard Worker   auto shared_libs =
129*e5eeaa8eSAndroid Build Coastguard Worker       section->GetNamespace("vendor_apex")->GetLink("vndk").GetSharedLibs();
130*e5eeaa8eSAndroid Build Coastguard Worker   ASSERT_TRUE(std::find(shared_libs.begin(),
131*e5eeaa8eSAndroid Build Coastguard Worker                         shared_libs.end(),
132*e5eeaa8eSAndroid Build Coastguard Worker                         "vndk_core_libraries") != shared_libs.end());
133*e5eeaa8eSAndroid Build Coastguard Worker 
134*e5eeaa8eSAndroid Build Coastguard Worker   ConfigWriter config_writer;
135*e5eeaa8eSAndroid Build Coastguard Worker   config.WriteConfig(config_writer);
136*e5eeaa8eSAndroid Build Coastguard Worker   VerifyConfiguration(config_writer.ToString());
137*e5eeaa8eSAndroid Build Coastguard Worker }
138