1 /*
2 * Copyright (c) 2025 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 #define private public
19 #include "ability_manager_service.h"
20 #include "query_erms_observer_manager.h"
21 #undef private
22 #include "singleton.h"
23
24 using namespace testing;
25 using namespace testing::ext;
26 using namespace OHOS::AAFwk;
27 using AtomicServiceStartupRule = OHOS::AbilityRuntime::AtomicServiceStartupRule;
28 namespace OHOS {
29 namespace AAFwk {
30
31 class MockIRemoteObject : public IRemoteObject {
32 public:
33 static sptr<MockIRemoteObject> instance;
MockIRemoteObject()34 MockIRemoteObject() : IRemoteObject(u"mock_i_remote_object") {}
~MockIRemoteObject()35 ~MockIRemoteObject() {}
GetObjectRefCount()36 int32_t GetObjectRefCount() override
37 {
38 return 0;
39 }
SendRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)40 int SendRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option)
41 {
42 return ERR_OK;
43 }
IsProxyObject() const44 bool IsProxyObject() const override
45 {
46 return true;
47 }
CheckObjectLegality() const48 bool CheckObjectLegality() const override
49 {
50 return true;
51 }
AddDeathRecipient(const sptr<DeathRecipient> & recipient)52 bool AddDeathRecipient(const sptr<DeathRecipient> &recipient) override
53 {
54 return true;
55 }
RemoveDeathRecipient(const sptr<DeathRecipient> & recipient)56 bool RemoveDeathRecipient(const sptr<DeathRecipient> &recipient) override
57 {
58 return true;
59 }
Marshalling(Parcel & parcel) const60 bool Marshalling(Parcel &parcel) const override
61 {
62 return true;
63 }
AsInterface()64 sptr<IRemoteBroker> AsInterface() override
65 {
66 return nullptr;
67 }
Dump(int fd,const std::vector<std::u16string> & args)68 int Dump(int fd, const std::vector<std::u16string> &args) override
69 {
70 return 0;
71 }
GetObjectDescriptor() const72 std::u16string GetObjectDescriptor() const
73 {
74 std::u16string descriptor = std::u16string();
75 return descriptor;
76 }
77 };
78
79 class IQueryERMSObserverMock : public IQueryERMSObserver {
80 public:
81 DECLARE_INTERFACE_DESCRIPTOR(u"ohos.aafwk.IQueryERMSObserver");
82
OnQueryFinished(const std::string & appId,const std::string & startTime,const AtomicServiceStartupRule & rule,int resultCode)83 void OnQueryFinished(const std::string &appId, const std::string &startTime,
84 const AtomicServiceStartupRule &rule, int resultCode)
85 {
86 return;
87 }
AsObject()88 sptr<IRemoteObject> AsObject()
89 {
90 return nullptr;
91 }
92 enum {
93 ON_QUERY_FINISHED = 1,
94 };
95 };
96
97 class MockDeathRecipient : public IRemoteObject::DeathRecipient {
98 public:
99 enum {
100 ADD_DEATH_RECIPIENT,
101 REMOVE_DEATH_RECIPIENT,
102 NOTICE_DEATH_RECIPIENT,
103 TEST_SERVICE_DEATH_RECIPIENT,
104 TEST_DEVICE_DEATH_RECIPIENT,
105 };
OnRemoteDied(const wptr<IRemoteObject> & remote)106 void OnRemoteDied(const wptr<IRemoteObject> &remote)
107 {
108 return;
109 }
110 };
111
112 class QueryERMSObserverManagerTest : public testing::Test {
113 public:
114 static void SetUpTestCase();
115 static void TearDownTestCase();
116 void SetUp();
117 void TearDown();
118 };
119
SetUpTestCase()120 void QueryERMSObserverManagerTest::SetUpTestCase()
121 {
122 }
123
TearDownTestCase()124 void QueryERMSObserverManagerTest::TearDownTestCase()
125 {
126 }
127
SetUp()128 void QueryERMSObserverManagerTest::SetUp()
129 {
130 }
131
TearDown()132 void QueryERMSObserverManagerTest::TearDown()
133 {
134 }
135
136 /*
137 * @tc.number: AddObserver_0100
138 * @tc.name: AddObserver
139 * @tc.desc: Verify AddObserver
140 */
141 HWTEST_F(QueryERMSObserverManagerTest, AddObserver_0100, TestSize.Level1)
142 {
143 int32_t recordId = 1;
144 sptr<IQueryERMSObserver> observer = nullptr;
145 auto result = QueryERMSObserverManager::GetInstance().AddObserver(recordId, observer);
146 EXPECT_EQ(result, ERR_INVALID_VALUE);
147
148 observer = sptr<IQueryERMSObserverMock>::MakeSptr();
149 EXPECT_EQ(QueryERMSObserverManager::GetInstance().observerMap_.size(), 0);
150 result = QueryERMSObserverManager::GetInstance().AddObserver(recordId, observer);
151 EXPECT_EQ(QueryERMSObserverManager::GetInstance().observerMap_.size(), 1);
152
153 QueryERMSObserverManager::GetInstance().deathRecipient_ = nullptr;
154 result = QueryERMSObserverManager::GetInstance().AddObserver(recordId, observer);
155 EXPECT_NE(QueryERMSObserverManager::GetInstance().deathRecipient_, nullptr);
156 EXPECT_EQ(result, ERR_OK);
157 }
158
159 /*
160 * @tc.number: OnQueryFinished_0100
161 * @tc.name: OnQueryFinished
162 * @tc.desc: Verify OnQueryFinished
163 */
164 HWTEST_F(QueryERMSObserverManagerTest, OnQueryFinished_0100, TestSize.Level1)
165 {
166 int32_t recordId = 1;
167 std::string appId = "appId";
168 std::string startTime = "12:00";
169 AbilityRuntime::AtomicServiceStartupRule rule;
170 int resultCode = 1;
171
172 DelayedSingleton<OHOS::AAFwk::AbilityManagerService>::GetInstance()->taskHandler_ = nullptr;
173 QueryERMSObserverManager::GetInstance().OnQueryFinished(recordId,
174 appId, startTime, rule, resultCode);
175 EXPECT_NE(&QueryERMSObserverManager::GetInstance(), nullptr);
176 }
177
178 /*
179 * @tc.number: HandleOnQueryFinished_0100
180 * @tc.name: HandleOnQueryFinished
181 * @tc.desc: Verify HandleOnQueryFinished
182 */
183 HWTEST_F(QueryERMSObserverManagerTest, HandleOnQueryFinished_0100, TestSize.Level1)
184 {
185 int32_t recordId = 1;
186 std::string appId = "appId";
187 std::string startTime = "12:00";
188 AbilityRuntime::AtomicServiceStartupRule rule;
189 int resultCode = 1;
190
191 sptr<IQueryERMSObserver> observer = sptr<IQueryERMSObserverMock>::MakeSptr();
192 QueryERMSObserverManager::GetInstance().observerMap_.emplace(recordId, observer);
193 QueryERMSObserverManager::GetInstance().HandleOnQueryFinished(recordId,
194 appId, startTime, rule, resultCode);
195 EXPECT_NE(&QueryERMSObserverManager::GetInstance(), nullptr);
196 }
197
198 /*
199 * @tc.number: OnObserverDied_0100
200 * @tc.name: OnObserverDied
201 * @tc.desc: Verify OnObserverDied
202 */
203 HWTEST_F(QueryERMSObserverManagerTest, OnObserverDied_0100, TestSize.Level1)
204 {
205 wptr<IRemoteObject> remote = nullptr;
206 QueryERMSObserverManager::GetInstance().OnObserverDied(remote);
207
208 remote = sptr<MockIRemoteObject>::MakeSptr();
209 sptr<IQueryERMSObserver> observer = sptr<IQueryERMSObserverMock>::MakeSptr();
210 QueryERMSObserverManager::GetInstance().observerMap_.emplace(1, observer);
211 EXPECT_NE(QueryERMSObserverManager::GetInstance().observerMap_.size(), 0);
212 QueryERMSObserverManager::GetInstance().OnObserverDied(remote);
213 EXPECT_NE(&QueryERMSObserverManager::GetInstance(), nullptr);
214 }
215 } // namespace AAFwk
216 } // namespace OHOS