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 <gtest/gtest.h>
16
17 #include "if_system_ability_manager.h"
18 #include "init_param.h"
19 #include "iservice_registry.h"
20 #include "iwatcher.h"
21 #include "iwatcher_manager.h"
22 #include "message_parcel.h"
23 #include "parameter.h"
24 #include "param_manager.h"
25 #include "param_stub.h"
26 #include "param_utils.h"
27 #include "system_ability_definition.h"
28 #include "watcher.h"
29 #include "watcher_manager_kits.h"
30 #include "service_watcher.h"
31
32 using namespace testing::ext;
33 using namespace std;
34 using namespace OHOS;
35 using namespace OHOS::init_param;
36
TestParameterChange(const char * key,const char * value,void * context)37 static void TestParameterChange(const char *key, const char *value, void *context)
38 {
39 printf("TestParameterChange key:%s %s", key, value);
40 }
41
TestWatcherCallBack(const char * key,ServiceStatus status)42 static void TestWatcherCallBack(const char *key, ServiceStatus status)
43 {
44 printf("TestWatcherCallBack key:%s %d", key, status);
45 }
46
47 class WatcherAgentUnitTest : public ::testing::Test {
48 public:
WatcherAgentUnitTest()49 WatcherAgentUnitTest() {}
~WatcherAgentUnitTest()50 virtual ~WatcherAgentUnitTest() {}
51
SetUp()52 void SetUp()
53 {
54 if (GetParamSecurityLabel() != nullptr) {
55 GetParamSecurityLabel()->cred.uid = 1000; // 1000 test uid
56 GetParamSecurityLabel()->cred.gid = 1000; // 1000 test gid
57 }
58 SetTestPermissionResult(0);
59 }
TearDown()60 void TearDown() {}
TestBody()61 void TestBody() {}
62
TestAddWatcher()63 int TestAddWatcher()
64 {
65 size_t index = 1;
66 int ret = SystemWatchParameter("test.permission.watcher.test1",
67 TestParameterChange, reinterpret_cast<void *>(index));
68 EXPECT_EQ(ret, 0);
69 ret = SystemWatchParameter("test.permission.watcher.test1*",
70 TestParameterChange, reinterpret_cast<void *>(index));
71 EXPECT_EQ(ret, 0);
72 // repeat add, return fail
73 ret = SystemWatchParameter("test.permission.watcher.test1",
74 TestParameterChange, reinterpret_cast<void *>(index));
75 EXPECT_NE(ret, 0);
76 index++;
77 ret = SystemWatchParameter("test.permission.watcher.test1",
78 TestParameterChange, reinterpret_cast<void *>(index));
79 EXPECT_EQ(ret, 0);
80 index++;
81 ret = SystemWatchParameter("test.permission.watcher.test1",
82 TestParameterChange, reinterpret_cast<void *>(index));
83 EXPECT_EQ(ret, 0);
84
85 // delete
86 ret = RemoveParameterWatcher("test.permission.watcher.test1",
87 TestParameterChange, reinterpret_cast<void *>(index));
88 EXPECT_EQ(ret, 0);
89 index--;
90 ret = RemoveParameterWatcher("test.permission.watcher.test1",
91 TestParameterChange, reinterpret_cast<void *>(index));
92 EXPECT_EQ(ret, 0);
93 index--;
94 ret = RemoveParameterWatcher("test.permission.watcher.test1",
95 TestParameterChange, reinterpret_cast<void *>(index));
96 EXPECT_EQ(ret, 0);
97 // has beed deleted
98 ret = RemoveParameterWatcher("test.permission.watcher.test1",
99 TestParameterChange, reinterpret_cast<void *>(index));
100 EXPECT_NE(ret, 0);
101
102 // 非法
103 ret = SystemWatchParameter("test.permission.watcher.tes^^^^t1*", TestParameterChange, nullptr);
104 EXPECT_NE(ret, 0);
105 ret = SystemWatchParameter("test.permission.read.test1*", TestParameterChange, nullptr);
106 EXPECT_EQ(ret, DAC_RESULT_FORBIDED);
107 return 0;
108 }
109
TestDelWatcher()110 int TestDelWatcher()
111 {
112 size_t index = 1;
113 int ret = SystemWatchParameter("test.permission.watcher.test3.1",
114 TestParameterChange, reinterpret_cast<void *>(index));
115 EXPECT_EQ(ret, 0);
116 ret = SystemWatchParameter("test.permission.watcher.test3.1*",
117 TestParameterChange, reinterpret_cast<void *>(index));
118 EXPECT_EQ(ret, 0);
119 ret = SystemWatchParameter("test.permission.watcher.test3.2",
120 TestParameterChange, reinterpret_cast<void *>(index));
121 EXPECT_EQ(ret, 0);
122 ret = SystemWatchParameter("test.permission.watcher.test3.1", nullptr, nullptr);
123 EXPECT_EQ(ret, 0);
124 ret = SystemWatchParameter("test.permission.watcher.test3.1*", nullptr, nullptr);
125 EXPECT_EQ(ret, 0);
126 ret = SystemWatchParameter("test.permission.watcher.test3.2", nullptr, nullptr);
127 EXPECT_EQ(ret, 0);
128
129 // 非法
130 ret = SystemWatchParameter("test.permission.watcher.tes^^^^t1*", nullptr, nullptr);
131 EXPECT_NE(ret, 0);
132 ret = SystemWatchParameter("test.permission.read.test1*", nullptr, nullptr);
133 EXPECT_EQ(ret, DAC_RESULT_FORBIDED);
134 return 0;
135 }
136
TestRecvMessage(const std::string & name)137 int TestRecvMessage(const std::string &name)
138 {
139 MessageParcel data;
140 MessageParcel reply;
141 MessageOption option;
142 data.WriteInterfaceToken(IWatcher::GetDescriptor());
143 data.WriteString(name);
144 data.WriteString(name);
145 data.WriteString("watcherId");
146 int ret = SystemWatchParameter(name.c_str(), TestParameterChange, nullptr);
147 EXPECT_EQ(ret, 0);
148 WatcherManagerKits &instance = OHOS::init_param::WatcherManagerKits::GetInstance();
149 if (instance.remoteWatcher_ != nullptr) {
150 instance.remoteWatcher_->OnRemoteRequest(IWatcher::PARAM_CHANGE, data, reply, option);
151 instance.remoteWatcher_->OnRemoteRequest(IWatcher::PARAM_CHANGE + 1, data, reply, option);
152 instance.remoteWatcher_->OnParameterChange(name.c_str(), "testname", "testvalue");
153 }
154 return 0;
155 }
156
TestResetService()157 int TestResetService()
158 {
159 sptr<ISystemAbilityManager> samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
160 WATCHER_CHECK(samgr != nullptr, return -1, "Get samgr failed");
161 sptr<IRemoteObject> object = samgr->GetSystemAbility(PARAM_WATCHER_DISTRIBUTED_SERVICE_ID);
162 WATCHER_CHECK(object != nullptr, return -1, "Get watcher manager object from samgr failed");
163 OHOS::init_param::WatcherManagerKits &instance = OHOS::init_param::WatcherManagerKits::GetInstance();
164 if (instance.GetDeathRecipient() != nullptr) {
165 instance.GetDeathRecipient()->OnRemoteDied(object);
166 }
167 return 0;
168 }
169 };
170
171 HWTEST_F(WatcherAgentUnitTest, TestAddWatcher, TestSize.Level0)
172 {
173 WatcherAgentUnitTest test;
174 test.TestAddWatcher();
175 }
176
177 HWTEST_F(WatcherAgentUnitTest, TestRecvMessage, TestSize.Level0)
178 {
179 WatcherAgentUnitTest test;
180 test.TestRecvMessage("test.permission.watcher.agent.test1");
181 }
182
183 HWTEST_F(WatcherAgentUnitTest, TestDelWatcher, TestSize.Level0)
184 {
185 WatcherAgentUnitTest test;
186 test.TestDelWatcher();
187 }
188
189 HWTEST_F(WatcherAgentUnitTest, TestResetService, TestSize.Level0)
190 {
191 WatcherAgentUnitTest test;
192 test.TestResetService();
193 }
194
195 HWTEST_F(WatcherAgentUnitTest, TestWatcherService, TestSize.Level0)
196 {
197 const char *errstr = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
198 ServiceWatchForStatus("param_watcher", TestWatcherCallBack);
199 ServiceWaitForStatus("param_watcher", SERVICE_STARTED, 1);
200 EXPECT_EQ(ServiceWatchForStatus(errstr, TestWatcherCallBack), -1);
201 EXPECT_EQ(ServiceWatchForStatus(NULL, TestWatcherCallBack), -1);
202 WatchParameter("testParam", nullptr, nullptr);
203 }