1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <gtest/gtest.h>
17 
18 #include "iservice_registry.h"
19 #include "system_ability_definition.h"
20 
21 #include "bpf_def.h"
22 #include "bpf_mapper.h"
23 #include "bpf_path.h"
24 #include "conn_manager.h"
25 #include "net_manager_constants.h"
26 #include "net_stats_constants.h"
27 #include "netnative_log_wrapper.h"
28 #include "netsys_native_service_proxy.h"
29 #include "network_permission.h"
30 
31 #include "net_all_capabilities.h"
32 #include "net_conn_client.h"
33 #include "net_handle.h"
34 #include "netmanager_base_test_security.h"
35 
36 namespace OHOS {
37 namespace NetsysNative {
38 using namespace testing::ext;
39 using namespace NetManagerStandard;
40 constexpr int32_t NETID = 101;
41 constexpr int32_t UID = 1000;
42 constexpr int32_t MTU = 1500;
43 constexpr int32_t WHICH = 14;
44 const std::string INTERFACENAME = "wlan0";
45 static constexpr uint64_t TEST_COOKIE = 1;
46 static constexpr uint32_t TEST_STATS_TYPE1 = 0;
47 static constexpr uint32_t TEST_STATS_TYPE2 = 2;
48 namespace {
ConnManagerGetProxy()49 sptr<NetsysNative::INetsysService> ConnManagerGetProxy()
50 {
51     auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
52     if (samgr == nullptr) {
53         return nullptr;
54     }
55 
56     auto remote = samgr->GetSystemAbility(COMM_NETSYS_NATIVE_SYS_ABILITY_ID);
57     if (remote == nullptr) {
58         return nullptr;
59     }
60 
61     auto proxy = iface_cast<NetsysNative::INetsysService>(remote);
62     if (proxy == nullptr) {
63         return nullptr;
64     }
65     return proxy;
66 }
67 } // namespace
68 class NetsysNativeServiceProxyTest : public testing::Test {
69 public:
70     static void SetUpTestCase();
71     static void TearDownTestCase();
72     void SetUp();
73     void TearDown();
74 };
75 
SetUpTestCase()76 void NetsysNativeServiceProxyTest::SetUpTestCase() {}
77 
TearDownTestCase()78 void NetsysNativeServiceProxyTest::TearDownTestCase() {}
79 
SetUp()80 void NetsysNativeServiceProxyTest::SetUp() {}
81 
TearDown()82 void NetsysNativeServiceProxyTest::TearDown() {}
83 
84 /**
85  * @tc.name: AddInterfaceToNetworkTest001
86  * @tc.desc: Test NetsysNativeServiceProxy AddInterfaceToNetwork.
87  * @tc.type: FUNC
88  */
89 HWTEST_F(NetsysNativeServiceProxyTest, AddInterfaceToNetworkTest001, TestSize.Level1)
90 {
91     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
92     ASSERT_NE(netsysNativeService, nullptr);
93     int32_t ret = netsysNativeService->NetworkCreatePhysical(NETID, nmd::NetworkPermission::PERMISSION_NONE);
94     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
95 
96     NetManagerBaseAccessToken access;
97     NetHandle handle;
98     NetConnClient::GetInstance().GetDefaultNet(handle);
99     NetAllCapabilities netAllCap;
100     NetConnClient::GetInstance().GetNetCapabilities(handle, netAllCap);
101     if (netAllCap.bearerTypes_.count(NetManagerStandard::BEARER_CELLULAR) > 0 ||
102         netAllCap.bearerTypes_.count(NetManagerStandard::BEARER_WIFI) > 0) {
103         return;
104     }
105 
106     ret = netsysNativeService->NetworkAddInterface(NETID, INTERFACENAME, BEARER_DEFAULT);
107     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
108     ret = netsysNativeService->AddInterfaceAddress(INTERFACENAME, "192.168.113.209", 24);
109     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
110 }
111 
112 /**
113  * @tc.name: AddRouteTest001
114  * @tc.desc: Test NetsysNativeServiceProxy AddRoute.
115  * @tc.type: FUNC
116  */
117 HWTEST_F(NetsysNativeServiceProxyTest, AddRouteTest001, TestSize.Level1)
118 {
119     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
120     ASSERT_NE(netsysNativeService, nullptr);
121     int32_t ret = netsysNativeService->NetworkAddRoute(NETID, INTERFACENAME, "0.0.0.0/0", "192.168.113.222");
122     EXPECT_LE(ret, 0);
123     ret = netsysNativeService->NetworkAddRoute(NETID, INTERFACENAME, "192.168.113.0/24", "0.0.0.0");
124     EXPECT_LE(ret, 0);
125 }
126 
127 /**
128  * @tc.name: SetDefaultNetworkTest001
129  * @tc.desc: Test NetsysNativeServiceProxy SetDefaultNetwork.
130  * @tc.type: FUNC
131  */
132 HWTEST_F(NetsysNativeServiceProxyTest, SetDefaultNetworkTest001, TestSize.Level1)
133 {
134     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
135     ASSERT_NE(netsysNativeService, nullptr);
136     int32_t ret = netsysNativeService->NetworkSetDefault(NETID);
137     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
138 }
139 
140 /**
141  * @tc.name: GetDefaultNetworkTest001
142  * @tc.desc: Test NetsysNativeServiceProxy GetDefaultNetwork.
143  * @tc.type: FUNC
144  */
145 HWTEST_F(NetsysNativeServiceProxyTest, GetDefaultNetworkTest001, TestSize.Level1)
146 {
147     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
148     ASSERT_NE(netsysNativeService, nullptr);
149     int32_t ret = netsysNativeService->NetworkGetDefault();
150     EXPECT_EQ(ret, NETID);
151 }
152 
153 /**
154  * @tc.name: GetAllSimStatsInfoTest001
155  * @tc.desc: Test NetsysNativeServiceProxy GetAllSimStatsInfo.
156  * @tc.type: FUNC
157  */
158 HWTEST_F(NetsysNativeServiceProxyTest, GetAllSimStatsInfoTest001, TestSize.Level1)
159 {
160     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
161     ASSERT_NE(netsysNativeService, nullptr);
162     std::vector<OHOS::NetManagerStandard::NetStatsInfo> stats;
163     int32_t ret = netsysNativeService->GetAllSimStatsInfo(stats);
164     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
165 }
166 
167 /**
168  * @tc.name: RemoveInterfaceFromNetworkTest001
169  * @tc.desc: Test NetsysNativeServiceProxy RemoveInterfaceFromNetwork.
170  * @tc.type: FUNC
171  */
172 HWTEST_F(NetsysNativeServiceProxyTest, RemoveInterfaceFromNetworkTest001, TestSize.Level1)
173 {
174     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
175     ASSERT_NE(netsysNativeService, nullptr);
176     int32_t ret = netsysNativeService->DelInterfaceAddress(INTERFACENAME, "192.168.113.209", 24);
177     EXPECT_LE(ret, NetManagerStandard::NETMANAGER_SUCCESS);
178     ret = netsysNativeService->NetworkRemoveInterface(NETID, INTERFACENAME);
179     EXPECT_LE(ret, NetManagerStandard::NETMANAGER_SUCCESS);
180 }
181 
182 /**
183  * @tc.name: DestroyNetworkTest001
184  * @tc.desc: Test NetsysNativeServiceProxy DestroyNetwork.
185  * @tc.type: FUNC
186  */
187 HWTEST_F(NetsysNativeServiceProxyTest, DestroyNetworkTest001, TestSize.Level1)
188 {
189     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
190     ASSERT_NE(netsysNativeService, nullptr);
191     int32_t ret = netsysNativeService->NetworkDestroy(NETID);
192     EXPECT_LE(ret, NetManagerStandard::NETMANAGER_SUCCESS);
193 }
194 
195 HWTEST_F(NetsysNativeServiceProxyTest, NetworkAddRouteParcelTest001, TestSize.Level1)
196 {
197     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
198     ASSERT_NE(netsysNativeService, nullptr);
199     RouteInfoParcel routeInfo;
200     routeInfo.destination = "destination";
201     routeInfo.ifName = INTERFACENAME;
202     routeInfo.nextHop = "nextHop";
203     routeInfo.mtu = MTU;
204     int32_t ret = netsysNativeService->NetworkAddRouteParcel(NETID, routeInfo);
205     EXPECT_EQ(ret, -1);
206 }
207 
208 HWTEST_F(NetsysNativeServiceProxyTest, NetworkRemoveRouteParcelTest001, TestSize.Level1)
209 {
210     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
211     ASSERT_NE(netsysNativeService, nullptr);
212     RouteInfoParcel routeInfo;
213     routeInfo.destination = "";
214     routeInfo.ifName = INTERFACENAME;
215     routeInfo.nextHop = "";
216     routeInfo.mtu = MTU;
217     int32_t ret = netsysNativeService->NetworkRemoveRouteParcel(NETID, routeInfo);
218     EXPECT_EQ(ret, -1);
219 }
220 
221 HWTEST_F(NetsysNativeServiceProxyTest, NetworkClearDefaultTest001, TestSize.Level1)
222 {
223     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
224     ASSERT_NE(netsysNativeService, nullptr);
225     int32_t ret = netsysNativeService->NetworkClearDefault();
226     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
227 }
228 
229 HWTEST_F(NetsysNativeServiceProxyTest, GetSetProcSysNetTest001, TestSize.Level1)
230 {
231     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
232     ASSERT_NE(netsysNativeService, nullptr);
233     std::string parameter = "TestParameter";
234     std::string value = "Testvalue";
235     int32_t ret = netsysNativeService->SetProcSysNet(AF_INET, WHICH, INTERFACENAME, parameter, value);
236     ret = netsysNativeService->GetProcSysNet(AF_INET, WHICH, INTERFACENAME, parameter, value);
237     EXPECT_GE(ret, ERR_FLATTEN_OBJECT);
238 }
239 
240 HWTEST_F(NetsysNativeServiceProxyTest, GetProcSysNetTest001, TestSize.Level1)
241 {
242     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
243     ASSERT_NE(netsysNativeService, nullptr);
244     int32_t ret = netsysNativeService->SetInternetPermission(UID, true, false);
245     ret = netsysNativeService->NetworkCreateVirtual(NETID, true);
246     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
247 }
248 
249 HWTEST_F(NetsysNativeServiceProxyTest, AddStaticArp001, TestSize.Level1)
250 {
251     std::string ipAddr = "192.168.1.100";
252     std::string macAddr = "aa:bb:cc:dd:ee:ff";
253     std::string ifName = "wlan0";
254     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
255     ASSERT_NE(netsysNativeService, nullptr);
256     int32_t ret = netsysNativeService->AddStaticArp(ipAddr, macAddr, ifName);
257     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
258 }
259 
260 HWTEST_F(NetsysNativeServiceProxyTest, DelStaticArp001, TestSize.Level1)
261 {
262     std::string ipAddr = "192.168.1.100";
263     std::string macAddr = "aa:bb:cc:dd:ee:ff";
264     std::string ifName = "wlan0";
265     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
266     ASSERT_NE(netsysNativeService, nullptr);
267     int32_t ret = netsysNativeService->DelStaticArp(ipAddr, macAddr, ifName);
268     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
269 }
270 
271 HWTEST_F(NetsysNativeServiceProxyTest, GetFwmarkForNetworkTest001, TestSize.Level1)
272 {
273     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
274     ASSERT_NE(netsysNativeService, nullptr);
275     MarkMaskParcel markMaskParcel;
276     markMaskParcel.mark = 1;
277     markMaskParcel.mask = 0XFFFF;
278     int32_t ret = netsysNativeService->GetFwmarkForNetwork(NETID, markMaskParcel);
279     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
280 }
281 
282 HWTEST_F(NetsysNativeServiceProxyTest, GetCookieStatsTest001, TestSize.Level1)
283 {
284     uint64_t stats = 0;
285     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
286     ASSERT_NE(netsysNativeService, nullptr);
287     BpfMapper<socket_cookie_stats_key, app_cookie_stats_value> appCookieStatsMap(APP_COOKIE_STATS_MAP_PATH, BPF_ANY);
288     int32_t ret = netsysNativeService->GetCookieStats(stats, TEST_STATS_TYPE1, TEST_COOKIE);
289     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_ERR_INTERNAL);
290 
291     ret = netsysNativeService->GetCookieStats(stats, TEST_STATS_TYPE2, TEST_COOKIE);
292     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_ERR_INTERNAL);
293 }
294 
295 HWTEST_F(NetsysNativeServiceProxyTest, NetsysNativeServiceProxyBranchTest001, TestSize.Level1)
296 {
297     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
298     ASSERT_NE(netsysNativeService, nullptr);
299 
300     sptr<OHOS::NetsysNative::INetDnsResultCallback> resultCallback = nullptr;
301     uint32_t timeStep = 0;
302     int32_t ret = netsysNativeService->RegisterDnsResultCallback(resultCallback, timeStep);
303     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_ERR_LOCAL_PTR_NULL);
304 
305     ret = netsysNativeService->UnregisterDnsResultCallback(resultCallback);
306     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_ERR_LOCAL_PTR_NULL);
307 
308     sptr<OHOS::NetsysNative::INetDnsHealthCallback> healthCallback = nullptr;
309     ret = netsysNativeService->RegisterDnsHealthCallback(healthCallback);
310     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_ERR_LOCAL_PTR_NULL);
311 
312     ret = netsysNativeService->UnregisterDnsHealthCallback(healthCallback);
313     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_ERR_LOCAL_PTR_NULL);
314 
315     sptr<INotifyCallback> notifyCallback = nullptr;
316     ret = netsysNativeService->RegisterNotifyCallback(notifyCallback);
317     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_ERR_LOCAL_PTR_NULL);
318 
319     ret = netsysNativeService->UnRegisterNotifyCallback(notifyCallback);
320     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_ERR_LOCAL_PTR_NULL);
321 
322     uint64_t stats = 0;
323     uint32_t type = 0;
324     uint64_t cookie = 0;
325     ret = netsysNativeService->GetCookieStats(stats, type, cookie);
326     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_ERR_INTERNAL);
327 }
328 
329 HWTEST_F(NetsysNativeServiceProxyTest, GetNetworkSharingTypeTest001, TestSize.Level1)
330 {
331     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
332     ASSERT_NE(netsysNativeService, nullptr);
333     std::set<uint32_t> sharingTypeIsOn;
334     int32_t ret = netsysNativeService->GetNetworkSharingType(sharingTypeIsOn);
335     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
336 }
337 
338 HWTEST_F(NetsysNativeServiceProxyTest, UpdateNetworkSharingTypeTest001, TestSize.Level1)
339 {
340     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
341     ASSERT_NE(netsysNativeService, nullptr);
342     uint32_t type = 0;
343     int32_t ret = netsysNativeService->UpdateNetworkSharingType(type, true);
344     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
345 
346     ret = netsysNativeService->UpdateNetworkSharingType(type, false);
347     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
348 }
349 
350 HWTEST_F(NetsysNativeServiceProxyTest, SetIpv6PrivacyExtensionsTest001, TestSize.Level1)
351 {
352     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
353     ASSERT_NE(netsysNativeService, nullptr);
354     std::string interface = "wlan0";
355     uint32_t on = 0;
356     int32_t ret = netsysNativeService->SetIpv6PrivacyExtensions(interface, on);
357     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
358 
359     ret = netsysNativeService->SetEnableIpv6(interface, on);
360     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
361 }
362 
363 HWTEST_F(NetsysNativeServiceProxyTest, SetNetworkAccessPolicy001, TestSize.Level1)
364 {
365     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
366     ASSERT_NE(netsysNativeService, nullptr);
367 
368     uint32_t uid = 0;
369     NetworkAccessPolicy netAccessPolicy;
370     netAccessPolicy.wifiAllow = false;
371     netAccessPolicy.cellularAllow = false;
372     bool reconfirmFlag = true;
373     bool isBroker = false;
374     int32_t ret = netsysNativeService->SetNetworkAccessPolicy(uid, netAccessPolicy, reconfirmFlag, isBroker);
375     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
376 }
377 
378 HWTEST_F(NetsysNativeServiceProxyTest, NotifyNetBearerTypeChange001, TestSize.Level1)
379 {
380     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
381     ASSERT_NE(netsysNativeService, nullptr);
382 
383     std::set<NetManagerStandard::NetBearType> bearerTypes;
384     bearerTypes.insert(NetManagerStandard::NetBearType::BEARER_CELLULAR);
385     int32_t ret = netsysNativeService->NotifyNetBearerTypeChange(bearerTypes);
386     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
387 }
388 
389 HWTEST_F(NetsysNativeServiceProxyTest, DeleteNetworkAccessPolicy001, TestSize.Level1)
390 {
391     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
392     ASSERT_NE(netsysNativeService, nullptr);
393 
394     uint32_t uid = 0;
395     int32_t ret = netsysNativeService->DeleteNetworkAccessPolicy(uid);
396     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
397 }
398 
399 HWTEST_F(NetsysNativeServiceProxyTest, CreateVnic001, TestSize.Level1)
400 {
401     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
402     ASSERT_NE(netsysNativeService, nullptr);
403 
404     uint16_t mtu = 1500;
405     std::string tunAddr = "192.168.1.100";
406     int32_t prefix = 24;
407     std::set<int32_t> uids;
408     int32_t ret = netsysNativeService->CreateVnic(mtu, tunAddr, prefix, uids);
409     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
410 }
411 
412 HWTEST_F(NetsysNativeServiceProxyTest, DestroyVnic001, TestSize.Level1)
413 {
414     OHOS::sptr<OHOS::NetsysNative::INetsysService> netsysNativeService = ConnManagerGetProxy();
415     ASSERT_NE(netsysNativeService, nullptr);
416 
417     int32_t ret = netsysNativeService->DestroyVnic();
418     EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS);
419 }
420 } // namespace NetsysNative
421 } // namespace OHOS
422