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