* -------------------------------------------------------------------------
* This file is part of the MindStudio project.
* Copyright (c) 2025 Huawei Technologies Co.,Ltd.
*
* MindStudio is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* -------------------------------------------------------------------------
*/
#include <gtest/gtest.h>
#include "PythonGcRepo.h"
#include "TrackInfoManager.h"
#include "../../../DatabaseTestCaseMockUtil.h"
#include "TableDefaultMock.h"
using namespace Dic::Module::Timeline;
using namespace Dic::TimeLine::Table::Default::Mock;
using namespace Dic::Global::PROFILER::MockUtil;
class PythonGCRepoTest : public ::testing::Test {
protected:
const std::string gcSql = "CREATE TABLE GC_RECORD (startNs INTEGER,endNs INTEGER, globalTid INTEGER);";
void SetUp() override { TrackInfoManager::Instance().Reset(); }
void TearDown() override { TrackInfoManager::Instance().Reset(); }
};
TEST_F(PythonGCRepoTest, TestQuerySliceDetailInfoNormal) {
class PythonGCRepoMock : public PythonGcRepo {
public:
void SetMock(PythonGcDependency &dependency) { table = std::move(dependency.tableMock); }
};
sqlite3 *db = nullptr;
DatabaseTestCaseMockUtil::OpenDB(db);
DatabaseTestCaseMockUtil::CreateTable(db, gcSql);
std::string pythonGcInsert = "INSERT INTO (\"startNs\", \"endNs\", \"globalTid\") VALUES "
"(1718180918997410110, 1718180918997410110, 65535);";
DatabaseTestCaseMockUtil::InsertData(db, pythonGcInsert);
PythonGcDependency dependency;
dependency.tableMock = std::make_unique<PythonGCTableMock>();
dependency.tableMock->SetDb(db);
PythonGCRepoMock pythonGCRepoMock;
pythonGCRepoMock.SetMock(dependency);
SliceQuery query;
query.sliceId = "1";
query.rankId = "hhh";
CompeteSliceDomain slice;
bool result = pythonGCRepoMock.QuerySliceDetailInfo(query, slice);
EXPECT_EQ(result, false);
}
* 测试全量DB的 pythonGcRepo 转化 SliceInterface 的情况
*/
TEST_F(PythonGCRepoTest, TestDynamicCastOfMultiSliceInterface) {
std::shared_ptr<IBaseSliceRepo> pythonGcRepo = std::make_shared<PythonGcRepo>();
const auto pythonFuncRepo = dynamic_cast<IPythonFuncSlice *>(pythonGcRepo.get());
EXPECT_EQ(pythonFuncRepo, nullptr);
const auto findSliceByNameList = dynamic_cast<IFindSliceByNameList *>(pythonGcRepo.get());
EXPECT_EQ(findSliceByNameList, nullptr);
const auto findSliceByTimepointAndName = dynamic_cast<IFindSliceByTimepointAndName *>(pythonGcRepo.get());
EXPECT_EQ(findSliceByTimepointAndName, nullptr);
const auto textSliceRepo = dynamic_cast<ITextSlice *>(pythonGcRepo.get());
EXPECT_EQ(textSliceRepo, nullptr);
}