1 /*
2  * Copyright (c) 2021-2022 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 "app_scheduler_proxy.h"
17 #include <unistd.h>
18 #include <gtest/gtest.h>
19 #include "errors.h"
20 #include "ipc_types.h"
21 #include "app_mgr_proxy.h"
22 #include "app_record_id.h"
23 #include "hilog_tag_wrapper.h"
24 #include "mock_application.h"
25 #include "mock_app_mgr_service.h"
26 #include "application_state_observer_stub.h"
27 
28 using namespace testing::ext;
29 
30 using OHOS::iface_cast;
31 using OHOS::sptr;
32 using testing::_;
33 using testing::Invoke;
34 using testing::InvokeWithoutArgs;
35 using testing::Return;
36 
37 namespace OHOS {
38 namespace AppExecFwk {
39 class AmsIpcAppMgrInterfaceTest : public testing::Test {
40 public:
41     static void SetUpTestCase();
42     static void TearDownTestCase();
43     void SetUp();
44     void TearDown();
45 };
46 
SetUpTestCase()47 void AmsIpcAppMgrInterfaceTest::SetUpTestCase()
48 {}
49 
TearDownTestCase()50 void AmsIpcAppMgrInterfaceTest::TearDownTestCase()
51 {}
52 
SetUp()53 void AmsIpcAppMgrInterfaceTest::SetUp()
54 {}
55 
TearDown()56 void AmsIpcAppMgrInterfaceTest::TearDown()
57 {}
58 
59 /*
60  * Feature: AMS
61  * Function: IPC
62  * SubFunction: appmgr interface
63  * FunctionPoints: interface
64  * CaseDescription: test interface of AttachApplication
65  */
66 HWTEST_F(AmsIpcAppMgrInterfaceTest, Interface_001, TestSize.Level1)
67 {
68     TAG_LOGD(AAFwkTag::TEST, "AppMgrIpcInterfaceTest_AppMgr_001 start");
69     sptr<MockAppMgrService> mockAppMgr(new MockAppMgrService());
70     sptr<IAppMgr> appMgrClient = iface_cast<IAppMgr>(mockAppMgr);
71     sptr<MockApplication> app(new MockApplication());
72 
73     EXPECT_CALL(*mockAppMgr, AttachApplication(_))
74         .WillOnce(InvokeWithoutArgs(mockAppMgr.GetRefPtr(), &MockAppMgrService::Post));
75     appMgrClient->AttachApplication(app);
76     mockAppMgr->Wait();
77     TAG_LOGD(AAFwkTag::TEST, "AppMgrIpcInterfaceTest_AppMgr_001 end");
78 }
79 
80 /*
81  * Feature: AMS
82  * Function: IPC
83  * SubFunction: appmgr interface
84  * FunctionPoints: interface
85  * CaseDescription: test interface of ApplicationForegrounded
86  */
87 HWTEST_F(AmsIpcAppMgrInterfaceTest, Interface_002, TestSize.Level1)
88 {
89     TAG_LOGD(AAFwkTag::TEST, "AppMgrIpcInterfaceTest_AppMgr_002 start");
90     sptr<MockAppMgrService> mockAppMgr(new MockAppMgrService());
91     sptr<IAppMgr> appMgrClient = iface_cast<IAppMgr>(mockAppMgr);
92 
93     EXPECT_CALL(*mockAppMgr, ApplicationForegrounded(_))
94         .WillOnce(InvokeWithoutArgs(mockAppMgr.GetRefPtr(), &MockAppMgrService::Post));
95     auto recordId = AppRecordId::Create();
96     appMgrClient->ApplicationForegrounded(recordId);
97     mockAppMgr->Wait();
98     TAG_LOGD(AAFwkTag::TEST, "AppMgrIpcInterfaceTest_AppMgr_002 end");
99 }
100 
101 /*
102  * Feature: AMS
103  * Function: IPC
104  * SubFunction: appmgr interface
105  * FunctionPoints: interface
106  * CaseDescription: test interface of ApplicationBackgrounded
107  */
108 HWTEST_F(AmsIpcAppMgrInterfaceTest, Interface_003, TestSize.Level1)
109 {
110     TAG_LOGD(AAFwkTag::TEST, "AppMgrIpcInterfaceTest_AppMgr_003 start");
111     sptr<MockAppMgrService> mockAppMgr(new MockAppMgrService());
112     sptr<IAppMgr> appMgrClient = iface_cast<IAppMgr>(mockAppMgr);
113 
114     EXPECT_CALL(*mockAppMgr, ApplicationBackgrounded(_))
115         .WillOnce(InvokeWithoutArgs(mockAppMgr.GetRefPtr(), &MockAppMgrService::Post));
116     auto recordId = AppRecordId::Create();
117     appMgrClient->ApplicationBackgrounded(recordId);
118     mockAppMgr->Wait();
119     TAG_LOGD(AAFwkTag::TEST, "AppMgrIpcInterfaceTest_AppMgr_003 end");
120 }
121 
122 /*
123  * Feature: AMS
124  * Function: IPC
125  * SubFunction: appmgr interface
126  * FunctionPoints: interface
127  * CaseDescription: test interface of ApplicationTerminated
128  */
129 HWTEST_F(AmsIpcAppMgrInterfaceTest, Interface_004, TestSize.Level1)
130 {
131     TAG_LOGD(AAFwkTag::TEST, "AppMgrIpcInterfaceTest_AppMgr_004 start");
132     sptr<MockAppMgrService> mockAppMgr(new MockAppMgrService());
133     sptr<IAppMgr> appMgrClient = iface_cast<IAppMgr>(mockAppMgr);
134 
135     EXPECT_CALL(*mockAppMgr, ApplicationTerminated(_))
136         .WillOnce(InvokeWithoutArgs(mockAppMgr.GetRefPtr(), &MockAppMgrService::Post));
137     auto recordId = AppRecordId::Create();
138     appMgrClient->ApplicationTerminated(recordId);
139     mockAppMgr->Wait();
140     TAG_LOGD(AAFwkTag::TEST, "AppMgrIpcInterfaceTest_AppMgr_004 end");
141 }
142 
143 /*
144  * Feature: AMS
145  * Function: IPC
146  * SubFunction: appmgr interface
147  * FunctionPoints: KillApplication interface
148  * CaseDescription: test IPC can transact data
149  */
150 HWTEST_F(AmsIpcAppMgrInterfaceTest, ClearUpApplicationData_008, TestSize.Level1)
151 {
152     TAG_LOGD(AAFwkTag::TEST, "ClearUpApplicationData_008 start");
153 
154     sptr<MockAppMgrService> mockAppMgr(new MockAppMgrService());
155     sptr<IAppMgr> appMgrClient = iface_cast<IAppMgr>(mockAppMgr);
156 
157     EXPECT_CALL(*mockAppMgr, ClearUpApplicationData(_, _, _)).Times(1);
158 
159     appMgrClient->ClearUpApplicationData("PROCESS", 0);
160 
161     TAG_LOGD(AAFwkTag::TEST, "ClearUpApplicationData_008 end");
162 }
163 
164 /*
165  * Feature: AMS
166  * Function: IPC
167  * SubFunction: appmgr interface
168  * FunctionPoints: KillApplication interface
169  * CaseDescription: test IPC can transact data
170  */
171 HWTEST_F(AmsIpcAppMgrInterfaceTest, GetAllRunningProcesses_010, TestSize.Level1)
172 {
173     TAG_LOGD(AAFwkTag::TEST, "GetAllRunningProcesses_009 start");
174 
175     sptr<MockAppMgrService> mockAppMgr(new MockAppMgrService());
176     sptr<IAppMgr> appMgrClient = iface_cast<IAppMgr>(mockAppMgr);
177 
178     EXPECT_CALL(*mockAppMgr, GetAllRunningProcesses(_)).Times(1).WillOnce(Return(OHOS::ERR_NULL_OBJECT));
179 
180     std::vector<RunningProcessInfo> runningProcessInfo;
181     int32_t ret = appMgrClient->GetAllRunningProcesses(runningProcessInfo);
182     EXPECT_EQ(ret, OHOS::ERR_NULL_OBJECT);
183 
184     EXPECT_CALL(*mockAppMgr, GetAllRunningProcesses(_)).Times(1).WillOnce(Return(OHOS::ERR_NONE));
185     ret = appMgrClient->GetAllRunningProcesses(runningProcessInfo);
186     EXPECT_EQ(ret, OHOS::ERR_NONE);
187 
188     TAG_LOGD(AAFwkTag::TEST, "GetAllRunningProcesses_009 end");
189 }
190 
191 /*
192  * @tc.name: RegisterApplicationStateObserver_001
193  * @tc.desc: Register application state observer test.
194  * @tc.type: FUNC
195  * @tc.require: issueI5822Q
196  */
197 HWTEST_F(AmsIpcAppMgrInterfaceTest, RegisterApplicationStateObserver_001, TestSize.Level0)
198 {
199     TAG_LOGD(AAFwkTag::TEST, "RegisterApplicationStateObserver_001 start");
200 
201     sptr<IApplicationStateObserver> observer = new ApplicationStateObserverStub();
202     std::vector<std::string> bundleNameList;
203     sptr<MockAppMgrService> mockAppMgr(new MockAppMgrService());
204     sptr<IAppMgr> appMgrClient = iface_cast<IAppMgr>(mockAppMgr);
205 
206     EXPECT_CALL(*mockAppMgr, RegisterApplicationStateObserver(_, _)).Times(1).WillOnce(Return(OHOS::NO_ERROR));
207 
208     int32_t err = appMgrClient->RegisterApplicationStateObserver(observer, bundleNameList);
209 
210     EXPECT_EQ(OHOS::NO_ERROR, err);
211 
212     TAG_LOGD(AAFwkTag::TEST, "RegisterApplicationStateObserver_001 end");
213 }
214 
215 /*
216  * Feature: AMS
217  * Function: IPC
218  * SubFunction: appmgr interface
219  * FunctionPoints: KillApplication interface
220  * CaseDescription: test IPC can transact data
221  */
222 HWTEST_F(AmsIpcAppMgrInterfaceTest, UnregisterApplicationStateObserver_001, TestSize.Level0)
223 {
224     TAG_LOGD(AAFwkTag::TEST, "UnregisterApplicationStateObserver_001 start");
225 
226     sptr<IApplicationStateObserver> observer = new ApplicationStateObserverStub();
227     sptr<MockAppMgrService> mockAppMgr(new MockAppMgrService());
228     sptr<IAppMgr> appMgrClient = iface_cast<IAppMgr>(mockAppMgr);
229 
230     EXPECT_CALL(*mockAppMgr, UnregisterApplicationStateObserver(_)).Times(1).WillOnce(Return(OHOS::NO_ERROR));
231 
232     int32_t err = appMgrClient->UnregisterApplicationStateObserver(observer);
233 
234     EXPECT_EQ(OHOS::NO_ERROR, err);
235 
236     TAG_LOGD(AAFwkTag::TEST, "UnregisterApplicationStateObserver_001 end");
237 }
238 }  // namespace AppExecFwk
239 }  // namespace OHOS
240