• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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