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 <iostream>
17 #include <vector>
18 #include "iservice_registry.h"
19 #include "system_ability_definition.h"
20 #include "datashare_helper.h"
21 #include "datashare_predicates.h"
22 #include "abs_shared_result_set.h"
23 #include "values_bucket.h"
24 #include "uri.h"
25 #include "resource_manager.h"
26 #include "nativetoken_kit.h"
27 #include "accesstoken_kit.h"
28 #include "token_setproc.h"
29 #include "global_params_data.h"
30 #include "sim_data.h"
31 #include "sms_mms_data.h"
32 #include "pdp_profile_data.h"
33 #include "opkey_data.h"
34 #include "data_storage_log_wrapper.h"
35 
36 namespace OHOS {
37 namespace Telephony {
38 const int PERMS_NUM = 4;
39 const int NUM_MATCH_SHORT_EIGHT = 8;
40 const int NUM_MATCH_ELEVEN = 11;
41 using CmdProcessFunc = int (*)(std::shared_ptr<DataShare::DataShareHelper> helper);
42 std::map<char, CmdProcessFunc> g_simFuncMap;
43 std::map<char, CmdProcessFunc> g_smsFuncMap;
44 std::map<char, CmdProcessFunc> g_pdpProfileFuncMap;
45 std::map<char, CmdProcessFunc> g_opKeyFuncMap;
46 std::map<char, CmdProcessFunc> g_globalParamsFuncMap;
47 std::shared_ptr<DataShare::DataShareHelper> simDataHelper = nullptr;
48 std::shared_ptr<DataShare::DataShareHelper> smsDataHelper = nullptr;
49 std::shared_ptr<DataShare::DataShareHelper> pdpProfileDataHelper = nullptr;
50 std::shared_ptr<DataShare::DataShareHelper> opKeyDataHelper = nullptr;
51 std::shared_ptr<DataShare::DataShareHelper> globalParamsDataHelper = nullptr;
CreateDataShareHelper(int32_t systemAbilityId,std::string & uri)52 std::shared_ptr<DataShare::DataShareHelper> CreateDataShareHelper(
53     int32_t systemAbilityId, std::string &uri)
54 {
55     DATA_STORAGE_LOGI("DataSimRdbHelper::CreateDataShareHelper ");
56     auto saManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
57     if (saManager == nullptr) {
58         DATA_STORAGE_LOGE("DataSimRdbHelper Get system ability mgr failed.");
59         return nullptr;
60     }
61     auto remoteObj = saManager->GetSystemAbility(systemAbilityId);
62     if (remoteObj == nullptr) {
63         DATA_STORAGE_LOGE("DataSimRdbHelper GetSystemAbility Service Failed.");
64         return nullptr;
65     }
66     return DataShare::DataShareHelper::Creator(remoteObj, uri);
67 }
68 
ApplyPermission()69 void ApplyPermission()
70 {
71     const char *perms[PERMS_NUM] = {
72         "ohos.permission.READ_MESSAGES",
73         "ohos.permission.ANSWER_CALL",
74         "ohos.permission.SET_TELEPHONY_STATE",
75         "ohos.permission.GET_TELEPHONY_STATE",
76     };
77 
78     NativeTokenInfoParams testCallInfoParams = {
79         .dcapsNum = 0,
80         .permsNum = PERMS_NUM,
81         .aclsNum = 0,
82         .dcaps = nullptr,
83         .perms = perms,
84         .acls = nullptr,
85         .processName = "tel_telephony_data_test",
86         .aplStr = "system_basic",
87     };
88     Security::AccessToken::AccessTokenID currentID_ = GetAccessTokenId(&testCallInfoParams);
89     SetSelfTokenID(currentID_);
90     Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
91 }
92 
RemovePermission()93 void RemovePermission()
94 {
95     return;
96 }
97 
CreateSimHelper()98 std::shared_ptr<DataShare::DataShareHelper> CreateSimHelper()
99 {
100     if (simDataHelper == nullptr) {
101         std::string uri(SIM_URI);
102         if (uri.data() == nullptr) {
103             DATA_STORAGE_LOGE("CreateSimHelper uri is nullptr");
104             return nullptr;
105         }
106         simDataHelper = CreateDataShareHelper(TELEPHONY_CORE_SERVICE_SYS_ABILITY_ID, uri);
107     }
108     return simDataHelper;
109 }
110 
CreateSmsHelper()111 std::shared_ptr<DataShare::DataShareHelper> CreateSmsHelper()
112 {
113     if (smsDataHelper == nullptr) {
114         std::string uri(SMS_MMS_URI);
115         if (uri.data() == nullptr) {
116             DATA_STORAGE_LOGE("CreateSmsHelper uri is nullptr");
117             return nullptr;
118         }
119         smsDataHelper = CreateDataShareHelper(TELEPHONY_SMS_MMS_SYS_ABILITY_ID, uri);
120     }
121     return smsDataHelper;
122 }
123 
CreatePdpProfileHelper()124 std::shared_ptr<DataShare::DataShareHelper> CreatePdpProfileHelper()
125 {
126     if (pdpProfileDataHelper == nullptr) {
127         std::string uri(PDP_PROFILE_URI);
128         if (uri.data() == nullptr) {
129             DATA_STORAGE_LOGE("CreatePdpProfileHelper uri is nullptr");
130             return nullptr;
131         }
132         pdpProfileDataHelper = CreateDataShareHelper(TELEPHONY_SMS_MMS_SYS_ABILITY_ID, uri);
133     }
134     return pdpProfileDataHelper;
135 }
136 
CreateOpKeyHelper()137 std::shared_ptr<DataShare::DataShareHelper> CreateOpKeyHelper()
138 {
139     if (opKeyDataHelper == nullptr) {
140         std::string uri(OPKEY_URI);
141         if (uri.data() == nullptr) {
142             DATA_STORAGE_LOGE("CreateOpKeyHelper uri is nullptr");
143             return nullptr;
144         }
145         opKeyDataHelper = CreateDataShareHelper(TELEPHONY_SMS_MMS_SYS_ABILITY_ID, uri);
146     }
147     return opKeyDataHelper;
148 }
149 
CreateGlobalParamsHelper()150 std::shared_ptr<DataShare::DataShareHelper> CreateGlobalParamsHelper()
151 {
152     if (globalParamsDataHelper == nullptr) {
153         std::string uri(GLOBAL_PARAMS_URI);
154         if (uri.data() == nullptr) {
155             DATA_STORAGE_LOGE("CreateGlobalParamsHelper uri is nullptr");
156             return nullptr;
157         }
158         globalParamsDataHelper = CreateDataShareHelper(TELEPHONY_SMS_MMS_SYS_ABILITY_ID, uri);
159     }
160     return globalParamsDataHelper;
161 }
162 
SimSetCardByType(std::shared_ptr<DataShare::DataShareHelper> helper)163 int SimSetCardByType(std::shared_ptr<DataShare::DataShareHelper> helper)
164 {
165     Uri uri("datashare:///com.ohos.simability/sim/sim_info/set_card");
166     DataShare::DataShareValuesBucket value;
167     DataShare::DataSharePredicates predicates;
168     value.Put(SimData::SIM_ID, 1);
169     value.Put(SimData::CARD_TYPE, 1);
170     return helper->Update(uri, predicates, value);
171 }
172 
OpKeyInsert(std::shared_ptr<DataShare::DataShareHelper> helper)173 int OpKeyInsert(std::shared_ptr<DataShare::DataShareHelper> helper)
174 {
175     std::string opkey = "1435";
176     Uri uri("datashare:///com.ohos.opkeyability/opkey/opkey_info");
177     DataShare::DataShareValuesBucket value;
178     value.Put(OpKeyData::ID, 1);
179     value.Put(OpKeyData::MCCMNC, "46000");
180     value.Put(OpKeyData::GID1, "gid1");
181     value.Put(OpKeyData::OPERATOR_NAME, "Mobile");
182     value.Put(OpKeyData::OPERATOR_KEY, opkey);
183     return helper->Insert(uri, value);
184 }
185 
OpKeyUpdate(std::shared_ptr<DataShare::DataShareHelper> helper)186 int OpKeyUpdate(std::shared_ptr<DataShare::DataShareHelper> helper)
187 {
188     Uri uri("datashare:///com.ohos.opkeyability/opkey/opkey_info");
189     DataShare::DataShareValuesBucket values;
190     values.Put(OpKeyData::GID1, "gidd1");
191     DataShare::DataSharePredicates predicates;
192     predicates.EqualTo(OpKeyData::OPERATOR_KEY, "1435");
193     return helper->Update(uri, predicates, values);
194 }
195 
OpKeySelect(std::shared_ptr<DataShare::DataShareHelper> helper)196 int OpKeySelect(std::shared_ptr<DataShare::DataShareHelper> helper)
197 {
198     DATA_STORAGE_LOGI("OpKeySelect --- ");
199     Uri uri("datashare:///com.ohos.opkeyability/opkey/opkey_info");
200     std::vector<std::string> columns;
201     DataShare::DataSharePredicates predicates;
202     std::shared_ptr<DataShare::DataShareResultSet> resultSet = helper->Query(uri, predicates, columns);
203     if (resultSet != nullptr) {
204         int count;
205         resultSet->GetRowCount(count);
206         std::cout << "count is " << count;
207         return count;
208     }
209     return -1;
210 }
211 
OpKeyDelete(std::shared_ptr<DataShare::DataShareHelper> helper)212 int OpKeyDelete(std::shared_ptr<DataShare::DataShareHelper> helper)
213 {
214     Uri uri("datashare:///com.ohos.opkeyability/opkey/opkey_info");
215     DataShare::DataSharePredicates predicates;
216     predicates.EqualTo(OpKeyData::ID, "1");
217     return helper->Delete(uri, predicates);
218 }
219 
SimInsert(std::shared_ptr<DataShare::DataShareHelper> helper)220 int SimInsert(std::shared_ptr<DataShare::DataShareHelper> helper)
221 {
222     Uri uri("datashare:///com.ohos.simability/sim/sim_info");
223     DataShare::DataShareValuesBucket value;
224     value.Put(SimData::SIM_ID, 1);
225     value.Put(SimData::PHONE_NUMBER, "134xxxxxxxx");
226     value.Put(SimData::ICC_ID, "icc_id");
227     value.Put(SimData::CARD_ID, "card_id");
228     return helper->Insert(uri, value);
229 }
230 
SimUpdate(std::shared_ptr<DataShare::DataShareHelper> helper)231 int SimUpdate(std::shared_ptr<DataShare::DataShareHelper> helper)
232 {
233     Uri uri("datashare:///com.ohos.simability/sim/sim_info");
234     std::string slot = std::to_string(1);
235     DataShare::DataShareValuesBucket values;
236     values.Put(SimData::SHOW_NAME, "China Mobile");
237     DataShare::DataSharePredicates predicates;
238     predicates.EqualTo(SimData::SIM_ID, slot);
239     return helper->Update(uri, predicates, values);
240 }
241 
SimSelect(std::shared_ptr<DataShare::DataShareHelper> helper)242 int SimSelect(std::shared_ptr<DataShare::DataShareHelper> helper)
243 {
244     Uri uri("datashare:///com.ohos.simability/sim/sim_info");
245     std::vector<std::string> columns;
246     DataShare::DataSharePredicates predicates;
247     std::shared_ptr<DataShare::DataShareResultSet> resultSet = helper->Query(uri, predicates, columns);
248     if (resultSet != nullptr) {
249         int count;
250         resultSet->GetRowCount(count);
251         return count;
252     }
253     return -1;
254 }
255 
SimDelete(std::shared_ptr<DataShare::DataShareHelper> helper)256 int SimDelete(std::shared_ptr<DataShare::DataShareHelper> helper)
257 {
258     Uri uri("datashare:///com.ohos.simability/sim/sim_info");
259     DataShare::DataSharePredicates predicates;
260     predicates.EqualTo(SimData::SIM_ID, "1");
261     return helper->Delete(uri, predicates);
262 }
263 
SmsBatchInsert(std::shared_ptr<DataShare::DataShareHelper> helper)264 int SmsBatchInsert(std::shared_ptr<DataShare::DataShareHelper> helper)
265 {
266     Uri uri("datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info");
267     std::vector<DataShare::DataShareValuesBucket> values;
268     DataShare::DataShareValuesBucket value;
269     int batchNum = 100;
270     for (int i = 0; i < batchNum; i++) {
271         value.Put(SmsMmsInfo::RECEIVER_NUMBER, "134xxxxxxxx");
272         value.Put(SmsMmsInfo::MSG_CONTENT, "The first test text message content");
273         value.Put(SmsMmsInfo::GROUP_ID, 1);
274         values.push_back(value);
275         value.Clear();
276     }
277     return helper->BatchInsert(uri, values);
278 }
279 
SmsInsert(std::shared_ptr<DataShare::DataShareHelper> helper)280 int SmsInsert(std::shared_ptr<DataShare::DataShareHelper> helper)
281 {
282     Uri uri("datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info");
283     DataShare::DataShareValuesBucket value;
284     value.Put(SmsMmsInfo::RECEIVER_NUMBER, "134xxxxxxxx");
285     value.Put(SmsMmsInfo::MSG_CONTENT, "The first test text message content");
286     value.Put(SmsMmsInfo::GROUP_ID, 1);
287     return helper->Insert(uri, value);
288 }
289 
SmsUpdate(std::shared_ptr<DataShare::DataShareHelper> helper)290 int SmsUpdate(std::shared_ptr<DataShare::DataShareHelper> helper)
291 {
292     Uri uri("datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info");
293     DataShare::DataShareValuesBucket values;
294     values.Put(SmsMmsInfo::MSG_CONTENT, "The second test text message content");
295     DataShare::DataSharePredicates predicates;
296     predicates.EqualTo(SmsMmsInfo::MSG_ID, "1");
297     return helper->Update(uri, predicates, values);
298 }
299 
SmsSelect(std::shared_ptr<DataShare::DataShareHelper> helper)300 int SmsSelect(std::shared_ptr<DataShare::DataShareHelper> helper)
301 {
302     Uri uri("datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info");
303     std::vector<std::string> columns;
304     DataShare::DataSharePredicates predicates;
305     std::shared_ptr<DataShare::DataShareResultSet> resultSet = helper->Query(uri, predicates, columns);
306     if (resultSet != nullptr) {
307         int count;
308         resultSet->GetRowCount(count);
309         std::cout << "count is " << count;
310         return count;
311     }
312     return -1;
313 }
314 
SmsDelete(std::shared_ptr<DataShare::DataShareHelper> helper)315 int SmsDelete(std::shared_ptr<DataShare::DataShareHelper> helper)
316 {
317     Uri uri("datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info");
318     DataShare::DataSharePredicates predicates;
319     predicates.EqualTo(SmsMmsInfo::MSG_ID, "1");
320     return helper->Delete(uri, predicates);
321 }
322 
PdpProfileReset(std::shared_ptr<DataShare::DataShareHelper> helper)323 int PdpProfileReset(std::shared_ptr<DataShare::DataShareHelper> helper)
324 {
325     Uri uri("datashare:///com.ohos.pdpprofileability/net/pdp_profile/reset");
326     DataShare::DataShareValuesBucket values;
327     DataShare::DataSharePredicates predicates;
328     return helper->Update(uri, predicates, values);
329 }
330 
PdpProfileInsert(std::shared_ptr<DataShare::DataShareHelper> helper)331 int PdpProfileInsert(std::shared_ptr<DataShare::DataShareHelper> helper)
332 {
333     Uri uri("datashare:///com.ohos.pdpprofileability/net/pdp_profile");
334     DataShare::DataShareValuesBucket value;
335     value.Put(PdpProfileData::PROFILE_NAME, "frist_profile_name");
336     value.Put(PdpProfileData::MCC, "460");
337     value.Put(PdpProfileData::MNC, "91");
338     return helper->Insert(uri, value);
339 }
340 
PdpProfileUpdate(std::shared_ptr<DataShare::DataShareHelper> helper)341 int PdpProfileUpdate(std::shared_ptr<DataShare::DataShareHelper> helper)
342 {
343     Uri uri("datashare:///com.ohos.pdpprofileability/net/pdp_profile");
344     DataShare::DataShareValuesBucket values;
345     values.Put(PdpProfileData::PROFILE_NAME, "update_profile_name");
346     DataShare::DataSharePredicates predicates;
347     predicates.EqualTo(PdpProfileData::PROFILE_ID, "1");
348     return helper->Update(uri, predicates, values);
349 }
350 
PdpProfileDelete(std::shared_ptr<DataShare::DataShareHelper> helper)351 int PdpProfileDelete(std::shared_ptr<DataShare::DataShareHelper> helper)
352 {
353     Uri uri("datashare:///com.ohos.pdpprofileability/net/pdp_profile");
354     DataShare::DataSharePredicates predicates;
355     predicates.EqualTo(PdpProfileData::PROFILE_ID, "1");
356     return helper->Delete(uri, predicates);
357 }
358 
PdpProfileSelect(std::shared_ptr<DataShare::DataShareHelper> helper)359 int PdpProfileSelect(std::shared_ptr<DataShare::DataShareHelper> helper)
360 {
361     Uri uri("datashare:///com.ohos.pdpprofileability/net/pdp_profile");
362     std::vector<std::string> columns;
363     DataShare::DataSharePredicates predicates;
364     std::shared_ptr<DataShare::DataShareResultSet> resultSet = helper->Query(uri, predicates, columns);
365     if (resultSet != nullptr) {
366         int count;
367         resultSet->GetRowCount(count);
368         std::cout << "count is " << count;
369         return count;
370     }
371     return -1;
372 }
373 
GlobalParamsNumMatchInsert(std::shared_ptr<DataShare::DataShareHelper> helper)374 int GlobalParamsNumMatchInsert(std::shared_ptr<DataShare::DataShareHelper> helper)
375 {
376     std::cout << " GlobalParamsNumMatchInsert " << std::endl;
377     DATA_STORAGE_LOGI("GlobalParamsNumMatchInsert ---");
378     Uri uri("datashare:///com.ohos.globalparamsability/globalparams/num_matchs");
379     DataShare::DataShareValuesBucket value;
380     value.Put(NumMatchData::NAME, "frist_numMatch_name");
381     value.Put(NumMatchData::MCC, "460");
382     value.Put(NumMatchData::MNC, "91");
383     value.Put(NumMatchData::MCCMNC, "46091");
384     value.Put(NumMatchData::NUM_MATCH, NUM_MATCH_ELEVEN);
385     value.Put(NumMatchData::NUM_MATCH_SHORT, NUM_MATCH_SHORT_EIGHT);
386     int ret = helper->Insert(uri, value);
387     std::cout << "Result: " << ret << std::endl;
388     return ret;
389 }
390 
GlobalParamsNumMatchUpdate(std::shared_ptr<DataShare::DataShareHelper> helper)391 int GlobalParamsNumMatchUpdate(std::shared_ptr<DataShare::DataShareHelper> helper)
392 {
393     std::cout << " GlobalParamsNumMatchUpdate " << std::endl;
394     DATA_STORAGE_LOGI("GlobalParamsNumMatchUpdate ---");
395     Uri uri("datashare:///com.ohos.globalparamsability/globalparams/num_matchs");
396     DataShare::DataShareValuesBucket values;
397     values.Put(NumMatchData::NAME, "update_name");
398     DataShare::DataSharePredicates predicates;
399     predicates.EqualTo(NumMatchData::MCCMNC, "46091");
400     int ret = helper->Update(uri, predicates, values);
401     std::cout << "Result: " << ret << std::endl;
402     return ret;
403 }
404 
GlobalParamsNumMatchDelete(std::shared_ptr<DataShare::DataShareHelper> helper)405 int GlobalParamsNumMatchDelete(std::shared_ptr<DataShare::DataShareHelper> helper)
406 {
407     std::cout << " GlobalParamsNumMatchDelete " << std::endl;
408     DATA_STORAGE_LOGI("GlobalParamsNumMatchDelete ---");
409     Uri uri("datashare:///com.ohos.globalparamsability/globalparams/num_matchs");
410     DataShare::DataSharePredicates predicates;
411     predicates.EqualTo(NumMatchData::MCCMNC, "46091");
412     int ret = helper->Delete(uri, predicates);
413     std::cout << "Result: " << ret << std::endl;
414     return ret;
415 }
416 
DumpNumMatchData(std::shared_ptr<DataShare::DataShareResultSet> resultSet)417 static void DumpNumMatchData(std::shared_ptr<DataShare::DataShareResultSet> resultSet)
418 {
419     if (resultSet == nullptr) {
420         std::cout << "resultSet is NULL, count = 0." << std::endl;
421         return;
422     }
423     int count;
424     resultSet->GetRowCount(count);
425     std::cout << "Dump NumMatchTable: count is " << count << std::endl;
426     for (int row = 0; row < count; row++) {
427         int columnIndex;
428         int id;
429         int match_long;
430         int match_short;
431         std::string name;
432         std::string mcc;
433         std::string mnc;
434         std::string numeric;
435         resultSet->GoToRow(row);
436         resultSet->GetColumnIndex(NumMatchData::ID, columnIndex);
437         resultSet->GetInt(columnIndex, id);
438         resultSet->GetColumnIndex(NumMatchData::NUM_MATCH, columnIndex);
439         resultSet->GetInt(columnIndex, match_long);
440         resultSet->GetColumnIndex(NumMatchData::NUM_MATCH_SHORT, columnIndex);
441         resultSet->GetInt(columnIndex, match_short);
442         resultSet->GetColumnIndex(NumMatchData::NAME, columnIndex);
443         resultSet->GetString(columnIndex, name);
444         resultSet->GetColumnIndex(NumMatchData::MCC, columnIndex);
445         resultSet->GetString(columnIndex, mcc);
446         resultSet->GetColumnIndex(NumMatchData::MNC, columnIndex);
447         resultSet->GetString(columnIndex, mnc);
448         resultSet->GetColumnIndex(NumMatchData::MCCMNC, columnIndex);
449         resultSet->GetString(columnIndex, numeric);
450         std::cout << " Row: " << row << ", id: " << id << ", name: " << name << ", mcc: " << mcc
451                   << ", mnc: " << mnc << ", numeric: " << numeric << ", num_match: " << match_long
452                   << ", num_match_short: " << match_short << std::endl;
453     }
454 }
455 
GlobalParamsNumMatchSelect(std::shared_ptr<DataShare::DataShareHelper> helper)456 int GlobalParamsNumMatchSelect(std::shared_ptr<DataShare::DataShareHelper> helper)
457 {
458     std::cout << " GlobalParamsNumMatchSelect " << std::endl;
459     DATA_STORAGE_LOGI("GlobalParamsNumMatchSelect ---");
460     Uri uri("datashare:///com.ohos.globalparamsability/globalparams/num_matchs");
461     std::vector<std::string> columns;
462     DataShare::DataSharePredicates predicates;
463     std::shared_ptr<DataShare::DataShareResultSet> resultSet = helper->Query(uri, predicates, columns);
464     if (resultSet != nullptr) {
465         int count;
466         resultSet->GetRowCount(count);
467         std::cout << "count is " << count;
468         DumpNumMatchData(resultSet);
469         resultSet->Close();
470         std::cout << "Result: " << count << std::endl;
471         return count;
472     }
473     std::cout << "Result: -1" << std::endl;
474     return -1;
475 }
476 
477 std::vector<std::string> mccmncArray = {"46021", "46091", "23204", "25013", "99998", "330110",
478     "63402", "310800", "60402", "60203"};
479 
GlobalParamsNumMatchSpecifiedQuery(std::shared_ptr<DataShare::DataShareHelper> helper)480 int GlobalParamsNumMatchSpecifiedQuery(std::shared_ptr<DataShare::DataShareHelper> helper)
481 {
482     std::cout << " GlobalParamsNumMatchSpecifiedQuery " << std::endl;
483     DATA_STORAGE_LOGI("GlobalParamsNumMatchSpecifiedQuery ---");
484     Uri uri("datashare:///com.ohos.globalparamsability/globalparams/num_matchs");
485     int vSize = mccmncArray.size();
486     for (int i = 0; i < vSize; i++) {
487         std::cout << " SpecifiedQuery: " << mccmncArray[i] << std::endl;
488         std::vector<std::string> columns;
489         DataShare::DataSharePredicates predicates;
490         predicates.EqualTo(NumMatchData::MCCMNC, mccmncArray[i]);
491         std::shared_ptr<DataShare::DataShareResultSet> resultSet = helper->Query(uri, predicates, columns);
492         if (resultSet != nullptr) {
493             int count;
494             resultSet->GetRowCount(count);
495             std::cout << "count is " << count << std::endl;
496             DumpNumMatchData(resultSet);
497             resultSet->Close();
498         } else {
499             std::cout << "Result: No found!" << std::endl;
500         }
501     }
502     return 0;
503 }
GlobalEccInsert(std::shared_ptr<DataShare::DataShareHelper> helper)504 int GlobalEccInsert(std::shared_ptr<DataShare::DataShareHelper> helper)
505 {
506     Uri uri("datashare:///com.ohos.globalparamsability/globalparams/ecc_data");
507     DataShare::DataShareValuesBucket value;
508     value.Put(EccData::MCC, "460");
509     value.Put(EccData::MNC, "01");
510     value.Put(EccData::NUMERIC, "46001");
511     return helper->Insert(uri, value);
512 }
513 
GlobalEccUpdate(std::shared_ptr<DataShare::DataShareHelper> helper)514 int GlobalEccUpdate(std::shared_ptr<DataShare::DataShareHelper> helper)
515 {
516     Uri uri("datashare:///com.ohos.globalparamsability/globalparams/ecc_data");
517     DataShare::DataShareValuesBucket values;
518     values.Put(EccData::NAME, "46001");
519     DataShare::DataSharePredicates predicates;
520     predicates.EqualTo(EccData::ID, "1");
521     return helper->Update(uri, predicates, values);
522 }
523 
GlobalEccDelete(std::shared_ptr<DataShare::DataShareHelper> helper)524 int GlobalEccDelete(std::shared_ptr<DataShare::DataShareHelper> helper)
525 {
526     Uri uri("datashare:///com.ohos.globalparamsability/globalparams/ecc_data");
527     DataShare::DataSharePredicates predicates;
528     predicates.EqualTo(EccData::ID, "1");
529     return helper->Delete(uri, predicates);
530 }
531 
GlobalEccSelect(std::shared_ptr<DataShare::DataShareHelper> helper)532 int GlobalEccSelect(std::shared_ptr<DataShare::DataShareHelper> helper)
533 {
534     Uri uri("datashare:///com.ohos.globalparamsability/globalparams/ecc_data");
535     std::vector<std::string> columns;
536     DataShare::DataSharePredicates predicates;
537     std::shared_ptr<DataShare::DataShareResultSet> resultSet = helper->Query(uri, predicates, columns);
538     if (resultSet != nullptr) {
539         int count;
540         resultSet->GetRowCount(count);
541         std::cout << "count is " << count;
542         return count;
543     }
544     return -1;
545 }
546 
Init()547 void Init()
548 {
549     g_simFuncMap['q'] = SimInsert;
550     g_simFuncMap['w'] = SimUpdate;
551     g_simFuncMap['e'] = SimSelect;
552     g_simFuncMap['r'] = SimDelete;
553     g_simFuncMap['o'] = SimSetCardByType;
554     g_smsFuncMap['t'] = SmsInsert;
555     g_smsFuncMap['y'] = SmsUpdate;
556     g_smsFuncMap['u'] = SmsSelect;
557     g_smsFuncMap['i'] = SmsDelete;
558     g_smsFuncMap['p'] = SmsBatchInsert;
559     g_pdpProfileFuncMap['a'] = PdpProfileInsert;
560     g_pdpProfileFuncMap['s'] = PdpProfileUpdate;
561     g_pdpProfileFuncMap['d'] = PdpProfileDelete;
562     g_pdpProfileFuncMap['f'] = PdpProfileSelect;
563     g_pdpProfileFuncMap['h'] = PdpProfileReset;
564     g_opKeyFuncMap['x'] = OpKeyInsert;
565     g_opKeyFuncMap['c'] = OpKeyUpdate;
566     g_opKeyFuncMap['v'] = OpKeySelect;
567     g_opKeyFuncMap['b'] = OpKeyDelete;
568     g_globalParamsFuncMap['1'] = GlobalParamsNumMatchInsert;
569     g_globalParamsFuncMap['2'] = GlobalParamsNumMatchUpdate;
570     g_globalParamsFuncMap['3'] = GlobalParamsNumMatchSelect;
571     g_globalParamsFuncMap['4'] = GlobalParamsNumMatchDelete;
572     g_globalParamsFuncMap['5'] = GlobalParamsNumMatchSpecifiedQuery;
573     g_globalParamsFuncMap['j'] = GlobalEccInsert;
574     g_globalParamsFuncMap['k'] = GlobalEccUpdate;
575     g_globalParamsFuncMap['l'] = GlobalEccSelect;
576     g_globalParamsFuncMap['m'] = GlobalEccDelete;
577     ApplyPermission();
578 }
579 
VerifyCmd(char inputCMD,std::shared_ptr<DataShare::DataShareHelper> & helper)580 int VerifyCmd(char inputCMD, std::shared_ptr<DataShare::DataShareHelper> &helper)
581 {
582     auto itFunSim = g_simFuncMap.find(inputCMD);
583     if (itFunSim != g_simFuncMap.end()) {
584         auto memberFunc = itFunSim->second;
585         if (memberFunc != nullptr) {
586             helper = CreateSimHelper();
587             if (helper != nullptr) {
588                 (*memberFunc)(helper);
589             }
590             return 0;
591         }
592     }
593     auto itFunSms = g_smsFuncMap.find(inputCMD);
594     if (itFunSms != g_smsFuncMap.end()) {
595         auto memberFunc = itFunSms->second;
596         if (memberFunc != nullptr) {
597             helper = CreateSmsHelper();
598             if (helper != nullptr) {
599                 (*memberFunc)(helper);
600             }
601             return 0;
602         }
603     }
604     auto itFunPdpProfile = g_pdpProfileFuncMap.find(inputCMD);
605     if (itFunPdpProfile != g_pdpProfileFuncMap.end()) {
606         auto memberFunc = itFunPdpProfile->second;
607         if (memberFunc != nullptr) {
608             helper = CreatePdpProfileHelper();
609             if (helper != nullptr) {
610                 (*memberFunc)(helper);
611             }
612             return 0;
613         }
614     }
615     auto itFunOpKey = g_opKeyFuncMap.find(inputCMD);
616     if (itFunOpKey != g_opKeyFuncMap.end()) {
617         auto memberFunc = itFunOpKey->second;
618         if (memberFunc != nullptr) {
619             helper = CreateOpKeyHelper();
620             if (helper != nullptr) {
621                 (*memberFunc)(helper);
622             }
623             return 0;
624         }
625     }
626     auto itFunGlobalEcc = g_globalParamsFuncMap.find(inputCMD);
627     if (itFunGlobalEcc != g_globalParamsFuncMap.end()) {
628         auto memberFunc = itFunGlobalEcc->second;
629         if (memberFunc != nullptr) {
630             helper = CreateGlobalParamsHelper();
631             if (helper != nullptr) {
632                 (*memberFunc)(helper);
633             }
634             return 0;
635         }
636     }
637     auto itFunGlobalParams = g_globalParamsFuncMap.find(inputCMD);
638     if (itFunGlobalParams != g_globalParamsFuncMap.end()) {
639         auto memberFunc = itFunGlobalParams->second;
640         if (memberFunc != nullptr) {
641             helper = CreateGlobalParamsHelper();
642             if (helper != nullptr) {
643                 (*memberFunc)(helper);
644             }
645             return 0;
646         }
647     }
648     return -1;
649 }
650 
ResourceTest()651 void ResourceTest()
652 {
653     OHOS::Global::Resource::ResourceManager *rm = OHOS::Global::Resource::CreateResourceManager();
654     std::string outValue;
655     rm->GetStringByName("hello_ceshi", outValue);
656     DATA_STORAGE_LOGI("DataSimRdbHelper::ResourceTest outValue = %{public}s", outValue.c_str());
657     outValue = "";
658     rm->GetStringByName("hello_telephony", outValue);
659     DATA_STORAGE_LOGI("DataSimRdbHelper::ResourceTest outValue1 = %{public}s", outValue.c_str());
660     free(rm);
661     rm = nullptr;
662 }
663 
PrintfHint()664 void PrintfHint()
665 {
666     printf("\n**********Unit Test Start**********\n"
667            "usage: please input a cmd num:\n"
668            "q:SimInsert()\n"
669            "w:SimUpdate()\n"
670            "e:SimSelect()\n"
671            "r:SimDelete()\n"
672            "o:SimSetCardByType()\n"
673            "t:SmsInsert()\n"
674            "y:SmsUpdate()\n"
675            "u:SmsSelect()\n"
676            "i:SmsDelete()\n"
677            "p:SmsBatchInsert()\n"
678            "a:PdpProfileInsert()\n"
679            "s:PdpProfileUpdate()\n"
680            "d:PdpProfileDelete()\n"
681            "f:PdpProfileSelect()\n"
682            "h:PdpProfileReset()\n"
683            "g:ResourceTest()\n"
684            "x:OpKeyInsert()\n"
685            "c:OpKeyUpdate()\n"
686            "v:OpKeySelect()\n"
687            "b:OpKeyDelete()\n"
688            "0:help\n"
689            "1:GlobalParamsNumMatchInsert()\n"
690            "2:GlobalParamsNumMatchUpdate()\n"
691            "3:GlobalParamsNumMatchSelect()\n"
692            "4:GlobalParamsNumMatchDelete()\n"
693 		   "5:GlobalParamsNumMatchSpecifiedQuery()\n"
694            "j:GlobalInsert()\n"
695            "k:GlobalUpdate()\n"
696            "l:GlobalSelect()\n"
697            "m:GlobalDelete()\n"
698            "z:exit\n"
699            "***********************************\n"
700            "your choice: ");
701 }
702 
Looper()703 void Looper()
704 {
705     char inputCMD = '0';
706     bool loopFlag = true;
707     std::shared_ptr<DataShare::DataShareHelper> helper = nullptr;
708     Init();
709     PrintfHint();
710     while (loopFlag) {
711         PrintfHint();
712         std::cin >> inputCMD;
713         int ret = VerifyCmd(inputCMD, helper);
714         if (ret == 0) {
715             continue;
716         }
717         switch (inputCMD) {
718             case '0': {
719                 PrintfHint();
720                 break;
721             }
722             case 'g': {
723                 ResourceTest();
724                 break;
725             }
726             case 'z': {
727                 loopFlag = false;
728                 break;
729             }
730             default: {
731                 break;
732             }
733         }
734     }
735     RemovePermission();
736 }
737 } // namespace Telephony
738 } // namespace OHOS
739 
740 using namespace OHOS;
main()741 int main()
742 {
743     Telephony::Looper();
744     return 0;
745 }
746