1 /*
2  * Copyright (c) 2021 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 #include <iostream>
16 #include <memory>
17 
18 #include "iservice_registry.h"
19 #include "netsys_native_service_proxy.h"
20 #include "system_ability_definition.h"
21 #include "netnative_log_wrapper.h"
22 #include "test.h"
23 
24 using namespace OHOS;
25 using namespace OHOS::NetsysNative;
26 using namespace OHOS::nmd;
27 enum class InterfaceMenu {
28     SET_RESOLVER_CONFIG = 0,
29     CREATE_NETWORK_CACHE = 1,
30     FLUSH_NETWORK_CACHE = 2,
31     DESTROY_NETWORK_CACHE = 3,
32     GET_ADDR_INFO = 4,
33     INTERFACE_SET_MTU = 5,
34     INTERFACE_GET_MTU = 6,
35     REGISTER_NOTIFY_CALLBACK = 7,
36     NETWORK_ADD_ROUTE = 8,
37     NETWORK_REMOVE_ROUTE = 9,
38     NETWORK_ADD_ROUTE_PARCEL = 10,
39     NETWORK_REMOVE_ROUTE_PARCEL = 11,
40     NETWORK_SET_DEFAULT = 12,
41     NETWORK_GET_DEFAULT = 13,
42     NETWORK_CREATE_PHYSICAL = 14,
43     INTERFACE_ADD_ADDRESS = 15,
44     INTERFACE_DEL_ADDRESS = 16,
45     NETWORK_ADD_INTERFACE = 17,
46     NETWORK_REMOVE_INTERFACE = 18,
47     GET_FWMARK_FOR_NETWORK = 19,
48     INTERFACE_SET_CFG = 20,
49     NETWORK_ClEAR_DEFAULT = 21,
50     GET_PROC_SYS_NET = 22,
51     INTERFACE_GET_CFG = 23,
52     GET_RESOLVER_CONFIG = 24,
53     NETWORK_CLEAR_DEFAULT = 25,
54     NETWORK_GET_DEFAULT_UNION = 26,
55     NETWORK_ADD_INTERFACE_WIFI = 27,
56     NETWORK_REMOVE_INTERFACE_WIFI = 28,
57     NETWORK_SET_DEFAULT_WIFI = 29,
58     SET_TCP_BUFFER_SIZES = 30,
59     INPUT_QUIT = 100,
60 };
61 
62 namespace {
63 std::map<InterfaceMenu, NetsysTestFunc> g_memberFuncMap;
Init()64 void Init()
65 {
66     g_memberFuncMap[InterfaceMenu::SET_RESOLVER_CONFIG] = TestSetResolverConfig;
67     g_memberFuncMap[InterfaceMenu::CREATE_NETWORK_CACHE] = TestCreateNetworkCache;
68     g_memberFuncMap[InterfaceMenu::FLUSH_NETWORK_CACHE] = TestFlushNetworkCache;
69     g_memberFuncMap[InterfaceMenu::DESTROY_NETWORK_CACHE] = TestDestroyNetworkCache;
70     g_memberFuncMap[InterfaceMenu::INTERFACE_SET_MTU] = TestInterfaceSetMtu;
71     g_memberFuncMap[InterfaceMenu::INTERFACE_GET_MTU] = TestInterfaceGetMtu;
72     g_memberFuncMap[InterfaceMenu::REGISTER_NOTIFY_CALLBACK] = TestRegisterNotifyCallback;
73     g_memberFuncMap[InterfaceMenu::NETWORK_ADD_ROUTE] = TestNetworkAddRoute;
74     g_memberFuncMap[InterfaceMenu::NETWORK_REMOVE_ROUTE] = TestNetworkRemoveRoute;
75     g_memberFuncMap[InterfaceMenu::NETWORK_ADD_ROUTE_PARCEL] = TestNetworkAddRouteParcel;
76     g_memberFuncMap[InterfaceMenu::NETWORK_REMOVE_ROUTE_PARCEL] = TestNetWorkRemoveRouteParcel;
77     g_memberFuncMap[InterfaceMenu::NETWORK_SET_DEFAULT] = TestNetworkSetDefault;
78     g_memberFuncMap[InterfaceMenu::NETWORK_GET_DEFAULT] = TestNetworkGetDefault;
79     g_memberFuncMap[InterfaceMenu::NETWORK_CLEAR_DEFAULT] = TestNetworkClearDefault;
80     g_memberFuncMap[InterfaceMenu::NETWORK_CREATE_PHYSICAL] = TestNetworkCreatePhysical;
81     g_memberFuncMap[InterfaceMenu::INTERFACE_ADD_ADDRESS] = TestInterfaceAddAddress;
82     g_memberFuncMap[InterfaceMenu::INTERFACE_DEL_ADDRESS] = TestInterfaceDelAddress;
83     g_memberFuncMap[InterfaceMenu::NETWORK_ADD_INTERFACE] = TestNetworkAddInterface;
84     g_memberFuncMap[InterfaceMenu::NETWORK_REMOVE_INTERFACE] = TestNetworkRemoveInterface;
85     g_memberFuncMap[InterfaceMenu::GET_FWMARK_FOR_NETWORK] = TestGetFwmarkForNetwork;
86     g_memberFuncMap[InterfaceMenu::INTERFACE_SET_CFG] = TestInterfaceSetCfg;
87     g_memberFuncMap[InterfaceMenu::NETWORK_ClEAR_DEFAULT] = TestNetworkClearDefault;
88     g_memberFuncMap[InterfaceMenu::GET_PROC_SYS_NET] = TestNetGetProcSysNet;
89     g_memberFuncMap[InterfaceMenu::INTERFACE_GET_CFG] = TestInterfaceGetCfg;
90     g_memberFuncMap[InterfaceMenu::GET_RESOLVER_CONFIG] = TestGetResolverConfig;
91     g_memberFuncMap[InterfaceMenu::NETWORK_GET_DEFAULT_UNION] = TestNetworkGetDefaultUnion;
92 
93     g_memberFuncMap[InterfaceMenu::NETWORK_ADD_INTERFACE_WIFI] = TestNetworkAddInterfaceWIFI;
94     g_memberFuncMap[InterfaceMenu::NETWORK_REMOVE_INTERFACE_WIFI] = TestNetworkRemoveInterfaceWIFI;
95     g_memberFuncMap[InterfaceMenu::NETWORK_SET_DEFAULT_WIFI] = TestNetworkSetDefaultWIFI;
96     g_memberFuncMap[InterfaceMenu::SET_TCP_BUFFER_SIZES] = TestSetTcpBufferSizes;
97 }
98 
Prompt()99 void Prompt()
100 {
101     printf(
102         "\n-----------start test netsys api--------------\n"
103         "0 TestSetResolverConfig\n"
104         "1 TestCreateNetworkCache\n"
105         "2 TestFlushNetworkCache\n"
106         "3 TestDestroyNetworkCache\n"
107         "5 TestInterfaceSetMtu\n"
108         "6 TestInterfaceGetMtu\n"
109         "7 TestRegisterNotifyCallback\n"
110         "8 TestNetworkAddRoute\n"
111         "9 TestNetworkRemoveRoute\n"
112         "10 TestNetworkAddRouteParcel\n"
113         "11 TestNetWorkRemoveRouteParcel\n"
114         "12 TestNetworkSetDefault\n"
115         "13 TestNetworkGetDefault\n"
116         "14 TestNetworkCreatePhysical\n"
117         "15 TestInterfaceAddAddress\n"
118         "16 TestInterfaceDelAddress\n"
119         "17 TestNetworkAddInterface\n"
120         "18 TestNetworkRemoveInterface\n"
121         "19 TestGetFwmarkForNetwork\n"
122         "20 TestInterfaceSetCfg\n"
123         "21 TestNetworkClearDefault\n"
124         "22 TestNetGetProcSysNet\n"
125         "23 TestInterfaceGetCfg\n"
126         "24 TestGetResolverConfig\n"
127         "25 TestNetworkClearDefault\n"
128         "26 TestNetworkGetDefaultUnion\n"
129         "27 TestNetworkAddInterfaceWIFI\n"
130         "28 TestNetworkRemoveInterfaceWIFI\n"
131         "29 TestNetworkSetDefaultWIFI\n"
132         "30 SetTcpBufferSizes\n"
133         "100:exit \n");
134 }
135 
GetInputData()136 int32_t GetInputData()
137 {
138     int32_t input;
139     std::cin >> input;
140     while (std::cin.fail()) {
141         std::cin.clear();
142         std::cin.ignore();
143         printf("Input error, please input number again\n");
144         std::cin >> input;
145     }
146     return input;
147 }
148 
ProcessInput(bool & loopFlag)149 void ProcessInput(bool &loopFlag)
150 {
151     int32_t inputCMD = GetInputData();
152     printf("Your choice is %d \n", inputCMD);
153     auto itFunc = g_memberFuncMap.find((InterfaceMenu)inputCMD);
154     if (itFunc != g_memberFuncMap.end()) {
155         auto memberFunc = itFunc->second;
156         if (memberFunc != nullptr) {
157             (*memberFunc)();
158             return;
159         }
160     }
161     printf("inputCMD is:[%d]\n", inputCMD);
162     switch (static_cast<InterfaceMenu>(inputCMD)) {
163         case InterfaceMenu::INPUT_QUIT: {
164             loopFlag = false;
165             printf("exit...\n");
166             break;
167         }
168         default:
169             printf("please input correct number...\n");
170             break;
171     }
172 }
173 }
main(int argc,char const * argv[])174 int main(int argc, char const *argv[])
175 {
176     Init();
177     bool loopFlag = true;
178     while (loopFlag) {
179         Prompt();
180         ProcessInput(loopFlag);
181     }
182 
183     NETNATIVE_LOGI("...exit test...");
184     return 0;
185 }
186