* Copyright (c) Huawei Technologies Co., Ltd. 2026-2026. All rights reserved.
* ubs-engine 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.
*/
#ifndef TEST_UBSE_URMA_CONTROLLER_MANAGER_H
#define TEST_UBSE_URMA_CONTROLLER_MANAGER_H
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <mockcpp/mokc.h>
#include "ubse_common_def.h"
#include "ubse_election.h"
#include "ubse_mti_interface.h"
#include "ubse_urma_def.h"
#include "adapter_plugins/urma/ubse_urma_uvs.h"
namespace ubse::urmaController {
using common::def::UbseResult;
UbseResult GetHostUrmaDev(const std::string& nodeId, ubse::urma::UbseUrmaUvsNodeInfo& uvsInfo);
bool CompareStringsNumerically(const std::string& left, const std::string& right);
ubse::urma::FeType ConvertLcneFeTypeToUrmaFeType(const ubse::adapter_plugins::mti::UbseMtiFeType& lcneFeType);
uint64_t GenerateHwResId(const ubse::adapter_plugins::mti::UbseMtiFeInfo& lcneFe);
bool ValidateLcneFeInfo(const std::vector<std::vector<ubse::adapter_plugins::mti::UbseMtiFeInfo>>& feInfos);
void CalculateFeTopoType(const std::vector<std::vector<ubse::adapter_plugins::mti::UbseMtiFeInfo>>& feInfos);
ubse::urma::EidGroup MakeEidGroup(ubse::adapter_plugins::mti::UbseMtiEidGroup& src,
const std::shared_ptr<ubse::urma::UbseFeInfo>& feInfo);
void SortContainerFeInfos(std::vector<std::vector<ubse::adapter_plugins::mti::UbseMtiFeInfo>>& feInfos);
UbseResult ParseFeIdsFromEid(const std::string& devEid, std::pair<uint16_t, uint16_t>& feIds);
std::shared_ptr<ubse::urma::UbseFeInfo> FindMatchingFeInfo(
const std::map<std::string, ubse::urma::UbseUrmaInfo, ubse::urma::UrmaNameCompare>& urmaList,
const std::string& ubpuId, const std::string& entityId, uint64_t& hwResId);
UbseResult FetchCurNodeComDev(const std::string& nodeId, ubse::urma::UbseUrmaUvsAggrDev& comDev);
UbseResult AppendUrmaListToUvsDevList(
const std::map<std::string, ubse::urma::UbseUrmaInfo, ubse::urma::UrmaNameCompare>& urmaList,
ubse::urma::UbseUrmaUvsNodeInfo& uvsInfo);
UbseResult FillUrmaUvsNodeInfo(bool isBuildHostOnly, ubse::urma::UbseUrmaNodeInfo& nodeInfo,
ubse::urma::UbseUrmaUvsNodeInfo& tmpUvsInfo);
bool IsSameFeWithHostUrmaDev(const std::string& nodeId, const ubse::urma::UbseUrmaUvsNodeInfo& hostUrmaInfo,
const ubse::adapter_plugins::mti::UbseMtiFeInfo& lcneFe);
void SwapCommEidGroupToHostPosition(std::vector<ubse::adapter_plugins::mti::UbseMtiEidGroup>& eidGroups,
const std::string& commPrimaryEid, size_t hostIdx);
void FilterCommEidGroupFromContainer(
std::vector<std::vector<ubse::adapter_plugins::mti::UbseMtiFeInfo>>& containerFeInfos,
const ubse::urma::UbseUrmaUvsNodeInfo& hostUrmaInfo);
UbseResult SplitFeInfos(const std::string& nodeId,
const std::vector<std::vector<ubse::adapter_plugins::mti::UbseMtiFeInfo>>& feInfos,
std::vector<std::vector<ubse::adapter_plugins::mti::UbseMtiFeInfo>>& containerFeInfos,
std::vector<std::vector<ubse::adapter_plugins::mti::UbseMtiFeInfo>>& hostFeInfos);
UbseResult FilterFeInfosForNonClos(
const std::string& nodeId, const std::vector<std::vector<ubse::adapter_plugins::mti::UbseMtiFeInfo>>& feInfos,
std::vector<std::vector<ubse::adapter_plugins::mti::UbseMtiFeInfo>>& containerFeInfos,
std::vector<std::vector<ubse::adapter_plugins::mti::UbseMtiFeInfo>>& hostFeInfos);
UbseResult CheckAndStoreUrmaBonding(
const std::string& nodeId, std::vector<std::vector<ubse::adapter_plugins::mti::UbseMtiFeInfo>>& feInfos,
std::vector<std::vector<ubse::adapter_plugins::mti::UbseMtiFeInfo>>& containerFeInfos,
std::vector<std::vector<ubse::adapter_plugins::mti::UbseMtiFeInfo>>& hostFeInfos);
}
namespace ubse::urmaControllerManager::ut {
class TestUbseUrmaControllerManager : public testing::Test {
void SetUp() override
{
Test::SetUp();
}
void TearDown() override
{
Test::TearDown();
GlobalMockObject::verify();
}
};
}
#endif