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.SetApexModules({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, "/vendor/odm/${LIB}"));
69 ASSERT_TRUE(ContainsPermittedPath(sphal_namespace, "/system/vendor/${LIB}"));
70
71 auto rs_namespace = system_section->GetNamespace("rs");
72 ASSERT_TRUE(rs_namespace);
73
74 ASSERT_TRUE(ContainsSearchPath(rs_namespace, "/odm/${LIB}/vndk-sp"));
75 ASSERT_TRUE(ContainsSearchPath(rs_namespace, "/vendor/${LIB}/vndk-sp"));
76 ASSERT_TRUE(ContainsSearchPath(rs_namespace, "/odm/${LIB}"));
77 ASSERT_TRUE(ContainsSearchPath(rs_namespace, "/vendor/${LIB}"));
78
79 ASSERT_TRUE(ContainsPermittedPath(rs_namespace, "/odm/${LIB}"));
80 ASSERT_TRUE(ContainsPermittedPath(rs_namespace, "/vendor/${LIB}"));
81 ASSERT_TRUE(ContainsPermittedPath(rs_namespace, "/system/vendor/${LIB}"));
82
83 auto vndk_namespace = system_section->GetNamespace("vndk");
84 ASSERT_TRUE(vndk_namespace);
85
86 ASSERT_TRUE(ContainsSearchPath(vndk_namespace, "/odm/${LIB}/vndk-sp"));
87 ASSERT_TRUE(ContainsSearchPath(vndk_namespace, "/vendor/${LIB}/vndk-sp"));
88
89 ASSERT_TRUE(ContainsPermittedPath(vndk_namespace, "/odm/${LIB}/hw"));
90 ASSERT_TRUE(ContainsPermittedPath(vndk_namespace, "/odm/${LIB}/egl"));
91 ASSERT_TRUE(ContainsPermittedPath(vndk_namespace, "/vendor/${LIB}/hw"));
92 ASSERT_TRUE(ContainsPermittedPath(vndk_namespace, "/vendor/${LIB}/egl"));
93 }
94
TEST_F(linkerconfig_default_backward_compatibility,common_vendor_section)95 TEST_F(linkerconfig_default_backward_compatibility, common_vendor_section) {
96 auto config = android::linkerconfig::contents::CreateBaseConfiguration(ctx);
97
98 auto vendor_section = config.GetSection("vendor");
99 ASSERT_TRUE(vendor_section);
100
101 auto default_namespace = vendor_section->GetNamespace("default");
102 ASSERT_TRUE(default_namespace);
103
104 ASSERT_TRUE(ContainsSearchPath(default_namespace, "/odm/${LIB}"));
105 ASSERT_TRUE(ContainsSearchPath(default_namespace, "/vendor/${LIB}"));
106 ASSERT_TRUE(ContainsSearchPath(default_namespace, "/vendor/${LIB}/hw"));
107 ASSERT_TRUE(ContainsSearchPath(default_namespace, "/vendor/${LIB}/egl"));
108 ASSERT_TRUE(ContainsPermittedPath(default_namespace, "/odm"));
109 ASSERT_TRUE(ContainsPermittedPath(default_namespace, "/vendor"));
110 ASSERT_TRUE(ContainsPermittedPath(default_namespace, "/system/vendor"));
111
112 auto vndk_namespace = vendor_section->GetNamespace("vndk");
113 ASSERT_TRUE(vndk_namespace);
114
115 ASSERT_TRUE(ContainsSearchPath(vndk_namespace, "/odm/${LIB}/vndk"));
116 ASSERT_TRUE(ContainsSearchPath(vndk_namespace, "/odm/${LIB}/vndk-sp"));
117 ASSERT_TRUE(ContainsSearchPath(vndk_namespace, "/vendor/${LIB}/vndk"));
118 ASSERT_TRUE(ContainsSearchPath(vndk_namespace, "/vendor/${LIB}/vndk-sp"));
119 }
120
TEST_F(linkerconfig_default_backward_compatibility,common_unrestricted_section)121 TEST_F(linkerconfig_default_backward_compatibility,
122 common_unrestricted_section) {
123 auto config = android::linkerconfig::contents::CreateBaseConfiguration(ctx);
124
125 auto unrestricted_section = config.GetSection("unrestricted");
126 ASSERT_TRUE(unrestricted_section);
127
128 auto default_namespace = unrestricted_section->GetNamespace("default");
129 ASSERT_TRUE(default_namespace);
130
131 ASSERT_TRUE(ContainsSearchPath(default_namespace, "/odm/${LIB}"));
132 ASSERT_TRUE(ContainsSearchPath(default_namespace, "/vendor/${LIB}"));
133 }
134