1 /*
2 * Copyright (C) 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include <gtest/gtest.h>
18
19 #include "linkerconfig/apex.h"
20 #include "linkerconfig/baseconfig.h"
21 #include "linkerconfig/configwriter.h"
22 #include "linkerconfig/variables.h"
23 #include "testbase.h"
24
25 using android::linkerconfig::contents::Context;
26 using android::linkerconfig::modules::ApexInfo;
27
28 struct linkerconfig_default_backward_compatibility : ::testing::Test {
SetUplinkerconfig_default_backward_compatibility29 void SetUp() override {
30 MockVariables("Q");
31 ApexInfo vndk_apex;
32 vndk_apex.name = "com.android.vndk.vQ";
33 ctx.AddApexModule(vndk_apex);
34 }
35 Context ctx;
36 };
37
TEST_F(linkerconfig_default_backward_compatibility,common_system_section)38 TEST_F(linkerconfig_default_backward_compatibility, common_system_section) {
39 auto config = android::linkerconfig::contents::CreateBaseConfiguration(ctx);
40
41 auto system_section = config.GetSection("system");
42 ASSERT_TRUE(system_section);
43
44 auto default_namespace = system_section->GetNamespace("default");
45 ASSERT_TRUE(default_namespace);
46
47 ASSERT_TRUE(ContainsPermittedPath(default_namespace, "/vendor/framework"));
48 ASSERT_TRUE(ContainsPermittedPath(default_namespace, "/vendor/app"));
49 ASSERT_TRUE(ContainsPermittedPath(default_namespace, "/vendor/priv-app"));
50 ASSERT_TRUE(
51 ContainsPermittedPath(default_namespace, "/system/vendor/framework"));
52 ASSERT_TRUE(ContainsPermittedPath(default_namespace, "/system/vendor/app"));
53 ASSERT_TRUE(
54 ContainsPermittedPath(default_namespace, "/system/vendor/priv-app"));
55 ASSERT_TRUE(ContainsPermittedPath(default_namespace, "/odm/framework"));
56 ASSERT_TRUE(ContainsPermittedPath(default_namespace, "/odm/app"));
57 ASSERT_TRUE(ContainsPermittedPath(default_namespace, "/odm/priv-app"));
58
59 auto sphal_namespace = system_section->GetNamespace("sphal");
60 ASSERT_TRUE(sphal_namespace);
61
62 ASSERT_TRUE(ContainsSearchPath(sphal_namespace, "/odm/${LIB}"));
63 ASSERT_TRUE(ContainsSearchPath(sphal_namespace, "/vendor/${LIB}"));
64 ASSERT_TRUE(ContainsSearchPath(sphal_namespace, "/vendor/${LIB}/hw"));
65
66 ASSERT_TRUE(ContainsPermittedPath(sphal_namespace, "/odm/${LIB}"));
67 ASSERT_TRUE(ContainsPermittedPath(sphal_namespace, "/vendor/${LIB}"));
68 ASSERT_TRUE(ContainsPermittedPath(sphal_namespace, "/system/vendor/${LIB}"));
69
70 auto rs_namespace = system_section->GetNamespace("rs");
71 ASSERT_TRUE(rs_namespace);
72
73 ASSERT_TRUE(ContainsSearchPath(rs_namespace, "/odm/${LIB}/vndk-sp"));
74 ASSERT_TRUE(ContainsSearchPath(rs_namespace, "/vendor/${LIB}/vndk-sp"));
75 ASSERT_TRUE(ContainsSearchPath(rs_namespace, "/odm/${LIB}"));
76 ASSERT_TRUE(ContainsSearchPath(rs_namespace, "/vendor/${LIB}"));
77
78 ASSERT_TRUE(ContainsPermittedPath(rs_namespace, "/odm/${LIB}"));
79 ASSERT_TRUE(ContainsPermittedPath(rs_namespace, "/vendor/${LIB}"));
80 ASSERT_TRUE(ContainsPermittedPath(rs_namespace, "/system/vendor/${LIB}"));
81
82 auto vndk_namespace = system_section->GetNamespace("vndk");
83 ASSERT_TRUE(vndk_namespace);
84
85 ASSERT_TRUE(ContainsSearchPath(vndk_namespace, "/odm/${LIB}/vndk-sp"));
86 ASSERT_TRUE(ContainsSearchPath(vndk_namespace, "/vendor/${LIB}/vndk-sp"));
87
88 ASSERT_TRUE(ContainsPermittedPath(vndk_namespace, "/odm/${LIB}/hw"));
89 ASSERT_TRUE(ContainsPermittedPath(vndk_namespace, "/odm/${LIB}/egl"));
90 ASSERT_TRUE(ContainsPermittedPath(vndk_namespace, "/vendor/${LIB}/hw"));
91 ASSERT_TRUE(ContainsPermittedPath(vndk_namespace, "/vendor/${LIB}/egl"));
92 }
93
TEST_F(linkerconfig_default_backward_compatibility,common_vendor_section)94 TEST_F(linkerconfig_default_backward_compatibility, common_vendor_section) {
95 auto config = android::linkerconfig::contents::CreateBaseConfiguration(ctx);
96
97 auto vendor_section = config.GetSection("vendor");
98 ASSERT_TRUE(vendor_section);
99
100 auto default_namespace = vendor_section->GetNamespace("default");
101 ASSERT_TRUE(default_namespace);
102
103 ASSERT_TRUE(ContainsSearchPath(default_namespace, "/odm/${LIB}"));
104 ASSERT_TRUE(ContainsSearchPath(default_namespace, "/vendor/${LIB}"));
105 ASSERT_TRUE(ContainsSearchPath(default_namespace, "/vendor/${LIB}/hw"));
106 ASSERT_TRUE(ContainsSearchPath(default_namespace, "/vendor/${LIB}/egl"));
107 ASSERT_TRUE(ContainsPermittedPath(default_namespace, "/odm"));
108 ASSERT_TRUE(ContainsPermittedPath(default_namespace, "/vendor"));
109 ASSERT_TRUE(ContainsPermittedPath(default_namespace, "/system/vendor"));
110
111 auto vndk_namespace = vendor_section->GetNamespace("vndk");
112 ASSERT_TRUE(vndk_namespace);
113
114 ASSERT_TRUE(ContainsSearchPath(vndk_namespace, "/odm/${LIB}/vndk"));
115 ASSERT_TRUE(ContainsSearchPath(vndk_namespace, "/odm/${LIB}/vndk-sp"));
116 ASSERT_TRUE(ContainsSearchPath(vndk_namespace, "/vendor/${LIB}/vndk"));
117 ASSERT_TRUE(ContainsSearchPath(vndk_namespace, "/vendor/${LIB}/vndk-sp"));
118 }
119
TEST_F(linkerconfig_default_backward_compatibility,common_unrestricted_section)120 TEST_F(linkerconfig_default_backward_compatibility,
121 common_unrestricted_section) {
122 auto config = android::linkerconfig::contents::CreateBaseConfiguration(ctx);
123
124 auto unrestricted_section = config.GetSection("unrestricted");
125 ASSERT_TRUE(unrestricted_section);
126
127 auto default_namespace = unrestricted_section->GetNamespace("default");
128 ASSERT_TRUE(default_namespace);
129
130 ASSERT_TRUE(ContainsSearchPath(default_namespace, "/odm/${LIB}"));
131 ASSERT_TRUE(ContainsSearchPath(default_namespace, "/vendor/${LIB}"));
132 }
133