1 /*
2  * Copyright (c) 2024 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 #ifdef GTEST_API_
19 #define private public
20 #define protected public
21 #endif
22 
23 #include "netfirewall_default_rule_parser.h"
24 
25 namespace OHOS {
26 namespace NetManagerStandard {
27 namespace {
28 using namespace testing::ext;
29 }
30 
31 class NetFirewallDefaultRuleParserTest : public testing::Test {
32 public:
SetUpTestCase()33     static void SetUpTestCase(){};
TearDownTestCase()34     static void TearDownTestCase(){};
SetUp()35     void SetUp(){};
TearDown()36     void TearDown(){};
37 };
38 
39 HWTEST_F(NetFirewallDefaultRuleParserTest, ReadJsonFile001, TestSize.Level0)
40 {
41     std::string ret = NetFirewallDefaultRuleParser::ReadJsonFile("/system/etc/communication/netmanager_ext/1111.json");
42     EXPECT_TRUE(ret.empty());
43 }
44 
45 HWTEST_F(NetFirewallDefaultRuleParserTest, ConvertFirewallRuleToConfig001, TestSize.Level0)
46 {
47     cJSON *json = cJSON_CreateObject();
48     const std::string desc = "descriptionTest";
49     cJSON_AddStringToObject(json, "description", desc.c_str());
50     sptr<NetFirewallRule> rule = new (std::nothrow) NetFirewallRule();
51     NetFirewallDefaultRuleParser::ConvertFirewallRuleToConfig(rule, json);
52     EXPECT_EQ(rule->ruleDescription, desc);
53 }
54 
55 HWTEST_F(NetFirewallDefaultRuleParserTest, ParseIpList001, TestSize.Level0)
56 {
57     cJSON *root = cJSON_CreateObject();
58     cJSON *localIps = cJSON_CreateArray();
59     cJSON *ip = cJSON_CreateObject();
60     cJSON_AddStringToObject(ip, NET_FIREWALL_IP_FAMILY.c_str(), "1");
61     cJSON_AddStringToObject(ip, NET_FIREWALL_IP_TYPE.c_str(), "1");
62     cJSON_AddStringToObject(ip, NET_FIREWALL_IP_MASK.c_str(), "32");
63     cJSON_AddStringToObject(ip, NET_FIREWALL_IP_ADDRESS.c_str(), "192.168.4.123");
64     cJSON_AddItemToArray(localIps, ip);
65     cJSON_AddItemToObject(root, NET_FIREWALL_LOCAL_IP.c_str(), localIps);
66     std::cout << "ParseIpList001 root=" << cJSON_Print(root) << std::endl;
67     std::vector<NetFirewallIpParam> list;
68     NetFirewallDefaultRuleParser::ParseIpList(list, root, NET_FIREWALL_LOCAL_IP);
69     EXPECT_FALSE(list.empty());
70 }
71 
72 HWTEST_F(NetFirewallDefaultRuleParserTest, ParseDomainList001, TestSize.Level0)
73 {
74     cJSON *root = cJSON_CreateObject();
75     cJSON *array = cJSON_CreateArray();
76     cJSON *param = cJSON_CreateObject();
77     cJSON_AddBoolToObject(param, NET_FIREWALL_DOMAIN_IS_WILDCARD.c_str(), false);
78     cJSON_AddStringToObject(param, NET_FIREWALL_DOMAIN.c_str(), "www.openharmony.cn");
79     cJSON_AddItemToArray(array, param);
80     cJSON_AddItemToObject(root, NET_FIREWALL_RULE_DOMAIN.c_str(), array);
81     std::vector<NetFirewallDomainParam> list;
82     NetFirewallDefaultRuleParser::ParseDomainList(list, root, NET_FIREWALL_RULE_DOMAIN);
83     EXPECT_FALSE(list.empty());
84 }
85 
86 HWTEST_F(NetFirewallDefaultRuleParserTest, ParseDnsObject001, TestSize.Level0)
87 {
88     cJSON *root = cJSON_CreateObject();
89     cJSON *param = cJSON_CreateObject();
90     cJSON_AddStringToObject(param, NET_FIREWALL_DNS_PRIMARY.c_str(), "192.168.1.1");
91     cJSON_AddStringToObject(param, NET_FIREWALL_DNS_STANDY.c_str(), "192.168.2.1");
92     cJSON_AddItemToObject(root, NET_FIREWALL_DNS.c_str(), param);
93     NetFirewallDnsParam rule;
94     NetFirewallDefaultRuleParser::ParseDnsObject(rule, root, NET_FIREWALL_DNS);
95     EXPECT_EQ(rule.primaryDns, "192.168.1.1");
96 }
97 
98 HWTEST_F(NetFirewallDefaultRuleParserTest, ConvertIpParamToConfig001, TestSize.Level0)
99 {
100     cJSON *root = cJSON_CreateObject();
101     cJSON_AddNumberToObject(root, NET_FIREWALL_IP_FAMILY.c_str(), FAMILY_IPV6);
102     cJSON_AddNumberToObject(root, NET_FIREWALL_IP_TYPE.c_str(), SINGLE_IP);
103     cJSON_AddNumberToObject(root, NET_FIREWALL_IP_MASK.c_str(), 64);
104     cJSON_AddStringToObject(root, NET_FIREWALL_IP_ADDRESS.c_str(), "AA22:BB11:1122:CDEF:1111:AA99::8888");
105     NetFirewallIpParam rule;
106     NetFirewallDefaultRuleParser::ConvertIpParamToConfig(rule, root);
107     EXPECT_EQ(rule.type, SINGLE_IP);
108 }
109 
110 HWTEST_F(NetFirewallDefaultRuleParserTest, ConvertIpParamToConfig002, TestSize.Level0)
111 {
112     cJSON *root = cJSON_CreateObject();
113     cJSON_AddNumberToObject(root, NET_FIREWALL_IP_FAMILY.c_str(), FAMILY_IPV4);
114     cJSON_AddNumberToObject(root, NET_FIREWALL_IP_TYPE.c_str(), SINGLE_IP);
115     cJSON_AddNumberToObject(root, NET_FIREWALL_IP_MASK.c_str(), 32);
116     cJSON_AddStringToObject(root, NET_FIREWALL_IP_ADDRESS.c_str(), "192.168.5.4");
117     NetFirewallIpParam rule;
118     NetFirewallDefaultRuleParser::ConvertIpParamToConfig(rule, root);
119     EXPECT_EQ(rule.type, SINGLE_IP);
120 }
121 
122 HWTEST_F(NetFirewallDefaultRuleParserTest, ConvertIpParamToConfig003, TestSize.Level0)
123 {
124     cJSON *root = cJSON_CreateObject();
125     cJSON_AddNumberToObject(root, NET_FIREWALL_IP_FAMILY.c_str(), FAMILY_IPV4);
126     cJSON_AddNumberToObject(root, NET_FIREWALL_IP_TYPE.c_str(), MULTIPLE_IP);
127     cJSON_AddNumberToObject(root, NET_FIREWALL_IP_MASK.c_str(), 0);
128     cJSON_AddStringToObject(root, NET_FIREWALL_IP_START.c_str(), "192.168.1.1");
129     cJSON_AddStringToObject(root, NET_FIREWALL_IP_END.c_str(), "192.168.1.5");
130     NetFirewallIpParam rule;
131     NetFirewallDefaultRuleParser::ConvertIpParamToConfig(rule, root);
132     EXPECT_EQ(rule.family, FAMILY_IPV4);
133 }
134 
135 HWTEST_F(NetFirewallDefaultRuleParserTest, ConvertIpParamToConfig004, TestSize.Level0)
136 {
137     cJSON *root = cJSON_CreateObject();
138     cJSON_AddNumberToObject(root, NET_FIREWALL_IP_FAMILY.c_str(), FAMILY_IPV6);
139     cJSON_AddNumberToObject(root, NET_FIREWALL_IP_TYPE.c_str(), MULTIPLE_IP);
140     cJSON_AddNumberToObject(root, NET_FIREWALL_IP_MASK.c_str(), 1);
141     cJSON_AddStringToObject(root, NET_FIREWALL_IP_START.c_str(), "AA22:BB11:1122:CDEF:1111:AA99::8888");
142     cJSON_AddStringToObject(root, NET_FIREWALL_IP_END.c_str(), "AA22:BB11:1122:CDEF:1111:AA99::9999");
143     NetFirewallIpParam rule;
144     NetFirewallDefaultRuleParser::ConvertIpParamToConfig(rule, root);
145     EXPECT_EQ(rule.family, FAMILY_IPV6);
146 }
147 }
148 }