1 /*
2  * Copyright (C) 2024 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 "ringtone_dualfwk_restore_test.h"
17 #include "ability_context_impl.h"
18 #include "datashare_ext_ability.h"
19 #include "iservice_registry.h"
20 #include "medialibrary_db_const.h"
21 #include "file_asset.h"
22 #include "fetch_result.h"
23 #include "ringtone_restore_napi.h"
24 #include "ringtone_restore_factory.h"
25 #include "ringtone_restore_type.h"
26 #include "ringtone_rdb_callbacks.h"
27 
28 #define private public
29 #define protected public
30 #include "ringtone_dualfwk_restore.h"
31 #include "dualfwk_conf_loader.h"
32 #undef protected
33 #undef private
34 #include "ringtone_errno.h"
35 #include "ringtone_file_utils.h"
36 #include "ringtone_log.h"
37 #include "ringtone_rdbstore.h"
38 #include "datashare_helper.h"
39 using namespace std;
40 using namespace testing::ext;
41 
42 namespace OHOS {
43 namespace Media {
44 const string TEST_BACKUP_PATH = "/data/test/backup";
45 const string TEST_BACKUP_DATA = "/data/local/tmp/test/Adara.ogg";
46 
47 unique_ptr<RingtoneDualFwkRestore> g_restoreDualFwkService = nullptr;
48 
SetUpTestCase(void)49 void RingtoneDualFwkRestoreTest::SetUpTestCase(void)
50 {
51     auto stageContext = std::make_shared<AbilityRuntime::ContextImpl>();
52     auto abilityContextImpl = std::make_shared<OHOS::AbilityRuntime::AbilityContextImpl>();
53     abilityContextImpl->SetStageContext(stageContext);
54     shared_ptr<RingtoneUnistore> rUniStore  = RingtoneRdbStore::GetInstance(abilityContextImpl);
55     int32_t ret = rUniStore->Init();
56     EXPECT_EQ(ret, E_OK);
57     g_restoreDualFwkService = std::make_unique<RingtoneDualFwkRestore>();
58     int32_t res = g_restoreDualFwkService->Init(TEST_BACKUP_PATH);
59     // (void) res;
60     ASSERT_EQ(res, E_FAIL);
61 
62     const string subPath = "/data/local/tmp/test";
63     EXPECT_EQ(RingtoneFileUtils::CreateDirectory(subPath), true);
64     EXPECT_EQ(RingtoneFileUtils::CreateFile(TEST_BACKUP_DATA), E_SUCCESS);
65 }
66 
TearDownTestCase(void)67 void RingtoneDualFwkRestoreTest::TearDownTestCase(void)
68 {
69     g_restoreDualFwkService = nullptr;
70     system("rm -rf /data/local/tmp/test");
71 }
72 
SetUp()73 void RingtoneDualFwkRestoreTest::SetUp() {}
74 
TearDown()75 void RingtoneDualFwkRestoreTest::TearDown() {}
76 
77 HWTEST_F(RingtoneDualFwkRestoreTest, ringtone_dualfwk_restore_test_0001, TestSize.Level0)
78 {
79     RINGTONE_INFO_LOG("ringtone_dualfwk_restore_test_0001 start");
80     EXPECT_NE(g_restoreDualFwkService->dualFwkSetting_, nullptr);
81     EXPECT_NE(g_restoreDualFwkService->mediaDataShare_, nullptr);
82     g_restoreDualFwkService->StartRestore();
83     std::unique_ptr<DualFwkConfRow> conf = std::make_unique<DualFwkConfRow>();
84     string confName = "alarm_alert_path";
85     const string confValue = TEST_BACKUP_DATA;
86     const string isSysSet = "true";
87     conf->name = confName;
88     conf->defaultSysSet = isSysSet;
89     conf->value = confValue;
90     auto ret = g_restoreDualFwkService->dualFwkSetting_->ProcessConfRow(conf);
91     EXPECT_EQ(ret, E_SUCCESS);
92     confName = "notification_sound";
93     conf->name = confName;
94     ret = g_restoreDualFwkService->dualFwkSetting_->ProcessConfRow(conf);
95     EXPECT_EQ(ret, E_SUCCESS);
96     confName = "notification_sound_set";
97     conf->name = confName;
98     ret = g_restoreDualFwkService->dualFwkSetting_->ProcessConfRow(conf);
99     EXPECT_EQ(ret, E_SUCCESS);
100     g_restoreDualFwkService->localRdb_ = RingtoneRdbStore::GetInstance()->GetRaw();
101     g_restoreDualFwkService->StartRestore();
102     RINGTONE_INFO_LOG("ringtone_dualfwk_restore_test_0001 end");
103 }
104 
105 HWTEST_F(RingtoneDualFwkRestoreTest, ringtone_dualfwk_restore_test_0002, TestSize.Level0)
106 {
107     RINGTONE_INFO_LOG("ringtone_dualfwk_restore_test_0002 start");
108 
109     DualFwkConfLoader confLoader;
110     if (confLoader.Init() != E_OK) {
111         RINGTONE_ERR_LOG("Failed to initialize DualFwkConfLoader.");
112         return;
113     }
114     auto confVal = confLoader.GetConf("SETTINGSDATA_CreatedTime");
115     std::cout << "conf value of SETTINGSDATA_CreatedTime = " << confVal << std::endl;
116     DualFwkConf conf;
117     confLoader.Load(conf, RESTORE_SCENE_TYPE_DUAL_CLONE, "");
118     confLoader.ShowConf(conf);
119     confLoader.Load(conf, RESTORE_SCENE_TYPE_DUAL_UPGRADE, "");
120     confLoader.ShowConf(conf);
121     RINGTONE_INFO_LOG("ringtone_dualfwk_restore_test_0002 end");
122 }
123 
124 HWTEST_F(RingtoneDualFwkRestoreTest, ringtone_dualfwk_restore_test_0003, TestSize.Level0)
125 {
126     NativeRdb::RdbStoreConfig config(RINGTONE_LIBRARY_DB_NAME);
127     config.SetPath("/data/app/el2/100/database/com.ohos.ringtonelibrary.ringtonelibrarydata/rdb/"
128         + RINGTONE_LIBRARY_DB_NAME);
129     config.SetBundleName("xx");
130     config.SetReadConSize(10);
131     config.SetSecurityLevel(NativeRdb::SecurityLevel::S3);
132 
133     int32_t err;
134     RingtoneDataCallBack cb;
135     auto rdbStore = NativeRdb::RdbHelper::GetRdbStore(config, RINGTONE_RDB_VERSION, cb, err);
136     std::map<std::string, std::shared_ptr<FileInfo>> resultFromMedia;
137     std::map<std::string, std::shared_ptr<FileInfo>> resultFromRingtone;
138     auto restore = std::make_unique<RingtoneDualFwkRestoreClone>();
139     restore->Init("/");
140     restore->QueryMediaLibForFileInfo({"sound.m4a", "common.mp3", "cc"}, resultFromMedia, TOOL_QUERY_AUDIO);
141     restore->QueryRingToneDbForFileInfo(rdbStore, {"Creek.ogg", "Dawn.ogg", "Flourish.ogg"}, resultFromRingtone);
142     RINGTONE_INFO_LOG("ringtone_dualfwk_restore_test_0003 end");
143 }
144 
145 HWTEST_F(RingtoneDualFwkRestoreTest, ringtone_dualfwk_restore_test_0004, TestSize.Level0)
146 {
147     RINGTONE_INFO_LOG("ringtone_dualfwk_restore_test_0004 start");
148     string backupPath = "";
149     int32_t res = g_restoreDualFwkService->Init(backupPath);
150     ASSERT_EQ(res, E_INVALID_ARGUMENTS);
151     backupPath = "/data/test";
152     res = g_restoreDualFwkService->Init(backupPath);
153     ASSERT_EQ(res, E_SUCCESS);
154 
155     FileInfo info;
156     info.title = TITLE_DEFAULT;
157     g_restoreDualFwkService->UpdateRestoreFileInfo(info);
158     info.data = TEST_BACKUP_DATA;
159     bool result = g_restoreDualFwkService->OnPrepare(info, TEST_BACKUP_DATA);
160     EXPECT_EQ(result, true);
161     string data = "restore_OnPrepare_test_0001";
162     info.data = data;
163     const string destPath = "/restore_Init_test_0001/data";
164     result = g_restoreDualFwkService->OnPrepare(info, TEST_BACKUP_DATA);
165     EXPECT_EQ(result, false);
166     data = "createfile_001./data";
167     info.data = data;
168     result = g_restoreDualFwkService->OnPrepare(info, TEST_BACKUP_DATA);
169     EXPECT_EQ(result, false);
170     RINGTONE_INFO_LOG("ringtone_dualfwk_restore_test_0004 end");
171 }
172 
173 HWTEST_F(RingtoneDualFwkRestoreTest, ringtone_dualfwk_restore_test_00045, TestSize.Level0)
174 {
175     RINGTONE_INFO_LOG("ringtone_dualfwk_restore_test_00045 start");
176     auto obj = std::make_unique<RingtoneDualFwkRestoreClone>();
177     EXPECT_NE(obj, nullptr);
178     obj->LoadDualFwkConf("");
179     string xml = "setting_system";
180     auto ret = g_restoreDualFwkService->ParseDualFwkConf(xml);
181     EXPECT_EQ(ret, E_FAIL);
182     vector<FileInfo> infos;
183     g_restoreDualFwkService->OnFinished(infos);
184     xml = "/data/test/backup/setting_system.xml";
185     ret = g_restoreDualFwkService->ParseDualFwkConf(xml);
186     EXPECT_EQ(ret, E_SUCCESS);
187     std::unique_ptr<DualFwkConfLoader> dualLoader = std::make_unique<DualFwkConfLoader>();
188     DualFwkConf conf;
189     dualLoader->Load(conf, RESTORE_SCENE_TYPE_DUAL_CLONE, "");
190     RINGTONE_INFO_LOG("ringtone_dualfwk_restore_test_00045 end");
191 }
192 
193 HWTEST_F(RingtoneDualFwkRestoreTest, ringtone_dualfwk_restore_test_0006, TestSize.Level0)
194 {
195     RINGTONE_INFO_LOG("ringtone_dualfwk_restore_test_0006 start");
196     auto dualSetting = std::make_unique<DualFwkSoundSetting>();
197     EXPECT_NE(dualSetting, nullptr);
198     DualFwkConf conf;
199     string message = "Adara.ogg";
200     conf.messagePath = message;
201     conf.notificationSoundPath = message;
202     conf.ringtonePath = message;
203     conf.ringtone2Path = message;
204     conf.alarmAlertPath = message;
205     conf.messageSub1 = message;
206     dualSetting->ProcessConf(conf);
207     auto unConf = std::make_unique<DualFwkConfRow>();
208     auto ret = dualSetting->ProcessConfRow(unConf);
209     EXPECT_EQ(ret, E_ERR);
210     RINGTONE_INFO_LOG("ringtone_dualfwk_restore_test_0006 end");
211 }
212 } // namespace Media
213 } // namespace OHOS