• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 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 "network_ability_test.h"
17 
18 #include <cstdlib>
19 
20 #include "accesstoken_kit.h"
21 #include "if_system_ability_manager.h"
22 #include "ipc_skeleton.h"
23 #include "iservice_registry.h"
24 #include "message_parcel.h"
25 #include "nativetoken_kit.h"
26 #include "system_ability_definition.h"
27 #include "token_setproc.h"
28 
29 #include "common_utils.h"
30 #include "constant_definition.h"
31 #include "location.h"
32 #include "location_dumper.h"
33 #include "location_log.h"
34 #include "network_ability_skeleton.h"
35 
36 using namespace testing::ext;
37 namespace OHOS {
38 namespace Location {
39 const int32_t LOCATION_PERM_NUM = 4;
40 const std::string ARGS_HELP = "-h";
SetUp()41 void NetworkAbilityTest::SetUp()
42 {
43     /*
44      * @tc.setup: Get system ability's pointer and get sa proxy object.
45      */
46     MockNativePermission();
47     ability_ = new (std::nothrow) NetworkAbility();
48     EXPECT_NE(nullptr, ability_);
49     proxy_ = new (std::nothrow) NetworkAbilityProxy(ability_);
50     EXPECT_NE(nullptr, proxy_);
51 }
52 
TearDown()53 void NetworkAbilityTest::TearDown()
54 {
55     /*
56      * @tc.teardown: release memory.
57      */
58     proxy_ = nullptr;
59 }
60 
MockNativePermission()61 void NetworkAbilityTest::MockNativePermission()
62 {
63     const char *perms[] = {
64         ACCESS_LOCATION.c_str(), ACCESS_APPROXIMATELY_LOCATION.c_str(),
65         ACCESS_BACKGROUND_LOCATION.c_str(), MANAGE_SECURE_SETTINGS.c_str(),
66     };
67     NativeTokenInfoParams infoInstance = {
68         .dcapsNum = 0,
69         .permsNum = LOCATION_PERM_NUM,
70         .aclsNum = 0,
71         .dcaps = nullptr,
72         .perms = perms,
73         .acls = nullptr,
74         .processName = "NetworkAbilityTest",
75         .aplStr = "system_basic",
76     };
77     uint64_t tokenId = GetAccessTokenId(&infoInstance);
78     SetSelfTokenID(tokenId);
79     Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
80 }
81 
82 /*
83  * @tc.name: SendLocationRequest001
84  * @tc.desc: Build Request, marshall and unmarshall data Then Send it
85  * @tc.type: FUNC
86  */
87 HWTEST_F(NetworkAbilityTest, SendLocationRequest001, TestSize.Level1)
88 {
89     GTEST_LOG_(INFO)
90         << "NetworkAbilityTest, SendLocationRequest001, TestSize.Level1";
91     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] SendLocationRequest001 begin");
92     /*
93      * @tc.steps: step1. build location request data.
94      */
95     std::unique_ptr<WorkRecord> workRecord = std::make_unique<WorkRecord>();
96     int num = 2;
97     for (int i = 0; i < num; i++) {
98         int uid = i + 1;
99         int pid = i + 2;
100         int timeInterval = i;
101         std::string name = "nameForTest";
102         std::string uuid = std::to_string(CommonUtils::IntRandom(MIN_INT_RANDOM, MAX_INT_RANDOM));
103         workRecord->Add(uid, pid, name, timeInterval, uuid);
104     }
105     /*
106      * @tc.steps: step2. send location request
107      * @tc.expected: step2. no exception happens.
108      */
109     EXPECT_EQ(ERRCODE_SUCCESS, proxy_->SendLocationRequest(*workRecord));
110     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] SendLocationRequest001 end");
111 }
112 
113 /*
114  * @tc.name: SetEnableAndDisable001
115  * @tc.desc: Test disable and enable system ability
116  * @tc.type: FUNC
117  */
118 HWTEST_F(NetworkAbilityTest, SetEnableAndDisable001, TestSize.Level1)
119 {
120     GTEST_LOG_(INFO)
121         << "NetworkAbilityTest, SetEnableAndDisable001, TestSize.Level1";
122     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] SetEnableAndDisable001 begin");
123     /*
124      * @tc.steps: step1.remove SA
125      * @tc.expected: step1. object1 is null.
126      */
127     EXPECT_EQ(ERRCODE_SUCCESS, proxy_->SetEnable(false)); // if the state is false
128     sptr<ISystemAbilityManager> systemAbilityManager1 =
129         SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
130     sptr<IRemoteObject> object1 = systemAbilityManager1->GetSystemAbility(LOCATION_NETWORK_LOCATING_SA_ID);
131     EXPECT_EQ(nullptr, object1); // no SA can be given
132 
133     /*
134      * @tc.steps: step2. test enable SA
135      * @tc.expected: step2. object2 is not null.
136      */
137     EXPECT_EQ(ERRCODE_SUCCESS, proxy_->SetEnable(true)); // if the state is true
138     sptr<ISystemAbilityManager> systemAbilityManager2 =
139         SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
140     sptr<IRemoteObject> object2 = systemAbilityManager2->GetSystemAbility(LOCATION_NETWORK_LOCATING_SA_ID);
141     EXPECT_NE(nullptr, object2); // SA can be given
142     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] SetEnableAndDisable001 end");
143 }
144 
145 /*
146  * @tc.name: SelfRequest001
147  * @tc.desc: test self request function
148  * @tc.type: FUNC
149  */
150 HWTEST_F(NetworkAbilityTest, SelfRequest001, TestSize.Level1)
151 {
152     GTEST_LOG_(INFO)
153         << "NetworkAbilityTest, SelfRequest001, TestSize.Level1";
154     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] SelfRequest001 begin");
155     /*
156      * @tc.steps: step1. send location request
157      * @tc.expected: step1. no exception happens.
158      */
159     EXPECT_EQ(ERRCODE_SUCCESS, proxy_->SelfRequest(true));
160     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] SelfRequest001 end");
161 }
162 
163 /*
164  * @tc.name: SelfRequest002
165  * @tc.desc: test self request function
166  * @tc.type: FUNC
167  */
168 HWTEST_F(NetworkAbilityTest, SelfRequest002, TestSize.Level1)
169 {
170     GTEST_LOG_(INFO)
171         << "NetworkAbilityTest, SelfRequest002, TestSize.Level1";
172     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] SelfRequest002 begin");
173     /*
174      * @tc.steps: step1. send location request
175      * @tc.expected: step1. no exception happens.
176      */
177     EXPECT_EQ(ERRCODE_SUCCESS, proxy_->SelfRequest(false));
178     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] SelfRequest002 end");
179 }
180 
181 HWTEST_F(NetworkAbilityTest, NetworkLocationMock001, TestSize.Level1)
182 {
183     GTEST_LOG_(INFO)
184         << "NetworkAbilityTest, NetworkLocationMock001, TestSize.Level1";
185     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] NetworkLocationMock001 begin");
186     int timeInterval = 1;
187     std::vector<std::shared_ptr<Location>> locations;
188     EXPECT_EQ(ERRCODE_SUCCESS, proxy_->EnableMock());
189     EXPECT_EQ(ERRCODE_SUCCESS, proxy_->SetMocked(timeInterval, locations));
190 
191     EXPECT_EQ(ERRCODE_SUCCESS, proxy_->DisableMock());
192     EXPECT_EQ(ERRCODE_NOT_SUPPORTED, proxy_->SetMocked(timeInterval, locations));
193     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] NetworkLocationMock001 end");
194 }
195 
196 HWTEST_F(NetworkAbilityTest, NetworkOnStartAndOnStop001, TestSize.Level1)
197 {
198     GTEST_LOG_(INFO)
199         << "NetworkAbilityTest, NetworkOnStartAndOnStop001, TestSize.Level1";
200     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] NetworkOnStartAndOnStop001 begin");
201     ability_->OnStart(); // start ability
202     EXPECT_EQ(ServiceRunningState::STATE_RUNNING, ability_->QueryServiceState());
203     ability_->OnStart(); // start ability again
204     EXPECT_EQ(ServiceRunningState::STATE_RUNNING, ability_->QueryServiceState());
205 
206     ability_->OnStop(); // stop ability
207     EXPECT_EQ(ServiceRunningState::STATE_NOT_START, ability_->QueryServiceState());
208     ability_->OnStart(); // restart ability
209     EXPECT_EQ(ServiceRunningState::STATE_RUNNING, ability_->QueryServiceState());
210     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] NetworkOnStartAndOnStop001 end");
211 }
212 
213 HWTEST_F(NetworkAbilityTest, NetworkDump001, TestSize.Level1)
214 {
215     GTEST_LOG_(INFO)
216         << "NetworkAbilityTest, NetworkDump001, TestSize.Level1";
217     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] NetworkDump001 begin");
218     int32_t fd = 0;
219     std::vector<std::u16string> args;
220     std::u16string arg1 = Str8ToStr16("arg1");
221     args.emplace_back(arg1);
222     std::u16string arg2 = Str8ToStr16("arg2");
223     args.emplace_back(arg2);
224     std::u16string arg3 = Str8ToStr16("arg3");
225     args.emplace_back(arg3);
226     std::u16string arg4 = Str8ToStr16("arg4");
227     args.emplace_back(arg4);
228     EXPECT_EQ(ERR_OK, ability_->Dump(fd, args));
229 
230     std::vector<std::u16string> emptyArgs;
231     EXPECT_EQ(ERR_OK, ability_->Dump(fd, emptyArgs));
232 
233     std::vector<std::u16string> helpArgs;
234     std::u16string helpArg1 = Str8ToStr16(ARGS_HELP);
235     helpArgs.emplace_back(helpArg1);
236     EXPECT_EQ(ERR_OK, ability_->Dump(fd, helpArgs));
237     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] NetworkDump001 end");
238 }
239 
240 HWTEST_F(NetworkAbilityTest, NetworkSendReportMockLocationEvent001, TestSize.Level1)
241 {
242     GTEST_LOG_(INFO)
243         << "NetworkAbilityTest, NetworkSendReportMockLocationEvent001, TestSize.Level1";
244     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] NetworkSendReportMockLocationEvent001 begin");
245     ability_->SendReportMockLocationEvent(); // clear location mock
246 
247     int timeInterval = 0;
248     std::vector<std::shared_ptr<Location>> locations;
249     Parcel parcel;
250     parcel.WriteDouble(10.6); // latitude
251     parcel.WriteDouble(10.5); // longitude
252     parcel.WriteDouble(10.4); // altitude
253     parcel.WriteDouble(1.0); // accuracy
254     parcel.WriteDouble(5.0); // speed
255     parcel.WriteDouble(10); // direction
256     parcel.WriteInt64(1611000000); // timestamp
257     parcel.WriteInt64(1611000000); // time since boot
258     parcel.WriteString16(u"additions"); // additions
259     parcel.WriteInt64(1); // additionSize
260     parcel.WriteBool(true); // isFromMock is true
261     parcel.WriteInt32(1); // source type
262     parcel.WriteInt32(0); // floor no.
263     parcel.WriteDouble(1000.0); // floor acc
264     locations.push_back(Location::UnmarshallingShared(parcel));
265     EXPECT_EQ(ERRCODE_SUCCESS, ability_->EnableMock());
266     EXPECT_EQ(ERRCODE_SUCCESS, ability_->SetMocked(timeInterval, locations));
267     sleep(2);
268     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] NetworkSendReportMockLocationEvent001 end");
269 }
270 
271 HWTEST_F(NetworkAbilityTest, NetworkSendReportMockLocationEvent002, TestSize.Level1)
272 {
273     GTEST_LOG_(INFO)
274         << "NetworkAbilityTest, NetworkSendReportMockLocationEvent002, TestSize.Level1";
275     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] NetworkSendReportMockLocationEvent002 begin");
276     ability_->SendReportMockLocationEvent(); // clear location mock
277 
278     int timeInterval = 0;
279     std::vector<std::shared_ptr<Location>> locations;
280     Parcel parcel;
281     parcel.WriteDouble(10.6); // latitude
282     parcel.WriteDouble(10.5); // longitude
283     parcel.WriteDouble(10.4); // altitude
284     parcel.WriteDouble(1.0); // accuracy
285     parcel.WriteDouble(5.0); // speed
286     parcel.WriteDouble(10); // direction
287     parcel.WriteInt64(1611000000); // timestamp
288     parcel.WriteInt64(1611000000); // time since boot
289     parcel.WriteString16(u"additions"); // additions
290     parcel.WriteInt64(1); // additionSize
291     parcel.WriteBool(false); // isFromMock is false
292     parcel.WriteInt32(1); // source type
293     parcel.WriteInt32(0); // floor no.
294     parcel.WriteDouble(1000.0); // floor acc
295     locations.push_back(Location::UnmarshallingShared(parcel));
296     EXPECT_EQ(ERRCODE_SUCCESS, ability_->EnableMock());
297     EXPECT_EQ(ERRCODE_SUCCESS, ability_->SetMocked(timeInterval, locations));
298     sleep(2);
299     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] NetworkSendReportMockLocationEvent002 end");
300 }
301 
302 /*
303  * @tc.name: NetworkConnectNlpService001
304  * @tc.desc: connect nlp service
305  * @tc.type: FUNC
306  */
307 HWTEST_F(NetworkAbilityTest, NetworkConnectNlpService001, TestSize.Level1)
308 {
309     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] NetworkConnectNlpService001 begin");
310     EXPECT_EQ(false, ability_->ReConnectNlpService());
311     LBSLOGI(NETWORK_TEST, "[NetworkAbilityTest] NetworkConnectNlpService001 end");
312 }
313 } // namespace Location
314 } // namespace OHOS