* 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 "acl/acl.h"
#include <string>
#include <cassert>
#include <iostream>
#include <fstream>
#include <cstdarg>
#include "dlog_pub.h"
#include "plog.h"
#include "acl_rt_impl_base.h"
#include <thread>
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include "mmpa/mmpa_api.h"
#include "runtime/dev.h"
#include "runtime/stream.h"
#include "runtime/context.h"
#include "runtime/event.h"
#include "runtime/mem.h"
#include "runtime/kernel.h"
#include "runtime/base.h"
#include "runtime/config.h"
#include "utils/file_utils.h"
#include "acl_stub.h"
#include "utils/hash_utils.h"
#include "base/err_mgr.h"
#define protected public
#define private public
#include "common/json_parser.h"
#include "common/log_inner.h"
#include "toolchain/dump.h"
#include "toolchain/profiling.h"
#include "toolchain/profiling_manager.h"
#include "set_device_vxx.h"
#include "aclrt_impl/init_callback_manager.h"
#undef private
#undef protected
using namespace testing;
using namespace std;
using namespace acl;
extern "C" int AdxDataDumpServerInit();
extern "C" int AdxDataDumpServerUnInit();
extern aclError MemcpyKindTranslate(aclrtMemcpyKind kind, rtMemcpyKind_t &rtKind);
namespace acl {
extern "C" void aclAppLogWithArgs(aclLogLevel logLevel, const char *func, const char *file, uint32_t line, const char *fmt, va_list args);
extern void aclGetMsgCallback(const char_t *msg, uint32_t len);
extern void GetAllPackageVersion();
extern aclError HandleDefaultDeviceAndStackSize(const char_t *const configPath);
extern aclError GetAlignedAndPaddingSize(const size_t size, const bool isPadding, size_t &alignedSize);
extern int32_t UpdateOpSystemRunCfg(void *cfgAddr, uint32_t cfgLen);
extern bool GetAclInitFlag();
extern void resetAclJsonHash();
extern uint64_t &GetAclInitRefCount();
extern aclError HandleEventModeConfig(const char_t *const configPath);
}
namespace {
void TestAclAppLogWithArgs(aclLogLevel level, const char* func, const char* file,
uint32_t line, const char* fmt, ...) {
va_list args;
va_start(args, fmt);
aclAppLogWithArgs(level, func, file, line, fmt, args);
va_end(args);
}
}
const std::string utTestBasePath = ACL_BASE_DIR "/build_ut/tests/ut";
extern bool GetDriverPath(const std::string &ascendInstallPath, std::string &driverPath);
extern aclError GetCANNVersionInternal(const aclCANNPackageName name, aclCANNPackageVersion &version,
const std::string &installPath);
extern bool GetPkgPath(const std::string &ascendInstallPath, std::string &pkgPath,
const std::string &pkgPathKey);
extern aclError GetVersionStringInternal(const std::string &fullPath, const char_t *pkgName,
std::string &versionOut, bool isSilent = false);
static void writeToFile(const std::string &fileName, const std::string &text)
{
system(("mkdir -p $(dirname " + fileName + ")").c_str());
std::ofstream out(fileName);
out << text;
out.close();
}
static aclError InitCallback_Fail(const char *configStr, size_t len, void *userData) {
(void)configStr;
(void)len;
(void)userData;
return ACL_ERROR_RT_PARAM_INVALID;
}
static aclError FinalizeCallback_Fail(void *userData) {
(void)userData;
return ACL_ERROR_RT_PARAM_INVALID;
}
static aclError FinalizeCallback_Success(void *userData) {
(void)userData;
return ACL_SUCCESS;
}
class UTEST_ACL_Common : public testing::Test
{
public:
UTEST_ACL_Common(){}
protected:
virtual void SetUp()
{
MockFunctionTest::aclStubInstance().ResetToDefaultMock();
ON_CALL(MockFunctionTest::aclStubInstance(), GetPlatformResWithLock(_, _))
.WillByDefault(Return(true));
}
virtual void TearDown()
{
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
}
static void TearDownTestCase()
{
(void)aclFinalize();
}
protected:
};
rtError_t rtGetRunMode_invoke(rtRunMode *mode)
{
*mode = RT_RUN_MODE_OFFLINE;
return RT_ERROR_NONE;
}
static void ExceptionInfoCallback(aclrtExceptionInfo *exceptionInfo)
{
(void) exceptionInfo;
uint32_t task_id = aclrtGetTaskIdFromExceptionInfo(nullptr);
uint32_t stream_id = aclrtGetStreamIdFromExceptionInfo(nullptr);
uint32_t thread_id = aclrtGetThreadIdFromExceptionInfo(nullptr);
(void)task_id;
(void)stream_id;
(void)thread_id;
}
TEST_F(UTEST_ACL_Common, aclrtGetSocName)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetSocVersion(_, _))
.WillOnce(Return(1))
.WillRepeatedly(Return(0));
const char *socName = aclrtGetSocName();
EXPECT_EQ(socName, nullptr);
}
TEST_F(UTEST_ACL_Common, HandleErrorManagerConfigTest)
{
auto ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testErrorManager1.json");
EXPECT_EQ(ret, ACL_SUCCESS);
resetAclJsonHash();
ret = aclFinalize();
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testErrorManager2.json");
EXPECT_EQ(ret, ACL_SUCCESS);
resetAclJsonHash();
ret = aclFinalize();
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testErrorManager3.json");
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
resetAclJsonHash();
}
TEST_F(UTEST_ACL_Common, SetDefaultDeviceTest)
{
auto &cbMgrInstance = InitCallbackManager::GetInstance();
auto bakInitCbMap = cbMgrInstance.initCallbackMap_;
cbMgrInstance.initCallbackMap_.clear();
auto ret = aclInitCallbackRegister(ACL_REG_TYPE_OTHER, InitCallback_Fail, nullptr);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetDefaultDeviceId(_))
.WillRepeatedly(Return(ACL_ERROR_FAILURE));
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testDefaultDevice/testDefaultDevice_01.json");
EXPECT_EQ(ret, ACL_ERROR_RT_PARAM_INVALID);
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testDefaultDevice/testDefaultDevice_02.json");
EXPECT_EQ(ret, ACL_ERROR_FAILURE);
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testDefaultDevice/testDefaultDevice_03.json");
EXPECT_EQ(ret, ACL_ERROR_FAILURE);
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testDefaultDevice/testDefaultDevice_04.json");
EXPECT_EQ(ret, ACL_ERROR_FAILURE);
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testDefaultDevice/testDefaultDevice_05.json");
EXPECT_EQ(ret, ACL_ERROR_FAILURE);
ret = HandleDefaultDeviceAndStackSize(ACL_BASE_DIR "/tests/ut/acl/json/testDefaultDevice/testDefaultDevice_06_invalid.json");
EXPECT_EQ(ret, ACL_ERROR_FAILURE);
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testDefaultDevice/testDefaultDevice_02.json");
EXPECT_EQ(ret, ACL_ERROR_FAILURE);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetDefaultDeviceId(_))
.WillRepeatedly(Return(ACL_SUCCESS));
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testDefaultDevice/testDefaultDevice_02.json");
EXPECT_EQ(ret, ACL_ERROR_RT_PARAM_INVALID);
ret = aclInit(nullptr);
EXPECT_EQ(ret, ACL_ERROR_RT_PARAM_INVALID);
cbMgrInstance.initCallbackMap_ = bakInitCbMap;
}
TEST_F(UTEST_ACL_Common, SetEventModeTest)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetDefaultDeviceId(_))
.WillRepeatedly(Return(ACL_SUCCESS));
aclError ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testEventMode/testEventMode_01.json");
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclFinalize();
EXPECT_EQ(ret, ACL_SUCCESS);
resetAclJsonHash();
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testEventMode/testEventMode_02.json");
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclFinalize();
EXPECT_EQ(ret, ACL_SUCCESS);
resetAclJsonHash();
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testEventMode/testEventMode_03.json");
EXPECT_EQ(ret, ACL_ERROR_PARSE_FILE);
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testEventMode/testEventMode_04.json");
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclFinalize();
EXPECT_EQ(ret, ACL_SUCCESS);
resetAclJsonHash();
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testEventMode/testEventMode_05.json");
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclFinalize();
EXPECT_EQ(ret, ACL_SUCCESS);
resetAclJsonHash();
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testEventMode/testEventMode_06.json");
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
resetAclJsonHash();
ret = HandleEventModeConfig("testEventMode_not_exist.json");
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
}
TEST_F(UTEST_ACL_Common, SetStackSize)
{
aclError ret = HandleDefaultDeviceAndStackSize(ACL_BASE_DIR "/tests/ut/acl/json/testStackSize/testStackSize_normal_32768.json");
EXPECT_EQ(ret, ACL_SUCCESS);
ret = HandleDefaultDeviceAndStackSize(ACL_BASE_DIR "/tests/ut/acl/json/testStackSize/testStackSize_normal_no_field.json");
EXPECT_EQ(ret, ACL_SUCCESS);
ret = HandleDefaultDeviceAndStackSize(ACL_BASE_DIR "/tests/ut/acl/json/testStackSize/testStackSize_abnormal_abc.json");
EXPECT_EQ(ret, ACL_ERROR_FAILURE);
ret = HandleDefaultDeviceAndStackSize(ACL_BASE_DIR "/tests/ut/acl/json/testStackSize/testStackSize_abnormal_-1.json");
EXPECT_EQ(ret, ACL_SUCCESS);
ret = HandleDefaultDeviceAndStackSize(ACL_BASE_DIR "/tests/ut/acl/json/testStackSize/xxxxxxxxxxxxx.json");
EXPECT_EQ(ret, ACL_ERROR_FAILURE);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtDeviceSetLimit(_,_,_))
.WillOnce(Return(ACL_ERROR_RT_PARAM_INVALID))
.WillRepeatedly(Return(0));
ret = HandleDefaultDeviceAndStackSize(ACL_BASE_DIR "/tests/ut/acl/json/testStackSize/testStackSize_normal_32768.json");
EXPECT_EQ(ret, ACL_ERROR_RT_PARAM_INVALID);
}
TEST_F(UTEST_ACL_Common, ErrorManagerTest)
{
auto ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testErrorManager3.json");
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/xxxx.json");
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtRegKernelLaunchFillFunc(_, _))
.WillOnce(Return(ACL_ERROR_RT_PARAM_INVALID))
.WillOnce(Return(ACL_ERROR_RT_FEATURE_NOT_SUPPORT))
.WillRepeatedly(Return(0));
ret = aclInit(nullptr);
EXPECT_EQ(ret, ACL_ERROR_RT_PARAM_INVALID);
const char* configPath1 = ACL_BASE_DIR "/tests/ut/acl/json/empty.json";
ret = aclInit(configPath1);
EXPECT_EQ(ret, ACL_SUCCESS);
resetAclJsonHash();
ret = aclFinalize();
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), Init())
.WillOnce(Return(1))
.WillRepeatedly(Return(0));
const char* configPath2 = ACL_BASE_DIR "/tests/ut/acl/json/testDump1.json";
ret = aclInit(configPath2);
EXPECT_EQ(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, duplicate_aclinit)
{
const char* configPath = ACL_BASE_DIR "/tests/ut/acl/json/testDump1.json";
auto ret = aclInit(configPath);
EXPECT_EQ(ret, ACL_ERROR_REPEAT_INITIALIZE);
EXPECT_EQ(GetAclInitFlag(), true);
uint64_t refCount = 0;
ret = aclFinalizeReference(&refCount);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(GetAclInitFlag(), true);
EXPECT_EQ(refCount, 1);
ret = aclFinalizeReference(&refCount);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(GetAclInitFlag(), false);
EXPECT_EQ(refCount, 0);
ret = aclFinalizeReference(&refCount);
EXPECT_EQ(ret, ACL_ERROR_REPEAT_FINALIZE);
EXPECT_EQ(refCount, 0);
ret = aclInit(configPath);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(GetAclInitFlag(), true);
}
TEST_F(UTEST_ACL_Common, finalize1)
{
auto ret = aclFinalizeCallbackRegister(ACL_REG_TYPE_ACL_MODEL, FinalizeCallback_Fail, nullptr);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclFinalize();
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclFinalizeCallbackUnRegister(ACL_REG_TYPE_ACL_MODEL, FinalizeCallback_Fail);
EXPECT_EQ(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, aclFinalizeReference_failed)
{
auto ret = aclFinalizeCallbackRegister(ACL_REG_TYPE_ACL_MODEL, FinalizeCallback_Fail, nullptr);
EXPECT_EQ(ret, ACL_SUCCESS);
uint64_t refCount = 0;
ret = aclFinalizeReference(&refCount);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclFinalizeCallbackUnRegister(ACL_REG_TYPE_ACL_MODEL, FinalizeCallback_Fail);
EXPECT_EQ(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, finalize2)
{
acl::AclDump::GetInstance().adxInitFromAclInitFlag_ = true;
auto ret = aclFinalizeCallbackRegister(ACL_REG_TYPE_ACL_MODEL, FinalizeCallback_Success, nullptr);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), AdxDataDumpServerInit())
.WillRepeatedly(Return(0));
EXPECT_CALL(MockFunctionTest::aclStubInstance(), AdxDataDumpServerUnInit())
.WillOnce(Return(ACL_ERROR_INTERNAL_ERROR));
ret = aclFinalize();
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclFinalizeCallbackUnRegister(ACL_REG_TYPE_ACL_MODEL, FinalizeCallback_Success);
EXPECT_EQ(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, dvpp_finalize_failed)
{
auto ret = aclFinalizeCallbackRegister(ACL_REG_TYPE_ACL_DVPP, FinalizeCallback_Fail, nullptr);
EXPECT_EQ(ret, ACL_ERROR_NONE);
ret = aclFinalize();
EXPECT_EQ(ret, ACL_ERROR_RT_PARAM_INVALID);
ret = aclFinalizeCallbackUnRegister(ACL_REG_TYPE_ACL_DVPP, FinalizeCallback_Fail);
EXPECT_EQ(ret, ACL_ERROR_NONE);
}
TEST_F(UTEST_ACL_Common, finalize_failed_with_rts_fail)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtUnRegKernelLaunchFillFunc(_))
.WillOnce(Return(ACL_ERROR_RT_PARAM_INVALID))
.WillRepeatedly(Return(0));
aclError ret = aclFinalize();
EXPECT_EQ(ret, ACL_ERROR_RT_PARAM_INVALID);
}
TEST_F(UTEST_ACL_Common, aclInitFlag_true)
{
bool ret = GetAclInitFlag();
EXPECT_EQ(ret, true);
}
TEST_F(UTEST_ACL_Common, finalize3)
{
aclError ret = aclFinalize();
EXPECT_EQ(ret, ACL_SUCCESS);
resetAclJsonHash();
ret = aclInit(ACL_BASE_DIR "/tests/ut/acl/json/testDefaultDevice/testDefaultDevice_02.json");
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtUnRegKernelLaunchFillFunc(_))
.WillOnce(Return(ACL_ERROR_RT_FEATURE_NOT_SUPPORT))
.WillRepeatedly(Return(0));
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetDefaultDeviceId(_))
.WillOnce(Return(ACL_ERROR_RT_FAILURE));
ret = aclFinalize();
EXPECT_EQ(ret, ACL_ERROR_RT_FAILURE);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetDefaultDeviceId(_))
.WillOnce(Return(ACL_SUCCESS));
ret = aclFinalize();
EXPECT_EQ(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, cal_hash_wrong_config_file)
{
std::string hashResult;
std::string configString;
auto ret = acl::GetStrFromConfigPath("non_existent_file.txt", configString);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
}
TEST_F(UTEST_ACL_Common, init_with_different_config)
{
auto ret = aclInit("");
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
resetAclJsonHash();
ret = aclInit("");
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclFinalize();
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclInit(nullptr);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclFinalize();
EXPECT_EQ(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, getVersion)
{
int majorVersion = 0;
int minorVersion = 0;
int patchVersion = 0;
aclError ret = aclrtGetVersion(&majorVersion, &minorVersion, &patchVersion);
EXPECT_EQ(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, getCANNVersion_cann_failed_no_env)
{
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, "", 1, mmRet);
(void)mmRet;
aclCANNPackageName name = ACL_PKG_NAME_CANN;
aclCANNPackageVersion version;
aclError ret = aclsysGetCANNVersion(name, &version);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, getCANNVersion_cann_failed_no_env02)
{
int32_t mmRet = 0;
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
(void)mmRet;
aclCANNPackageName name = ACL_PKG_NAME_CANN;
aclCANNPackageVersion version;
aclError ret = aclsysGetCANNVersion(name, &version);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
}
TEST_F(UTEST_ACL_Common, getCANNVersion_cann_failed_no_file01)
{
std::string envPath = utTestBasePath + "/getCANNVersion_cann/Ascend/latest";
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, envPath.c_str(), 1, mmRet);
(void)mmRet;
aclCANNPackageName name = ACL_PKG_NAME_CANN;
aclCANNPackageVersion version;
aclError ret = aclsysGetCANNVersion(name, &version);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, getCANNVersion_cann_failed_no_file02)
{
std::string envPath = utTestBasePath + "/getCANNVersion_cann/Ascend/latest";
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, envPath.c_str(), 1, mmRet);
(void)mmRet;
writeToFile(envPath + "share/info/runtime/version.new.info",
"Version=7.6.T9.0.B057\n"
"version_dir=CANN-7.6\n"
"timestamp=00000000_000000000\n"
);
aclCANNPackageName name = ACL_PKG_NAME_CANN;
aclCANNPackageVersion version;
aclError ret = aclsysGetCANNVersion(name, &version);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
system(("rm -rf " + envPath).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, getCANNVersion_cann_failed_invalid_file01)
{
std::string envPath = utTestBasePath + "/getCANNVersion_cann/Ascend/latest";
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, envPath.c_str(), 1, mmRet);
(void)mmRet;
writeToFile(envPath + "/share/info/runtime/version.info",
"timestamp=00000000_000000000\n"
);
aclCANNPackageName name = ACL_PKG_NAME_CANN;
aclCANNPackageVersion version;
aclError ret = aclsysGetCANNVersion(name, &version);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
system(("rm -rf " + envPath).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, getCANNVersion_cann_failed_invalid_file03)
{
std::string envPath = utTestBasePath + "/getCANNVersion_cann/Ascend/latest";
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, envPath.c_str(), 1, mmRet);
(void)mmRet;
writeToFile(envPath + "/share/info/runtime/version.info",
"Version=7\n"
"timestamp=00000000_000000000\n"
);
aclCANNPackageName name = ACL_PKG_NAME_CANN;
aclCANNPackageVersion version;
aclError ret = aclsysGetCANNVersion(name, &version);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
system(("rm -rf " + envPath).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, getCANNVersion_cann_invalid_name)
{
aclCANNPackageName name = (aclCANNPackageName)100;
aclCANNPackageVersion version;
aclError ret = aclsysGetCANNVersion(name, &version);
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
}
TEST_F(UTEST_ACL_Common, GetCANNVersionInternalOps_success)
{
std::string opsPath = utTestBasePath + "/getCANNVersion_cann/usr/local/Ascend";
writeToFile(opsPath + "/ops_legacy/version.info",
"Version=7.6.T9.0.B057\n"
"timestamp=00000000_000000000\n"
);
std::string ascendInstallPath = utTestBasePath + "/getCANNVersion_cann/etc/ascend_install.info";
writeToFile(ascendInstallPath,
"Driver_Install_Path_Param=" + opsPath + "\n"
);
aclCANNPackageName name = ACL_PKG_NAME_OPP;
aclCANNPackageVersion version;
aclError ret = GetCANNVersionInternal(name, version, opsPath);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(std::string(version.version), "7.6.T9.0.B057");
EXPECT_EQ(std::string(version.majorVersion), "7");
EXPECT_EQ(std::string(version.minorVersion), "6");
EXPECT_EQ(std::string(version.releaseVersion), "T9");
EXPECT_EQ(std::string(version.patchVersion), "0");
system(("rm -rf " + utTestBasePath + "/getCANNVersion_cann").c_str());
}
TEST_F(UTEST_ACL_Common, GetCANNVersionInternalDriver_success01)
{
std::string driverPath = utTestBasePath + "/getCANNVersion_cann/usr/local/Ascend";
writeToFile(driverPath + "/driver/version.info",
"Version=7.6.T9.0.B057\n"
"timestamp=00000000_000000000\n"
);
std::string ascendInstallPath = utTestBasePath + "/getCANNVersion_cann/etc/ascend_install.info";
writeToFile(ascendInstallPath,
"Driver_Install_Path_Param=" + driverPath + "\n"
);
aclCANNPackageName name = ACL_PKG_NAME_DRIVER;
aclCANNPackageVersion version;
std::string driverInstallPath;
EXPECT_TRUE(GetDriverPath(ascendInstallPath, driverInstallPath));
aclError ret = GetCANNVersionInternal(name, version, driverInstallPath);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(std::string(version.version), "7.6.T9.0.B057");
EXPECT_EQ(std::string(version.majorVersion), "7");
EXPECT_EQ(std::string(version.minorVersion), "6");
EXPECT_EQ(std::string(version.releaseVersion), "T9");
EXPECT_EQ(std::string(version.patchVersion), "0");
system(("rm -rf " + utTestBasePath + "/getCANNVersion_cann").c_str());
}
TEST_F(UTEST_ACL_Common, GetCANNVersionInternalDriver_success02)
{
std::string driverPath = utTestBasePath + "/getCANNVersion_cann/usr/local/Ascend";
writeToFile(driverPath + "/driver/version.info",
"Version=8.5.0-beta.1\n"
"timestamp=00000000_000000000\n"
);
std::string ascendInstallPath = utTestBasePath + "/getCANNVersion_cann/etc/ascend_install.info";
writeToFile(ascendInstallPath,
"Driver_Install_Path_Param=" + driverPath + "\n"
);
aclCANNPackageName name = ACL_PKG_NAME_DRIVER;
aclCANNPackageVersion version;
std::string driverInstallPath;
EXPECT_TRUE(GetDriverPath(ascendInstallPath, driverInstallPath));
aclError ret = GetCANNVersionInternal(name, version, driverInstallPath);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(std::string(version.version), "8.5.0.beta1");
EXPECT_EQ(std::string(version.majorVersion), "8");
EXPECT_EQ(std::string(version.minorVersion), "5");
EXPECT_EQ(std::string(version.releaseVersion), "0");
EXPECT_EQ(std::string(version.patchVersion), "beta1");
system(("rm -rf " + utTestBasePath + "/getCANNVersion_cann").c_str());
}
TEST_F(UTEST_ACL_Common, GetCANNVersionInternalDriver_failed01)
{
std::string ascendInstallPath = utTestBasePath + "/getCANNVersion_cann/etc/ascend_install.info";
std::string driverPath;
EXPECT_FALSE(GetDriverPath(ascendInstallPath, driverPath));
}
TEST_F(UTEST_ACL_Common, GetCANNVersionInternalDriver_failed02)
{
std::string driverPath = utTestBasePath + "/getCANNVersion_cann/usr/local/Ascend";
std::string ascendInstallPath = utTestBasePath + "/getCANNVersion_cann/etc/ascend_install.info";
writeToFile(ascendInstallPath,
"Driver_Install_Path_Param=" + driverPath + "\n"
);
aclCANNPackageName name = ACL_PKG_NAME_DRIVER;
aclCANNPackageVersion version;
std::string driverInstallPath;
EXPECT_TRUE(GetDriverPath(ascendInstallPath, driverInstallPath));
aclError ret = GetCANNVersionInternal(name, version, driverInstallPath);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
system(("rm -rf " + utTestBasePath + "/getCANNVersion_cann").c_str());
}
TEST_F(UTEST_ACL_Common, GetCANNVersionInternalDriver_failed03)
{
std::string driverPath = utTestBasePath + "/getCANNVersion_cann/usr/local/Ascend";
std::string ascendInstallPath = utTestBasePath + "/getCANNVersion_cann/etc/ascend_install.info";
writeToFile(ascendInstallPath,
driverPath + "\n"
);
std::string driverInstallPath;
EXPECT_FALSE(GetDriverPath(ascendInstallPath, driverInstallPath));
system(("rm -rf " + utTestBasePath + "/getCANNVersion_cann").c_str());
}
TEST_F(UTEST_ACL_Common, GetCANNVersionInternalDriver_failed04)
{
std::string driverPath = utTestBasePath + "/getCANNVersion_cann/usr/local/Ascend";
writeToFile(driverPath + "/driver/version.info",
"VersionXXX=7.6.T9.0.B057\n"
"timestamp=00000000_000000000\n"
);
std::string ascendInstallPath = utTestBasePath + "/getCANNVersion_cann/etc/ascend_install.info";
writeToFile(ascendInstallPath,
"Driver_Install_Path_Param=" + driverPath + "\n"
);
aclCANNPackageName name = ACL_PKG_NAME_DRIVER;
aclCANNPackageVersion version;
std::string driverInstallPath;
EXPECT_TRUE(GetDriverPath(ascendInstallPath, driverInstallPath));
aclError ret = GetCANNVersionInternal(name, version, driverInstallPath);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
system(("rm -rf " + utTestBasePath + "/getCANNVersion_cann").c_str());
}
TEST_F(UTEST_ACL_Common, GetCANNVersionInternalDriver_failed05)
{
std::string driverPath = utTestBasePath + "/getCANNVersion_cann/usr/local/Ascend";
writeToFile(driverPath + "/driver/version.info",
"timestamp=00000000_000000000\n"
);
std::string ascendInstallPath = utTestBasePath + "/getCANNVersion_cann/etc/ascend_install.info";
writeToFile(ascendInstallPath,
"Driver_Install_Path_Param=" + driverPath + "\n"
);
aclCANNPackageName name = ACL_PKG_NAME_DRIVER;
aclCANNPackageVersion version;
std::string driverInstallPath;
EXPECT_TRUE(GetDriverPath(ascendInstallPath, driverInstallPath));
aclError ret = GetCANNVersionInternal(name, version, driverInstallPath);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
system(("rm -rf " + utTestBasePath + "/getCANNVersion_cann").c_str());
}
TEST_F(UTEST_ACL_Common, GetCANNVersionInternalDriver_failed06)
{
std::string driverPath = utTestBasePath + "/getCANNVersion_cann/usr/local/Ascend";
writeToFile(driverPath + "/driver/version.info",
"Version=7\n"
"timestamp=00000000_000000000\n"
);
std::string ascendInstallPath = utTestBasePath + "/getCANNVersion_cann/etc/ascend_install.info";
writeToFile(ascendInstallPath,
"Driver_Install_Path_Param=" + driverPath + "\n"
);
aclCANNPackageName name = ACL_PKG_NAME_DRIVER;
aclCANNPackageVersion version;
std::string driverInstallPath;
EXPECT_TRUE(GetDriverPath(ascendInstallPath, driverInstallPath));
aclError ret = GetCANNVersionInternal(name, version, driverInstallPath);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
system(("rm -rf " + utTestBasePath + "/getCANNVersion_cann").c_str());
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionStr_CANN_Success)
{
std::string mockAscendHome = utTestBasePath + "/Ascend";
std::string infoPath = mockAscendHome + "/share/info/compiler/version.info";
writeToFile(infoPath, "Version=8.5.0.alpha001 \n");
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, mockAscendHome.c_str(), 1, mmRet);
(void)mmRet;
char pkgName[] = "compiler";
char verStr[ACL_PKG_VERSION_MAX_SIZE] = {0};
aclError ret = aclsysGetVersionStr(pkgName, verStr);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(std::string(verStr), "8.5.0.alpha001");
system(("rm -rf " + mockAscendHome).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionStr_Retry_AlternativeName_Success)
{
std::string mockAscendHome = utTestBasePath + "/Ascend";
std::string infoPath = mockAscendHome + "/share/info/ops_math/version.info";
writeToFile(infoPath, "Version=1.0.0");
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, mockAscendHome.c_str(), 1, mmRet);
char pkgName[] = "ops-math";
char verStr[ACL_PKG_VERSION_MAX_SIZE] = {0};
aclError ret = aclsysGetVersionStr(pkgName, verStr);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(std::string(verStr), "1.0.0");
system(("rm -rf " + mockAscendHome).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionStr_Retry_AlternativeName_Success_01)
{
std::string mockAscendHome = utTestBasePath + "/Ascend";
std::string infoPath = mockAscendHome + "/share/info/ops-base/version.info";
writeToFile(infoPath, "Version=1.0.0");
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, mockAscendHome.c_str(), 1, mmRet);
char pkgName[] = "ops_base";
char verStr[ACL_PKG_VERSION_MAX_SIZE] = {0};
aclError ret = aclsysGetVersionStr(pkgName, verStr);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(std::string(verStr), "1.0.0");
system(("rm -rf " + mockAscendHome).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionStr_Driver_Success)
{
std::string mockDriverInstallDir = utTestBasePath + "/getCANNVersion/usr/local/Ascend";
std::string driverInfoPath = mockDriverInstallDir + "/driver/version.info";
writeToFile(driverInfoPath, "Version=23.0.rc1");
std::string installConfPath = utTestBasePath + "/getCANNVersion/etc/ascend_install.info";
writeToFile(installConfPath, "Driver_Install_Path_Param= " + mockDriverInstallDir + "\n");
char pkgName[] = "driver";
std::string verInfo;
std::string driverInstallPath;
EXPECT_TRUE(GetPkgPath(installConfPath, driverInstallPath, "Driver_Install_Path_Param="));
aclError ret = GetVersionStringInternal(driverInfoPath, pkgName, verInfo, false);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(verInfo, "23.0.rc1");
system(("rm -rf " + utTestBasePath + "/getCANNVersion").c_str());
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionNum_ComplexSemVer_Success)
{
std::string mockAscendHome = utTestBasePath + "/Ascend";
std::string infoPath = mockAscendHome + "/share/info/runtime/version.info";
writeToFile(infoPath, "Version=8.5.0.beta.1");
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, mockAscendHome.c_str(), 1, mmRet);
char pkgName[] = "runtime";
int32_t verNum = 0;
aclError ret = aclsysGetVersionNum(pkgName, &verNum);
EXPECT_EQ(ret, ACL_SUCCESS);
int32_t expectedNum = 80500000 - 200 + 1;
EXPECT_EQ(verNum, expectedNum);
system(("rm -rf " + mockAscendHome).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionStr_NoEnv_Fail)
{
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, "", 1, mmRet);
(void)mmRet;
char pkgName[] = "compiler";
char verStr[ACL_PKG_VERSION_MAX_SIZE] = {0};
aclError ret = aclsysGetVersionStr(pkgName, verStr);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionStr_NoEnv_Fail_02)
{
int32_t mmRet = 0;
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
(void)mmRet;
char pkgName[] = "compiler";
char verStr[ACL_PKG_VERSION_MAX_SIZE] = {0};
aclError ret = aclsysGetVersionStr(pkgName, verStr);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionNum_NoFile_Fail)
{
std::string mockAscendHome = utTestBasePath + "/Ascend";
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, mockAscendHome.c_str(), 1, mmRet);
(void)mmRet;
char pkgName[] = "runtime";
char verStr[ACL_PKG_VERSION_MAX_SIZE] = {0};
aclError ret = aclsysGetVersionStr(pkgName, verStr);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
system(("rm -rf " + mockAscendHome).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionStr_InvalidFormat_Fail)
{
std::string mockAscendHome = utTestBasePath + "/Ascend";
std::string infoPath = mockAscendHome + "/share/info/runtime/version.info";
writeToFile(infoPath, "runtime=8.5");
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, mockAscendHome.c_str(), 1, mmRet);
(void)mmRet;
char pkgName[] = "runtime";
char verStr[ACL_PKG_VERSION_MAX_SIZE] = {0};
aclError ret = aclsysGetVersionStr(pkgName, verStr);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
system(("rm -rf " + mockAscendHome).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionNum_InvalidFormat_Fail)
{
std::string mockAscendHome = utTestBasePath + "/Ascend";
std::string infoPath = mockAscendHome + "/share/info/runtime/version.info";
writeToFile(infoPath, "Version=8.5");
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, mockAscendHome.c_str(), 1, mmRet);
char pkgName[] = "runtime";
int32_t verNum = 0;
aclError ret = aclsysGetVersionNum(pkgName, &verNum);
EXPECT_EQ(ret, ACL_ERROR_INTERNAL_ERROR);
system(("rm -rf " + mockAscendHome).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionNum_InvalidFormat_Fail_02)
{
std::string mockAscendHome = utTestBasePath + "/Ascend";
std::string infoPath = mockAscendHome + "/share/info/runtime/version.info";
writeToFile(infoPath, "Version=8.5.0-gamma");
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, mockAscendHome.c_str(), 1, mmRet);
char pkgName[] = "runtime";
int32_t verNum = 0;
aclError ret = aclsysGetVersionNum(pkgName, &verNum);
EXPECT_EQ(ret, ACL_ERROR_INTERNAL_ERROR);
system(("rm -rf " + mockAscendHome).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionNum_InvalidFormat_Fail_03)
{
std::string mockAscendHome = utTestBasePath + "/Ascend";
std::string infoPath = mockAscendHome + "/share/info/ops/version.info";
writeToFile(infoPath, "Version=8");
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, mockAscendHome.c_str(), 1, mmRet);
(void)mmRet;
char pkgName[] = "ops";
int32_t verNum = 0;
aclError ret = aclsysGetVersionNum(pkgName, &verNum);
EXPECT_EQ(ret, ACL_ERROR_INTERNAL_ERROR);
system(("rm -rf " + mockAscendHome).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionNum_InvalidFormat_Fail_04)
{
std::string mockAscendHome = utTestBasePath + "/Ascend";
std::string infoPath = mockAscendHome + "/share/info/compile/version.info";
writeToFile(infoPath, "Version=A");
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, mockAscendHome.c_str(), 1, mmRet);
(void)mmRet;
char pkgName[] = "compile";
int32_t verNum = 0;
aclError ret = aclsysGetVersionNum(pkgName, &verNum);
EXPECT_EQ(ret, ACL_ERROR_INTERNAL_ERROR);
system(("rm -rf " + mockAscendHome).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionNum_InvalidFormat_Fail_05)
{
std::string mockAscendHome = utTestBasePath + "/Ascend";
std::string infoPath = mockAscendHome + "/share/info/runtime/version.info";
writeToFile(infoPath, "Version=8.5.0..alpha");
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, mockAscendHome.c_str(), 1, mmRet);
(void)mmRet;
char pkgName[] = "runtime";
int32_t verNum = 0;
aclError ret = aclsysGetVersionNum(pkgName, &verNum);
EXPECT_EQ(ret, ACL_ERROR_INTERNAL_ERROR);
system(("rm -rf " + mockAscendHome).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, aclsysGetVersionNum_InvalidFormat_Fail_06)
{
std::string mockAscendHome = utTestBasePath + "/Ascend";
std::string infoPath = mockAscendHome + "/share/info/compile/version.info";
writeToFile(infoPath, "Version=8.5.0-rc.1a");
int32_t mmRet = 0;
MM_SYS_SET_ENV(MM_ENV_ASCEND_HOME_PATH, mockAscendHome.c_str(), 1, mmRet);
(void)mmRet;
char pkgName[] = "compile";
int32_t verNum = 0;
aclError ret = aclsysGetVersionNum(pkgName, &verNum);
EXPECT_EQ(ret, ACL_ERROR_INTERNAL_ERROR);
system(("rm -rf " + mockAscendHome).c_str());
MM_SYS_UNSET_ENV(MM_ENV_ASCEND_HOME_PATH, mmRet);
}
TEST_F(UTEST_ACL_Common, aclInitFlag_false)
{
bool ret = GetAclInitFlag();
EXPECT_EQ(ret, false);
}
TEST(AclInitTest, MultiThreadConcurrentAclInit) {
const int numThreads = 10;
std::vector<std::thread> threads;
std::atomic<int> successCount(0);
std::atomic<int> repeatInitCount(0);
aclError ret;
for (int i = 0; i < numThreads; ++i) {
threads.emplace_back([&]() {
ret = aclInit("");
if (ret == ACL_SUCCESS) {
successCount++;
} else if (ret == ACL_ERROR_REPEAT_INITIALIZE) {
repeatInitCount++;
}
});
}
for (auto& thread : threads) {
thread.join();
}
EXPECT_EQ(successCount, 1);
EXPECT_EQ(repeatInitCount, numThreads - 1);
EXPECT_EQ(GetAclInitRefCount(), numThreads);
}
TEST(AclInitTest, MultiThreadConcurrentAclFinalizeReference) {
const int numThreads = 10;
std::vector<std::thread> threads;
std::atomic<int> successCount(0);
aclError ret;
for (int i = 0; i < numThreads; ++i) {
threads.emplace_back([&]() {
uint64_t refCount = 0;
ret = aclFinalizeReference(&refCount);
if (ret == ACL_SUCCESS) {
successCount++;
}
});
}
for (auto& thread : threads) {
thread.join();
}
EXPECT_EQ(successCount, numThreads);
EXPECT_EQ(GetAclInitRefCount(), 0);
EXPECT_EQ(GetAclInitFlag(), false);
}
TEST_F(UTEST_ACL_Common, device)
{
int32_t deviceId = 0;
aclError ret = aclrtSetDevice(deviceId);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetDevice(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtSetDevice(deviceId);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtResetDevice(deviceId);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtDeviceReset(_))
.WillOnce(Return(ACL_ERROR_RT_PARAM_INVALID));
ret = aclrtResetDevice(deviceId);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtResetDeviceForce(deviceId);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtDeviceResetForce(_))
.WillOnce(Return(ACL_ERROR_RT_PARAM_INVALID));
ret = aclrtResetDeviceForce(deviceId);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclInit(nullptr);
ret = aclrtSetDeviceWithoutTsdVXX(deviceId);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetDeviceWithoutTsd(_))
.WillOnce(Return(ACL_ERROR_RT_PARAM_INVALID));
ret = aclrtSetDeviceWithoutTsdVXX(deviceId);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtResetDeviceWithoutTsdVXX(deviceId);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtDeviceResetWithoutTsd(_))
.WillOnce(Return(ACL_ERROR_RT_PARAM_INVALID));
ret = aclrtResetDeviceWithoutTsdVXX(deviceId);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtGetDevice(nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtGetDevice(&deviceId);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetDevice(_))
.WillRepeatedly(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtGetDevice(&deviceId);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtSynchronizeDevice();
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtDeviceSynchronize())
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtSynchronizeDevice();
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetRunMode(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
aclrtRunMode runMode;
ret = aclrtGetRunMode(&runMode);
EXPECT_NE(ret, ACL_SUCCESS);
aclrtTsId tsId = ACL_TS_ID_RESERVED;
ret = aclrtSetTsDevice(tsId);
EXPECT_NE(ret, ACL_SUCCESS);
tsId = ACL_TS_ID_AICORE;
ret = aclrtSetTsDevice(tsId);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetTSDevice(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtSetTsDevice(tsId);
EXPECT_NE(ret, ACL_SUCCESS);
uint32_t count = 0;
ret = aclrtGetDeviceCount(nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtGetDeviceCount(&count);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetDeviceCount(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtGetDeviceCount(&count);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, context)
{
aclrtContext context = (aclrtContext)0x01;
int32_t deviceId = 0;
aclError ret = aclrtCreateContext(&context, deviceId);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtCreateContext(nullptr, deviceId);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtCtxCreateEx(_, _, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtCreateContext(&context, deviceId);
EXPECT_NE(ret, ACL_SUCCESS);
context = (aclrtContext)0x01;
ret = aclrtDestroyContext(context);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtDestroyContext(nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtCtxDestroyEx(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtDestroyContext(context);
EXPECT_NE(ret, ACL_SUCCESS);
context = (aclrtContext)0x01;
ret = aclrtSetCurrentContext(context);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtSetCurrentContext(nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtCtxSetCurrent(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtSetCurrentContext(context);
EXPECT_NE(ret, ACL_SUCCESS);
context = (aclrtContext)0x01;
ret = aclrtGetCurrentContext(&context);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtGetCurrentContext(nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtCtxGetCurrent(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtGetCurrentContext(&context);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, stream)
{
aclrtStream stream = (aclrtStream)0x01;
aclError ret = aclrtCreateStream(&stream);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtCreateStream(nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtStreamCreate(_, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtCreateStream(&stream);
EXPECT_NE(ret, ACL_SUCCESS);
stream = (aclrtStream)0x01;
ret = aclrtDestroyStream(stream);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtDestroyStream(nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtStreamDestroy(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtDestroyStream(stream);
EXPECT_NE(ret, ACL_SUCCESS);
stream = (aclrtStream)0x01;
ret = aclrtSynchronizeStream(stream);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtSynchronizeStream(nullptr);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtStreamSynchronize(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtSynchronizeStream(stream);
EXPECT_NE(ret, ACL_SUCCESS);
stream = (aclrtStream)0x01;
aclrtEvent event = (aclrtEvent)0x01;
ret = aclrtStreamWaitEvent(stream, event);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtStreamWaitEvent(nullptr, event);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtStreamWaitEvent(_, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtStreamWaitEvent(stream, event);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, stream_force)
{
aclrtStream stream = (aclrtStream)0x01;
aclError ret = aclrtCreateStream(&stream);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtCreateStream(nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtStreamCreate(_, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtCreateStream(&stream);
EXPECT_NE(ret, ACL_SUCCESS);
stream = (aclrtStream)0x01;
ret = aclrtDestroyStreamForce(stream);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtDestroyStreamForce(nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtStreamDestroyForce(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtDestroyStreamForce(stream);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, event)
{
aclrtEvent event = (aclrtEvent)0x01;
aclError ret = aclrtCreateEvent(&event);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtCreateEvent(nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtEventCreate(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtCreateEvent(&event);
EXPECT_NE(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
event = (aclrtEvent)0x01;
ret = aclrtDestroyEvent(event);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtDestroyEvent(nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtEventDestroy(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtDestroyEvent(event);
EXPECT_NE(ret, ACL_SUCCESS);
event = (aclrtEvent)0x01;
aclrtStream stream = (aclrtStream)0x01;
ret = aclrtRecordEvent(event, stream);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtRecordEvent(nullptr, stream);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtEventRecord(_, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtRecordEvent(event, stream);
EXPECT_NE(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
event = (aclrtEvent)0x01;
stream = (aclrtStream)0x01;
ret = aclrtResetEvent(event, stream);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtResetEvent(nullptr, stream);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtEventReset(_, _))
.WillRepeatedly(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtResetEvent(event, stream);
EXPECT_NE(ret, ACL_SUCCESS);
event = (aclrtEvent)0x01;
aclrtEventStatus status;
ret = aclrtResetEvent(nullptr, &status);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtResetEvent(event, nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtEventQuery(_))
.WillOnce(Return((RT_ERROR_NONE)))
.WillOnce(Return(ACL_ERROR_RT_EVENT_NOT_COMPLETE))
.WillOnce(Return(ACL_ERROR_RT_PARAM_INVALID));
ret = aclrtQueryEvent(event, &status);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(status, ACL_EVENT_STATUS_COMPLETE);
ret = aclrtQueryEvent(event, &status);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(status, ACL_EVENT_STATUS_NOT_READY);
ret = aclrtQueryEvent(event, &status);
EXPECT_NE(ret, ACL_SUCCESS);
event = (aclrtEvent)0x01;
ret = aclrtSynchronizeEvent(event);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtSynchronizeEvent(nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtEventSynchronize(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtSynchronizeEvent(event);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, eventWithFlag)
{
uint32_t flag = 0x00000008u;
aclError ret;
aclrtEvent event = (aclrtEvent)0x01;
ret = aclrtCreateEventWithFlag(nullptr, flag);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtCreateEventWithFlag(&event, flag);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtEventCreateWithFlag(_, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtCreateEventWithFlag(&event, flag);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, elapsedTime)
{
float time = 0.0f;
aclError ret;
aclrtEvent start = (aclrtEvent)0x01;
aclrtEvent end = (aclrtEvent)0x01;
ret = aclrtEventElapsedTime(nullptr, start, end);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtEventElapsedTime(&time, nullptr, end);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtEventElapsedTime(&time, start, nullptr);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtEventElapsedTime(&time, start, end);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtEventElapsedTime(_, _, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtEventElapsedTime(&time, start, end);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, setOpWaitTimeOut)
{
uint32_t timeout = 3;
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetOpWaitTimeOut(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
aclError ret = aclrtSetOpWaitTimeout(timeout);
EXPECT_NE(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
timeout = 3;
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetOpWaitTimeOut(_))
.WillOnce(Return((RT_ERROR_NONE)));
ret = aclrtSetOpWaitTimeout(timeout);
EXPECT_EQ(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
}
TEST_F(UTEST_ACL_Common, setOpExecuteimeOut)
{
uint32_t timeout = 3;
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetOpExecuteTimeOut(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
aclError ret = aclrtSetOpExecuteTimeOut(timeout);
EXPECT_NE(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
timeout = 3;
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetOpExecuteTimeOut(_))
.WillOnce(Return((RT_ERROR_NONE)));
ret = aclrtSetOpExecuteTimeOut(timeout);
EXPECT_EQ(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
}
TEST_F(UTEST_ACL_Common, setOpExecuteimeOutWithMs)
{
uint32_t timeout = 3;
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetOpExecuteTimeOutWithMs(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
aclError ret = aclrtSetOpExecuteTimeOutWithMs(timeout);
EXPECT_NE(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
timeout = 3;
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetOpExecuteTimeOutWithMs(_))
.WillOnce(Return((RT_ERROR_NONE)));
ret = aclrtSetOpExecuteTimeOutWithMs(timeout);
EXPECT_EQ(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
}
TEST_F(UTEST_ACL_Common, setOpExecuteTimeOutV2)
{
uint64_t timeout = 3;
uint64_t actualTimeout;
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetOpExecuteTimeOutV2(_,_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
aclError ret = aclrtSetOpExecuteTimeOutV2(timeout, &actualTimeout);
EXPECT_NE(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
timeout = 3;
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetOpExecuteTimeOutV2(_,_))
.WillOnce(Return((RT_ERROR_NONE)));
ret = aclrtSetOpExecuteTimeOutV2(timeout, &actualTimeout);
EXPECT_EQ(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
}
TEST_F(UTEST_ACL_Common, getOpTimeOutInterval)
{
uint64_t interval;
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetOpTimeOutInterval(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
aclError ret = aclrtGetOpTimeOutInterval(&interval);
EXPECT_NE(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
interval = 3;
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetOpTimeOutInterval(_))
.WillOnce(Return((RT_ERROR_NONE)));
ret = aclrtGetOpTimeOutInterval(&interval);
EXPECT_EQ(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
}
void CallBackFunc(void *arg)
{
(void) arg;
int a = 1;
a++;
}
TEST_F(UTEST_ACL_Common, callback)
{
aclError ret;
aclrtStream stream = (aclrtStream)0x01;
ret = aclrtSubscribeReport(1, stream);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSubscribeReport(_,_))
.WillOnce(Return(ACL_ERROR_RT_PARAM_INVALID));
ret = aclrtSubscribeReport(1, stream);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtUnSubscribeReport(1, stream);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtUnSubscribeReport(_,_))
.WillOnce(Return(ACL_ERROR_RT_PARAM_INVALID));
ret = aclrtUnSubscribeReport(1, stream);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtLaunchCallback(CallBackFunc, nullptr, ACL_CALLBACK_BLOCK, stream);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtLaunchCallback(CallBackFunc, nullptr, static_cast<aclrtCallbackBlockType>(2), stream);
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtCallbackLaunch(_, _, _, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtLaunchCallback(CallBackFunc, nullptr, ACL_CALLBACK_BLOCK, stream);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtProcessReport(0);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtProcessReport(1);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtProcessReport(_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtProcessReport(-1);
EXPECT_NE(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtProcessReport(_))
.WillOnce(Return((ACL_ERROR_RT_THREAD_SUBSCRIBE)));
ret = aclrtProcessReport(-1);
EXPECT_NE(ret, ACL_SUCCESS);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtProcessReport(_))
.WillOnce(Return((ACL_ERROR_RT_REPORT_TIMEOUT)));
ret = aclrtProcessReport(-1);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, memory_malloc_device)
{
void *devPtr = nullptr;
size_t size = 1;
aclError ret = aclrtMalloc(&devPtr, size, ACL_MEM_MALLOC_HUGE_FIRST);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_NE(devPtr, nullptr);
ret = aclrtFree(devPtr);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtMalloc(_, _, _, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)))
.WillRepeatedly(Return((RT_ERROR_NONE)));
ret = aclrtMalloc(&devPtr, size, ACL_MEM_MALLOC_HUGE_FIRST);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtMalloc(nullptr, size, ACL_MEM_MALLOC_HUGE_FIRST);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtMalloc(&devPtr, size, ACL_MEM_MALLOC_HUGE_ONLY);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMalloc(&devPtr, size, ACL_MEM_MALLOC_NORMAL_ONLY);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMalloc(&devPtr, size, ACL_MEM_MALLOC_HUGE_FIRST_P2P);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMalloc(&devPtr, size, ACL_MEM_MALLOC_HUGE_ONLY_P2P);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMalloc(&devPtr, size, ACL_MEM_MALLOC_NORMAL_ONLY_P2P);
EXPECT_EQ(ret, ACL_SUCCESS);
size = static_cast<size_t>(-1);
ret = aclrtMalloc(&devPtr, size, ACL_MEM_MALLOC_NORMAL_ONLY);
EXPECT_NE(ret, ACL_SUCCESS);
size = static_cast<size_t>(0);
ret = aclrtMalloc(&devPtr, size, ACL_MEM_MALLOC_NORMAL_ONLY);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, memory_malloc_aligned32_device)
{
void *devPtr = nullptr;
size_t size = 1;
aclError ret = aclrtMallocAlign32(&devPtr, size, ACL_MEM_MALLOC_HUGE_FIRST);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_NE(devPtr, nullptr);
ret = aclrtFree(devPtr);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtMalloc(_, _, _, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)))
.WillRepeatedly(Return((RT_ERROR_NONE)));
ret = aclrtMallocAlign32(&devPtr, size, ACL_MEM_MALLOC_HUGE_FIRST);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtMallocAlign32(nullptr, size, ACL_MEM_MALLOC_HUGE_FIRST);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtMallocAlign32(&devPtr, size, ACL_MEM_MALLOC_HUGE_ONLY);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMallocAlign32(&devPtr, size, ACL_MEM_MALLOC_NORMAL_ONLY);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMallocAlign32(&devPtr, size, ACL_MEM_MALLOC_HUGE_FIRST_P2P);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMallocAlign32(&devPtr, size, ACL_MEM_MALLOC_HUGE_ONLY_P2P);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMallocAlign32(&devPtr, size, ACL_MEM_MALLOC_NORMAL_ONLY_P2P);
EXPECT_EQ(ret, ACL_SUCCESS);
size = static_cast<size_t>(-1);
ret = aclrtMallocAlign32(&devPtr, size, ACL_MEM_MALLOC_NORMAL_ONLY);
EXPECT_NE(ret, ACL_SUCCESS);
size = static_cast<size_t>(0);
ret = aclrtMallocAlign32(&devPtr, size, ACL_MEM_MALLOC_NORMAL_ONLY);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, memory_malloc_cache_device)
{
void *devPtr = nullptr;
size_t size = 1;
aclError ret = aclrtMallocCached(&devPtr, size, ACL_MEM_MALLOC_HUGE_FIRST);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_NE(devPtr, nullptr);
ret = aclrtMemFlush(devPtr, size);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtFlushCache(_, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtMemFlush(devPtr, size);
EXPECT_NE(ret, ACL_SUCCESS);
size = static_cast<size_t>(0);
ret = aclrtMemFlush(devPtr, size);
EXPECT_NE(ret, ACL_SUCCESS);
size = static_cast<size_t>(1);
ret = aclrtMemInvalidate(devPtr, size);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtInvalidCache(_, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtMemInvalidate(devPtr, size);
EXPECT_NE(ret, ACL_SUCCESS);
size = static_cast<size_t>(0);
ret = aclrtMemInvalidate(devPtr, size);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtFree(devPtr);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtMallocCached(_, _, _, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
size = static_cast<size_t>(1);
ret = aclrtMallocCached(&devPtr, size, ACL_MEM_MALLOC_HUGE_FIRST);
EXPECT_NE(ret, ACL_SUCCESS);
size = static_cast<size_t>(-1);
ret = aclrtMallocCached(&devPtr, size, ACL_MEM_MALLOC_NORMAL_ONLY);
EXPECT_NE(ret, ACL_SUCCESS);
size = static_cast<size_t>(0);
ret = aclrtMallocCached(&devPtr, size, ACL_MEM_MALLOC_NORMAL_ONLY);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, memory_malloc_host)
{
void *hostPtr = nullptr;
size_t size = 0;
aclError ret = aclrtMallocHost(&hostPtr, size);
EXPECT_NE(ret, ACL_SUCCESS);
size = 1;
ret = aclrtMallocHost(&hostPtr, size);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_NE(hostPtr, nullptr);
ret = aclrtFreeHost(hostPtr);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtMallocHost(_, _, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtMallocHost(nullptr, size);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtMallocHost(&hostPtr, size);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, memory_memcpyAsync)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtMemcpyAsync(_, _, _, _, _, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)))
.WillRepeatedly(Return((RT_ERROR_NONE)));
void *dst = (void *)0x01;
void *src = (void *)0x02;
aclrtStream stream = (aclrtStream)0x10;
aclError ret = aclrtMemcpyAsync(dst, 1, src, 1, ACL_MEMCPY_HOST_TO_HOST, stream);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtMemcpyAsync(nullptr, 1, src, 1, ACL_MEMCPY_HOST_TO_HOST, stream);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtMemcpyAsync(dst, 1, nullptr, 1, ACL_MEMCPY_HOST_TO_HOST, stream);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtMemcpyAsync(dst, 1, src, 1, ACL_MEMCPY_HOST_TO_DEVICE, nullptr);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMemcpyAsync(dst, 1, src, 1, ACL_MEMCPY_HOST_TO_DEVICE, stream);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMemcpyAsync(dst, 1, src, 1, ACL_MEMCPY_DEVICE_TO_HOST, stream);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMemcpyAsync(dst, 1, src, 1, ACL_MEMCPY_DEVICE_TO_DEVICE, stream);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMemcpyAsync(dst, 1, src, 1, ACL_MEMCPY_DEFAULT, stream);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMemcpyAsync(dst, 1, src, 1, ACL_MEMCPY_HOST_TO_BUF_TO_DEVICE, stream);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtMemcpyAsync(dst, 1, src, 1, (aclrtMemcpyKind)0x7FFFFFFF, stream);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, memory_getMemInfo)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtMemGetInfoEx(_, _, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)))
.WillRepeatedly(Return((RT_ERROR_NONE)));
size_t free = 0x01;
size_t total = 0x02;
aclError ret = aclrtGetMemInfo(ACL_DDR_MEM_HUGE, &free, &total);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtGetMemInfo(ACL_DDR_MEM_HUGE, &free, &total);
EXPECT_EQ(ret, ACL_SUCCESS);
ret = aclrtGetMemInfo(ACL_HBM_MEM, &free, &total);
EXPECT_EQ(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, memory_memsetAsync)
{
void *devPtr = (void *)0x01;
aclrtStream stream = (aclrtStream)0x10;
aclError ret = aclrtMemsetAsync(nullptr, 1, 1, 1, stream);
EXPECT_NE(ret, ACL_SUCCESS);
ret = aclrtMemsetAsync(devPtr, 1, 1, 1, stream);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtMemsetAsync(_, _, _, _, _))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtMemsetAsync(devPtr, 1, 1, 1, stream);
EXPECT_NE(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, GetCurLogLevel1)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), dlog_getlevel(_,_))
.WillOnce(Return((DLOG_ERROR)));
uint32_t log_level = AclLog::GetCurLogLevel();
EXPECT_EQ(log_level, ACL_ERROR);
}
TEST_F(UTEST_ACL_Common, GetCurLogLevel2)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), dlog_getlevel(_,_))
.WillOnce(Return((DLOG_WARN)));
uint32_t log_level = AclLog::GetCurLogLevel();
EXPECT_EQ(log_level, ACL_WARNING);
}
TEST_F(UTEST_ACL_Common, GetCurLogLevel3)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), dlog_getlevel(_,_))
.WillOnce(Return((DLOG_INFO)));
uint32_t log_level = AclLog::GetCurLogLevel();
EXPECT_EQ(log_level, ACL_INFO);
}
TEST_F(UTEST_ACL_Common, GetCurLogLevel4)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), dlog_getlevel(_,_))
.WillOnce(Return((DLOG_DEBUG)));
uint32_t log_level = AclLog::GetCurLogLevel();
EXPECT_EQ(log_level, ACL_DEBUG);
}
TEST_F(UTEST_ACL_Common, GetCurLogLevel5)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), dlog_getlevel(_,_))
.WillOnce(Return((DLOG_NULL)));
uint32_t log_level = AclLog::GetCurLogLevel();
EXPECT_EQ(log_level, ACL_INFO);
}
extern int g_logLevel;
TEST_F(UTEST_ACL_Common, ACLSaveLog)
{
const char *strLog = "hello, acl";
AclLog::ACLSaveLog(ACL_DEBUG, strLog);
EXPECT_EQ(g_logLevel, ACL_DEBUG);
AclLog::ACLSaveLog(ACL_INFO, strLog);
EXPECT_EQ(g_logLevel, ACL_INFO);
AclLog::ACLSaveLog(ACL_WARNING, strLog);
EXPECT_EQ(g_logLevel, ACL_WARNING);
AclLog::ACLSaveLog(ACL_ERROR, strLog);
EXPECT_EQ(g_logLevel, ACL_ERROR);
}
TEST_F(UTEST_ACL_Common, ACLProfiling)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), MsprofRegTypeInfo(_,_,_))
.WillRepeatedly(Return(2));
EXPECT_NE(acl::AclProfilingManager::GetInstance().Init(), ACL_SUCCESS);
EXPECT_EQ(acl::AclProfilingManager::GetInstance().UnInit(), ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, ACLExceptionCallback)
{
EXPECT_EQ(aclrtSetExceptionInfoCallback(ExceptionInfoCallback), ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtRegTaskFailCallbackByModule(_, _))
.WillOnce(Return((1)));
EXPECT_NE(aclrtSetExceptionInfoCallback(ExceptionInfoCallback), ACL_SUCCESS);
uint32_t task_id = aclrtGetTaskIdFromExceptionInfo(nullptr);
uint32_t stream_id = aclrtGetStreamIdFromExceptionInfo(nullptr);
uint32_t thread_id = aclrtGetThreadIdFromExceptionInfo(nullptr);
uint32_t device_id = aclrtGetDeviceIdFromExceptionInfo(nullptr);
uint32_t retCode = aclrtGetErrorCodeFromExceptionInfo(nullptr);
EXPECT_EQ(task_id, 0xFFFFFFFFU);
EXPECT_EQ(stream_id, 0xFFFFFFFFU);
EXPECT_EQ(thread_id, 0xFFFFFFFFU);
EXPECT_EQ(device_id, 0xFFFFFFFFU);
EXPECT_EQ(retCode, 0xFFFFFFFFU);
aclrtExceptionInfo info{};
device_id = aclrtGetDeviceIdFromExceptionInfo(&info);
retCode = aclrtGetErrorCodeFromExceptionInfo(&info);
EXPECT_EQ(retCode, 0);
}
TEST_F(UTEST_ACL_Common, ACLSetGroup)
{
uint32_t count = 0;
EXPECT_EQ(aclrtGetGroupCount(&count), ACL_SUCCESS);
aclrtGroupInfo * groupInfo = aclrtCreateGroupInfo();
EXPECT_EQ(aclrtGetAllGroupInfo(groupInfo), ACL_SUCCESS);
uint32_t aicoreNum = 0;
size_t param_ret_size = 0;
EXPECT_EQ(aclrtGetGroupInfoDetail(groupInfo, 1, ACL_GROUP_AICORE_INT,
(void *)(&aicoreNum), 4, ¶m_ret_size), ACL_SUCCESS);
EXPECT_EQ(aicoreNum, 2);
EXPECT_EQ(param_ret_size, 4);
uint32_t aicpuNum = 0;
EXPECT_EQ(aclrtGetGroupInfoDetail(groupInfo, 1, ACL_GROUP_AIC_INT,
(void *)(&aicpuNum), 4, ¶m_ret_size), ACL_SUCCESS);
EXPECT_EQ(aicpuNum, 3);
uint32_t aivectorNum = 0;
EXPECT_EQ(aclrtGetGroupInfoDetail(groupInfo, 1, ACL_GROUP_AIV_INT,
(void *)(&aivectorNum), 4, ¶m_ret_size), ACL_SUCCESS);
EXPECT_EQ(aivectorNum, 4);
uint32_t sdmaNum = 0;
EXPECT_EQ(aclrtGetGroupInfoDetail(groupInfo, 1, ACL_GROUP_SDMANUM_INT,
(void *)(&sdmaNum), 4, ¶m_ret_size), ACL_SUCCESS);
EXPECT_EQ(sdmaNum, 5);
uint32_t activeStreamNum = 0;
EXPECT_EQ(aclrtGetGroupInfoDetail(groupInfo, 1, ACL_GROUP_ASQNUM_INT,
(void *)(&activeStreamNum), 4, ¶m_ret_size), ACL_SUCCESS);
EXPECT_EQ(activeStreamNum, 6);
uint32_t groupId = 0;
EXPECT_EQ(aclrtGetGroupInfoDetail(groupInfo, 1, ACL_GROUP_GROUPID_INT,
(void *)(&groupId), 4, ¶m_ret_size), ACL_SUCCESS);
EXPECT_EQ(aclrtGetGroupInfoDetail(groupInfo, 2, ACL_GROUP_ASQNUM_INT,
(void *)(&activeStreamNum), 4, ¶m_ret_size), ACL_ERROR_INVALID_PARAM);
EXPECT_EQ(aclrtGetGroupInfoDetail(groupInfo, 1, static_cast<aclrtGroupAttr>(6),
(void *)(&activeStreamNum), 4, ¶m_ret_size), ACL_ERROR_INVALID_PARAM);
EXPECT_EQ(aclrtSetGroup(1), ACL_SUCCESS);
EXPECT_EQ(aclrtDestroyGroupInfo(groupInfo), ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, ACLDeviceCanAccessPeer)
{
int32_t canAccessPeer = 0;
EXPECT_EQ(aclrtDeviceCanAccessPeer(&canAccessPeer, 0, 0), ACL_ERROR_INVALID_PARAM);
EXPECT_EQ(aclrtDeviceCanAccessPeer(&canAccessPeer, 0, 1), ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtDeviceCanAccessPeer(_, _, _))
.WillOnce(Return((1)));
EXPECT_NE(aclrtDeviceCanAccessPeer(&canAccessPeer, 0, 1), ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetDevicePhyIdByIndex(_, _))
.WillOnce(Return((1)));
EXPECT_NE(aclrtDeviceCanAccessPeer(&canAccessPeer, 0, 1), ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, ACLEnablePeerAccess)
{
int32_t peerDeviceId = 1;
uint32_t tmpFlags = 1;
EXPECT_EQ(aclrtDeviceEnablePeerAccess(peerDeviceId, tmpFlags), ACL_ERROR_FEATURE_UNSUPPORTED);
uint32_t flags = 0;
EXPECT_EQ(aclrtDeviceEnablePeerAccess(peerDeviceId, flags), ACL_SUCCESS);
EXPECT_EQ(aclrtDeviceEnablePeerAccess(0, flags), ACL_ERROR_INVALID_PARAM);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtEnableP2P(_, _, _))
.WillOnce(Return((1)));
EXPECT_NE(aclrtDeviceEnablePeerAccess(peerDeviceId, flags), ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetDevicePhyIdByIndex(_, _))
.WillOnce(Return((1)));
EXPECT_NE(aclrtDeviceEnablePeerAccess(peerDeviceId, flags), ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetDevice(_))
.WillRepeatedly(Return((1)));
EXPECT_NE(aclrtDeviceEnablePeerAccess(peerDeviceId, flags), ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, ACLDisablePeerAccess)
{
int32_t peerDeviceId = 1;
EXPECT_EQ(aclrtDeviceDisablePeerAccess(peerDeviceId), ACL_SUCCESS);
EXPECT_EQ(aclrtDeviceDisablePeerAccess(0), ACL_ERROR_INVALID_PARAM);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtDisableP2P(_, _))
.WillOnce(Return((1)));
EXPECT_NE(aclrtDeviceDisablePeerAccess(peerDeviceId), ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetDevicePhyIdByIndex(_, _))
.WillOnce(Return((1)));
EXPECT_NE(aclrtDeviceDisablePeerAccess(peerDeviceId), ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetDevice(_))
.WillRepeatedly(Return((1)));
EXPECT_NE(aclrtDeviceDisablePeerAccess(peerDeviceId), ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, AclGetRecentErrMsgTest)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetDevMsg(_, _))
.WillOnce(Return(ACL_ERROR_RT_INTERNAL_ERROR));
EXPECT_NE(aclGetRecentErrMsg(), nullptr);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
const char *str = "123";
std::unique_ptr<const char[]> errMsg(new char[std::strlen(str) + 1]);
std::strcpy(const_cast<char*>(errMsg.get()), str);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), GetErrMgrErrorMessage())
.WillOnce(Return((ByMove(std::move(errMsg)))));
EXPECT_NE(aclGetRecentErrMsg(), nullptr);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
std::unique_ptr<const char[]> errMsg2(new char[std::strlen(str) + 1]);
std::strcpy(const_cast<char*>(errMsg2.get()), str);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetDevMsg(_, _))
.WillOnce(Return(RT_ERROR_NONE));
EXPECT_CALL(MockFunctionTest::aclStubInstance(), GetErrMgrErrorMessage())
.WillOnce(Return((ByMove(std::move(errMsg2)))));
EXPECT_NE(aclGetRecentErrMsg(), nullptr);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
const char* str1 = "";
std::unique_ptr<const char[]> hostErrMsg(new char[std::strlen(str1) + 1]);
std::strcpy(const_cast<char*>(hostErrMsg.get()), str1);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetDevMsg(_, _))
.WillOnce(Return(RT_ERROR_NONE));
EXPECT_CALL(MockFunctionTest::aclStubInstance(), GetErrMgrErrorMessage())
.WillOnce(Return(ByMove(std::move(hostErrMsg))));
EXPECT_NE(aclGetRecentErrMsg(), nullptr);
const char_t *msg = nullptr;
aclGetMsgCallback(msg, 0);
msg = "abc";
aclGetMsgCallback(msg, 3);
}
rtError_t rtGetFaultEvent_Invoke(const int32_t deviceId, rtDmsEventFilter *filter,
rtDmsFaultEvent *dmsEvent, uint32_t len, uint32_t *eventCount)
{
(void)deviceId;
(void)filter;
if (len >= 2U) {
dmsEvent[0].eventId = 0x80E01801U;
dmsEvent[0].eventName[0] = 'A';
dmsEvent[0].eventName[1] = '\0';
dmsEvent[1].eventId = 0x80E01802U;
dmsEvent[1].eventName[0] = 'B';
dmsEvent[1].eventName[1] = '\0';
if (eventCount != nullptr) {
*eventCount = 2U;
}
}
return RT_ERROR_NONE;
}
TEST_F(UTEST_ACL_Common, AclGetRecentErrMsgTest_FaultEvent_Succ_With_Host_Device_Event)
{
const char_t *msg = "device";
aclGetMsgCallback(msg, sizeof("device") - 1);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetFaultEvent(_, _, _, _, _))
.WillOnce(Invoke(rtGetFaultEvent_Invoke));
const char* str = "123";
std::unique_ptr<const char[]> errMsg(new char[std::strlen(str) + 1]);
std::strcpy(const_cast<char*>(errMsg.get()), str);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), GetErrMgrErrorMessage())
.WillOnce(Return((ByMove(std::move(errMsg)))));
EXPECT_NE(aclGetRecentErrMsg(), nullptr);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
}
TEST_F(UTEST_ACL_Common, AclGetRecentErrMsgTest_FaultEvent_Succ_With_Device_Event)
{
const char_t *msg = "device";
aclGetMsgCallback(msg, sizeof("device") - 1);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetFaultEvent(_, _, _, _, _))
.WillOnce(Invoke(rtGetFaultEvent_Invoke));
const char* str = "";
std::unique_ptr<const char[]> errMsg(new char[std::strlen(str) + 1]);
std::strcpy(const_cast<char*>(errMsg.get()), str);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), GetErrMgrErrorMessage())
.WillOnce(Return((ByMove(std::move(errMsg)))));
EXPECT_NE(aclGetRecentErrMsg(), nullptr);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
}
TEST_F(UTEST_ACL_Common, AclGetRecentErrMsgTest_FaultEvent_Succ_With_Host_Event)
{
const char_t *msg = "";
aclGetMsgCallback(msg, 0);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetFaultEvent(_, _, _, _, _))
.WillOnce(Invoke(rtGetFaultEvent_Invoke));
const char* str = "host";
std::unique_ptr<const char[]> errMsg(new char[std::strlen(str) + 1]);
std::strcpy(const_cast<char*>(errMsg.get()), str);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), GetErrMgrErrorMessage())
.WillOnce(Return((ByMove(std::move(errMsg)))));
EXPECT_NE(aclGetRecentErrMsg(), nullptr);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
}
TEST_F(UTEST_ACL_Common, AclGetRecentErrMsgTest_FaultEvent_Succ_With_Event)
{
const char_t *msg = "";
aclGetMsgCallback(msg, 0);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetFaultEvent(_, _, _, _, _))
.WillOnce(Invoke(rtGetFaultEvent_Invoke));
const char* str = "";
std::unique_ptr<const char[]> errMsg(new char[std::strlen(str) + 1]);
std::strcpy(const_cast<char*>(errMsg.get()), str);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), GetErrMgrErrorMessage())
.WillOnce(Return((ByMove(std::move(errMsg)))));
EXPECT_NE(aclGetRecentErrMsg(), nullptr);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
}
TEST_F(UTEST_ACL_Common, AclGetRecentErrMsgTest_FaultEvent_Failed_With_GetDdevice_Failed)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetDevice(_))
.WillRepeatedly(Return((ACL_ERROR_RT_PARAM_INVALID)));
EXPECT_NE(aclGetRecentErrMsg(), nullptr);
Mock::VerifyAndClear((void *)(&MockFunctionTest::aclStubInstance()));
}
TEST_F(UTEST_ACL_Common, AclrtGetSocNameTest)
{
const char *ret = aclrtGetSocName();
EXPECT_NE(ret, nullptr);
}
TEST_F(UTEST_ACL_Common, AclrtCtxSetSysParamOpt)
{
aclError ret = aclrtCtxSetSysParamOpt(static_cast<aclSysParamOpt>(99), 1);
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
ret = aclrtCtxSetSysParamOpt(ACL_OPT_DETERMINISTIC, 1);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtCtxSetSysParamOpt(_, _))
.WillOnce(Return(ACL_ERROR_RT_INTERNAL_ERROR));
ret = aclrtCtxSetSysParamOpt(ACL_OPT_DETERMINISTIC, 1);
EXPECT_EQ(ret, ACL_ERROR_RT_INTERNAL_ERROR);
}
TEST_F(UTEST_ACL_Common, AclrtCtxGetSysParamOptTest)
{
aclError ret = aclrtCtxGetSysParamOpt(ACL_OPT_DETERMINISTIC, nullptr);
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
int64_t val = 0;
ret = aclrtCtxGetSysParamOpt(static_cast<aclSysParamOpt>(99), &val);
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
ret = aclrtCtxGetSysParamOpt(ACL_OPT_DETERMINISTIC, &val);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtCtxGetSysParamOpt(_, _))
.WillOnce(Return(ACL_ERROR_RT_INTERNAL_ERROR));
ret = aclrtCtxGetSysParamOpt(ACL_OPT_DETERMINISTIC, &val);
EXPECT_EQ(ret, ACL_ERROR_RT_INTERNAL_ERROR);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtCtxGetSysParamOpt(_, _))
.WillOnce(Return(ACL_ERROR_RT_SYSPARAMOPT_NOT_SET));
ret = aclrtCtxGetSysParamOpt(ACL_OPT_DETERMINISTIC, &val);
EXPECT_EQ(ret, ACL_ERROR_RT_SYSPARAMOPT_NOT_SET);
}
TEST_F(UTEST_ACL_Common, AclrtSetSysParamOpt)
{
aclError ret = aclrtSetSysParamOpt(static_cast<aclSysParamOpt>(99), 1);
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
ret = aclrtSetSysParamOpt(ACL_OPT_DETERMINISTIC, 1);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtSetSysParamOpt(_, _))
.WillOnce(Return(ACL_ERROR_RT_INTERNAL_ERROR));
ret = aclrtSetSysParamOpt(ACL_OPT_DETERMINISTIC, 1);
EXPECT_EQ(ret, ACL_ERROR_RT_INTERNAL_ERROR);
}
TEST_F(UTEST_ACL_Common, AclrtGetSysParamOptTest)
{
aclError ret = aclrtGetSysParamOpt(ACL_OPT_DETERMINISTIC, nullptr);
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
int64_t val = 0;
ret = aclrtGetSysParamOpt(static_cast<aclSysParamOpt>(99), &val);
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
ret = aclrtGetSysParamOpt(ACL_OPT_DETERMINISTIC, &val);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetSysParamOpt(_, _))
.WillOnce(Return(ACL_ERROR_RT_INTERNAL_ERROR));
ret = aclrtGetSysParamOpt(ACL_OPT_DETERMINISTIC, &val);
EXPECT_EQ(ret, ACL_ERROR_RT_INTERNAL_ERROR);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetSysParamOpt(_, _))
.WillOnce(Return(ACL_ERROR_RT_SYSPARAMOPT_NOT_SET));
ret = aclrtGetSysParamOpt(ACL_OPT_DETERMINISTIC, &val);
EXPECT_EQ(ret, ACL_ERROR_RT_SYSPARAMOPT_NOT_SET);
}
TEST_F(UTEST_ACL_Common, AclrtGetOverflowStatus)
{
aclError ret = aclrtGetOverflowStatus(nullptr, 0UL, nullptr);
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
ret = aclrtGetOverflowStatus((void *)0x1, 1UL, nullptr);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetDeviceSatStatus(_, _, _))
.WillOnce(Return(ACL_ERROR_RT_INTERNAL_ERROR));
ret = aclrtGetOverflowStatus((void *)0x1, 1UL, nullptr);
EXPECT_EQ(ret, ACL_ERROR_RT_INTERNAL_ERROR);
}
TEST_F(UTEST_ACL_Common, AclrtResetOverflowStatus)
{
aclError ret = aclrtResetOverflowStatus(nullptr);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtCleanDeviceSatStatus(_))
.WillOnce(Return(ACL_ERROR_RT_INTERNAL_ERROR));
ret = aclrtResetOverflowStatus(nullptr);
EXPECT_EQ(ret, ACL_ERROR_RT_INTERNAL_ERROR);
}
TEST_F(UTEST_ACL_Common, GetAlignedAndPaddingSize)
{
size_t alignedSize = 0UL;
aclError ret = acl::GetAlignedAndPaddingSize(UINT64_MAX - 63UL, true, alignedSize);
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
ret = acl::GetAlignedAndPaddingSize(UINT64_MAX - 64UL, true, alignedSize);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(alignedSize, UINT64_MAX - 31UL);
ret = acl::GetAlignedAndPaddingSize(1UL, true, alignedSize);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(alignedSize, 64UL);
ret = acl::GetAlignedAndPaddingSize(32UL, true, alignedSize);
EXPECT_EQ(alignedSize, 64UL);
ret = acl::GetAlignedAndPaddingSize(UINT64_MAX - 63UL, false, alignedSize);
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
ret = acl::GetAlignedAndPaddingSize(UINT64_MAX - 64UL, false, alignedSize);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(alignedSize, UINT64_MAX - 63UL);
ret = acl::GetAlignedAndPaddingSize(1UL, false, alignedSize);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(alignedSize, 32UL);
ret = acl::GetAlignedAndPaddingSize(32UL, false, alignedSize);
EXPECT_EQ(alignedSize, 32UL);
}
static rtError_t rtDeviceStatusQueryInvok(const uint32_t devId, rtDeviceStatus *deviceStatus)
{
(void) devId;
*deviceStatus = static_cast<rtDeviceStatus>(0);
return RT_ERROR_NONE;
}
TEST_F(UTEST_ACL_Common, aclrtQueryDeviceStatusTest)
{
int32_t deviceId = 0;
aclrtDeviceStatus status;
aclError ret = aclrtQueryDeviceStatus(deviceId, nullptr);
EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtDeviceStatusQuery(_,_))
.WillOnce(Invoke(rtDeviceStatusQueryInvok));
ret = aclrtQueryDeviceStatus(deviceId, &status);
EXPECT_EQ(ret, ACL_SUCCESS);
EXPECT_EQ(status, ACL_RT_DEVICE_STATUS_NORMAL);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtDeviceStatusQuery(_,_))
.WillOnce(Return((ACL_ERROR_RT_PARAM_INVALID)));
ret = aclrtQueryDeviceStatus(deviceId, &status);
EXPECT_EQ(ret, ACL_ERROR_RT_PARAM_INVALID);
}
TEST_F(UTEST_ACL_Common, update_op_sys_cfg_failed_with_invalid_param)
{
uint64_t offset;
int32_t ret = UpdateOpSystemRunCfg(nullptr, sizeof(offset));
EXPECT_EQ(ret, ACL_ERROR_RT_PARAM_INVALID);
ret = UpdateOpSystemRunCfg(&offset, sizeof(offset) - 1UL);
EXPECT_EQ(ret, ACL_ERROR_RT_PARAM_INVALID);
}
TEST_F(UTEST_ACL_Common, update_op_sys_cfg_failed_with_rts_error)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetL2CacheOffset(_, _))
.WillOnce(Return(ACL_ERROR_RT_PARAM_INVALID))
.WillRepeatedly(Return(0));
uint64_t offset;
int32_t ret = UpdateOpSystemRunCfg(&offset, sizeof(offset));
EXPECT_EQ(ret, ACL_ERROR_RT_PARAM_INVALID);
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetDevice(_))
.WillOnce(Return(ACL_ERROR_RT_PARAM_INVALID))
.WillRepeatedly(Return(0));
ret = UpdateOpSystemRunCfg(&offset, sizeof(offset));
EXPECT_NE(ret, ACL_RT_SUCCESS);
}
TEST_F(UTEST_ACL_Common, update_op_sys_cfg_failed_with_feature_not_support)
{
EXPECT_CALL(MockFunctionTest::aclStubInstance(), rtGetL2CacheOffset(_, _))
.WillOnce(Return(ACL_ERROR_RT_FEATURE_NOT_SUPPORT))
.WillRepeatedly(Return(0));
uint64_t offset;
int32_t ret = UpdateOpSystemRunCfg(&offset, sizeof(offset));
EXPECT_EQ(ret, ACL_ERROR_RT_FEATURE_NOT_SUPPORT);
}
TEST_F(UTEST_ACL_Common, update_op_sys_cfg_succ)
{
uint64_t offset;
auto ret = UpdateOpSystemRunCfg(&offset, sizeof(offset));
EXPECT_EQ(ret, ACL_RT_SUCCESS);
}
TEST_F(UTEST_ACL_Common, ParseJsonFromFile_fileName_nullptr)
{
nlohmann::json js;
aclError ret = acl::JsonParser::ParseJsonFromFile(nullptr, js);
EXPECT_EQ(ret, ACL_RT_SUCCESS);
}
TEST_F(UTEST_ACL_Common, ParseJsonFromFile_failed_with_not_exist_file)
{
nlohmann::json js;
const char_t* fileName = "xxyyzz.json";
aclError ret = acl::JsonParser::ParseJsonFromFile(fileName, js);
EXPECT_EQ(ret, ACL_ERROR_INVALID_FILE);
}
TEST_F(UTEST_ACL_Common, ParseJsonFromFile_failed_with_empty)
{
nlohmann::json js;
const char_t* fileName = ACL_BASE_DIR "/tests/ut/acl/json/empty.json";
aclError ret = acl::JsonParser::ParseJsonFromFile(fileName, js);
EXPECT_EQ(ret, ACL_SUCCESS);
}
TEST_F(UTEST_ACL_Common, ParseJsonFromFile_failed_with_illegal_format)
{
nlohmann::json js;
const char_t* fileName = ACL_BASE_DIR "/tests/ut/acl/json/illegal_format.json";
aclError ret = acl::JsonParser::ParseJsonFromFile(fileName, js);
EXPECT_EQ(ret, ACL_ERROR_PARSE_FILE);
}
TEST_F(UTEST_ACL_Common, GetMaxNestedLayers_with_invalid_file)
{
const char_t *fileName = "xxyyzz.json";
size_t length = 1UL;
size_t maxObjDepth = 1000000000UL;
size_t maxArrayDepth = 1000000000UL;
acl::JsonParser::GetMaxNestedLayers(fileName, length, maxObjDepth, maxArrayDepth);
EXPECT_TRUE(maxObjDepth == 1000000000UL);
EXPECT_TRUE(maxArrayDepth == 1000000000UL);
}
TEST_F(UTEST_ACL_Common, GetMaxNestedLayers_with_invliad_length)
{
const char_t *fileName = ACL_BASE_DIR "/tests/ut/acl/json/illegal_format.json";
size_t length = 0UL;
size_t maxObjDepth = 1000000000UL;
size_t maxArrayDepth = 1000000000UL;
acl::JsonParser::GetMaxNestedLayers(fileName, length, maxObjDepth, maxArrayDepth);
EXPECT_TRUE(maxObjDepth == 1000000000UL);
EXPECT_TRUE(maxArrayDepth == 1000000000UL);
}
TEST_F(UTEST_ACL_Common, GetMaxNestedLayers_with_normal)
{
const char_t *fileName = ACL_BASE_DIR "/tests/ut/acl/json/testDepth.json";
size_t length = 1UL;
size_t maxObjDepth = 1000000000UL;
size_t maxArrayDepth = 1000000000UL;
acl::JsonParser::GetMaxNestedLayers(fileName, length, maxObjDepth, maxArrayDepth);
EXPECT_TRUE(maxObjDepth == 1000000000UL);
EXPECT_TRUE(maxArrayDepth == 1000000000UL);
}
TEST_F(UTEST_ACL_Common, GetMaxNestedLayers_with_large_length)
{
const char_t *fileName = ACL_BASE_DIR "/tests/ut/acl/json/illegal_format.json";
size_t length = 100000UL;
size_t maxObjDepth = 1000000000UL;
size_t maxArrayDepth = 1000000000UL;
acl::JsonParser::GetMaxNestedLayers(fileName, length, maxObjDepth, maxArrayDepth);
EXPECT_TRUE(maxObjDepth == 1000000000UL);
EXPECT_TRUE(maxArrayDepth == 1000000000UL);
}
TEST_F(UTEST_ACL_Common, GetJsonCtxByKey_failed)
{
nlohmann::json js;
const char_t* fileName = ACL_BASE_DIR "/tests/ut/acl/json/illegal_format.json";
std::string strJsonCtx = "123";
std::string subStrKey;
bool found = false;
aclError ret = acl::JsonParser::GetJsonCtxByKey(fileName, strJsonCtx, subStrKey, found);
EXPECT_EQ(ret, ACL_ERROR_PARSE_FILE);
EXPECT_FALSE(found);
}
TEST_F(UTEST_ACL_Common, GetAttrConfigFromFile_failed)
{
nlohmann::json js;
const char_t* fileName = ACL_BASE_DIR "/tests/ut/acl/json/illegal_format.json";
std::map<aclCannAttr, CannInfo> cannInfoMap;
aclError ret = acl::JsonParser::GetAttrConfigFromFile(fileName, cannInfoMap);
EXPECT_EQ(ret, ACL_ERROR_PARSE_FILE);
}
TEST_F(UTEST_ACL_Common, GetDefaultDeviceIdFromFile_failed)
{
const char_t *fileName = ACL_BASE_DIR "/tests/ut/acl/json/testDefaultDevice/testDefaultDevice_07_invalid.json";
int32_t devId = 0;
auto ret = acl::JsonParser::GetDefaultDeviceIdFromFile(fileName, devId);
EXPECT_EQ(ret, ACL_ERROR_INTERNAL_ERROR);
}
TEST_F(UTEST_ACL_Common, aclAppLogWithArgs_succ)
{
aclLogLevel level = ACL_ERROR;
const char *func = "UserFunc";
const char *file = "main.cpp";
uint32_t line = 88U;
TestAclAppLogWithArgs(level, func, file, line, "hello world!");
EXPECT_TRUE(g_logLevel == ACL_ERROR);
}
TEST_F(UTEST_ACL_Common, aclAppLog_succ)
{
aclLogLevel level = ACL_ERROR;
const char *func = "UserFunc";
const char *file = "main.cpp";
uint32_t line = 88U;
aclAppLog(level, func, file, line, "hello world!");
EXPECT_TRUE(g_logLevel == ACL_ERROR);
}
TEST_F(UTEST_ACL_Common, aclAppLog_failed_1000bytes)
{
aclLogLevel level = ACL_ERROR;
const char *func = "UserFunc";
const char *file = "main.cpp";
uint32_t line = 88U;
const char_t *fmt =
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
aclAppLog(level, func, file, line, fmt);
EXPECT_TRUE(g_logLevel == ACL_ERROR);
}
TEST_F(UTEST_ACL_Common, aclAppLog_failed_1100bytes)
{
aclLogLevel level = ACL_ERROR;
const char *func = "UserFunc";
const char *file = "main.cpp";
uint32_t line = 88U;
const char_t *fmt =
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"012345678901345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
aclAppLog(level, func, file, line, fmt);
EXPECT_TRUE(g_logLevel == ACL_ERROR);
}
TEST_F(UTEST_ACL_Common, FormatStr_failed_1100bytes)
{
const char_t *fmt =
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"012345678901345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
std::string value = acl::AclErrorLogManager::FormatStr(fmt);
EXPECT_TRUE(value.empty());
value = acl::AclErrorLogManager::FormatStr(nullptr);
EXPECT_TRUE(value.empty());
}