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 <gtest/gtest.h>
17 #include "ability_schedule_stub_mock.h"
18 
19 using namespace testing::ext;
20 
21 namespace OHOS {
22 namespace AAFwk {
23 class AbilitySchedulerStubTest : public testing::Test {
24 public:
25     static void SetUpTestCase(void);
26     static void TearDownTestCase(void);
27     void SetUp();
28     void TearDown();
29     void WriteInterfaceToken(MessageParcel& data);
30     sptr<AbilitySchedulerStubMock> stub_{ nullptr };
31 };
32 
SetUpTestCase(void)33 void AbilitySchedulerStubTest::SetUpTestCase(void)
34 {}
TearDownTestCase(void)35 void AbilitySchedulerStubTest::TearDownTestCase(void)
36 {}
TearDown(void)37 void AbilitySchedulerStubTest::TearDown(void)
38 {}
39 
SetUp(void)40 void AbilitySchedulerStubTest::SetUp(void)
41 {
42     stub_ = new AbilitySchedulerStubMock();
43 }
WriteInterfaceToken(MessageParcel & data)44 void AbilitySchedulerStubTest::WriteInterfaceToken(MessageParcel& data)
45 {
46     data.WriteInterfaceToken(AbilitySchedulerStub::GetDescriptor());
47 }
48 
49 /*
50  * Feature: AbilitySchedulerStub
51  * Function: OnRemoteRequest
52  * SubFunction: NA
53  * FunctionPoints: AbilitySchedulerStub OnRemoteRequest
54  * EnvConditions: code is SCHEDULE_ABILITY_TRANSACTION
55  * CaseDescription: Verify the normal process of onremoterequest
56  */
57 HWTEST_F(AbilitySchedulerStubTest, AbilitySchedulerStub_001, TestSize.Level1)
58 {
59     MessageParcel data;
60     MessageParcel reply;
61     MessageOption option;
62 
63     Want want;
64     LifeCycleStateInfo stateInfo;
65     WriteInterfaceToken(data);
66     data.WriteParcelable(&want);
67     data.WriteParcelable(&stateInfo);
68     auto res = stub_->OnRemoteRequest(IAbilityScheduler::SCHEDULE_ABILITY_TRANSACTION, data, reply, option);
69     EXPECT_EQ(res, NO_ERROR);
70 }
71 
72 /*
73  * Feature: AbilitySchedulerStub
74  * Function: OnRemoteRequest
75  * SubFunction: NA
76  * FunctionPoints: AbilitySchedulerStub OnRemoteRequest
77  * EnvConditions: code is SCHEDULE_ABILITY_TRANSACTION
78  * CaseDescription: Verifying stateinfo is nullptr causes onremoterequest to fail
79  */
80 HWTEST_F(AbilitySchedulerStubTest, AbilitySchedulerStub_002, TestSize.Level1)
81 {
82     MessageParcel data;
83     MessageParcel reply;
84     MessageOption option;
85 
86     Want want;
87     WriteInterfaceToken(data);
88     data.WriteParcelable(&want);
89     data.WriteParcelable(nullptr);
90     auto res = stub_->OnRemoteRequest(IAbilityScheduler::SCHEDULE_ABILITY_TRANSACTION, data, reply, option);
91     EXPECT_NE(res, NO_ERROR);
92 }
93 
94 /*
95  * Feature: AbilitySchedulerStub
96  * Function: OnRemoteRequest
97  * SubFunction: NA
98  * FunctionPoints: AbilitySchedulerStub OnRemoteRequest
99  * EnvConditions: code is SEND_RESULT
100  * CaseDescription: Verify the normal process of onremoterequest
101  */
102 HWTEST_F(AbilitySchedulerStubTest, AbilitySchedulerStub_003, TestSize.Level1)
103 {
104     MessageParcel data;
105     MessageParcel reply;
106     MessageOption option;
107 
108     Want want;
109     WriteInterfaceToken(data);
110     data.WriteInt32(1);
111     data.WriteInt32(1);
112     data.WriteParcelable(&want);
113 
114     auto res = stub_->OnRemoteRequest(IAbilityScheduler::SEND_RESULT, data, reply, option);
115     EXPECT_EQ(res, NO_ERROR);
116 }
117 
118 /*
119  * Feature: AbilitySchedulerStub
120  * Function: OnRemoteRequest
121  * SubFunction: NA
122  * FunctionPoints: AbilitySchedulerStub OnRemoteRequest
123  * EnvConditions: code is SEND_RESULT
124  * CaseDescription: Verifying want is nullptr causes onremoterequest to fail
125  */
126 HWTEST_F(AbilitySchedulerStubTest, AbilitySchedulerStub_004, TestSize.Level1)
127 {
128     MessageParcel data;
129     MessageParcel reply;
130     MessageOption option;
131     WriteInterfaceToken(data);
132     data.WriteInt32(1);
133     data.WriteParcelable(nullptr);
134 
135     auto res = stub_->OnRemoteRequest(IAbilityScheduler::SEND_RESULT, data, reply, option);
136     EXPECT_NE(res, NO_ERROR);
137 }
138 
139 /*
140  * Feature: AbilitySchedulerStub
141  * Function: OnRemoteRequest
142  * SubFunction: NA
143  * FunctionPoints: AbilitySchedulerStub OnRemoteRequest
144  * EnvConditions: code is SCHEDULE_ABILITY_CONNECT
145  * CaseDescription: Verify the normal and failed conditions of onremoterequest
146  */
147 HWTEST_F(AbilitySchedulerStubTest, AbilitySchedulerStub_005, TestSize.Level1)
148 {
149     MessageParcel data;
150     MessageParcel reply;
151     MessageOption option;
152 
153     WriteInterfaceToken(data);
154     data.WriteParcelable(nullptr);
155 
156     auto res = stub_->OnRemoteRequest(IAbilityScheduler::SCHEDULE_ABILITY_CONNECT, data, reply, option);
157     EXPECT_NE(res, NO_ERROR);
158 
159     Want want;
160     WriteInterfaceToken(data);
161     data.WriteParcelable(&want);
162     auto res1 = stub_->OnRemoteRequest(IAbilityScheduler::SCHEDULE_ABILITY_CONNECT, data, reply, option);
163     EXPECT_EQ(res1, NO_ERROR);
164 }
165 
166 /*
167  * Feature: AbilitySchedulerStub
168  * Function: OnRemoteRequest
169  * SubFunction: NA
170  * FunctionPoints: AbilitySchedulerStub OnRemoteRequest
171  * EnvConditions: code is SCHEDULE_ABILITY_DISCONNECT
172  * CaseDescription: Verify the normal conditions of onremoterequest
173  */
174 HWTEST_F(AbilitySchedulerStubTest, AbilitySchedulerStub_006, TestSize.Level1)
175 {
176     MessageParcel data;
177     MessageParcel reply;
178     MessageOption option;
179     WriteInterfaceToken(data);
180     auto res = stub_->OnRemoteRequest(IAbilityScheduler::SCHEDULE_ABILITY_DISCONNECT, data, reply, option);
181     EXPECT_EQ(res, ERR_INVALID_VALUE);
182 }
183 
184 /*
185  * Feature: AbilitySchedulerStub
186  * Function: OnRemoteRequest
187  * SubFunction: NA
188  * FunctionPoints: AbilitySchedulerStub OnRemoteRequest
189  * EnvConditions: code is SCHEDULE_SAVE_ABILITY_STATE
190  * CaseDescription: Verify the failed conditions of onremoterequest
191  */
192 HWTEST_F(AbilitySchedulerStubTest, AbilitySchedulerStub_007, TestSize.Level1)
193 {
194     MessageParcel data;
195     MessageParcel reply;
196     MessageOption option;
197     WriteInterfaceToken(data);
198     auto res = stub_->OnRemoteRequest(IAbilityScheduler::SCHEDULE_SAVE_ABILITY_STATE, data, reply, option);
199     EXPECT_EQ(res, NO_ERROR);
200 }
201 
202 /*
203  * Feature: AbilitySchedulerStub
204  * Function: OnRemoteRequest
205  * SubFunction: NA
206  * FunctionPoints: AbilitySchedulerStub OnRemoteRequest
207  * EnvConditions: code is default
208  * CaseDescription: Verify the normal conditions of onremoterequest
209  */
210 HWTEST_F(AbilitySchedulerStubTest, AbilitySchedulerStub_008, TestSize.Level1)
211 {
212     MessageParcel data;
213     MessageParcel reply;
214     MessageOption option;
215     WriteInterfaceToken(data);
216     auto res = stub_->OnRemoteRequest(INT_MAX, data, reply, option);
217     EXPECT_NE(res, NO_ERROR);
218 }
219 
220 /**
221  * @tc.name: AbilitySchedulerStub_009
222  * @tc.desc: test NotifyContinuationResult
223  * @tc.type: FUNC
224  * @tc.require: AR000GI8IJ
225  */
226 HWTEST_F(AbilitySchedulerStubTest, AbilitySchedulerStub_009, TestSize.Level0)
227 {
228     MessageParcel data;
229     MessageParcel reply;
230     MessageOption option;
231     WriteInterfaceToken(data);
232     int32_t result = 0;
233     data.WriteInt32(result);
234     auto res = stub_->OnRemoteRequest(IAbilityScheduler::NOTIFY_CONTINUATION_RESULT, data, reply, option);
235     EXPECT_EQ(res, NO_ERROR);
236 }
237 
238 /**
239  * @tc.name: AbilitySchedulerStub_0010
240  * @tc.desc: test NotifyContinuationResult
241  * @tc.type: FUNC
242  * @tc.require:
243  */
244 HWTEST_F(AbilitySchedulerStubTest, AbilitySchedulerStub_0010, TestSize.Level0)
245 {
246     MessageParcel data;
247     MessageParcel reply;
248     MessageOption option;
249     WriteInterfaceToken(data);
250     int32_t result = 0;
251     data.WriteInt32(result);
252     auto res = stub_->OnRemoteRequest(IAbilityScheduler::REQUEST_CALL_REMOTE, data, reply, option);
253     EXPECT_EQ(res, NO_ERROR);
254 }
255 /**
256  * @tc.name: AbilitySchedulerStub_011
257  * @tc.desc: test DumpAbilityInfo
258  * @tc.type: FUNC
259  * @tc.require: SR000GH1GO
260  */
261 HWTEST_F(AbilitySchedulerStubTest, AbilitySchedulerStub_011, TestSize.Level1)
262 {
263     MessageParcel data;
264     MessageParcel reply;
265     MessageOption option;
266     WriteInterfaceToken(data);
267     int32_t result = 0;
268     data.WriteInt32(result);
269     auto res = stub_->OnRemoteRequest(IAbilityScheduler::DUMP_ABILITY_RUNNER_INNER, data, reply, option);
270     EXPECT_EQ(res, NO_ERROR);
271 }
272 }  // namespace AAFwk
273 }  // namespace OHOS
274