/*
 * -------------------------------------------------------------------------
 * 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 "../../TestSuit.h"
#include "../../TestSuit.h"
#include "ServerLog.h"
#include "JsonUtil.h"
#include "ProtocolManager.h"
#include "ModuleManager.h"
#include "WsSessionManager.h"
#include "SummaryProtocol.h"
#include "ParserStatusManager.h"
#include "ProtocolDefs.h"
#include "ClusterParseThreadPoolExecutor.h"
#include "ParamsParser.h"
#include "WsServer.h"
#include "ProtocolUtil.h"

using namespace Dic;

TEST_F(TestSuit, TestAllRequestHandler) {
    std::string err = "";
    std::ifstream file(TestSuit::GetTestDataFile("request.csv"));
    std::string line;
    int count = 0;
    while (getline(file, line)) {
        if (line.empty()) {
            continue;
        }
        std::unique_ptr<Protocol::Request> request = Protocol::ProtocolManager::Instance().FromJson(line, err);
        std::unique_ptr<Module::ProtocolMessage> msg = std::unique_ptr<Module::ProtocolMessage>(request.release());
        auto *reqPtr = dynamic_cast<Protocol::Request *>(msg.release());
        if (reqPtr != nullptr) {
            Module::ModuleManager::Instance().OnDispatchModuleRequest(std::unique_ptr<Protocol::Request>(reqPtr));
        }
        count++;
        EXPECT_EQ(err, "");
    }
    file.close();
    int size = 106;
    EXPECT_EQ(count, size);
}

TEST_F(TestSuit, TestAllRequestSessionErr) {
    std::string err = "";
    std::ifstream file(TestSuit::GetTestDataFile("request.csv"));
    std::string line;
    int count = 0;
    while (getline(file, line)) {
        if (line.empty()) {
            continue;
        }
        std::unique_ptr<Protocol::Request> request = Protocol::ProtocolManager::Instance().FromJson(line, err);
        std::unique_ptr<Module::ProtocolMessage> msg = std::unique_ptr<Module::ProtocolMessage>(request.release());
        auto *reqPtr = dynamic_cast<Protocol::Request *>(msg.release());
        if (reqPtr != nullptr) {
            Module::ModuleManager::Instance().OnDispatchModuleRequest(std::unique_ptr<Protocol::Request>(reqPtr));
        }
        count++;
        EXPECT_EQ(err, "");
    }
    file.close();
}