* 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 <gtest/gtest.h>
#include "mockcpp/mockcpp.hpp"
#include <dlfcn.h>
#include "argparser/arg_checker.h"
#include "interface/ms_op_prof.h"
#include "profiling/op_prof.h"
#include "common/hal_helper.h"
using namespace Interface;
TEST(Interface, args_init_called_expect_return_false)
{
Common::ProfArgs args;
bool ret = ProfArgsInit(args, 0, nullptr, nullptr);
ASSERT_EQ(ret, false);
}
TEST(Interface, print_device_help_called_expect_return_true)
{
Common::ProfArgs args;
char *argv[2];
argv[0] = "msopprof";
argv[1] = "--help";
bool ret = ProfArgsInit(args, 2, argv, nullptr);
PrintDeviceHelp(Common::ChipType::END_TYPE);
ASSERT_EQ(ret, true);
}
TEST(Interface, print_simulator_help_called_expect_return_true)
{
Common::ProfArgs args;
char *argv[3];
argv[0] = "msopprof";
argv[1] = "simulator";
argv[2] = "--help";
bool ret = ProfArgsInit(args, 3, argv, nullptr);
PrintSimulatorHelp();
ASSERT_EQ(ret, true);
}
TEST(Interface, args_init_with_invalid_param_expect_return_false)
{
Common::ProfArgs args;
char *argv[2];
argv[0] = "msopprof";
argv[1] = "--ops";
bool ret = ProfArgsInit(args, 2, argv, nullptr);
ASSERT_FALSE(ret);
}
TEST(Interface, args_init_with_device_dump_on_ascend950_expect_return_false) {
GlobalMockObject::verify();
MOCKER(&Common::HalHelper::GetPlatformType).stubs().will(returnValue(Common::ChipType::ASCEND950));
Common::ProfArgs args;
char *argv[4];
argv[0] = "msopprof";
argv[1] = "--application=/bin/true";
argv[2] = "--dump=on";
argv[3] = "--output=./output";
bool ret = ProfArgsInit(args, 4, argv, nullptr);
ASSERT_FALSE(ret);
GlobalMockObject::verify();
}
TEST(Interface, args_init_with_device_core_id_on_ascend950_expect_return_false) {
GlobalMockObject::verify();
MOCKER(&Common::HalHelper::GetPlatformType).stubs().will(returnValue(Common::ChipType::ASCEND950));
Common::ProfArgs args;
char *argv[4];
argv[0] = "msopprof";
argv[1] = "--application=/bin/true";
argv[2] = "--core-id=0";
argv[3] = "--output=./output";
bool ret = ProfArgsInit(args, 4, argv, nullptr);
ASSERT_FALSE(ret);
GlobalMockObject::verify();
}
TEST(Interface, PlatformInit_failed)
{
GlobalMockObject::verify();
std::string so = "libascend_hal.so";
void *open = &so;
MOCKER(&dlopen)
.stubs()
.will(returnValue(open));
void *sym = nullptr;
MOCKER(&dlsym)
.stubs()
.will(returnValue(sym));
Common::ProfArgs args;
char *argv[3];
argv[0] = "msopprof";
argv[1] = "--application=./npu";
argv[2] = "--output=./output";
bool ret = ProfArgsInit(args, 3, argv, nullptr);
ASSERT_EQ(ret, false);
GlobalMockObject::verify();
}
TEST(Interface, ProfilingRun_expect_success)
{
GlobalMockObject::verify();
MOCKER(&Profiling::OpProf::RunTask)
.stubs()
.will(returnValue(true));
MOCKER(&Profiling::OpProf::RunDataParse)
.stubs()
.will(returnValue(true));
MOCKER(&Common::HalHelper::GetPlatformType)
.stubs()
.will(returnValue(Common::ChipType::ASCEND910B));
Common::ProfArgs args;
ASSERT_TRUE(ProfilingRun(args));
args.runMode = "sim";
ASSERT_TRUE(ProfilingRun(args));
}
TEST(Interface, ConfigInit_not_exist_json_parse_failed)
{
Common::ProfArgs args;
char *argv[2];
argv[0] = "msopprof";
argv[1] = "--config=./not_exist.json";
bool ret = ProfArgsInit(args, 2, argv, nullptr);
ASSERT_FALSE(ret);
}
TEST(Interface, IsProcessRunning)
{
Common::ProfArgs args;
SetExitMode();
Profiling::DataParse::inExitMode = false;
ASSERT_FALSE(IsProcessRunning());
}