• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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