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