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 #include "basic_unit_test.h"
16 #include "platform_specific.h"
17
18 namespace DistributedDB {
19 using namespace testing::ext;
20 using namespace DistributedDBUnitTest;
21 std::string g_testDir;
SetUpTestCase()22 void BasicUnitTest::SetUpTestCase()
23 {
24 DistributedDBToolsUnitTest::TestDirInit(g_testDir);
25 if (DistributedDBToolsUnitTest::RemoveTestDbFiles(g_testDir) != 0) {
26 LOGE("[BasicUnitTest] Rm test db files error!");
27 }
28 }
29
TearDownTestCase()30 void BasicUnitTest::TearDownTestCase()
31 {
32 if (DistributedDBToolsUnitTest::RemoveTestDbFiles(g_testDir) != 0) {
33 LOGE("[BasicUnitTest] Rm test db files error!");
34 }
35 }
36
SetUp()37 void BasicUnitTest::SetUp()
38 {
39 if (OS::CheckPathExistence(g_testDir)) { // if test dir exist, delete it and printf log
40 DistributedDBToolsUnitTest::RemoveTestDbFiles(g_testDir);
41 LOGE("[BasicUnitTest] The previous test case not clean db files.");
42 }
43 RuntimeContext::GetInstance()->ClearAllDeviceTimeInfo();
44 DistributedDBToolsUnitTest::PrintTestCaseInfo();
45 ASSERT_EQ(communicatorAggregator_, nullptr);
46 communicatorAggregator_ = new (std::nothrow) VirtualCommunicatorAggregator();
47 ASSERT_TRUE(communicatorAggregator_ != nullptr);
48 RuntimeContext::GetInstance()->SetCommunicatorAggregator(communicatorAggregator_);
49 }
50
TearDown()51 void BasicUnitTest::TearDown()
52 {
53 if (DistributedDBToolsUnitTest::RemoveTestDbFiles(g_testDir) != 0) {
54 LOGE("[BasicUnitTest] Rm test db files error.");
55 }
56 RuntimeContext::GetInstance()->SetCommunicatorAggregator(nullptr);
57 RuntimeContext::GetInstance()->SetCommunicatorAdapter(nullptr);
58 communicatorAggregator_ = nullptr;
59 RuntimeContext::GetInstance()->ClearAllDeviceTimeInfo();
60 RuntimeContext::GetInstance()->SetTimeChanged(false);
61 }
62
InitDelegate(const StoreInfo & info,const std::string & deviceId)63 int BasicUnitTest::InitDelegate(const StoreInfo &info, const std::string &deviceId)
64 {
65 if (communicatorAggregator_ == nullptr) {
66 LOGE("[BasicUnitTest] Init delegate with null aggregator");
67 return -E_INTERNAL_ERROR;
68 }
69 communicatorAggregator_->SetRemoteDeviceId(deviceId);
70 int errCode = InitDelegate(info);
71 if (errCode != E_OK) {
72 LOGE("[BasicUnitTest] Init delegate failed %d", errCode);
73 } else {
74 SetDevice(info, deviceId);
75 }
76 return errCode;
77 }
78
GetTestDir()79 std::string BasicUnitTest::GetTestDir()
80 {
81 return g_testDir;
82 }
83
GetDevice(const StoreInfo & info) const84 std::string BasicUnitTest::GetDevice(const StoreInfo &info) const
85 {
86 std::lock_guard<std::mutex> autoLock(deviceMutex_);
87 auto iter = deviceMap_.find(info);
88 if (iter == deviceMap_.end()) {
89 LOGW("[BasicUnitTest] Not exist device app %s store %s user %s",
90 info.appId.c_str(),
91 info.storeId.c_str(),
92 info.userId.c_str());
93 return "";
94 }
95 return iter->second;
96 }
97
SetDevice(const StoreInfo & info,const std::string & device)98 void BasicUnitTest::SetDevice(const StoreInfo &info, const std::string &device)
99 {
100 std::lock_guard<std::mutex> autoLock(deviceMutex_);
101 deviceMap_[info] = device;
102 LOGW("[BasicUnitTest] Set device app %s store %s user %s device %s",
103 info.appId.c_str(),
104 info.storeId.c_str(),
105 info.userId.c_str(),
106 device.c_str());
107 }
108
GetStoreInfo1()109 StoreInfo BasicUnitTest::GetStoreInfo1()
110 {
111 StoreInfo info;
112 info.userId = DistributedDBUnitTest::USER_ID;
113 info.storeId = DistributedDBUnitTest::STORE_ID_1;
114 info.appId = DistributedDBUnitTest::APP_ID;
115 return info;
116 }
117
GetStoreInfo2()118 StoreInfo BasicUnitTest::GetStoreInfo2()
119 {
120 StoreInfo info;
121 info.userId = DistributedDBUnitTest::USER_ID;
122 info.storeId = DistributedDBUnitTest::STORE_ID_2;
123 info.appId = DistributedDBUnitTest::APP_ID;
124 return info;
125 }
126
GetStoreInfo3()127 StoreInfo BasicUnitTest::GetStoreInfo3()
128 {
129 StoreInfo info;
130 info.userId = DistributedDBUnitTest::USER_ID;
131 info.storeId = DistributedDBUnitTest::STORE_ID_3;
132 info.appId = DistributedDBUnitTest::DISTRIBUTED_APP_ID;
133 return info;
134 }
135
SetProcessCommunicator(const std::shared_ptr<IProcessCommunicator> & processCommunicator)136 void BasicUnitTest::SetProcessCommunicator(const std::shared_ptr<IProcessCommunicator> &processCommunicator)
137 {
138 processCommunicator_ = processCommunicator;
139 }
140
GetAllSendMsgSize() const141 uint64_t BasicUnitTest::GetAllSendMsgSize() const
142 {
143 if (communicatorAggregator_ == nullptr) {
144 return 0u;
145 }
146 return communicatorAggregator_->GetAllSendMsgSize();
147 }
148
RegBeforeDispatch(const std::function<void (const std::string &,const Message *)> & beforeDispatch)149 void BasicUnitTest::RegBeforeDispatch(const std::function<void(const std::string &, const Message *)> &beforeDispatch)
150 {
151 ASSERT_NE(communicatorAggregator_, nullptr);
152 communicatorAggregator_->RegBeforeDispatch(beforeDispatch);
153 }
154
SetMtu(const std::string & dev,uint32_t mtu)155 void BasicUnitTest::SetMtu(const std::string &dev, uint32_t mtu)
156 {
157 ASSERT_NE(communicatorAggregator_, nullptr);
158 communicatorAggregator_->SetDeviceMtuSize(dev, mtu);
159 }
160 } // namespace DistributedDB
161