• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }