* Copyright (c) 2025 Huawei Technologies Co., Ltd.
* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
* CANN Open Software License Agreement Version 2.0 (the "License").
* Please refer to the License for details. You may not use this file except in compliance with the License.
* 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 FITNESS FOR A PARTICULAR PURPOSE.
* See LICENSE in the root of the software repository for the full text of the License.
*/
#include <iostream>
#include <fstream>
#include <nlohmann/json.hpp>
#include "gtest/gtest.h"
#include "mockcpp/mockcpp.hpp"
#include "device_simulator_manager.h"
#include "errno/error_code.h"
#include "msprof_start.h"
#include "mmpa_api.h"
#include "data_manager.h"
using namespace analysis::dvvp::common::error;
static const char NANO_RM_RF[] = "rm -rf ./acljsonnanostest_workspace";
static const char NANO_MKDIR[] = "mkdir ./acljsonnanostest_workspace";
static const char NANO_OUTPUT_DIR[] = "./acljsonnanostest_workspace/output";
static const char NANO_DIR_WITHOUT_CREATE[] = "./acljsonnanostest_workspace/output/test_dir_test/test_second";
class AclJsonNanoStest: public testing::Test {
protected:
virtual void SetUp()
{
GTEST_SKIP() << "Disabled: depends on reverted nano platform fix (bee23f6d)";
DlStub();
const ::testing::TestInfo* curTest = ::testing::UnitTest::GetInstance()->current_test_info();
DataMgr().Init("", "acljson");
optind = 1;
system(NANO_RM_RF);
system(NANO_MKDIR);
EXPECT_EQ(2, SimulatorMgr().CreateDeviceSimulator(2, StPlatformType::CHIP_NANO_V1));
}
virtual void TearDown()
{
if (IsSkipped()) {
return;
}
GlobalMockObject::verify();
EXPECT_EQ(2, SimulatorMgr().DelDeviceSimulator(2, StPlatformType::CHIP_NANO_V1));
system(NANO_RM_RF);
DataMgr().UnInit();
MsprofMgr().UnInit();
GlobalMockObject::reset();
system(NANO_RM_RF);
}
void DlStub()
{
MOCKER(dlopen).stubs().will(invoke(mmDlopen));
MOCKER(dlsym).stubs().will(invoke(mmDlsym));
MOCKER(dlclose).stubs().will(invoke(mmDlclose));
MOCKER(dlerror).stubs().will(invoke(mmDlerror));
}
};
TEST_F(AclJsonNanoStest, AclJsonDefault)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
EXPECT_EQ(PROFILING_SUCCESS, MsprofMgr().AclJsonStart(0, data));
}
TEST_F(AclJsonNanoStest, AclJsonNotSupportL2)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["l2"] = "on";
EXPECT_EQ(-1, MsprofMgr().AclJsonStart(0, data));
}
TEST_F(AclJsonNanoStest, AclJsonTaskTraceOn)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["task_time"] = "on";
std::vector<std::string> dataList = {"nano_stars_profile.data"};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_SUCCESS, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonAicMetricsPipeUtilization)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["aic_metrics"] = "PipeUtilization";
std::vector<std::string> dataList = {"nano_stars_profile.data"};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_SUCCESS, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonAicMetricsPipeStallCycle)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["aic_metrics"] = "PipeStallCycle";
std::vector<std::string> dataList = {"nano_stars_profile.data"};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_SUCCESS, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonAicMetricsMemory)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["aic_metrics"] = "Memory";
std::vector<std::string> dataList = {"nano_stars_profile.data"};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_SUCCESS, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonAicMetricsMemoryUB)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["aic_metrics"] = "MemoryUB";
std::vector<std::string> dataList = {"nano_stars_profile.data"};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_SUCCESS, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonAicMetricsScalar)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["aic_metrics"] = "ScalarRatio";
std::vector<std::string> dataList = {"nano_stars_profile.data"};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_SUCCESS, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonTaskTraceOff)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["task_time"] = "off";
std::vector<std::string> dataList = {""};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_SUCCESS, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonTaskTraceLevel0)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["task_time"] = "l0";
std::vector<std::string> dataList = {"nano_stars_profile.data"};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_SUCCESS, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonTaskTraceLevel1)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["task_time"] = "l1";
std::vector<std::string> dataList = {"nano_stars_profile.data"};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_SUCCESS, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonTaskTraceLevel2)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["task_time"] = "l2";
std::vector<std::string> dataList = {"nano_stars_profile.data"};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_SUCCESS, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonMultiOutput)
{
nlohmann::json data;
data["output"] = NANO_DIR_WITHOUT_CREATE;
data["task_time"] = "on";
std::vector<std::string> dataList = {"nano_stars_profile.data"};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_SUCCESS, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonExceptionAicMetrics)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["aic_metrics"] = "pipfix";
std::vector<std::string> dataList = {""};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_FAILED, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonExceptionTaskTrace)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["task_time"] = "onoff";
std::vector<std::string> dataList = {""};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_FAILED, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonAicMetricsArithmeticUtilization)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["aic_metrics"] = "ArithmeticUtilization";
std::vector<std::string> dataList = {""};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_FAILED, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonAicMetricsPipelineExecuteUtilization)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["aic_metrics"] = "PipelineExecuteUtilization";
std::vector<std::string> dataList = {""};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_FAILED, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonAicMetricsResourceConflictRatio)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["aic_metrics"] = "ResourceConflictRatio";
std::vector<std::string> dataList = {""};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_FAILED, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonAicMetricsMemoryL0)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["aic_metrics"] = "MemoryL0";
std::vector<std::string> dataList = {""};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_FAILED, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonAicMetricsL2Cache)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["aic_metrics"] = "L2Cache";
std::vector<std::string> dataList = {""};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_FAILED, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonFwkSchedule)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["ge_api"] = "on";
std::vector<std::string> dataList = {""};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_FAILED, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonAicpu)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["aicpu"] = "on";
std::vector<std::string> dataList = {""};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_FAILED, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonHostSysUsageFreq)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["host_sys_usage_freq"] = 20;
std::vector<std::string> dataList = {""};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_FAILED, MsprofMgr().AclJsonStart(1, data));
}
TEST_F(AclJsonNanoStest, AclJsonDvppFreq)
{
nlohmann::json data;
data["output"] = NANO_OUTPUT_DIR;
data["dvpp_freq"] = 20;
std::vector<std::string> dataList = {""};
MsprofMgr().SetDeviceCheckList(dataList);
EXPECT_EQ(PROFILING_FAILED, MsprofMgr().AclJsonStart(1, data));
}