1570af302Sopenharmony_ci/** 2570af302Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3570af302Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4570af302Sopenharmony_ci * you may not use this file except in compliance with the License. 5570af302Sopenharmony_ci * You may obtain a copy of the License at 6570af302Sopenharmony_ci * 7570af302Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8570af302Sopenharmony_ci * 9570af302Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10570af302Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11570af302Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12570af302Sopenharmony_ci * See the License for the specific language governing permissions and 13570af302Sopenharmony_ci * limitations under the License. 14570af302Sopenharmony_ci */ 15570af302Sopenharmony_ci 16570af302Sopenharmony_ci#include <dlfcn.h> 17570af302Sopenharmony_ci#include <errno.h> 18570af302Sopenharmony_ci#include <stdio.h> 19570af302Sopenharmony_ci#include <string.h> 20570af302Sopenharmony_ci 21570af302Sopenharmony_ci#include "dlns_test.h" 22570af302Sopenharmony_ci#include "functionalext.h" 23570af302Sopenharmony_ci 24570af302Sopenharmony_ci 25570af302Sopenharmony_ci/** 26570af302Sopenharmony_ci * @tc.name : dlns_inherit_0100 27570af302Sopenharmony_ci * @tc.desc : Under the INI configuration file, when shared_libs in dlns_inherit is empty, 28570af302Sopenharmony_ci * all the libraries of the inheritor can be shared by it 29570af302Sopenharmony_ci * @tc.level : Level 1 30570af302Sopenharmony_ci */ 31570af302Sopenharmony_civoid dlns_inherit_0100(void) 32570af302Sopenharmony_ci{ 33570af302Sopenharmony_ci Dl_namespace dlnsA, dlnsB; 34570af302Sopenharmony_ci dlns_init(&dlnsA, "for_inherit_A"); 35570af302Sopenharmony_ci dlns_init(&dlnsB, "inherited_class"); 36570af302Sopenharmony_ci 37570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0100", dlns_inherit(&dlnsA, &dlnsB, NULL), EOK); 38570af302Sopenharmony_ci 39570af302Sopenharmony_ci void* handle = dlopen_ns(&dlnsA, dllName, RTLD_LAZY); 40570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_0100", handle); 41570af302Sopenharmony_ci dlclose(handle); 42570af302Sopenharmony_ci 43570af302Sopenharmony_ci void* handle1 = dlopen_ns(&dlnsA, sharedLib, RTLD_LAZY); 44570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_0100", handle1); 45570af302Sopenharmony_ci dlclose(handle1); 46570af302Sopenharmony_ci} 47570af302Sopenharmony_ci 48570af302Sopenharmony_ci/** 49570af302Sopenharmony_ci * @tc.name : dlns_inherit_0200 50570af302Sopenharmony_ci * @tc.desc : Under the INI configuration file, when shared_libs in dlns_inherit is set, the set shared library 51570af302Sopenharmony_ci * name can be shared, and other than the shared library name, it will not be shared 52570af302Sopenharmony_ci * @tc.level : Level 2 53570af302Sopenharmony_ci */ 54570af302Sopenharmony_civoid dlns_inherit_0200(void) 55570af302Sopenharmony_ci{ 56570af302Sopenharmony_ci Dl_namespace dlnsA, dlnsB; 57570af302Sopenharmony_ci dlns_init(&dlnsA, "for_inherit_A"); 58570af302Sopenharmony_ci dlns_init(&dlnsB, "inherited_class"); 59570af302Sopenharmony_ci 60570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0200", dlns_inherit(&dlnsA, &dlnsB, dllName), EOK); 61570af302Sopenharmony_ci 62570af302Sopenharmony_ci void* handle = dlopen_ns(&dlnsA, dllName, RTLD_LAZY); 63570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_0200", handle); 64570af302Sopenharmony_ci dlclose(handle); 65570af302Sopenharmony_ci 66570af302Sopenharmony_ci void* handle1 = dlopen_ns(&dlnsA, sharedLib, RTLD_LAZY); 67570af302Sopenharmony_ci EXPECT_FALSE("dlns_inherit_0200", handle1); 68570af302Sopenharmony_ci} 69570af302Sopenharmony_ci 70570af302Sopenharmony_ci/** 71570af302Sopenharmony_ci * @tc.name : dlns_inherit_0300 72570af302Sopenharmony_ci * @tc.desc : Under the INI configuration file, the library that cannot be opened 73570af302Sopenharmony_ci * by itself is opened through inheritance 74570af302Sopenharmony_ci * @tc.level : Level 1 75570af302Sopenharmony_ci */ 76570af302Sopenharmony_civoid dlns_inherit_0300(void) 77570af302Sopenharmony_ci{ 78570af302Sopenharmony_ci Dl_namespace dlnsA, dlnsB; 79570af302Sopenharmony_ci dlns_init(&dlnsA, "inherit_A"); 80570af302Sopenharmony_ci dlns_init(&dlnsB, "inherited_class"); 81570af302Sopenharmony_ci 82570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0300", dlns_create(&dlnsA, NULL), EOK); 83570af302Sopenharmony_ci 84570af302Sopenharmony_ci void* handle1 = dlopen_ns(&dlnsA, dllName_inh_003, RTLD_LAZY); 85570af302Sopenharmony_ci EXPECT_FALSE("dlns_inherit_0300", handle1); 86570af302Sopenharmony_ci 87570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0300", dlns_inherit(&dlnsA, &dlnsB, dllName_inh_003), EOK); 88570af302Sopenharmony_ci 89570af302Sopenharmony_ci void* handle = dlopen_ns(&dlnsA, dllName_inh_003, RTLD_LAZY); 90570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_0300", handle); 91570af302Sopenharmony_ci dlclose(handle); 92570af302Sopenharmony_ci} 93570af302Sopenharmony_ci 94570af302Sopenharmony_ci/** 95570af302Sopenharmony_ci * @tc.name : dlns_inherit_0400 96570af302Sopenharmony_ci * @tc.desc : In the INI configuration file, inheritance cannot be passed, and cannot be opened after generation 97570af302Sopenharmony_ci * @tc.level : Level 2 98570af302Sopenharmony_ci */ 99570af302Sopenharmony_civoid dlns_inherit_0400(void) 100570af302Sopenharmony_ci{ 101570af302Sopenharmony_ci Dl_namespace dlnsA, dlnsAA, dlnsB; 102570af302Sopenharmony_ci dlns_init(&dlnsA, "for_inherit_A"); 103570af302Sopenharmony_ci dlns_init(&dlnsAA, "for_inherit_AA"); 104570af302Sopenharmony_ci dlns_init(&dlnsB, "inherited_class"); 105570af302Sopenharmony_ci 106570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0400", dlns_inherit(&dlnsA, &dlnsB, dllName), EOK); 107570af302Sopenharmony_ci 108570af302Sopenharmony_ci void* handle = dlopen_ns(&dlnsA, dllName, RTLD_LAZY); 109570af302Sopenharmony_ci EXPECT_PTRNE("dlns_inherit_0400", handle, NULL); 110570af302Sopenharmony_ci dlclose(handle); 111570af302Sopenharmony_ci 112570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0400", dlns_inherit(&dlnsAA, &dlnsA, NULL), EOK); 113570af302Sopenharmony_ci 114570af302Sopenharmony_ci void* handle1 = dlopen_ns(&dlnsAA, dllName, RTLD_LAZY); 115570af302Sopenharmony_ci EXPECT_FALSE("dlns_inherit_0400", handle1); 116570af302Sopenharmony_ci} 117570af302Sopenharmony_ci 118570af302Sopenharmony_ci/** 119570af302Sopenharmony_ci * @tc.name : dlns_inherit_0500 120570af302Sopenharmony_ci * @tc.desc : Create ns through the interface, when shared_libs in dlns_inherit is empty, 121570af302Sopenharmony_ci * all the libraries of the inheritor can be shared by it 122570af302Sopenharmony_ci * @tc.level : Level 1 123570af302Sopenharmony_ci */ 124570af302Sopenharmony_civoid dlns_inherit_0500(void) 125570af302Sopenharmony_ci{ 126570af302Sopenharmony_ci Dl_namespace dlnsA, dlnsB; 127570af302Sopenharmony_ci dlns_init(&dlnsA, "dlns_inherit_0500_A"); 128570af302Sopenharmony_ci dlns_init(&dlnsB, "dlns_inherit_0500_B"); 129570af302Sopenharmony_ci 130570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0500", dlns_create(&dlnsA, NULL), EOK); 131570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0500", dlns_create(&dlnsB, path), EOK); 132570af302Sopenharmony_ci 133570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0500", dlns_set_namespace_separated("dlns_inherit_0500_A", true), EOK); 134570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0500", dlns_set_namespace_separated("dlns_inherit_0500_B", true), EOK); 135570af302Sopenharmony_ci 136570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0500", dlns_inherit(&dlnsA, &dlnsB, NULL), EOK); 137570af302Sopenharmony_ci 138570af302Sopenharmony_ci void* handle = dlopen_ns(&dlnsA, dllName, RTLD_LAZY); 139570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_0500", handle); 140570af302Sopenharmony_ci dlclose(handle); 141570af302Sopenharmony_ci 142570af302Sopenharmony_ci handle = dlopen_ns(&dlnsA, sharedLib, RTLD_LAZY); 143570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_0500", handle); 144570af302Sopenharmony_ci dlclose(handle); 145570af302Sopenharmony_ci} 146570af302Sopenharmony_ci 147570af302Sopenharmony_ci/** 148570af302Sopenharmony_ci * @tc.name : dlns_inherit_0600 149570af302Sopenharmony_ci * @tc.desc : Create ns through the interface, when shared_libs in dlns_inherit is set, the set shared 150570af302Sopenharmony_ci * library name can be shared, other than the shared library name, it will not be shared 151570af302Sopenharmony_ci * @tc.level : Level 2 152570af302Sopenharmony_ci */ 153570af302Sopenharmony_civoid dlns_inherit_0600(void) 154570af302Sopenharmony_ci{ 155570af302Sopenharmony_ci Dl_namespace dlnsA, dlnsB; 156570af302Sopenharmony_ci dlns_init(&dlnsA, "dlns_inherit_0600_A"); 157570af302Sopenharmony_ci dlns_init(&dlnsB, "dlns_inherit_0600_B"); 158570af302Sopenharmony_ci 159570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0600", dlns_create(&dlnsA, NULL), EOK); 160570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0600", dlns_create(&dlnsB, path), EOK); 161570af302Sopenharmony_ci 162570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0600", dlns_set_namespace_separated("dlns_inherit_0600_A", true), EOK); 163570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0600", dlns_set_namespace_separated("dlns_inherit_0600_B", true), EOK); 164570af302Sopenharmony_ci 165570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0600", dlns_inherit(&dlnsA, &dlnsB, dllName), EOK); 166570af302Sopenharmony_ci 167570af302Sopenharmony_ci void* handle = dlopen_ns(&dlnsA, dllName, RTLD_LAZY); 168570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_0600", handle); 169570af302Sopenharmony_ci dlclose(handle); 170570af302Sopenharmony_ci 171570af302Sopenharmony_ci handle = dlopen_ns(&dlnsA, sharedLib, RTLD_LAZY); 172570af302Sopenharmony_ci EXPECT_FALSE("dlns_inherit_0600", handle); 173570af302Sopenharmony_ci} 174570af302Sopenharmony_ci 175570af302Sopenharmony_ci/** 176570af302Sopenharmony_ci * @tc.name : dlns_inherit_0700 177570af302Sopenharmony_ci * @tc.desc : Create ns through interfaces, and open libraries that cannot be 178570af302Sopenharmony_ci * opened by themselves through inheritance. 179570af302Sopenharmony_ci * @tc.level : Level 2 180570af302Sopenharmony_ci */ 181570af302Sopenharmony_civoid dlns_inherit_0700(void) 182570af302Sopenharmony_ci{ 183570af302Sopenharmony_ci Dl_namespace dlnsA, dlnsB; 184570af302Sopenharmony_ci dlns_init(&dlnsA, "dlns_inherit_0700_A"); 185570af302Sopenharmony_ci dlns_init(&dlnsB, "dlns_inherit_0700_B"); 186570af302Sopenharmony_ci 187570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0700", dlns_create(&dlnsA, NULL), EOK); 188570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0700", dlns_create(&dlnsB, path), EOK); 189570af302Sopenharmony_ci 190570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0700", dlns_set_namespace_separated("dlns_inherit_0700_A", true), EOK); 191570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0700", dlns_set_namespace_separated("dlns_inherit_0700_B", true), EOK); 192570af302Sopenharmony_ci 193570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0700", dlns_set_namespace_allowed_libs("dlns_inherit_0700_A", dllName2), EOK); 194570af302Sopenharmony_ci 195570af302Sopenharmony_ci void* handle = dlopen_ns(&dlnsA, dllName_inh_007, RTLD_LAZY); 196570af302Sopenharmony_ci EXPECT_FALSE("dlns_inherit_0700", handle); 197570af302Sopenharmony_ci 198570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0700", dlns_inherit(&dlnsA, &dlnsB, NULL), EOK); 199570af302Sopenharmony_ci 200570af302Sopenharmony_ci handle = dlopen_ns(&dlnsA, dllName_inh_007, RTLD_LAZY); 201570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_0700", handle); 202570af302Sopenharmony_ci dlclose(handle); 203570af302Sopenharmony_ci} 204570af302Sopenharmony_ci 205570af302Sopenharmony_ci/** 206570af302Sopenharmony_ci * @tc.name : dlns_inherit_0800 207570af302Sopenharmony_ci * @tc.desc : Create ns through an interface, inheritance cannot be passed, 208570af302Sopenharmony_ci * and cannot be opened between generations. 209570af302Sopenharmony_ci * @tc.level : Level 2 210570af302Sopenharmony_ci */ 211570af302Sopenharmony_civoid dlns_inherit_0800(void) 212570af302Sopenharmony_ci{ 213570af302Sopenharmony_ci Dl_namespace dlnsA, dlnsB, dlnsC; 214570af302Sopenharmony_ci dlns_init(&dlnsA, "dlns_inherit_0800_A"); 215570af302Sopenharmony_ci dlns_init(&dlnsB, "dlns_inherit_0800_B"); 216570af302Sopenharmony_ci dlns_init(&dlnsC, "dlns_inherit_0800_C"); 217570af302Sopenharmony_ci 218570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0800", dlns_create(&dlnsA, NULL), EOK); 219570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0800", dlns_create(&dlnsB, NULL), EOK); 220570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0800", dlns_create(&dlnsC, path), EOK); 221570af302Sopenharmony_ci 222570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0800", dlns_set_namespace_separated("dlns_inherit_0800_A", true), EOK); 223570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0800", dlns_set_namespace_separated("dlns_inherit_0800_B", true), EOK); 224570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0800", dlns_set_namespace_separated("dlns_inherit_0800_C", true), EOK); 225570af302Sopenharmony_ci 226570af302Sopenharmony_ci // A继承B, B继承C 227570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0800", dlns_inherit(&dlnsB, &dlnsC, NULL), EOK); 228570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0800", dlns_inherit(&dlnsA, &dlnsB, NULL), EOK); 229570af302Sopenharmony_ci 230570af302Sopenharmony_ci void* handle = dlopen_ns(&dlnsB, dllName_inh_008, RTLD_LAZY); 231570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_0800", handle); 232570af302Sopenharmony_ci dlclose(handle); 233570af302Sopenharmony_ci 234570af302Sopenharmony_ci handle = dlopen_ns(&dlnsA, dllName_inh_008, RTLD_LAZY); 235570af302Sopenharmony_ci EXPECT_FALSE("dlns_inherit_0800", handle); 236570af302Sopenharmony_ci} 237570af302Sopenharmony_ci 238570af302Sopenharmony_ci/** 239570af302Sopenharmony_ci * @tc.name : dlns_inherit_0900 240570af302Sopenharmony_ci * @tc.desc : Inherit multiple namespaces 241570af302Sopenharmony_ci * @tc.level : Level 2 242570af302Sopenharmony_ci */ 243570af302Sopenharmony_civoid dlns_inherit_0900(void) 244570af302Sopenharmony_ci{ 245570af302Sopenharmony_ci Dl_namespace dlnsA, dlnsB, dlnsC, dlnsD; 246570af302Sopenharmony_ci dlns_init(&dlnsA, "dlns_inherit_0900_A"); 247570af302Sopenharmony_ci dlns_init(&dlnsB, "dlns_inherit_0900_B"); 248570af302Sopenharmony_ci dlns_init(&dlnsC, "dlns_inherit_0900_C"); 249570af302Sopenharmony_ci dlns_init(&dlnsD, "dlns_inherit_0900_D"); 250570af302Sopenharmony_ci 251570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0900", dlns_create(&dlnsA, NULL), EOK); 252570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0900", dlns_create(&dlnsB, pathB), EOK); 253570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0900", dlns_create(&dlnsC, pathC), EOK); 254570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0900", dlns_create(&dlnsD, pathD), EOK); 255570af302Sopenharmony_ci 256570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0900", dlns_set_namespace_separated("dlns_inherit_0900_A", true), EOK); 257570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0900", dlns_set_namespace_separated("dlns_inherit_0900_B", true), EOK); 258570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0900", dlns_set_namespace_separated("dlns_inherit_0900_C", true), EOK); 259570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0900", dlns_set_namespace_separated("dlns_inherit_0900_D", true), EOK); 260570af302Sopenharmony_ci 261570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0900", dlns_inherit(&dlnsA, &dlnsB, NULL), EOK); 262570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0900", dlns_inherit(&dlnsA, &dlnsC, NULL), EOK); 263570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_0900", dlns_inherit(&dlnsA, &dlnsD, NULL), EOK); 264570af302Sopenharmony_ci 265570af302Sopenharmony_ci void* handle1 = dlopen_ns(&dlnsA, libB, RTLD_LAZY); 266570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_0900", handle1); 267570af302Sopenharmony_ci dlclose(handle1); 268570af302Sopenharmony_ci 269570af302Sopenharmony_ci void* handle2 = dlopen_ns(&dlnsA, libC, RTLD_LAZY); 270570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_0900", handle2); 271570af302Sopenharmony_ci dlclose(handle2); 272570af302Sopenharmony_ci 273570af302Sopenharmony_ci void* handle3 = dlopen_ns(&dlnsA, libD, RTLD_LAZY); 274570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_0900", handle3); 275570af302Sopenharmony_ci dlclose(handle3); 276570af302Sopenharmony_ci} 277570af302Sopenharmony_ci 278570af302Sopenharmony_ci/** 279570af302Sopenharmony_ci * @tc.name : dlns_inherit_1000 280570af302Sopenharmony_ci * @tc.desc : Inherited by multiple namespaces 281570af302Sopenharmony_ci * @tc.level : Level 2 282570af302Sopenharmony_ci */ 283570af302Sopenharmony_civoid dlns_inherit_1000(void) 284570af302Sopenharmony_ci{ 285570af302Sopenharmony_ci Dl_namespace dlnsA, dlnsB, dlnsC, dlnsD; 286570af302Sopenharmony_ci dlns_init(&dlnsA, "dlns_inherit_1000_A"); 287570af302Sopenharmony_ci dlns_init(&dlnsB, "dlns_inherit_1000_B"); 288570af302Sopenharmony_ci dlns_init(&dlnsC, "dlns_inherit_1000_C"); 289570af302Sopenharmony_ci dlns_init(&dlnsD, "dlns_inherit_1000_D"); 290570af302Sopenharmony_ci 291570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1000", dlns_create(&dlnsA, path), EOK); 292570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1000", dlns_create(&dlnsB, NULL), EOK); 293570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1000", dlns_create(&dlnsC, NULL), EOK); 294570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1000", dlns_create(&dlnsD, NULL), EOK); 295570af302Sopenharmony_ci 296570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1000", dlns_set_namespace_separated("dlns_inherit_1000_A", true), EOK); 297570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1000", dlns_set_namespace_separated("dlns_inherit_1000_B", true), EOK); 298570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1000", dlns_set_namespace_separated("dlns_inherit_1000_C", true), EOK); 299570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1000", dlns_set_namespace_separated("dlns_inherit_1000_D", true), EOK); 300570af302Sopenharmony_ci 301570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1000", dlns_inherit(&dlnsB, &dlnsA, NULL), EOK); 302570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1000", dlns_inherit(&dlnsC, &dlnsA, NULL), EOK); 303570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1000", dlns_inherit(&dlnsD, &dlnsA, NULL), EOK); 304570af302Sopenharmony_ci 305570af302Sopenharmony_ci void* handle1 = dlopen_ns(&dlnsB, dllName, RTLD_LAZY); 306570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_1000", handle1); 307570af302Sopenharmony_ci dlclose(handle1); 308570af302Sopenharmony_ci 309570af302Sopenharmony_ci void* handle2 = dlopen_ns(&dlnsC, dllName, RTLD_LAZY); 310570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_1000", handle2); 311570af302Sopenharmony_ci dlclose(handle2); 312570af302Sopenharmony_ci 313570af302Sopenharmony_ci void* handle3 = dlopen_ns(&dlnsD, dllName, RTLD_LAZY); 314570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_1000", handle3); 315570af302Sopenharmony_ci dlclose(handle3); 316570af302Sopenharmony_ci} 317570af302Sopenharmony_ci 318570af302Sopenharmony_ci/** 319570af302Sopenharmony_ci * @tc.name : dlns_inherit_1100 320570af302Sopenharmony_ci * @tc.desc : When repeating inheritance, replace the original inheritance relationship 321570af302Sopenharmony_ci * @tc.level : Level 2 322570af302Sopenharmony_ci */ 323570af302Sopenharmony_civoid dlns_inherit_1100(void) 324570af302Sopenharmony_ci{ 325570af302Sopenharmony_ci Dl_namespace dlnsA, dlnsB; 326570af302Sopenharmony_ci dlns_init(&dlnsA, "dlns_inherit_1100_A"); 327570af302Sopenharmony_ci dlns_init(&dlnsB, "dlns_inherit_1100_B"); 328570af302Sopenharmony_ci 329570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1100", dlns_create(&dlnsA, NULL), EOK); 330570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1100", dlns_create(&dlnsB, NULL), EOK); 331570af302Sopenharmony_ci 332570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1100", dlns_set_namespace_separated("dlns_inherit_1100_A", true), EOK); 333570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1100", dlns_set_namespace_separated("dlns_inherit_1100_B", true), EOK); 334570af302Sopenharmony_ci 335570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1100", dlns_inherit(&dlnsA, &dlnsB, NULL), EOK); 336570af302Sopenharmony_ci void* handle = dlopen_ns(&dlnsA, dllName_inh_011, RTLD_LAZY); 337570af302Sopenharmony_ci EXPECT_FALSE("dlns_inherit_1100", handle); 338570af302Sopenharmony_ci 339570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1100", dlns_set_namespace_allowed_libs("dlns_inherit_1100_B", dllName_inh_011), EOK); 340570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1100", dlns_set_namespace_permitted_paths("dlns_inherit_1100_B", dllNamePath), EOK); 341570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1100", dlns_set_namespace_lib_path("dlns_inherit_1100_B", path), EOK); 342570af302Sopenharmony_ci 343570af302Sopenharmony_ci // AGIN 344570af302Sopenharmony_ci EXPECT_EQ("dlns_inherit_1100", dlns_inherit(&dlnsA, &dlnsB, NULL), EOK); 345570af302Sopenharmony_ci 346570af302Sopenharmony_ci handle = dlopen_ns(&dlnsA, dllName_inh_011, RTLD_LAZY); 347570af302Sopenharmony_ci EXPECT_TRUE("dlns_inherit_1100", handle); 348570af302Sopenharmony_ci dlclose(handle); 349570af302Sopenharmony_ci} 350570af302Sopenharmony_ci 351570af302Sopenharmony_ciTEST_FUN G_Fun_Array[] = { 352570af302Sopenharmony_ci dlns_inherit_0100, 353570af302Sopenharmony_ci dlns_inherit_0200, 354570af302Sopenharmony_ci dlns_inherit_0300, 355570af302Sopenharmony_ci dlns_inherit_0400, 356570af302Sopenharmony_ci dlns_inherit_0500, 357570af302Sopenharmony_ci dlns_inherit_0600, 358570af302Sopenharmony_ci dlns_inherit_0700, 359570af302Sopenharmony_ci dlns_inherit_0800, 360570af302Sopenharmony_ci dlns_inherit_0900, 361570af302Sopenharmony_ci dlns_inherit_1000, 362570af302Sopenharmony_ci dlns_inherit_1100, 363570af302Sopenharmony_ci}; 364570af302Sopenharmony_ciint main(void) 365570af302Sopenharmony_ci{ 366570af302Sopenharmony_ci int num = sizeof(G_Fun_Array)/sizeof(TEST_FUN); 367570af302Sopenharmony_ci for (int pos = 0; pos < num; ++pos) { 368570af302Sopenharmony_ci G_Fun_Array[pos](); 369570af302Sopenharmony_ci } 370570af302Sopenharmony_ci 371570af302Sopenharmony_ci return t_status; 372570af302Sopenharmony_ci}