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