/*
* Copyright (c), Huawei Technologies Co., Ltd. 2025-2025.All rights reserved.
 */
#include <gtest/gtest.h>
#include "FileManager/FileInfoManager.h"
#include "TestUtil.h"

using namespace Insight::Scalar::FileInfo;

namespace Insight::UnitTest {
class FileInfoManagerTest : public testing::Test
{
protected:
    FileInfoManager manager_;

    void SetUp() override
    {
        manager_.Reset();
    }
};

TEST_F(FileInfoManagerTest, AddFile)
{
    manager_.AddFile("test1", ParseDataType::TF_EVENT);
    manager_.AddFile("test2", ParseDataType::MINDSPORE_SUMMARY);
    manager_.AddFile("test3", ParseDataType::TEXT_LOG);
    manager_.AddFile("test4", ParseDataType::Unknown);
    auto file1 = manager_.GetFileInfo("test1");
    EXPECT_EQ(file1->DataType(), ParseDataType::TF_EVENT);
    auto file2 = manager_.GetFileInfo("test2");
    EXPECT_EQ(file2->DataType(), ParseDataType::MINDSPORE_SUMMARY);
    auto file3 = manager_.GetFileInfo("test3");
    EXPECT_EQ(file3->DataType(), ParseDataType::TEXT_LOG);
    auto file4 = manager_.GetFileInfo("test4");
    EXPECT_EQ(file4->DataType(), ParseDataType::Unknown);
}

TEST_F(FileInfoManagerTest, DelFile)
{
    manager_.AddFile("test1", ParseDataType::TF_EVENT);
    manager_.DelFileFromMap("test1");
    auto file = manager_.GetFileInfo("test1");
    EXPECT_EQ(file, nullptr);
}

TEST_F(FileInfoManagerTest, Reset)
{
    manager_.AddFile("test1", ParseDataType::TF_EVENT);
    manager_.Reset();
    auto file = manager_.GetFileInfo("test1");
    EXPECT_EQ(file, nullptr);
}

TEST_F(FileInfoManagerTest, FileCreated)
{
    manager_.OnFileCreate("work1", "test1");
    manager_.OnFileCreate("work1", "test2");
    manager_.OnFileCreate("work2", "test3");
    auto createFile = manager_.GetCreatedFileGroupByDir();
    EXPECT_NE(createFile.find("work1"), createFile.end());
    EXPECT_NE(createFile.find("work2"), createFile.end());
    auto work1Files = createFile["work1"];
    EXPECT_EQ(work1Files.count("test1"), 1);
    EXPECT_EQ(work1Files.count("test2"), 1);
    auto work2Files = createFile["work2"];
    EXPECT_EQ(work2Files.count("test3"), 1);
    EXPECT_EQ(work2Files.count("test2"), 0);
}

TEST_F(FileInfoManagerTest, GetFileType)
{
    EXPECT_EQ(FileInfoManager::GetFileType("events.out.tfevents.1739845347"), ParseDataType::TF_EVENT);
    EXPECT_EQ(FileInfoManager::GetFileType("events.out.events.summary.17392"), ParseDataType::MINDSPORE_SUMMARY);
    EXPECT_EQ(FileInfoManager::GetFileType("worker_1.log"), ParseDataType::TEXT_LOG);
    EXPECT_EQ(FileInfoManager::GetFileType("npu_10.log"), ParseDataType::TEXT_LOG);
    EXPECT_EQ(FileInfoManager::GetFileType("rank_0.log"), ParseDataType::TEXT_LOG);
    EXPECT_EQ(FileInfoManager::GetFileType("normal.log"), ParseDataType::Unknown);
}

TEST_F(FileInfoManagerTest, FileSupport)
{
    EXPECT_EQ(FileInfoManager::IsFileSupported("events.out.tfevents.1739845347"), true);
    EXPECT_EQ(FileInfoManager::IsFileSupported("/root/data/events.out.tfevents.1739845347"), true);
    EXPECT_EQ(FileInfoManager::IsFileSupported("normal.log"), false);
}
}