/* -------------------------------------------------------------------------
 * 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 "event_trace/mstx_hooks/mstx_manager.h"

#include <gtest/gtest.h>
using namespace MemScope;

TEST(MstxManagerTest, ReportMarkATest) {
    const char* msg = "Test Message A";
    uint32_t streamId = 0;
    MstxManager::GetInstance().ReportMarkA(msg, streamId);
}

TEST(MstxManagerTest, ReportMarkATest_Nullptr_Msg_Strcpy_Failed) {
    const char* msg = "";
    uint32_t streamId = 0;
    MstxManager::GetInstance().ReportMarkA(msg, streamId);
}

TEST(MstxManagerTest, ReportRangeStartTest) {
    const char* msg = "Test Message A";
    uint32_t streamId = 0;
    std::uint64_t rangeId = MstxManager::GetInstance().ReportRangeStart(msg, streamId);
    EXPECT_GT(rangeId, 0);
}

TEST(MstxManagerTest, ReportRangeStartTest_Nullptr_Msg_Strcpy_Failed) {
    const char* msg = "";
    uint32_t streamId = 0;
    std::uint64_t rangeId = MstxManager::GetInstance().ReportRangeStart(msg, streamId);
    EXPECT_GT(rangeId, 0);
}

TEST(MstxManagerTest, ReportRangeEndTest) {
    MstxManager::GetInstance().ReportRangeEnd(1);
}

TEST(MstxManagerTest, GetRangeIdTest) {
    const char* msg = "GetRangeIdTest";
    uint32_t streamId = 0;
    uint64_t firstId = MstxManager::GetInstance().ReportRangeStart(msg, streamId);
    uint64_t secondId = MstxManager::GetInstance().ReportRangeStart(msg, streamId);
    EXPECT_EQ(secondId, firstId +1);
}

TEST(MstxManagerTest, ReportHeapRegisterTest_Get_Nullptr)
{
    mstxDomainHandle_t domain = nullptr;
    mstxMemHeapDesc_t const *desc = nullptr;
    auto ret = MstxManager::GetInstance().ReportHeapRegister(domain, desc);
    ASSERT_EQ(ret, nullptr);
}

TEST(MstxManagerTest, ReportRegionsRegisterTest_Get_Nullptr)
{
    mstxDomainHandle_t domain = nullptr;
    mstxMemRegionsRegisterBatch_t const *desc = nullptr;
    MstxManager::GetInstance().ReportRegionsRegister(domain, desc);
}

TEST(MstxManagerTest, ReportRegionsUnregisterTest_Get_Nullptr)
{
    mstxDomainHandle_t domain = nullptr;
    mstxMemRegionsUnregisterBatch_t const *desc = nullptr;
    MstxManager::GetInstance().ReportRegionsUnregister(domain, desc);
}