1 /*
2 * Copyright (c) 2025 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
18 #include "interfaces/include/ws_common.h"
19 #include "session_manager/include/rdb/starting_window_rdb_manager.h"
20
21 using namespace testing;
22 using namespace testing::ext;
23
24 namespace OHOS {
25 namespace Rosen {
26 namespace {
27 const std::string TEST_RDB_PATH = "/data/test/";
28 const std::string TEST_INVALID_PATH = "";
29 const std::string TEST_RDB_NAME = "starting_window_config_test.db";
30 } // namespace
31
32 class WindowPatternStartingWindowRdbTest : public testing::Test {
33 public:
34 static void SetUpTestCase();
35 static void TearDownTestCase();
36 void SetUp() override;
37 void TearDown() override;
38
39 static std::shared_ptr<StartingWindowRdbManager> startingWindowRdbMgr_;
40 };
41
42 std::shared_ptr<StartingWindowRdbManager> WindowPatternStartingWindowRdbTest::startingWindowRdbMgr_ = nullptr;
43
SetUpTestCase()44 void WindowPatternStartingWindowRdbTest::SetUpTestCase() {}
45
TearDownTestCase()46 void WindowPatternStartingWindowRdbTest::TearDownTestCase() {}
47
SetUp()48 void WindowPatternStartingWindowRdbTest::SetUp()
49 {
50 NativeRdb::RdbHelper::DeleteRdbStore(TEST_RDB_PATH + TEST_RDB_NAME);
51 WmsRdbConfig config;
52 config.dbName = TEST_RDB_NAME;
53 config.dbPath = TEST_RDB_PATH;
54 startingWindowRdbMgr_ = std::make_shared<StartingWindowRdbManager>(config);
55 }
56
TearDown()57 void WindowPatternStartingWindowRdbTest::TearDown()
58 {
59 NativeRdb::RdbHelper::DeleteRdbStore(TEST_RDB_PATH + TEST_RDB_NAME);
60 startingWindowRdbMgr_ = nullptr;
61 }
62
63 namespace {
64 /**
65 * @tc.name: GetRdbStore
66 * @tc.desc: GetRdbStore
67 * @tc.type: FUNC
68 */
69 HWTEST_F(WindowPatternStartingWindowRdbTest, GetRdbStore, TestSize.Level1)
70 {
71 ASSERT_NE(startingWindowRdbMgr_, nullptr);
72 startingWindowRdbMgr_->wmsRdbConfig_.dbPath = TEST_INVALID_PATH;
73 auto rdbStore = startingWindowRdbMgr_->GetRdbStore();
74 ASSERT_EQ(rdbStore, nullptr);
75 startingWindowRdbMgr_->wmsRdbConfig_.dbPath = TEST_RDB_PATH;
76 rdbStore = startingWindowRdbMgr_->GetRdbStore();
77 ASSERT_NE(rdbStore, nullptr);
78 startingWindowRdbMgr_->Init();
79 rdbStore = startingWindowRdbMgr_->GetRdbStore();
80 ASSERT_NE(rdbStore, nullptr);
81 }
82
83 /**
84 * @tc.name: Init
85 * @tc.desc: Init
86 * @tc.type: FUNC
87 */
88 HWTEST_F(WindowPatternStartingWindowRdbTest, Init, TestSize.Level1)
89 {
90 ASSERT_NE(startingWindowRdbMgr_, nullptr);
91 startingWindowRdbMgr_->wmsRdbConfig_.dbPath = TEST_INVALID_PATH;
92 bool res = startingWindowRdbMgr_->Init();
93 ASSERT_EQ(res, false);
94 startingWindowRdbMgr_->wmsRdbConfig_.dbPath = TEST_RDB_PATH;
95 res = startingWindowRdbMgr_->Init();
96 ASSERT_EQ(res, true);
97 }
98
99 /**
100 * @tc.name: InsertData
101 * @tc.desc: InsertData
102 * @tc.type: FUNC
103 */
104 HWTEST_F(WindowPatternStartingWindowRdbTest, InsertData, TestSize.Level1)
105 {
106 ASSERT_NE(startingWindowRdbMgr_, nullptr);
107 StartingWindowRdbItemKey itemKey = {
108 .bundleName = "testName",
109 .moduleName = "testName",
110 .abilityName = "testName",
111 .darkMode = false,
112 };
113 StartingWindowInfo startingWindowInfo;
114 auto res = startingWindowRdbMgr_->InsertData(itemKey, startingWindowInfo);
115 ASSERT_EQ(res, true);
116 }
117
118 /**
119 * @tc.name: BatchInsert
120 * @tc.desc: BatchInsert
121 * @tc.type: FUNC
122 */
123 HWTEST_F(WindowPatternStartingWindowRdbTest, BatchInsert, TestSize.Level1)
124 {
125 ASSERT_NE(startingWindowRdbMgr_, nullptr);
126 StartingWindowRdbItemKey firstItemKey, secondItemKey;
127 StartingWindowInfo firstStartingWindowInfo, secondStartingWindowInfo;
128 firstItemKey.bundleName = "first";
129 secondItemKey.bundleName = "second";
130 std::vector<std::pair<StartingWindowRdbItemKey, StartingWindowInfo>> inputValues{
131 std::make_pair(firstItemKey, firstStartingWindowInfo),
132 std::make_pair(secondItemKey, secondStartingWindowInfo),
133 };
134 int64_t outInsertNum = -1;
135 auto res = startingWindowRdbMgr_->BatchInsert(outInsertNum, inputValues);
136 ASSERT_EQ(res, true);
137 ASSERT_EQ(outInsertNum, inputValues.size());
138 }
139
140 /**
141 * @tc.name: DeleteDataByBundleName
142 * @tc.desc: DeleteDataByBundleName
143 * @tc.type: FUNC
144 */
145 HWTEST_F(WindowPatternStartingWindowRdbTest, DeleteDataByBundleName, TestSize.Level1)
146 {
147 ASSERT_NE(startingWindowRdbMgr_, nullptr);
148 StartingWindowRdbItemKey itemKey;
149 itemKey.bundleName = "testName";
150 StartingWindowInfo startingWindowInfo;
151 auto res = startingWindowRdbMgr_->InsertData(itemKey, startingWindowInfo);
152 EXPECT_EQ(res, true);
153 res = startingWindowRdbMgr_->DeleteDataByBundleName("testName");
154 EXPECT_EQ(res, true);
155 }
156
157 /**
158 * @tc.name: DeleteAllData
159 * @tc.desc: DeleteAllData
160 * @tc.type: FUNC
161 */
162 HWTEST_F(WindowPatternStartingWindowRdbTest, DeleteAllData, TestSize.Level1)
163 {
164 ASSERT_NE(startingWindowRdbMgr_, nullptr);
165 StartingWindowRdbItemKey itemKey;
166 itemKey.bundleName = "testName";
167 StartingWindowInfo startingWindowInfo;
168 auto res = startingWindowRdbMgr_->InsertData(itemKey, startingWindowInfo);
169 EXPECT_EQ(res, true);
170 res = startingWindowRdbMgr_->DeleteAllData();
171 EXPECT_EQ(res, true);
172 }
173
174 /**
175 * @tc.name: QueryData
176 * @tc.desc: QueryData
177 * @tc.type: FUNC
178 */
179 HWTEST_F(WindowPatternStartingWindowRdbTest, QueryData, TestSize.Level1)
180 {
181 ASSERT_NE(startingWindowRdbMgr_, nullptr);
182 StartingWindowRdbItemKey itemKey;
183 itemKey.bundleName = "testName";
184 StartingWindowInfo inputInfo, resInfo;
185 inputInfo.backgroundColor_ = 0;
186 resInfo.backgroundColor_ = 1;
187 auto res = startingWindowRdbMgr_->QueryData(itemKey, resInfo);
188 ASSERT_EQ(res, false);
189 ASSERT_NE(inputInfo.backgroundColor_, resInfo.backgroundColor_);
190 res = startingWindowRdbMgr_->InsertData(itemKey, inputInfo);
191 ASSERT_EQ(res, true);
192 res = startingWindowRdbMgr_->QueryData(itemKey, resInfo);
193 ASSERT_EQ(res, true);
194 ASSERT_EQ(inputInfo.backgroundColor_, resInfo.backgroundColor_);
195 }
196
197 /**
198 * @tc.name: UpgradeDbToNextVersion
199 * @tc.desc: UpgradeDbToNextVersion
200 * @tc.type: FUNC
201 */
202 HWTEST_F(WindowPatternStartingWindowRdbTest, UpgradeDbToNextVersion, TestSize.Level1)
203 {
204 ASSERT_NE(startingWindowRdbMgr_, nullptr);
205 auto rdbStore = startingWindowRdbMgr_->GetRdbStore();
206 ASSERT_NE(rdbStore, nullptr);
207 WmsRdbOpenCallback wmsCallback(startingWindowRdbMgr_->wmsRdbConfig_);
208 wmsCallback.UpgradeDbToNextVersion(*rdbStore, 1);
209 wmsCallback.UpgradeDbToNextVersion(*rdbStore, 2);
210 wmsCallback.UpgradeDbToNextVersion(*rdbStore, 3);
211 ASSERT_NE(rdbStore, nullptr);
212 }
213
214 /**
215 * @tc.name: AddColumn
216 * @tc.desc: AddColumn
217 * @tc.type: FUNC
218 */
219 HWTEST_F(WindowPatternStartingWindowRdbTest, AddColumn, TestSize.Level1)
220 {
221 ASSERT_NE(startingWindowRdbMgr_, nullptr);
222 auto rdbStore = startingWindowRdbMgr_->GetRdbStore();
223 ASSERT_NE(rdbStore, nullptr);
224 WmsRdbOpenCallback wmsCallback(startingWindowRdbMgr_->wmsRdbConfig_);
225 wmsCallback.AddColumn(*rdbStore, "TEST_COLUMN TEXT");
226 ASSERT_NE(rdbStore, nullptr);
227 }
228
229 /**
230 * @tc.name: OnUpgrade
231 * @tc.desc: OnUpgrade
232 * @tc.type: FUNC
233 */
234 HWTEST_F(WindowPatternStartingWindowRdbTest, OnUpgrade, TestSize.Level1)
235 {
236 ASSERT_NE(startingWindowRdbMgr_, nullptr);
237 auto rdbStore = startingWindowRdbMgr_->GetRdbStore();
238 ASSERT_NE(rdbStore, nullptr);
239 WmsRdbOpenCallback wmsCallback(startingWindowRdbMgr_->wmsRdbConfig_);
240 int res = wmsCallback.OnUpgrade(*rdbStore, 2, 1);
241 EXPECT_EQ(res, NativeRdb::E_OK);
242 res = wmsCallback.OnUpgrade(*rdbStore, 1, 2);
243 EXPECT_EQ(res, NativeRdb::E_OK);
244 }
245 } // namespace
246 } // namespace Rosen
247 } // namespace OHOS