* Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.
* ubs-engine is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#include "test_ubs_engine_mem.h"
#include <arpa/inet.h>
#include <securec.h>
#include <cstring>
#include <mockcpp/mockcpp.hpp>
#include "ubse_error.h"
#include "ubse_ipc_client.h"
#include "ubse_ipc_common.h"
#include "ubse_mem_buffer_convert.h"
#include "ubse_node_api_convert.h"
#include "ubs_engine_mem.h"
#include "ubs_error.h"
namespace ubse::sdk::ut {
using namespace node::api;
using namespace mem::controller;
using namespace ubse::common::def;
void TestUbsEngineMem::SetUp()
{
Test::SetUp();
}
void TestUbsEngineMem::TearDown()
{
GlobalMockObject::verify();
Test::TearDown();
}
TEST_F(TestUbsEngineMem, UbsMemNumastatGetWhenInvalidParameters)
{
ubs_mem_numastat_t** null_numa_mems = nullptr;
uint32_t numa_mem_cnt = 0;
auto ret = ubs_mem_numastat_get(1, null_numa_mems, &numa_mem_cnt);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
ubs_mem_numastat_t* numa_mems = nullptr;
ret = ubs_mem_numastat_get(1, &numa_mems, nullptr);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
}
TEST_F(TestUbsEngineMem, UbsMemNumastatGetWhenInvokeCallFailed)
{
ubs_mem_numastat_t* numa_mems = nullptr;
uint32_t numa_mem_cnt = 0;
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_numastat_get(1, &numa_mems, &numa_mem_cnt);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbsMemNumastatGetWhenUnpackFailed)
{
ubs_mem_numastat_t* numa_mems = nullptr;
uint32_t numa_mem_cnt = 0;
ubse_api_buffer_t respBuffer{};
respBuffer.length = 2;
respBuffer.buffer = static_cast<uint8_t*>(malloc(respBuffer.length));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_numastat_get(1, &numa_mems, &numa_mem_cnt);
EXPECT_EQ(ret, UBS_ERR_BUFFER_TOO_SMALL);
}
std::vector<UbseNumaNodeInfo> BuildNumaNodeInfoList()
{
std::vector<UbseNumaNodeInfo> numaNodeInfoList{};
UbseNumaNodeInfo numaNodeInfo1{};
numaNodeInfo1.nodeId = "1";
numaNodeInfoList.emplace_back(numaNodeInfo1);
UbseNumaNodeInfo numaNodeInfo2{};
numaNodeInfo2.nodeId = "1";
numaNodeInfoList.emplace_back(numaNodeInfo2);
return numaNodeInfoList;
}
TEST_F(TestUbsEngineMem, UbsMemNumastatGetWhenSuccess)
{
ubs_mem_numastat_t* numa_mems = nullptr;
uint32_t numa_mem_cnt = 0;
auto numaNodeInfoList = BuildNumaNodeInfoList();
ipc::UbseIpcMessage respMessage{};
EXPECT_EQ(UbseNumaInfoListPack(numaNodeInfoList, respMessage), UBSE_OK);
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(respMessage.length));
respBuffer.length = respMessage.length;
if (memcpy_s(respBuffer.buffer, respBuffer.length, respMessage.buffer, respMessage.length) != EOK) {
free(respBuffer.buffer);
respBuffer.buffer = nullptr;
respBuffer.length = 0;
}
delete respMessage.buffer;
respMessage.buffer = nullptr;
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_numastat_get(1, &numa_mems, &numa_mem_cnt);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbseMemFdCreateWhenInvalidParameters)
{
char* null_name = nullptr;
uint32_t size = UBS_MEM_MIN_SIZE;
ubs_mem_fd_owner_t* owner{};
mode_t mode{};
ubs_mem_distance_t distance{};
ubs_mem_fd_desc_t* fd_desc = nullptr;
auto ret = ubs_mem_fd_create(null_name, size, owner, mode, distance, fd_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
std::string longName(UBS_MEM_MAX_NAME_LENGTH, '0');
ret = ubs_mem_fd_create(longName.c_str(), size, owner, mode, distance, fd_desc);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
char* name = "test";
uint32_t small_size = 0;
ret = ubs_mem_fd_create(name, small_size, owner, mode, distance, fd_desc);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
ret = ubs_mem_fd_create(name, size, owner, mode, distance, fd_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
}
TEST_F(TestUbsEngineMem, UbseMemFdCreateWhenInvokeCallFailed)
{
char* name = "test";
uint32_t size = UBS_MEM_MIN_SIZE;
ubs_mem_fd_owner_t* owner{};
mode_t mode{};
ubs_mem_distance_t distance{};
ubs_mem_fd_desc_t fd_desc = ubs_mem_fd_desc_t();
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_fd_create(name, size, owner, mode, distance, &fd_desc);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbseMemFdCreateWhenUnpackFailed)
{
char* name = "test";
uint32_t size = UBS_MEM_MIN_SIZE;
ubs_mem_fd_owner_t* owner{};
mode_t mode{};
ubs_mem_distance_t distance{};
ubs_mem_fd_desc_t fd_desc = ubs_mem_fd_desc_t();
ubse_api_buffer_t respBuffer{};
respBuffer.length = 2;
respBuffer.buffer = static_cast<uint8_t*>(malloc(respBuffer.length));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_fd_create(name, size, owner, mode, distance, &fd_desc);
EXPECT_EQ(ret, UBS_ERR_BUFFER_TOO_SMALL);
}
TEST_F(TestUbsEngineMem, UbseMemFdCreateWhenSuccess)
{
char* name = "test";
uint32_t size = UBS_MEM_MIN_SIZE;
ubs_mem_fd_owner_t* owner{};
mode_t mode{};
ubs_mem_distance_t distance{};
ubs_mem_fd_desc_t fd_desc = ubs_mem_fd_desc_t();
mem::def::UbseMemFdDesc ubseMemFdDesc{};
ipc::UbseIpcMessage respMessage{};
EXPECT_EQ(UbseMemFdDescPack(ubseMemFdDesc, respMessage), UBSE_OK);
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(respMessage.length));
respBuffer.length = respMessage.length;
if (memcpy_s(respBuffer.buffer, respBuffer.length, respMessage.buffer, respMessage.length) != EOK) {
free(respBuffer.buffer);
respBuffer.buffer = nullptr;
respBuffer.length = 0;
}
delete respMessage.buffer;
respMessage.buffer = nullptr;
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_fd_create(name, size, owner, mode, distance, &fd_desc);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbseMemFdCreateWithLenderWhenInvalidParameters)
{
char* null_name = nullptr;
ubs_mem_fd_owner_t* owner{};
mode_t mode{};
ubs_mem_lender_t* null_lender = nullptr;
uint32_t invalid_lender_cnt = 0;
ubs_mem_fd_desc_t* fd_desc = nullptr;
int ret = ubs_mem_fd_create_with_lender(null_name, owner, mode, null_lender, invalid_lender_cnt, fd_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
ubs_mem_lender_t lender[1] = {};
ret = ubs_mem_fd_create_with_lender(null_name, owner, mode, lender, invalid_lender_cnt, fd_desc);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
uint32_t lender_cnt = 1;
lender[0].lender_size = UBS_MEM_MIN_SIZE - 1;
ret = ubs_mem_fd_create_with_lender(null_name, owner, mode, lender, lender_cnt, fd_desc);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
lender[0].lender_size = UBS_MEM_MIN_SIZE;
ret = ubs_mem_fd_create_with_lender(null_name, owner, mode, lender, lender_cnt, fd_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
std::string longName(UBS_MEM_MAX_NAME_LENGTH, '0');
ret = ubs_mem_fd_create_with_lender(longName.c_str(), owner, mode, lender, lender_cnt, fd_desc);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
char* name = "test";
ret = ubs_mem_fd_create_with_lender(name, owner, mode, lender, lender_cnt, fd_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
}
TEST_F(TestUbsEngineMem, UbseMemFdCreateWithLenderWhenInvokeCallFailed)
{
char* name = "test";
ubs_mem_fd_owner_t* owner{};
mode_t mode{};
ubs_mem_lender_t lender[1] = {};
lender[0].lender_size = UBS_MEM_MIN_SIZE;
uint32_t lender_cnt = 1;
ubs_mem_fd_desc_t fd_desc = ubs_mem_fd_desc_t();
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_fd_create_with_lender(name, owner, mode, lender, lender_cnt, &fd_desc);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbseMemFdCreateWithLenderWhenUnpackFailed)
{
char* name = "test";
ubs_mem_fd_owner_t* owner{};
mode_t mode{};
ubs_mem_lender_t lender[1] = {};
lender[0].lender_size = UBS_MEM_MIN_SIZE;
uint32_t lender_cnt = 1;
ubs_mem_fd_desc_t fd_desc = ubs_mem_fd_desc_t();
ubse_api_buffer_t respBuffer{};
respBuffer.length = 2;
respBuffer.buffer = static_cast<uint8_t*>(malloc(respBuffer.length));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_fd_create_with_lender(name, owner, mode, lender, lender_cnt, &fd_desc);
EXPECT_EQ(ret, UBS_ERR_BUFFER_TOO_SMALL);
}
TEST_F(TestUbsEngineMem, UbseMemFdCreateWithLenderWhenSuccess)
{
char* name = "test";
ubs_mem_fd_owner_t* owner{};
mode_t mode{};
ubs_mem_lender_t lender[1] = {};
lender[0].lender_size = UBS_MEM_MIN_SIZE;
uint32_t lender_cnt = 1;
ubs_mem_fd_desc_t fd_desc = ubs_mem_fd_desc_t();
mem::def::UbseMemFdDesc ubseMemFdDesc{};
ipc::UbseIpcMessage respMessage{};
EXPECT_EQ(UbseMemFdDescPack(ubseMemFdDesc, respMessage), UBSE_OK);
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(respMessage.length));
respBuffer.length = respMessage.length;
if (memcpy_s(respBuffer.buffer, respBuffer.length, respMessage.buffer, respMessage.length) != EOK) {
free(respBuffer.buffer);
respBuffer.buffer = nullptr;
respBuffer.length = 0;
}
delete respMessage.buffer;
respMessage.buffer = nullptr;
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_fd_create_with_lender(name, owner, mode, lender, lender_cnt, &fd_desc);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbseMemFdCreateWithCandidateWhenInvalidParameters)
{
char* null_name = nullptr;
uint64_t invalid_size = UBS_MEM_MIN_SIZE - 1;
ubs_mem_fd_owner_t* owner{};
mode_t mode{};
uint32_t* null_slot_ids = nullptr;
uint32_t slot_cnt = 1;
ubs_mem_fd_desc_t* null_fd_desc = nullptr;
auto ret =
ubs_mem_fd_create_with_candidate(null_name, invalid_size, owner, mode, null_slot_ids, slot_cnt, null_fd_desc);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
uint64_t size = UBS_MEM_MIN_SIZE;
ret = ubs_mem_fd_create_with_candidate(null_name, size, owner, mode, null_slot_ids, slot_cnt, null_fd_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
uint32_t slot_ids[1] = {1};
ret = ubs_mem_fd_create_with_candidate(null_name, size, owner, mode, slot_ids, slot_cnt, null_fd_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
std::string longName(UBS_MEM_MAX_NAME_LENGTH, '0');
ret = ubs_mem_fd_create_with_candidate(longName.c_str(), size, owner, mode, slot_ids, slot_cnt, null_fd_desc);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
char* name = "test";
ret = ubs_mem_fd_create_with_candidate(name, size, owner, mode, slot_ids, slot_cnt, null_fd_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
}
TEST_F(TestUbsEngineMem, UbseMemFdCreateWithCandidateWhenInvokeCallFailed)
{
char* name = "test";
uint64_t size = UBS_MEM_MIN_SIZE;
ubs_mem_fd_owner_t owner = ubs_mem_fd_owner_t{};
mode_t mode{};
uint32_t slot_ids[1] = {1};
slot_ids[0] = 1;
uint32_t slot_cnt = 1;
ubs_mem_fd_desc_t fd_desc = ubs_mem_fd_desc_t{};
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_fd_create_with_candidate(name, size, &owner, mode, slot_ids, slot_cnt, &fd_desc);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbseMemFdCreateWithCandidateWhenUnpackFailed)
{
char* name = "test";
uint64_t size = UBS_MEM_MIN_SIZE;
ubs_mem_fd_owner_t owner = ubs_mem_fd_owner_t{};
mode_t mode{};
uint32_t slot_ids[1] = {1};
uint32_t slot_cnt = 1;
ubs_mem_fd_desc_t fd_desc = ubs_mem_fd_desc_t{};
ubse_api_buffer_t respBuffer{};
respBuffer.length = 2;
respBuffer.buffer = static_cast<uint8_t*>(malloc(respBuffer.length));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_fd_create_with_candidate(name, size, &owner, mode, slot_ids, slot_cnt, &fd_desc);
EXPECT_EQ(ret, UBS_ERR_BUFFER_TOO_SMALL);
}
TEST_F(TestUbsEngineMem, UbseMemFdCreateWithCandidateWhenSuccess)
{
char* name = "test";
uint64_t size = UBS_MEM_MIN_SIZE;
ubs_mem_fd_owner_t owner = ubs_mem_fd_owner_t{};
mode_t mode{};
uint32_t slot_ids[1] = {1};
uint32_t slot_cnt = 1;
ubs_mem_fd_desc_t fd_desc = ubs_mem_fd_desc_t{};
mem::def::UbseMemFdDesc ubseMemFdDesc{};
ipc::UbseIpcMessage respMessage{};
EXPECT_EQ(UbseMemFdDescPack(ubseMemFdDesc, respMessage), UBSE_OK);
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(respMessage.length));
respBuffer.length = respMessage.length;
if (memcpy_s(respBuffer.buffer, respBuffer.length, respMessage.buffer, respMessage.length) != EOK) {
free(respBuffer.buffer);
respBuffer.buffer = nullptr;
respBuffer.length = 0;
}
delete respMessage.buffer;
respMessage.buffer = nullptr;
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_fd_create_with_candidate(name, size, &owner, mode, slot_ids, slot_cnt, &fd_desc);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbseMemFdPermissionWhenInvalidParameters)
{
char* null_name = nullptr;
ubs_mem_fd_owner_t owner = ubs_mem_fd_owner_t();
mode_t mode{};
auto ret = ubs_mem_fd_permission(null_name, &owner, mode);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
std::string longName(UBS_MEM_MAX_NAME_LENGTH, '0');
ret = ubs_mem_fd_permission(longName.c_str(), &owner, mode);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
}
TEST_F(TestUbsEngineMem, UbseMemFdPermissionWhenInvokeCallFailed)
{
char* name = "test";
ubs_mem_fd_owner_t owner = ubs_mem_fd_owner_t();
mode_t mode{};
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_fd_permission(name, &owner, mode);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbseMemFdPermissionWhenSuccess)
{
char* name = "test";
ubs_mem_fd_owner_t owner = ubs_mem_fd_owner_t();
mode_t mode{};
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_OK));
auto ret = ubs_mem_fd_permission(name, &owner, mode);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbseMemFdGetWhenInvalidParameters)
{
char* null_name = nullptr;
ubs_mem_fd_desc_t* null_mem_desc = nullptr;
auto ret = ubs_mem_fd_get(null_name, null_mem_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
std::string longName(UBS_MEM_MAX_NAME_LENGTH, '0');
ret = ubs_mem_fd_get(longName.c_str(), null_mem_desc);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
char* name = "test";
ret = ubs_mem_fd_get(name, null_mem_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
}
TEST_F(TestUbsEngineMem, UbseMemFdGetWhenInvokeCallFailed)
{
char* name = "test";
ubs_mem_fd_desc_t mem_desc = ubs_mem_fd_desc_t();
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_fd_get(name, &mem_desc);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbseMemFdGetWhenUnpackFailed)
{
char* name = "test";
ubs_mem_fd_desc_t mem_desc = ubs_mem_fd_desc_t();
ubse_api_buffer_t respBuffer{};
respBuffer.length = 2;
respBuffer.buffer = static_cast<uint8_t*>(malloc(respBuffer.length));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_fd_get(name, &mem_desc);
EXPECT_EQ(ret, UBS_ERR_BUFFER_TOO_SMALL);
}
TEST_F(TestUbsEngineMem, UbseMemFdGetWhenSuccess)
{
char* name = "test";
ubs_mem_fd_desc_t mem_desc = ubs_mem_fd_desc_t();
mem::def::UbseMemFdDesc ubseMemFdDesc{};
ipc::UbseIpcMessage respMessage{};
EXPECT_EQ(UbseMemFdDescPack(ubseMemFdDesc, respMessage), UBSE_OK);
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(respMessage.length));
respBuffer.length = respMessage.length;
if (memcpy_s(respBuffer.buffer, respBuffer.length, respMessage.buffer, respMessage.length) != EOK) {
free(respBuffer.buffer);
respBuffer.buffer = nullptr;
respBuffer.length = 0;
}
delete respMessage.buffer;
respMessage.buffer = nullptr;
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_fd_get(name, &mem_desc);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbsMemFdListWhenInvalidParameters)
{
ubs_mem_fd_desc_t** null_fd_descs = nullptr;
uint32_t fd_desc_cnt = 0;
auto ret = ubs_mem_fd_list(null_fd_descs, &fd_desc_cnt);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
ubs_mem_fd_desc_t* fd_descs = nullptr;
ret = ubs_mem_fd_list(&fd_descs, nullptr);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
}
TEST_F(TestUbsEngineMem, UbsMemFdListWhenInvokeCallFailed)
{
ubs_mem_fd_desc_t* fd_descs = nullptr;
uint32_t fd_desc_cnt = 0;
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_fd_list(&fd_descs, &fd_desc_cnt);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbsMemFdListWhenUnpackFailed)
{
ubs_mem_fd_desc_t* fd_descs = nullptr;
uint32_t fd_desc_cnt = 0;
ubse_api_buffer_t respBuffer{};
respBuffer.length = 2;
respBuffer.buffer = static_cast<uint8_t*>(malloc(respBuffer.length));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_fd_list(&fd_descs, &fd_desc_cnt);
EXPECT_EQ(ret, UBS_ERR_BUFFER_TOO_SMALL);
}
TEST_F(TestUbsEngineMem, UbsMemFdListWhenSuccess)
{
ubs_mem_fd_desc_t* fd_descs = nullptr;
uint32_t fd_desc_cnt = 0;
std::vector<mem::def::UbseMemFdDesc> fdDescList{};
mem::def::UbseMemFdDesc ubseMemFdDesc1{};
mem::def::UbseMemFdDesc ubseMemFdDesc2{};
fdDescList.emplace_back(ubseMemFdDesc1);
fdDescList.emplace_back(ubseMemFdDesc2);
UbseIpcMessage respMessage{};
EXPECT_EQ(UbseMemFdDescListPack(fdDescList, respMessage), UBSE_OK);
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(respMessage.length));
respBuffer.length = respMessage.length;
if (memcpy_s(respBuffer.buffer, respBuffer.length, respMessage.buffer, respMessage.length) != EOK) {
free(respBuffer.buffer);
respBuffer.buffer = nullptr;
respBuffer.length = 0;
}
delete respMessage.buffer;
respMessage.buffer = nullptr;
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_fd_list(&fd_descs, &fd_desc_cnt);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbsMemFdDeleteWhenInvalidParameters)
{
char* null_name = nullptr;
auto ret = ubs_mem_fd_delete(null_name);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
std::string longName(UBS_MEM_MAX_NAME_LENGTH, '0');
ret = ubs_mem_fd_delete(longName.c_str());
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
}
TEST_F(TestUbsEngineMem, UbsMemFdDeleteWhenInvokeCallFailed)
{
char* name = "test";
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_fd_delete(name);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbsMemFdDeleteWhenSuccess)
{
char* name = "test";
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_OK));
auto ret = ubs_mem_fd_delete(name);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbsMemNumaCreateWhenInvalidParameters)
{
char* null_name = nullptr;
uint32_t size = UBS_MEM_MIN_SIZE;
ubs_mem_distance_t distance{};
ubs_mem_numa_desc_t* numa_desc = nullptr;
auto ret = ubs_mem_numa_create(null_name, size, distance, numa_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
std::string longName(UBS_MEM_MAX_NAME_LENGTH, '0');
ret = ubs_mem_numa_create(longName.c_str(), size, distance, numa_desc);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
char* name = "test";
uint32_t small_size = 0;
ret = ubs_mem_numa_create(name, small_size, distance, numa_desc);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
ret = ubs_mem_numa_create(name, size, distance, numa_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
}
TEST_F(TestUbsEngineMem, UbseMemNumaCreateWhenInvokeCallFailed)
{
char* name = "test";
uint32_t size = UBS_MEM_MIN_SIZE;
ubs_mem_distance_t distance{};
ubs_mem_numa_desc_t numa_desc = ubs_mem_numa_desc_t();
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_numa_create(name, size, distance, &numa_desc);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbseMemNumaCreateWhenUnpackFailed)
{
char* name = "test";
uint32_t size = UBS_MEM_MIN_SIZE;
ubs_mem_distance_t distance{};
ubs_mem_numa_desc_t numa_desc = ubs_mem_numa_desc_t();
ubse_api_buffer_t respBuffer{};
respBuffer.length = 2;
respBuffer.buffer = static_cast<uint8_t*>(malloc(respBuffer.length));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_numa_create(name, size, distance, &numa_desc);
EXPECT_EQ(ret, UBS_ERR_BUFFER_TOO_SMALL);
}
TEST_F(TestUbsEngineMem, UbseMemNumaCreateWhenSuccess)
{
char* name = "test";
uint32_t size = UBS_MEM_MIN_SIZE;
ubs_mem_distance_t distance{};
ubs_mem_numa_desc_t numa_desc = ubs_mem_numa_desc_t();
mem::def::UbseMemNumaDesc numaDesc{};
ipc::UbseIpcMessage respMessage{};
EXPECT_EQ(UbseMemNumaDescPack(numaDesc, respMessage), UBSE_OK);
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(respMessage.length));
respBuffer.length = respMessage.length;
if (memcpy_s(respBuffer.buffer, respBuffer.length, respMessage.buffer, respMessage.length) != EOK) {
free(respBuffer.buffer);
respBuffer.buffer = nullptr;
respBuffer.length = 0;
}
delete respMessage.buffer;
respMessage.buffer = nullptr;
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_numa_create(name, size, distance, &numa_desc);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbseMemNumaCreateWithLenderWhenInvalidParameters)
{
char* null_name = nullptr;
mode_t mode{};
ubs_mem_lender_t* null_lender = nullptr;
uint32_t invalid_lender_cnt = 0;
ubs_mem_numa_desc_t* numa_desc = nullptr;
int ret = ubs_mem_numa_create_with_lender(null_name, null_lender, invalid_lender_cnt, numa_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
ubs_mem_lender_t lender[1] = {};
ret = ubs_mem_numa_create_with_lender(null_name, lender, invalid_lender_cnt, numa_desc);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
uint32_t lender_cnt = 1;
lender[0].lender_size = UBS_MEM_MIN_SIZE - 1;
ret = ubs_mem_numa_create_with_lender(null_name, lender, lender_cnt, numa_desc);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
lender[0].lender_size = UBS_MEM_MIN_SIZE;
ret = ubs_mem_numa_create_with_lender(null_name, lender, lender_cnt, numa_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
std::string longName(UBS_MEM_MAX_NAME_LENGTH, '0');
ret = ubs_mem_numa_create_with_lender(longName.c_str(), lender, lender_cnt, numa_desc);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
char* name = "test";
ret = ubs_mem_numa_create_with_lender(name, lender, lender_cnt, numa_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
}
TEST_F(TestUbsEngineMem, UbseMemNumaCreateWithLenderWhenInvokeCallFailed)
{
char* name = "test";
ubs_mem_lender_t lender[1] = {};
lender[0].lender_size = UBS_MEM_MIN_SIZE;
uint32_t lender_cnt = 1;
ubs_mem_numa_desc_t numa_desc = ubs_mem_numa_desc_t();
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_numa_create_with_lender(name, lender, lender_cnt, &numa_desc);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbseMemNumaCreateWithLenderWhenUnpackFailed)
{
char* name = "test";
ubs_mem_lender_t lender[1] = {};
lender[0].lender_size = UBS_MEM_MIN_SIZE;
uint32_t lender_cnt = 1;
ubs_mem_numa_desc_t numa_desc = ubs_mem_numa_desc_t();
ubse_api_buffer_t respBuffer{};
respBuffer.length = 2;
respBuffer.buffer = static_cast<uint8_t*>(malloc(respBuffer.length));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_numa_create_with_lender(name, lender, lender_cnt, &numa_desc);
EXPECT_EQ(ret, UBS_ERR_BUFFER_TOO_SMALL);
}
TEST_F(TestUbsEngineMem, UbseMemNumaCreateWithLenderWhenSuccess)
{
char* name = "test";
ubs_mem_lender_t lender[1] = {};
lender[0].lender_size = UBS_MEM_MIN_SIZE;
uint32_t lender_cnt = 1;
ubs_mem_numa_desc_t numa_desc = ubs_mem_numa_desc_t();
mem::def::UbseMemNumaDesc numaDesc{};
ipc::UbseIpcMessage respMessage{};
EXPECT_EQ(UbseMemNumaDescPack(numaDesc, respMessage), UBSE_OK);
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(respMessage.length));
respBuffer.length = respMessage.length;
if (memcpy_s(respBuffer.buffer, respBuffer.length, respMessage.buffer, respMessage.length) != EOK) {
free(respBuffer.buffer);
respBuffer.buffer = nullptr;
respBuffer.length = 0;
}
delete respMessage.buffer;
respMessage.buffer = nullptr;
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_numa_create_with_lender(name, lender, lender_cnt, &numa_desc);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbseMemNumaCreateWithCandidateWhenInvalidParameters)
{
char* null_name = nullptr;
uint64_t invalid_size = UBS_MEM_MIN_SIZE - 1;
uint32_t* null_slot_ids = nullptr;
uint32_t slot_cnt = 1;
ubs_mem_numa_desc_t* null_numa_desc = nullptr;
auto ret = ubs_mem_numa_create_with_candidate(null_name, invalid_size, null_slot_ids, slot_cnt, null_numa_desc);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
uint64_t size = UBS_MEM_MIN_SIZE;
ret = ubs_mem_numa_create_with_candidate(null_name, size, null_slot_ids, slot_cnt, null_numa_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
uint32_t slot_ids[1] = {1};
ret = ubs_mem_numa_create_with_candidate(null_name, size, slot_ids, slot_cnt, null_numa_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
std::string longName(UBS_MEM_MAX_NAME_LENGTH, '0');
ret = ubs_mem_numa_create_with_candidate(longName.c_str(), size, slot_ids, slot_cnt, null_numa_desc);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
char* name = "test";
ret = ubs_mem_numa_create_with_candidate(name, size, slot_ids, slot_cnt, null_numa_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
}
TEST_F(TestUbsEngineMem, UbseMemNumaCreateWithCandidateWhenInvokeCallFailed)
{
char* name = "name";
uint64_t size = UBS_MEM_MIN_SIZE;
uint32_t slot_ids[1] = {1};
uint32_t slot_cnt = 1;
ubs_mem_numa_desc_t numa_desc = ubs_mem_numa_desc_t();
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_numa_create_with_candidate(name, size, slot_ids, slot_cnt, &numa_desc);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbseMemNumaCreateWithCandidateWhenUnpackFailed)
{
char* name = "name";
uint64_t size = UBS_MEM_MIN_SIZE;
uint32_t slot_ids[1] = {1};
uint32_t slot_cnt = 1;
ubs_mem_numa_desc_t numa_desc = ubs_mem_numa_desc_t();
ubse_api_buffer_t respBuffer{};
respBuffer.length = 2;
respBuffer.buffer = static_cast<uint8_t*>(malloc(respBuffer.length));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_numa_create_with_candidate(name, size, slot_ids, slot_cnt, &numa_desc);
EXPECT_EQ(ret, UBS_ERR_BUFFER_TOO_SMALL);
}
TEST_F(TestUbsEngineMem, UbseMemNumaCreateWithCandidateWhenSuccess)
{
char* name = "name";
uint64_t size = UBS_MEM_MIN_SIZE;
uint32_t slot_ids[1] = {1};
uint32_t slot_cnt = 1;
ubs_mem_numa_desc_t numa_desc = ubs_mem_numa_desc_t();
mem::def::UbseMemNumaDesc ubseMemNumaDesc{};
ipc::UbseIpcMessage respMessage{};
EXPECT_EQ(UbseMemNumaDescPack(ubseMemNumaDesc, respMessage), UBSE_OK);
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(respMessage.length));
respBuffer.length = respMessage.length;
if (memcpy_s(respBuffer.buffer, respBuffer.length, respMessage.buffer, respMessage.length) != EOK) {
free(respBuffer.buffer);
respBuffer.buffer = nullptr;
respBuffer.length = 0;
}
delete respMessage.buffer;
respMessage.buffer = nullptr;
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_numa_create_with_candidate(name, size, slot_ids, slot_cnt, &numa_desc);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbseMemNumaGetWhenInvalidParameters)
{
char* null_name = nullptr;
ubs_mem_numa_desc_t* null_mem_desc = nullptr;
auto ret = ubs_mem_numa_get(null_name, null_mem_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
std::string longName(UBS_MEM_MAX_NAME_LENGTH, '0');
ret = ubs_mem_numa_get(longName.c_str(), null_mem_desc);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
char* name = "name";
ret = ubs_mem_numa_get(name, null_mem_desc);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
}
TEST_F(TestUbsEngineMem, UbseMemNumaGetWhenInvokeCallFailed)
{
char* name = "name";
ubs_mem_numa_desc_t mem_desc = ubs_mem_numa_desc_t();
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_numa_get(name, &mem_desc);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbseMemNumaGetWhenUnpackFailed)
{
char* name = "name";
ubs_mem_numa_desc_t mem_desc = ubs_mem_numa_desc_t();
ubse_api_buffer_t respBuffer{};
respBuffer.length = 2;
respBuffer.buffer = static_cast<uint8_t*>(malloc(respBuffer.length));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_numa_get(name, &mem_desc);
EXPECT_EQ(ret, UBS_ERR_BUFFER_TOO_SMALL);
}
TEST_F(TestUbsEngineMem, UbseMemNumaGetWhenSuccess)
{
char* name = "name";
ubs_mem_numa_desc_t mem_desc = ubs_mem_numa_desc_t();
mem::def::UbseMemNumaDesc ubseMemNumaDesc{};
ipc::UbseIpcMessage respMessage{};
EXPECT_EQ(UbseMemNumaDescPack(ubseMemNumaDesc, respMessage), UBSE_OK);
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(respMessage.length));
respBuffer.length = respMessage.length;
if (memcpy_s(respBuffer.buffer, respBuffer.length, respMessage.buffer, respMessage.length) != EOK) {
free(respBuffer.buffer);
respBuffer.buffer = nullptr;
respBuffer.length = 0;
}
delete respMessage.buffer;
respMessage.buffer = nullptr;
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_numa_get(name, &mem_desc);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbsMemNumaListWhenInvalidParameters)
{
ubs_mem_numa_desc_t** null_numa_descs = nullptr;
uint32_t numa_desc_cnt = 0;
auto ret = ubs_mem_numa_list(null_numa_descs, &numa_desc_cnt);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
ubs_mem_numa_desc_t* numa_descs = nullptr;
ret = ubs_mem_numa_list(&numa_descs, nullptr);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
}
TEST_F(TestUbsEngineMem, UbsMemNumaListWhenInvokeCallFailed)
{
ubs_mem_numa_desc_t* numa_descs = nullptr;
uint32_t numa_desc_cnt = 0;
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_numa_list(&numa_descs, &numa_desc_cnt);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbsMemNumaListWhenUnpackFailed)
{
ubs_mem_numa_desc_t* numa_descs = nullptr;
uint32_t numa_desc_cnt = 0;
ubse_api_buffer_t respBuffer{};
respBuffer.length = 2;
respBuffer.buffer = static_cast<uint8_t*>(malloc(respBuffer.length));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_numa_list(&numa_descs, &numa_desc_cnt);
EXPECT_EQ(ret, UBS_ERR_BUFFER_TOO_SMALL);
}
TEST_F(TestUbsEngineMem, UbsMemNumaListWhenSuccess)
{
ubs_mem_numa_desc_t* numa_descs = nullptr;
uint32_t numa_desc_cnt = 0;
std::vector<mem::def::UbseMemNumaDesc> numaDescList{};
mem::def::UbseMemNumaDesc ubseMemNumaDesc1{};
mem::def::UbseMemNumaDesc ubseMemNumaDesc2{};
numaDescList.emplace_back(ubseMemNumaDesc1);
numaDescList.emplace_back(ubseMemNumaDesc2);
UbseIpcMessage respMessage{};
EXPECT_EQ(UbseMemNumaDescListPack(numaDescList, respMessage), UBSE_OK);
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(respMessage.length));
respBuffer.length = respMessage.length;
if (memcpy_s(respBuffer.buffer, respBuffer.length, respMessage.buffer, respMessage.length) != EOK) {
free(respBuffer.buffer);
respBuffer.buffer = nullptr;
respBuffer.length = 0;
}
delete respMessage.buffer;
respMessage.buffer = nullptr;
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
auto ret = ubs_mem_numa_list(&numa_descs, &numa_desc_cnt);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbsMemNumaDeleteWhenInvalidParameters)
{
char* null_name = nullptr;
auto ret = ubs_mem_numa_delete(null_name);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
std::string longName(UBS_MEM_MAX_NAME_LENGTH, '0');
ret = ubs_mem_numa_delete(longName.c_str());
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
}
TEST_F(TestUbsEngineMem, UbsMemNumaDeleteWhenInvokeCallFailed)
{
char* name = "name";
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_numa_delete(name);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbsMemNumaDeleteWhenSuccess)
{
char* name = "name";
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_OK));
auto ret = ubs_mem_numa_delete(name);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbsMemShmCreateWhenInvalidParameters)
{
char* null_name = nullptr;
uint64_t size = UBS_MEM_MIN_SIZE;
uint8_t usr_info[32];
uint64_t flag{};
ubs_mem_nodes_t region = ubs_mem_nodes_t{};
ubs_mem_nodes_t provider = ubs_mem_nodes_t{};
auto ret = ubs_mem_shm_create(null_name, size, usr_info, flag, ®ion, &provider);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
std::string longName(UBS_MEM_MAX_NAME_LENGTH, '0');
ret = ubs_mem_shm_create(longName.c_str(), size, usr_info, flag, ®ion, &provider);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
uint64_t small_size = 0;
char* name = "name";
ret = ubs_mem_shm_create(name, small_size, usr_info, flag, ®ion, &provider);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
uint64_t invalid_size = 5UL * 1024 * 1024;
ret = ubs_mem_shm_create(name, invalid_size, usr_info, flag, ®ion, &provider);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
ubs_mem_nodes_t* null_region = nullptr;
ret = ubs_mem_shm_create(name, size, usr_info, flag, null_region, &provider);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
region.node_cnt = 0;
ret = ubs_mem_shm_create(name, size, usr_info, flag, ®ion, &provider);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
region.node_cnt = 100;
ret = ubs_mem_shm_create(name, size, usr_info, flag, ®ion, &provider);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
region.node_cnt = 2;
provider.node_cnt = 0;
ret = ubs_mem_shm_create(name, size, usr_info, flag, ®ion, &provider);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
provider.node_cnt = 100;
ret = ubs_mem_shm_create(name, size, usr_info, flag, ®ion, &provider);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
}
TEST_F(TestUbsEngineMem, UbsMemShmCreateWhenInvokeCallFailed)
{
char* name = "name";
uint64_t size = UBS_MEM_MIN_SIZE;
uint8_t usr_info[32];
uint64_t flag{};
ubs_mem_nodes_t region = ubs_mem_nodes_t{.node_cnt = 1};
ubs_mem_nodes_t provider = ubs_mem_nodes_t{.node_cnt = 1};
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_shm_create(name, size, usr_info, flag, ®ion, &provider);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
}
TEST_F(TestUbsEngineMem, UbsMemShmCreateWhenSuccess)
{
char* name = "name";
uint64_t size = UBS_MEM_MIN_SIZE;
uint8_t usr_info[32];
uint64_t flag{};
ubs_mem_nodes_t region = ubs_mem_nodes_t{.node_cnt = 1};
ubs_mem_nodes_t provider = ubs_mem_nodes_t{.node_cnt = 1};
MOCKER(ubse_invoke_call).stubs().will(returnValue(UBSE_OK));
auto ret = ubs_mem_shm_create(name, size, usr_info, flag, ®ion, &provider);
EXPECT_EQ(ret, UBS_SUCCESS);
}
const char* g_nullName = nullptr;
const char* g_emptyName = "";
const char* g_invalidName = "111111111111111111111111111111111111111111111111";
const char* g_validName = "global_valid_name";
ubs_mem_memids_fault_t* g_nullFault = nullptr;
ubs_mem_memids_fault_t g_validFault = {};
ubs_mem_shm_desc_t** g_nullShmDescs = nullptr;
ubs_mem_shm_desc_t* g_validShmDescs = nullptr;
uint32_t g_validShmDescCnt = 0;
uint32_t* g_nullShmDescCnt = nullptr;
TEST_F(TestUbsEngineMem, UbsMemShmCreateWithAffinityWhenFail)
{
uint64_t invalidSize = UBS_MEM_MIN_SIZE - 1;
uint8_t usr_info[32];
uint64_t flag{};
uint32_t affSocketId = 0;
ubs_mem_nodes_t* nullRegion = nullptr;
ubs_mem_nodes_t* nullProvider = nullptr;
ubs_mem_nodes_t inValidRegion = ubs_mem_nodes_t{.node_cnt = UBS_MEM_MAX_SLOT_NUM + 1, .slot_ids = {1}};
ubs_mem_nodes_t validRegion = ubs_mem_nodes_t{.node_cnt = 0};
ubs_mem_nodes_t validProvider = ubs_mem_nodes_t{.node_cnt = 0};
uint64_t validSize = UBS_MEM_MIN_SIZE;
auto ret = ubs_mem_shm_create_with_affinity(g_invalidName, validSize, affSocketId, usr_info, flag, nullRegion,
nullProvider);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
ret = ubs_mem_shm_create_with_affinity(g_validName, invalidSize, affSocketId, usr_info, flag, nullRegion,
nullProvider);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
ret = ubs_mem_shm_create_with_affinity(g_validName, validSize, affSocketId, usr_info, flag, &inValidRegion,
nullProvider);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
ret = ubs_mem_shm_create_with_affinity(g_validName, validSize, affSocketId, usr_info, flag, &validRegion,
&validProvider);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
validRegion.node_cnt = 1;
ret = ubs_mem_shm_create_with_affinity(g_validName, validSize, affSocketId, usr_info, flag, &validRegion,
&validProvider);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
validProvider.node_cnt = 1;
MOCKER_CPP(ubse_invoke_call).stubs().will(returnValue(UBSE_ERROR_INVAL));
ret = ubs_mem_shm_create_with_affinity(g_validName, validSize, affSocketId, usr_info, flag, &validRegion,
&validProvider);
ASSERT_EQ(ret, static_cast<int32_t>(UBS_ENGINE_ERR_INVALID_PARAM));
}
TEST_F(TestUbsEngineMem, UbsMemShmCreateWithLenderWhenFail)
{
uint64_t invalidSize = UBS_MEM_MIN_SIZE - 1;
uint8_t usr_info[32];
uint64_t flag{};
uint32_t affSocketId = 0;
ubs_mem_nodes_t* nullRegion = nullptr;
ubs_mem_nodes_t* nullProvider = nullptr;
ubs_mem_nodes_t validRegion = ubs_mem_nodes_t{.node_cnt = 1, .slot_ids = {1}};
ubs_mem_lender_t validLender = ubs_mem_lender_t{.lender_size = UBS_MEM_MIN_SIZE, .slot_id = 1};
uint64_t validSize = UBS_MEM_MIN_SIZE;
auto ret = ubs_mem_shm_create_with_lender(g_invalidName, usr_info, flag, &validRegion, &validLender);
EXPECT_EQ(ret, UBS_ERR_INVALID_ARG);
ubs_mem_lender_t inValidLenderSize = ubs_mem_lender_t{.lender_size = UBS_MEM_MIN_SIZE - 1, .slot_id = 1};
ret = ubs_mem_shm_create_with_lender(g_validName, usr_info, flag, &validRegion, &inValidLenderSize);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
ubs_mem_nodes_t inValidRegion = ubs_mem_nodes_t{.node_cnt = UBS_MEM_MAX_SLOT_NUM + 1, .slot_ids = {1}};
ret = ubs_mem_shm_create_with_lender(g_validName, usr_info, flag, &validRegion, &inValidLenderSize);
EXPECT_EQ(ret, UBS_ENGINE_ERR_OUT_OF_RANGE);
MOCKER_CPP(ubse_invoke_call).stubs().will(returnValue(static_cast<uint32_t>(UBS_ENGINE_ERR_INTERNAL)));
ret = ubs_mem_shm_create_with_lender(g_validName, usr_info, flag, &validRegion, &validLender);
ASSERT_EQ(ret, static_cast<int32_t>(UBS_ENGINE_ERR_INTERNAL));
}
TEST_F(TestUbsEngineMem, UbsMemShmAttachWhenFail)
{
ubs_mem_fd_owner_t* nullOwner{nullptr};
mode_t mode{0644};
auto ret1 = ubs_mem_shm_attach(g_nullName, nullOwner, mode, &g_validShmDescs);
auto ret2 = ubs_mem_shm_attach(g_emptyName, nullOwner, mode, &g_validShmDescs);
ret2 &= ubs_mem_shm_attach(g_invalidName, nullOwner, mode, &g_validShmDescs);
ASSERT_EQ(ret1, static_cast<int32_t>(UBS_ERR_NULL_POINTER));
ASSERT_EQ(ret2, static_cast<int32_t>(UBS_ERR_INVALID_ARG));
MOCKER_CPP(ubse_invoke_call).stubs().will(returnValue(static_cast<uint32_t>(UBS_ENGINE_ERR_EXISTED)));
auto ret = ubs_mem_shm_attach(g_validName, nullOwner, mode, &g_validShmDescs);
ASSERT_EQ(ret, static_cast<int32_t>(UBS_ENGINE_ERR_EXISTED));
GlobalMockObject::verify();
ubse_api_buffer_t respBuffer{.buffer = nullptr, .length = 0};
MOCKER_CPP(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
ret = ubs_mem_shm_attach(g_validName, nullOwner, mode, &g_validShmDescs);
ASSERT_EQ(ret, static_cast<int32_t>(UBS_ERR_OUT_OF_MEMORY));
}
TEST_F(TestUbsEngineMem, UbsMemShmGetForAllSchene)
{
auto ret1 = ubs_mem_shm_get(g_nullName, &g_validShmDescs);
EXPECT_EQ(ret1, UBS_ERR_NULL_POINTER);
auto ret2 = ubs_mem_shm_get(g_emptyName, &g_validShmDescs);
ret2 &= ubs_mem_shm_get(g_invalidName, &g_validShmDescs);
EXPECT_EQ(ret2, UBS_ERR_INVALID_ARG);
MOCKER_CPP(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
auto ret = ubs_mem_shm_get(g_validName, &g_validShmDescs);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
GlobalMockObject::verify();
ubse_api_buffer_t respBuffer{};
respBuffer.length = 2;
respBuffer.buffer = static_cast<uint8_t*>(malloc(respBuffer.length));
MOCKER_CPP(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
ret = ubs_mem_shm_get(g_validName, &g_validShmDescs);
EXPECT_EQ(ret, UBS_ERR_BUFFER_TOO_SMALL);
GlobalMockObject::verify();
respBuffer = {.buffer = nullptr, .length = 0};
MOCKER_CPP(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
ret = ubs_mem_shm_get(g_validName, &g_validShmDescs);
EXPECT_EQ(ret, UBS_ERR_OUT_OF_MEMORY);
}
TEST_F(TestUbsEngineMem, UbsMemShmListForAllSchene)
{
auto ret = ubs_mem_shm_list(g_nullShmDescs, &g_validShmDescCnt);
ret &= ubs_mem_shm_list(&g_validShmDescs, g_nullShmDescCnt);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
MOCKER_CPP(ubse_invoke_call).stubs().will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
ret = ubs_mem_shm_list(&g_validShmDescs, &g_validShmDescCnt);
EXPECT_EQ(ret, UBS_ERR_IPC_CONNECTION_FAILED);
GlobalMockObject::verify();
ubse_api_buffer_t respBuffer{};
respBuffer.length = 2;
respBuffer.buffer = static_cast<uint8_t*>(malloc(respBuffer.length));
MOCKER_CPP(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
ret = ubs_mem_shm_list(&g_validShmDescs, &g_validShmDescCnt);
EXPECT_EQ(ret, UBS_ERR_BUFFER_TOO_SMALL);
GlobalMockObject::verify();
std::vector<mem::def::UbseMemShmDesc> shmDescList{};
mem::def::UbseMemShmDesc ubseMemShmDesc1{};
mem::def::UbseMemShmDesc ubseMemShmDesc2{};
shmDescList.emplace_back(ubseMemShmDesc1);
shmDescList.emplace_back(ubseMemShmDesc2);
UbseIpcMessage respMessage{};
EXPECT_EQ(UbseMemShmListResponsePack(shmDescList, respMessage), UBSE_OK);
ubse_api_buffer_t mockRespBuffer{.buffer = respMessage.buffer, .length = respMessage.length};
MOCKER_CPP(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&mockRespBuffer)).will(returnValue(UBSE_OK));
ret = ubs_mem_shm_list(&g_validShmDescs, &g_validShmDescCnt);
EXPECT_EQ(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbsMemShmDetachForAllSchene)
{
auto ret1 = ubs_mem_shm_detach(g_nullName);
auto ret2 = ubs_mem_shm_detach(g_emptyName);
ret2 &= ubs_mem_shm_detach(g_invalidName);
ASSERT_EQ(ret1, static_cast<int32_t>(UBS_ERR_NULL_POINTER));
ASSERT_EQ(ret2, static_cast<int32_t>(UBS_ERR_INVALID_ARG));
MOCKER_CPP(ubse_invoke_call).stubs().will(returnValue(UBSE_ERROR_INVAL));
auto ret = ubs_mem_shm_detach(g_validName);
ASSERT_EQ(ret, static_cast<int32_t>(UBS_ENGINE_ERR_INVALID_PARAM));
GlobalMockObject::verify();
MOCKER_CPP(ubse_invoke_call).stubs().will(returnValue(UBSE_OK));
ret = ubs_mem_shm_detach(g_validName);
ASSERT_EQ(ret, static_cast<int32_t>(UBS_SUCCESS));
}
TEST_F(TestUbsEngineMem, UbsMemShmDeleteForAllSchene)
{
auto ret1 = ubs_mem_shm_delete(g_nullName);
auto ret2 = ubs_mem_shm_delete(g_emptyName);
ret2 &= ubs_mem_shm_delete(g_invalidName);
ASSERT_EQ(ret1, static_cast<int32_t>(UBS_ERR_NULL_POINTER));
ASSERT_EQ(ret2, static_cast<int32_t>(UBS_ERR_INVALID_ARG));
MOCKER_CPP(ubse_invoke_call).stubs().will(returnValue(UBSE_ERROR_INVAL));
auto ret = ubs_mem_shm_delete(g_validName);
ASSERT_EQ(ret, static_cast<int32_t>(UBS_ENGINE_ERR_INVALID_PARAM));
GlobalMockObject::verify();
MOCKER_CPP(ubse_invoke_call).stubs().will(returnValue(UBSE_OK));
ret = ubs_mem_shm_delete(g_validName);
ASSERT_EQ(ret, static_cast<int32_t>(UBS_SUCCESS));
}
TEST_F(TestUbsEngineMem, UbsMemShmFaultGetForAllSchene)
{
auto ret1 = ubs_mem_shm_fault_get(g_nullName, g_nullFault);
auto ret2 = ubs_mem_shm_fault_get(g_emptyName, g_nullFault);
ret2 &= ubs_mem_shm_fault_get(g_invalidName, g_nullFault);
ASSERT_EQ(ret1, static_cast<int32_t>(UBS_ERR_NULL_POINTER));
ASSERT_EQ(ret2, static_cast<int32_t>(UBS_ERR_INVALID_ARG));
auto ret3 = ubs_mem_shm_fault_get(g_validName, g_nullFault);
ASSERT_EQ(ret3, static_cast<int32_t>(UBS_ERR_NULL_POINTER));
MOCKER_CPP(ubse_invoke_call).stubs().will(returnValue(UBSE_ERROR_INVAL));
auto ret = ubs_mem_shm_fault_get(g_validName, &g_validFault);
ASSERT_EQ(ret, static_cast<int32_t>(UBS_ENGINE_ERR_INVALID_PARAM));
GlobalMockObject::verify();
ubse_api_buffer_t smallRespBuffer = {.buffer = static_cast<uint8_t*>(malloc(1)), .length = 1};
MOCKER_CPP(ubse_invoke_call).stubs().with(_, _, _, outBound(&smallRespBuffer)).will(returnValue(UBSE_OK));
ret = ubs_mem_shm_fault_get(g_validName, &g_validFault);
ASSERT_EQ(ret, static_cast<int32_t>(UBS_ERR_BUFFER_TOO_SMALL));
GlobalMockObject::verify();
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(sizeof(uint64_t) + NO_2 * sizeof(uint32_t)));
respBuffer.length = sizeof(uint64_t) + NO_2 * sizeof(uint32_t);
uint32_t cnt = 1;
if (memcpy_s(respBuffer.buffer, respBuffer.length, &cnt, sizeof(uint32_t)) != EOK) {
free(respBuffer.buffer);
respBuffer.buffer = nullptr;
respBuffer.length = 0;
}
MOCKER_CPP(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
ret = ubs_mem_shm_fault_get(g_validName, &g_validFault);
ASSERT_EQ(ret, static_cast<int32_t>(UBS_SUCCESS));
}
TEST_F(TestUbsEngineMem, UbsMemShmFaultRegisterForAllSchene)
{
ubs_mem_shm_fault_handler handler = [](const char* name, uint64_t memid, ubs_mem_fault_type_t type) {
return 0;
};
MOCKER_CPP(ubse_long_link_connect).stubs().will(returnValue(UBSE_ERROR_INVAL));
auto ret = ubs_mem_shm_fault_register(handler);
ASSERT_EQ(ret, static_cast<int32_t>(UBSE_ERROR_INVAL));
GlobalMockObject::verify();
MOCKER_CPP(ubse_long_link_connect).stubs().will(returnValue(UBSE_OK));
MOCKER_CPP(ubse_shm_fault_register).stubs().will(returnValue(UBSE_OK));
ret = ubs_mem_shm_fault_register(handler);
ASSERT_EQ(ret, static_cast<int32_t>(UBSE_OK));
}
std::vector<mem::def::UbseMemShmDesc> BuildShmDescList()
{
std::vector<mem::def::UbseMemShmDesc> shmDescs{};
mem::def::UbseMemShmDesc desc1;
desc1.name = "shm1";
desc1.totalMemSize = 128 * 1024 * 1024;
desc1.unitSize = 128 * 1024 * 1024;
desc1.exportNode = UbseNode{.slotId = 1};
mem::def::UbseMemShmImportDesc importDesc1;
importDesc1.memIds = {1, 2, 3};
importDesc1.importNode = UbseNode{.slotId = 2};
importDesc1.state = ubse::mem::controller::UbseMemStage::UBSE_EXIST;
desc1.importDesc.push_back(importDesc1);
desc1.state = ubse::mem::controller::UbseMemStage::UBSE_EXIST;
shmDescs.push_back(desc1);
auto desc2 = desc1;
desc2.name = "shm2";
shmDescs.push_back(desc2);
return shmDescs;
}
TEST_F(TestUbsEngineMem, UbsMemShmListWithPrefixTest_NormalCase)
{
const char* name_prefix = "test_prefix";
ubs_mem_shm_desc_t* shm_descs = nullptr;
uint32_t shm_desc_cnt = 0;
auto shmList = BuildShmDescList();
ipc::UbseIpcMessage respMessage{};
auto ret = UbseMemShmListResponsePack(shmList, respMessage);
EXPECT_EQ(ret, UBSE_OK);
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(respMessage.length));
respBuffer.length = respMessage.length;
if (memcpy_s(respBuffer.buffer, respBuffer.length, respMessage.buffer, respMessage.length) != EOK) {
free(respBuffer.buffer);
respBuffer.buffer = nullptr;
respBuffer.length = 0;
}
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
ret = ubs_mem_shm_list_with_prefix(name_prefix, &shm_descs, &shm_desc_cnt);
EXPECT_EQ(ret, UBS_SUCCESS);
EXPECT_GT(shm_desc_cnt, 0);
if (shm_descs != nullptr) {
free(shm_descs);
}
}
TEST_F(TestUbsEngineMem, UbsMemShmListWithPrefixTest_NullPointerCase)
{
const char* name_prefix = "test_prefix";
ubs_mem_shm_desc_t* shm_descs = nullptr;
uint32_t* shm_desc_cnt = nullptr;
int32_t ret = ubs_mem_shm_list_with_prefix(name_prefix, &shm_descs, shm_desc_cnt);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
}
TEST_F(TestUbsEngineMem, UbsMemShmListWithPrefixTest_InvalidPrefixCase)
{
const char* name_prefix = nullptr;
ubs_mem_shm_desc_t* shm_descs = nullptr;
uint32_t shm_desc_cnt = 0;
int32_t ret = ubs_mem_shm_list_with_prefix(name_prefix, &shm_descs, &shm_desc_cnt);
EXPECT_NE(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbsMemShmListWithPrefixTest_IpcFailureCase)
{
const char* name_prefix = "test_prefix";
ubs_mem_shm_desc_t* shm_descs = nullptr;
uint32_t shm_desc_cnt = 0;
ubse_api_buffer_t respBuffer{nullptr, 0};
MOCKER(ubse_invoke_call)
.stubs()
.with(_, _, _, outBoundP(&respBuffer))
.will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
int32_t ret = ubs_mem_shm_list_with_prefix(name_prefix, &shm_descs, &shm_desc_cnt);
EXPECT_NE(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbsMemShmListWithPrefixTest_UnpackFailureCase)
{
const char* name_prefix = "test_prefix";
ubs_mem_shm_desc_t* shm_descs = nullptr;
uint32_t shm_desc_cnt = 0;
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(1));
respBuffer.length = 1;
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
int32_t ret = ubs_mem_shm_list_with_prefix(name_prefix, &shm_descs, &shm_desc_cnt);
EXPECT_NE(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbsMemFdGetMemidByImportTest_ValidParameters)
{
const char* name = "test_fd_memory";
uint64_t import_memid = 0x1234567890ABCDEF;
ubs_mem_export_memid_t mem_info{};
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(sizeof(uint32_t) + sizeof(uint64_t)));
respBuffer.length = sizeof(uint32_t) + sizeof(uint64_t);
uint32_t expected_slot_id = 123;
uint64_t expected_memid = 0x9876543210FEDCBA;
uint8_t* ptr = respBuffer.buffer;
memcpy(ptr, &expected_slot_id, sizeof(uint32_t));
ptr += sizeof(uint32_t);
memcpy(ptr, &expected_memid, sizeof(uint64_t));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
int32_t ret = ubs_mem_fd_get_memid_by_import(name, import_memid, &mem_info);
EXPECT_EQ(ret, UBS_SUCCESS);
EXPECT_EQ(mem_info.export_slot_id, expected_slot_id);
EXPECT_EQ(mem_info.export_memid, expected_memid);
}
TEST_F(TestUbsEngineMem, UbsMemFdGetMemidByImportTest_NullName)
{
const char* name = nullptr;
uint64_t import_memid = 0x1234567890ABCDEF;
ubs_mem_export_memid_t mem_info{};
int32_t ret = ubs_mem_fd_get_memid_by_import(name, import_memid, &mem_info);
EXPECT_NE(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbsMemFdGetMemidByImportTest_NullMemInfo)
{
const char* name = "test_fd_memory";
uint64_t import_memid = 0x1234567890ABCDEF;
ubs_mem_export_memid_t* mem_info = nullptr;
int32_t ret = ubs_mem_fd_get_memid_by_import(name, import_memid, mem_info);
EXPECT_EQ(ret, UBS_ERR_NULL_POINTER);
}
TEST_F(TestUbsEngineMem, UbsMemNumaGetMemidByImportTest_ValidParameters)
{
const char* name = "test_numa_memory";
uint64_t import_memid = 0x1234567890ABCDEF;
ubs_mem_export_memid_t mem_info{};
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(sizeof(uint32_t) + sizeof(uint64_t)));
respBuffer.length = sizeof(uint32_t) + sizeof(uint64_t);
uint32_t expected_slot_id = 456;
uint64_t expected_memid = 0xABCDEF0123456789;
uint8_t* ptr = respBuffer.buffer;
memcpy(ptr, &expected_slot_id, sizeof(uint32_t));
ptr += sizeof(uint32_t);
memcpy(ptr, &expected_memid, sizeof(uint64_t));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
int32_t ret = ubs_mem_numa_get_memid_by_import(name, import_memid, &mem_info);
EXPECT_EQ(ret, UBS_SUCCESS);
EXPECT_EQ(mem_info.export_slot_id, expected_slot_id);
EXPECT_EQ(mem_info.export_memid, expected_memid);
}
TEST_F(TestUbsEngineMem, UbsMemShmGetMemidByImportTest_ValidParameters)
{
const char* name = "test_shm_memory";
uint64_t import_memid = 0x1234567890ABCDEF;
ubs_mem_export_memid_t mem_info{};
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(sizeof(uint32_t) + sizeof(uint64_t)));
respBuffer.length = sizeof(uint32_t) + sizeof(uint64_t);
uint32_t expected_slot_id = 789;
uint64_t expected_memid = 0xFEDCBA0987654321;
uint8_t* ptr = respBuffer.buffer;
memcpy(ptr, &expected_slot_id, sizeof(uint32_t));
ptr += sizeof(uint32_t);
memcpy(ptr, &expected_memid, sizeof(uint64_t));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
int32_t ret = ubs_mem_shm_get_memid_by_import(name, import_memid, &mem_info);
EXPECT_EQ(ret, UBS_SUCCESS);
EXPECT_EQ(mem_info.export_slot_id, expected_slot_id);
EXPECT_EQ(mem_info.export_memid, expected_memid);
}
TEST_F(TestUbsEngineMem, UbsMemGetMemidByImportTest_IpcFailure)
{
const char* name = "test_memory";
uint64_t import_memid = 0x1234567890ABCDEF;
ubs_mem_export_memid_t mem_info{};
ubse_api_buffer_t respBuffer{};
MOCKER(ubse_invoke_call)
.stubs()
.with(_, _, _, outBoundP(&respBuffer))
.will(returnValue(UBSE_ERR_IPC_CONNECTION_FAILED));
int32_t ret = ubs_mem_fd_get_memid_by_import(name, import_memid, &mem_info);
EXPECT_NE(ret, UBS_SUCCESS);
}
TEST_F(TestUbsEngineMem, UbsMemGetMemidByImportTest_UnpackFailure)
{
const char* name = "test_memory";
uint64_t import_memid = 0x1234567890ABCDEF;
ubs_mem_export_memid_t mem_info{};
ubse_api_buffer_t respBuffer{};
respBuffer.buffer = static_cast<uint8_t*>(malloc(sizeof(uint32_t)));
respBuffer.length = sizeof(uint32_t);
uint32_t dummy_slot_id = 123;
memcpy(respBuffer.buffer, &dummy_slot_id, sizeof(uint32_t));
MOCKER(ubse_invoke_call).stubs().with(_, _, _, outBoundP(&respBuffer)).will(returnValue(UBSE_OK));
int32_t ret = ubs_mem_fd_get_memid_by_import(name, import_memid, &mem_info);
EXPECT_NE(ret, UBS_SUCCESS);
}
}