blob: 6d8a69f0edf41847b6426cf3078e39830cf70536 [file] [edit]
/*
* SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION &
* AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0
*/
#include "base.h"
#include "diagnostics.h"
#include <cstring>
#include <gtest/gtest.h>
#include <vector>
// Tests for encode_reset_count_256data
TEST(DiagnosticsHelpersTest, EncodeResetCount256dataValid)
{
uint64_t counter[4] = {0x123456789ABCDEF0ULL, 0xFEDCBA9876543210ULL,
0x1111111111111111ULL, 0x2222222222222222ULL};
std::vector<uint8_t> data(32);
size_t data_len = 0;
int rc = encode_reset_count_256data(counter, data.data(), &data_len);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(data_len, 32u);
}
TEST(DiagnosticsHelpersTest, EncodeResetCount256dataNullData)
{
uint64_t counter[4] = {1, 2, 3, 4};
size_t data_len = 0;
int rc = encode_reset_count_256data(counter, nullptr, &data_len);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, EncodeResetCount256dataNullDataLen)
{
uint64_t counter[4] = {1, 2, 3, 4};
std::vector<uint8_t> data(32);
int rc = encode_reset_count_256data(counter, data.data(), nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, EncodeDecodeResetCount256dataRoundTrip)
{
uint64_t counter[4] = {0xAAAAAAAAAAAAAAAAULL, 0xBBBBBBBBBBBBBBBBULL,
0xCCCCCCCCCCCCCCCCULL, 0xDDDDDDDDDDDDDDDDULL};
std::vector<uint8_t> data(32);
size_t data_len = 0;
uint64_t decoded_counter[4] = {0};
// Encode
int rc = encode_reset_count_256data(counter, data.data(), &data_len);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
// Decode
rc = decode_reset_count_256data(data.data(), data_len, decoded_counter,
4);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
// Verify
for (int i = 0; i < 4; i++) {
EXPECT_EQ(counter[i], decoded_counter[i]);
}
}
// Tests for decode_reset_count_256data
TEST(DiagnosticsHelpersTest, DecodeResetCount256dataValid)
{
std::vector<uint8_t> data(32, 0);
uint64_t counter[4] = {0};
int rc = decode_reset_count_256data(data.data(), 32, counter, 4);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
}
TEST(DiagnosticsHelpersTest, DecodeResetCount256dataNullData)
{
uint64_t counter[4] = {0};
int rc = decode_reset_count_256data(nullptr, 32, counter, 4);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeResetCount256dataNullCounter)
{
std::vector<uint8_t> data(32, 0);
int rc = decode_reset_count_256data(data.data(), 32, nullptr, 4);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeResetCount256dataInvalidCounterLen)
{
std::vector<uint8_t> data(32, 0);
uint64_t counter[4] = {0};
int rc = decode_reset_count_256data(data.data(), 32, counter, 3);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeResetCount256dataInvalidDataLen)
{
std::vector<uint8_t> data(16, 0);
uint64_t counter[4] = {0};
int rc = decode_reset_count_256data(data.data(), 16, counter, 4);
EXPECT_EQ(rc, NSM_SW_ERROR_LENGTH);
}
// Tests for encode_reset_enum_data
TEST(DiagnosticsHelpersTest, EncodeResetEnumDataValid)
{
uint8_t resetType = 0x05;
uint8_t data = 0;
size_t data_len = 0;
int rc = encode_reset_enum_data(resetType, &data, &data_len);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(data, 0x05);
EXPECT_EQ(data_len, sizeof(uint8_t));
}
TEST(DiagnosticsHelpersTest, EncodeResetEnumDataNullData)
{
uint8_t resetType = 0x05;
size_t data_len = 0;
int rc = encode_reset_enum_data(resetType, nullptr, &data_len);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, EncodeResetEnumDataNullDataLen)
{
uint8_t resetType = 0x05;
uint8_t data = 0;
int rc = encode_reset_enum_data(resetType, &data, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, EncodeDecodeResetEnumDataRoundTrip)
{
uint8_t resetType = 0xAB;
uint8_t data = 0;
size_t data_len = 0;
// Encode
int rc = encode_reset_enum_data(resetType, &data, &data_len);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
// Decode
uint8_t decoded_resetType = 0;
rc = decode_reset_enum_data(&data, data_len, &decoded_resetType);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(decoded_resetType, resetType);
}
// Tests for encode_reset_count_data
TEST(DiagnosticsHelpersTest, EncodeResetCountDataValid)
{
uint16_t count = 0x1234;
uint8_t data[2] = {0};
size_t data_len = 0;
int rc = encode_reset_count_data(count, data, &data_len);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(data_len, sizeof(uint16_t));
// Verify little-endian encoding
EXPECT_EQ(data[0], 0x34);
EXPECT_EQ(data[1], 0x12);
}
TEST(DiagnosticsHelpersTest, EncodeResetCountDataNullData)
{
uint16_t count = 0x1234;
size_t data_len = 0;
int rc = encode_reset_count_data(count, nullptr, &data_len);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, EncodeResetCountDataNullDataLen)
{
uint16_t count = 0x1234;
uint8_t data[2] = {0};
int rc = encode_reset_count_data(count, data, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, EncodeDecodeResetCountDataRoundTrip)
{
uint16_t count = 0xABCD;
uint8_t data[2] = {0};
size_t data_len = 0;
// Encode
int rc = encode_reset_count_data(count, data, &data_len);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
// Decode
uint16_t decoded_count = 0;
rc = decode_reset_count_data(data, data_len, &decoded_count);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(decoded_count, count);
}
// Tests for decode_reset_enum_data
TEST(DiagnosticsHelpersTest, DecodeResetEnumDataValid)
{
uint8_t data = 0x05;
uint8_t resetType = 0;
int rc = decode_reset_enum_data(&data, sizeof(uint8_t), &resetType);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(resetType, 0x05);
}
TEST(DiagnosticsHelpersTest, DecodeResetEnumDataNullData)
{
uint8_t resetType = 0;
int rc = decode_reset_enum_data(nullptr, sizeof(uint8_t), &resetType);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeResetEnumDataNullResetType)
{
uint8_t data = 0x05;
int rc = decode_reset_enum_data(&data, sizeof(uint8_t), nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeResetEnumDataInvalidLength)
{
uint8_t data = 0x05;
uint8_t resetType = 0;
int rc = decode_reset_enum_data(&data, 2, &resetType);
EXPECT_EQ(rc, NSM_SW_ERROR_LENGTH);
}
// Tests for decode_reset_count_data
TEST(DiagnosticsHelpersTest, DecodeResetCountDataValid)
{
uint8_t data[2] = {0x34, 0x12}; // Little-endian 0x1234
uint16_t count = 0;
int rc = decode_reset_count_data(data, sizeof(uint16_t), &count);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(count, 0x1234);
}
TEST(DiagnosticsHelpersTest, DecodeResetCountDataNullData)
{
uint16_t count = 0;
int rc = decode_reset_count_data(nullptr, sizeof(uint16_t), &count);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeResetCountDataNullCount)
{
uint8_t data[2] = {0x34, 0x12};
int rc = decode_reset_count_data(data, sizeof(uint16_t), nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeResetCountDataInvalidLength)
{
uint8_t data[2] = {0x34, 0x12};
uint16_t count = 0;
int rc = decode_reset_count_data(data, 1, &count);
EXPECT_EQ(rc, NSM_SW_ERROR_LENGTH);
}
// Tests for encode_get_device_debug_parameters_req
TEST(DiagnosticsHelpersTest, EncodeGetDeviceDebugParametersReqValid)
{
std::vector<uint8_t> requestMsg(
sizeof(nsm_msg_hdr) + sizeof(nsm_get_device_debug_parameters_req));
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
uint8_t instance_id = 5;
uint8_t debug_config_type = 0x01;
struct nsm_debug_parameter_id param_id = {};
param_id.port_number = 0x1234;
param_id.index = 0x56;
nsm_debug_parameter_sub_id_bitfield sub_id = {};
sub_id.value = 0xABCD;
int rc = encode_get_device_debug_parameters_req(
instance_id, debug_config_type, param_id, sub_id, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
auto *req =
reinterpret_cast<struct nsm_get_device_debug_parameters_req *>(
msg->payload);
EXPECT_EQ(req->debug_configuration_type, debug_config_type);
}
TEST(DiagnosticsHelpersTest, EncodeGetDeviceDebugParametersReqNullMsg)
{
uint8_t instance_id = 5;
uint8_t debug_config_type = 0x01;
struct nsm_debug_parameter_id param_id = {};
nsm_debug_parameter_sub_id_bitfield sub_id = {};
int rc = encode_get_device_debug_parameters_req(
instance_id, debug_config_type, param_id, sub_id, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, EncodeDecodeGetDeviceDebugParametersReqRoundTrip)
{
std::vector<uint8_t> requestMsg(
sizeof(nsm_msg_hdr) + sizeof(nsm_get_device_debug_parameters_req));
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
uint8_t instance_id = 7;
uint8_t debug_config_type = 0x02;
struct nsm_debug_parameter_id param_id = {};
param_id.port_number = 0x9876;
param_id.index = 0xAB;
nsm_debug_parameter_sub_id_bitfield sub_id = {};
sub_id.value = 0x12345678;
// Encode
int rc = encode_get_device_debug_parameters_req(
instance_id, debug_config_type, param_id, sub_id, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
// Decode
uint8_t decoded_config_type = 0;
struct nsm_debug_parameter_id decoded_param_id = {};
nsm_debug_parameter_sub_id_bitfield decoded_sub_id = {};
size_t msg_len =
sizeof(nsm_msg_hdr) + sizeof(nsm_get_device_debug_parameters_req);
rc = decode_get_device_debug_parameters_req(
msg, msg_len, &decoded_config_type, &decoded_param_id,
&decoded_sub_id);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(decoded_config_type, debug_config_type);
EXPECT_EQ(decoded_param_id.port_number, param_id.port_number);
EXPECT_EQ(decoded_param_id.index, param_id.index);
EXPECT_EQ(decoded_sub_id.value, sub_id.value);
}
// Tests for decode_get_device_debug_parameters_req
TEST(DiagnosticsHelpersTest, DecodeGetDeviceDebugParametersReqNullMsg)
{
uint8_t debug_config_type = 0;
struct nsm_debug_parameter_id param_id = {};
nsm_debug_parameter_sub_id_bitfield sub_id = {};
size_t msg_len =
sizeof(nsm_msg_hdr) + sizeof(nsm_get_device_debug_parameters_req);
int rc = decode_get_device_debug_parameters_req(
nullptr, msg_len, &debug_config_type, &param_id, &sub_id);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeGetDeviceDebugParametersReqNullOutputs)
{
std::vector<uint8_t> requestMsg(
sizeof(nsm_msg_hdr) + sizeof(nsm_get_device_debug_parameters_req));
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
size_t msg_len =
sizeof(nsm_msg_hdr) + sizeof(nsm_get_device_debug_parameters_req);
int rc = decode_get_device_debug_parameters_req(msg, msg_len, nullptr,
nullptr, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
// Tests for encode_get_device_debug_parameters_resp
TEST(DiagnosticsHelpersTest, EncodeGetDeviceDebugParametersRespValidSuccess)
{
std::vector<uint8_t> responseMsg(
sizeof(nsm_msg_hdr) + sizeof(nsm_get_device_debug_parameters_resp) +
16);
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t instance_id = 3;
uint8_t cc = NSM_SUCCESS;
uint16_t reason_code = 0x0000;
uint16_t data_size = 16;
std::vector<uint8_t> data(16, 0xAA);
int rc = encode_get_device_debug_parameters_resp(
instance_id, cc, reason_code, &data_size, data.data(), msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
auto *resp =
reinterpret_cast<struct nsm_get_device_debug_parameters_resp *>(
msg->payload);
EXPECT_EQ(resp->hdr.command, NSM_GET_DEVICE_DEBUG_PARAMETERS);
EXPECT_EQ(resp->hdr.completion_code, cc);
}
TEST(DiagnosticsHelpersTest, EncodeGetDeviceDebugParametersRespNullParams)
{
uint8_t instance_id = 3;
uint8_t cc = NSM_SUCCESS;
uint16_t reason_code = 0x0000;
int rc = encode_get_device_debug_parameters_resp(
instance_id, cc, reason_code, nullptr, nullptr, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, EncodeGetDeviceDebugParametersRespErrorCode)
{
std::vector<uint8_t> responseMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_common_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t instance_id = 3;
uint8_t cc = NSM_ERROR;
uint16_t reason_code = 0x1234;
uint16_t data_size = 16;
std::vector<uint8_t> data(16, 0xAA);
// When cc != NSM_SUCCESS, function encodes reason_code only
int rc = encode_get_device_debug_parameters_resp(
instance_id, cc, reason_code, &data_size, data.data(), msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
auto *resp = reinterpret_cast<struct nsm_common_resp *>(msg->payload);
EXPECT_EQ(resp->completion_code, cc);
}
// Tests for decode_get_device_debug_parameters_resp
TEST(DiagnosticsHelpersTest, DecodeGetDeviceDebugParametersRespValid)
{
std::vector<uint8_t> responseMsg(
sizeof(nsm_msg_hdr) + sizeof(nsm_get_device_debug_parameters_resp) +
16);
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t instance_id = 3;
uint8_t cc = NSM_SUCCESS;
uint16_t reason_code = 0x0000;
uint16_t data_size = 16;
std::vector<uint8_t> data(16, 0xBB);
encode_get_device_debug_parameters_resp(instance_id, cc, reason_code,
&data_size, data.data(), msg);
uint8_t decoded_cc = 0;
uint16_t decoded_data_size = 0;
std::vector<uint8_t> decoded_data(16);
size_t msg_len = sizeof(nsm_msg_hdr) +
sizeof(nsm_get_device_debug_parameters_resp) + 16;
int rc = decode_get_device_debug_parameters_resp(
msg, msg_len, &decoded_cc, &decoded_data_size, decoded_data.data());
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(decoded_cc, cc);
EXPECT_EQ(decoded_data_size, data_size);
}
TEST(DiagnosticsHelpersTest, DecodeGetDeviceDebugParametersRespNullMsg)
{
uint8_t cc = 0;
uint16_t data_size = 0;
std::vector<uint8_t> data(16);
size_t msg_len =
sizeof(nsm_msg_hdr) + sizeof(nsm_get_device_debug_parameters_resp);
int rc = decode_get_device_debug_parameters_resp(
nullptr, msg_len, &cc, &data_size, data.data());
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeGetDeviceDebugParametersRespNullOutputs)
{
std::vector<uint8_t> responseMsg(
sizeof(nsm_msg_hdr) + sizeof(nsm_get_device_debug_parameters_resp) +
16);
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
size_t msg_len =
sizeof(nsm_msg_hdr) + sizeof(nsm_get_device_debug_parameters_resp);
int rc = decode_get_device_debug_parameters_resp(msg, msg_len, nullptr,
nullptr, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeGetDeviceDebugParametersRespInvalidLength)
{
std::vector<uint8_t> responseMsg(10);
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t cc = 0;
uint16_t data_size = 0;
std::vector<uint8_t> data(16);
int rc = decode_get_device_debug_parameters_resp(
msg, 10, &cc, &data_size, data.data());
EXPECT_EQ(rc, NSM_SW_ERROR_LENGTH);
}
// Tests for encode_set_device_debug_parameters_req
TEST(DiagnosticsHelpersTest, EncodeSetDeviceDebugParametersReqValid)
{
std::vector<uint8_t> requestMsg(
sizeof(nsm_msg_hdr) + sizeof(nsm_set_device_debug_parameters_req) +
16);
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
uint8_t instance_id = 9;
uint8_t debug_config_type = 0x03;
struct nsm_debug_parameter_id param_id = {};
param_id.port_number = 0x5678;
param_id.index = 0xCD;
nsm_debug_parameter_sub_id_bitfield sub_id = {};
sub_id.value = 0x87654321;
uint8_t data_size = 16;
std::vector<uint8_t> data(16, 0xCC);
int rc = encode_set_device_debug_parameters_req(
instance_id, debug_config_type, param_id, sub_id, data_size,
data.data(), msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
auto *req =
reinterpret_cast<struct nsm_set_device_debug_parameters_req *>(
msg->payload);
EXPECT_EQ(req->debug_configuration_type, debug_config_type);
EXPECT_EQ(req->data_size, data_size);
}
TEST(DiagnosticsHelpersTest, EncodeSetDeviceDebugParametersReqNullMsg)
{
uint8_t instance_id = 9;
uint8_t debug_config_type = 0x03;
struct nsm_debug_parameter_id param_id = {};
nsm_debug_parameter_sub_id_bitfield sub_id = {};
uint8_t data_size = 16;
std::vector<uint8_t> data(16, 0xCC);
int rc = encode_set_device_debug_parameters_req(
instance_id, debug_config_type, param_id, sub_id, data_size,
data.data(), nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, EncodeSetDeviceDebugParametersReqNullData)
{
std::vector<uint8_t> requestMsg(
sizeof(nsm_msg_hdr) + sizeof(nsm_set_device_debug_parameters_req) +
16);
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
uint8_t instance_id = 9;
uint8_t debug_config_type = 0x03;
struct nsm_debug_parameter_id param_id = {};
nsm_debug_parameter_sub_id_bitfield sub_id = {};
uint8_t data_size = 16;
int rc = encode_set_device_debug_parameters_req(
instance_id, debug_config_type, param_id, sub_id, data_size,
nullptr, msg);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
// Tests for decode_set_device_debug_parameters_req
TEST(DiagnosticsHelpersTest, DISABLED_DecodeSetDeviceDebugParametersReqValid)
{
std::vector<uint8_t> requestMsg(
sizeof(nsm_msg_hdr) + sizeof(nsm_set_device_debug_parameters_req) +
16);
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
uint8_t instance_id = 11;
uint8_t debug_config_type = 0x04;
struct nsm_debug_parameter_id param_id = {};
param_id.port_number = 0xABCD;
param_id.index = 0xEF;
nsm_debug_parameter_sub_id_bitfield sub_id = {};
sub_id.value = 0xDEADBEEF;
uint8_t data_size = 16;
std::vector<uint8_t> data(16, 0xDD);
encode_set_device_debug_parameters_req(instance_id, debug_config_type,
param_id, sub_id, data_size,
data.data(), msg);
uint8_t decoded_config_type = 0;
struct nsm_debug_parameter_id decoded_param_id = {};
nsm_debug_parameter_sub_id_bitfield decoded_sub_id = {};
uint8_t decoded_data_size = 0;
std::vector<uint8_t> decoded_data(16);
uint8_t *decoded_data_ptr = decoded_data.data();
size_t msg_len = sizeof(nsm_msg_hdr) +
sizeof(nsm_set_device_debug_parameters_req) + 16;
int rc = decode_set_device_debug_parameters_req(
msg, msg_len, &decoded_config_type, &decoded_param_id,
&decoded_sub_id, &decoded_data_size, &decoded_data_ptr);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(decoded_config_type, debug_config_type);
EXPECT_EQ(decoded_param_id.port_number, param_id.port_number);
EXPECT_EQ(decoded_param_id.index, param_id.index);
EXPECT_EQ(decoded_sub_id.value, sub_id.value);
EXPECT_EQ(decoded_data_size, data_size);
}
TEST(DiagnosticsHelpersTest, DecodeSetDeviceDebugParametersReqNullMsg)
{
uint8_t debug_config_type = 0;
struct nsm_debug_parameter_id param_id = {};
nsm_debug_parameter_sub_id_bitfield sub_id = {};
uint8_t data_size = 0;
std::vector<uint8_t> data(16);
uint8_t *data_ptr = data.data();
size_t msg_len =
sizeof(nsm_msg_hdr) + sizeof(nsm_set_device_debug_parameters_req);
int rc = decode_set_device_debug_parameters_req(
nullptr, msg_len, &debug_config_type, &param_id, &sub_id,
&data_size, &data_ptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeSetDeviceDebugParametersReqNullOutputs)
{
std::vector<uint8_t> requestMsg(
sizeof(nsm_msg_hdr) + sizeof(nsm_set_device_debug_parameters_req) +
16);
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
size_t msg_len =
sizeof(nsm_msg_hdr) + sizeof(nsm_set_device_debug_parameters_req);
int rc = decode_set_device_debug_parameters_req(
msg, msg_len, nullptr, nullptr, nullptr, nullptr, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
// Tests for decode_set_device_debug_parameters_resp
TEST(DiagnosticsHelpersTest, DecodeSetDeviceDebugParametersRespValid)
{
std::vector<uint8_t> responseMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_common_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
auto *resp = reinterpret_cast<struct nsm_common_resp *>(msg->payload);
resp->command = NSM_SET_DEVICE_DEBUG_PARAMETERS;
resp->completion_code = NSM_SUCCESS;
uint8_t cc = 0;
size_t msg_len = sizeof(nsm_msg_hdr) + sizeof(nsm_common_resp);
int rc = decode_set_device_debug_parameters_resp(msg, msg_len, &cc);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(cc, NSM_SUCCESS);
}
TEST(DiagnosticsHelpersTest, DecodeSetDeviceDebugParametersRespNullMsg)
{
uint8_t cc = 0;
size_t msg_len = sizeof(nsm_msg_hdr) + sizeof(nsm_common_resp);
int rc = decode_set_device_debug_parameters_resp(nullptr, msg_len, &cc);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeSetDeviceDebugParametersRespNullCc)
{
std::vector<uint8_t> responseMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_common_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
size_t msg_len = sizeof(nsm_msg_hdr) + sizeof(nsm_common_resp);
int rc = decode_set_device_debug_parameters_resp(msg, msg_len, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeSetDeviceDebugParametersRespInvalidLength)
{
std::vector<uint8_t> responseMsg(10);
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t cc = 0;
int rc = decode_set_device_debug_parameters_resp(msg, 5, &cc);
EXPECT_EQ(rc, NSM_SW_ERROR_LENGTH);
}
// Tests for encode_get_network_device_debug_info_resp and
// decode_get_network_device_debug_info_resp
TEST(DiagnosticsHelpersTest, EncodeGetNetworkDeviceDebugInfoRespValid)
{
std::vector<uint8_t> responseMsg(
sizeof(nsm_msg_hdr) +
sizeof(nsm_get_network_device_debug_info_resp) + 16);
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t instance_id = 0x15;
uint8_t cc = NSM_SUCCESS;
uint16_t reason_code = 0;
std::vector<uint8_t> seg_data = {0x01, 0x02, 0x03, 0x04, 0x05};
uint16_t seg_data_size = seg_data.size();
uint32_t next_handle = 0x12345678;
int rc = encode_get_network_device_debug_info_resp(
instance_id, cc, reason_code, seg_data.data(), seg_data_size,
next_handle, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
}
TEST(DiagnosticsHelpersTest, EncodeGetNetworkDeviceDebugInfoRespNullMsg)
{
uint8_t instance_id = 0x15;
uint8_t cc = NSM_SUCCESS;
uint16_t reason_code = 0;
std::vector<uint8_t> seg_data = {0x01, 0x02, 0x03};
uint16_t seg_data_size = seg_data.size();
uint32_t next_handle = 0x12345678;
int rc = encode_get_network_device_debug_info_resp(
instance_id, cc, reason_code, seg_data.data(), seg_data_size,
next_handle, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, EncodeGetNetworkDeviceDebugInfoRespNullSegData)
{
std::vector<uint8_t> responseMsg(
sizeof(nsm_msg_hdr) +
sizeof(nsm_get_network_device_debug_info_resp) + 16);
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t instance_id = 0x15;
uint8_t cc = NSM_SUCCESS;
uint16_t reason_code = 0;
uint16_t seg_data_size = 5;
uint32_t next_handle = 0x12345678;
int rc = encode_get_network_device_debug_info_resp(
instance_id, cc, reason_code, nullptr, seg_data_size, next_handle,
msg);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, EncodeGetNetworkDeviceDebugInfoRespErrorCc)
{
std::vector<uint8_t> responseMsg(
sizeof(nsm_msg_hdr) +
sizeof(nsm_get_network_device_debug_info_resp) + 16);
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t instance_id = 0x15;
uint8_t cc = NSM_ERROR;
uint16_t reason_code = 0x1234;
std::vector<uint8_t> seg_data = {0x01, 0x02, 0x03};
uint16_t seg_data_size = seg_data.size();
uint32_t next_handle = 0x12345678;
int rc = encode_get_network_device_debug_info_resp(
instance_id, cc, reason_code, seg_data.data(), seg_data_size,
next_handle, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
}
TEST(DiagnosticsHelpersTest, DecodeGetNetworkDeviceDebugInfoRespValid)
{
std::vector<uint8_t> responseMsg(
sizeof(nsm_msg_hdr) +
sizeof(nsm_get_network_device_debug_info_resp) + 16);
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t instance_id = 0x15;
uint8_t cc_in = NSM_SUCCESS;
uint16_t reason_code_in = 0;
std::vector<uint8_t> seg_data_in = {0xAA, 0xBB, 0xCC, 0xDD};
uint16_t seg_data_size_in = seg_data_in.size();
uint32_t next_handle_in = 0x87654321;
int rc = encode_get_network_device_debug_info_resp(
instance_id, cc_in, reason_code_in, seg_data_in.data(),
seg_data_size_in, next_handle_in, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
uint8_t cc_out = 0;
uint16_t reason_code_out = 0;
uint16_t seg_data_size_out = 0;
std::vector<uint8_t> seg_data_out(16);
uint32_t next_handle_out = 0;
size_t msg_len = sizeof(nsm_msg_hdr) +
sizeof(nsm_get_network_device_debug_info_resp) +
seg_data_size_in - 1;
rc = decode_get_network_device_debug_info_resp(
msg, msg_len, &cc_out, &reason_code_out, &seg_data_size_out,
seg_data_out.data(), &next_handle_out);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(cc_out, cc_in);
EXPECT_EQ(seg_data_size_out, seg_data_size_in);
EXPECT_EQ(next_handle_out, next_handle_in);
for (int i = 0; i < seg_data_size_in; i++) {
EXPECT_EQ(seg_data_out[i], seg_data_in[i]);
}
}
TEST(DiagnosticsHelpersTest, DecodeGetNetworkDeviceDebugInfoRespNullSegData)
{
std::vector<uint8_t> responseMsg(
sizeof(nsm_msg_hdr) +
sizeof(nsm_get_network_device_debug_info_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t cc = 0;
uint16_t reason_code = 0;
uint16_t seg_data_size = 0;
uint32_t next_handle = 0;
size_t msg_len = responseMsg.size();
int rc = decode_get_network_device_debug_info_resp(
msg, msg_len, &cc, &reason_code, &seg_data_size, nullptr,
&next_handle);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeGetNetworkDeviceDebugInfoRespNullSegDataSize)
{
std::vector<uint8_t> responseMsg(
sizeof(nsm_msg_hdr) +
sizeof(nsm_get_network_device_debug_info_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t cc = 0;
uint16_t reason_code = 0;
std::vector<uint8_t> seg_data(16);
uint32_t next_handle = 0;
size_t msg_len = responseMsg.size();
int rc = decode_get_network_device_debug_info_resp(
msg, msg_len, &cc, &reason_code, nullptr, seg_data.data(),
&next_handle);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeGetNetworkDeviceDebugInfoRespNullNextHandle)
{
std::vector<uint8_t> responseMsg(
sizeof(nsm_msg_hdr) +
sizeof(nsm_get_network_device_debug_info_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t cc = 0;
uint16_t reason_code = 0;
uint16_t seg_data_size = 0;
std::vector<uint8_t> seg_data(16);
size_t msg_len = responseMsg.size();
int rc = decode_get_network_device_debug_info_resp(
msg, msg_len, &cc, &reason_code, &seg_data_size, seg_data.data(),
nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeGetNetworkDeviceDebugInfoRespInvalidLength)
{
std::vector<uint8_t> responseMsg(10);
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t cc = 0;
uint16_t reason_code = 0;
uint16_t seg_data_size = 0;
std::vector<uint8_t> seg_data(16);
uint32_t next_handle = 0;
int rc = decode_get_network_device_debug_info_resp(
msg, 5, &cc, &reason_code, &seg_data_size, seg_data.data(),
&next_handle);
EXPECT_EQ(rc, NSM_SW_ERROR_LENGTH);
}
// Tests for encode_erase_trace_req and decode_erase_trace_req
TEST(DiagnosticsHelpersTest, EncodeEraseTraceReqValid)
{
std::vector<uint8_t> requestMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_trace_req));
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
uint8_t instance_id = 0x1A;
int rc = encode_erase_trace_req(instance_id, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
}
TEST(DiagnosticsHelpersTest, EncodeEraseTraceReqNullMsg)
{
uint8_t instance_id = 0x1A;
int rc = encode_erase_trace_req(instance_id, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeEraseTraceReqValid)
{
std::vector<uint8_t> requestMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_trace_req));
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
uint8_t instance_id = 0x1A;
int rc = encode_erase_trace_req(instance_id, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
rc = decode_erase_trace_req(msg, requestMsg.size());
EXPECT_EQ(rc, NSM_SW_SUCCESS);
}
TEST(DiagnosticsHelpersTest, DecodeEraseTraceReqNullMsg)
{
int rc = decode_erase_trace_req(nullptr, 100);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeEraseTraceReqInvalidLength)
{
std::vector<uint8_t> requestMsg(10);
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
int rc = decode_erase_trace_req(msg, 5);
EXPECT_EQ(rc, NSM_SW_ERROR_LENGTH);
}
TEST(DiagnosticsHelpersTest, DecodeEraseTraceReqInvalidDataSize)
{
std::vector<uint8_t> requestMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_trace_req));
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
auto *request =
reinterpret_cast<struct nsm_erase_trace_req *>(msg->payload);
// Set invalid data_size (should be 0)
request->hdr.data_size = 0x10;
int rc = decode_erase_trace_req(msg, requestMsg.size());
EXPECT_EQ(rc, NSM_SW_ERROR_DATA);
}
// Tests for encode_erase_trace_resp and decode_erase_trace_resp
TEST(DiagnosticsHelpersTest, EncodeEraseTraceRespValid)
{
std::vector<uint8_t> responseMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_trace_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t instance_id = 0x1A;
uint8_t cc = NSM_SUCCESS;
uint16_t reason_code = 0;
uint8_t result_status = 0x01;
int rc = encode_erase_trace_resp(instance_id, cc, reason_code,
result_status, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
}
TEST(DiagnosticsHelpersTest, EncodeEraseTraceRespNullMsg)
{
uint8_t instance_id = 0x1A;
uint8_t cc = NSM_SUCCESS;
uint16_t reason_code = 0;
uint8_t result_status = 0x01;
int rc = encode_erase_trace_resp(instance_id, cc, reason_code,
result_status, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, EncodeEraseTraceRespErrorCc)
{
std::vector<uint8_t> responseMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_trace_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t instance_id = 0x1A;
uint8_t cc = NSM_ERROR;
uint16_t reason_code = 0x5678;
uint8_t result_status = 0x01;
int rc = encode_erase_trace_resp(instance_id, cc, reason_code,
result_status, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
}
TEST(DiagnosticsHelpersTest, DecodeEraseTraceRespValid)
{
std::vector<uint8_t> responseMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_trace_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t instance_id = 0x1A;
uint8_t cc_in = NSM_SUCCESS;
uint16_t reason_code_in = 0;
uint8_t result_status_in = 0xAB;
int rc = encode_erase_trace_resp(instance_id, cc_in, reason_code_in,
result_status_in, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
uint8_t cc_out = 0;
uint16_t reason_code_out = 0;
uint8_t result_status_out = 0;
rc = decode_erase_trace_resp(msg, responseMsg.size(), &cc_out,
&reason_code_out, &result_status_out);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(cc_out, cc_in);
EXPECT_EQ(result_status_out, result_status_in);
}
TEST(DiagnosticsHelpersTest, DecodeEraseTraceRespNullResultStatus)
{
std::vector<uint8_t> responseMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_trace_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t cc = 0;
uint16_t reason_code = 0;
int rc = decode_erase_trace_resp(msg, responseMsg.size(), &cc,
&reason_code, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeEraseTraceRespInvalidLength)
{
std::vector<uint8_t> responseMsg(10);
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t cc = 0;
uint16_t reason_code = 0;
uint8_t result_status = 0;
int rc =
decode_erase_trace_resp(msg, 5, &cc, &reason_code, &result_status);
EXPECT_EQ(rc, NSM_SW_ERROR_LENGTH);
}
// Tests for encode_erase_debug_info_req and decode_erase_debug_info_req
TEST(DiagnosticsHelpersTest, EncodeEraseDebugInfoReqValid)
{
std::vector<uint8_t> requestMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_debug_info_req));
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
uint8_t instance_id = 0x1D;
uint8_t info_type = 0x03;
int rc = encode_erase_debug_info_req(instance_id, info_type, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
}
TEST(DiagnosticsHelpersTest, EncodeEraseDebugInfoReqNullMsg)
{
uint8_t instance_id = 0x1D;
uint8_t info_type = 0x03;
int rc = encode_erase_debug_info_req(instance_id, info_type, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeEraseDebugInfoReqValid)
{
std::vector<uint8_t> requestMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_debug_info_req));
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
uint8_t instance_id = 0x1D;
uint8_t info_type_in = 0x05;
int rc = encode_erase_debug_info_req(instance_id, info_type_in, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
uint8_t info_type_out = 0;
rc =
decode_erase_debug_info_req(msg, requestMsg.size(), &info_type_out);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(info_type_out, info_type_in);
}
TEST(DiagnosticsHelpersTest, DecodeEraseDebugInfoReqNullMsg)
{
uint8_t info_type = 0;
int rc = decode_erase_debug_info_req(nullptr, 100, &info_type);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeEraseDebugInfoReqNullInfoType)
{
std::vector<uint8_t> requestMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_debug_info_req));
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
int rc = decode_erase_debug_info_req(msg, requestMsg.size(), nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeEraseDebugInfoReqInvalidLength)
{
std::vector<uint8_t> requestMsg(10);
auto *msg = reinterpret_cast<struct nsm_msg *>(requestMsg.data());
uint8_t info_type = 0;
int rc = decode_erase_debug_info_req(msg, 5, &info_type);
EXPECT_EQ(rc, NSM_SW_ERROR_LENGTH);
}
// Tests for encode_erase_debug_info_resp and decode_erase_debug_info_resp
TEST(DiagnosticsHelpersTest, EncodeEraseDebugInfoRespValid)
{
std::vector<uint8_t> responseMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_debug_info_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t instance_id = 0x1E;
uint8_t cc = NSM_SUCCESS;
uint16_t reason_code = 0;
uint8_t result_status = 0x02;
int rc = encode_erase_debug_info_resp(instance_id, cc, reason_code,
result_status, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
}
TEST(DiagnosticsHelpersTest, EncodeEraseDebugInfoRespNullMsg)
{
uint8_t instance_id = 0x1E;
uint8_t cc = NSM_SUCCESS;
uint16_t reason_code = 0;
uint8_t result_status = 0x02;
int rc = encode_erase_debug_info_resp(instance_id, cc, reason_code,
result_status, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, EncodeEraseDebugInfoRespErrorCc)
{
std::vector<uint8_t> responseMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_debug_info_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t instance_id = 0x1E;
uint8_t cc = NSM_ERROR;
uint16_t reason_code = 0xABCD;
uint8_t result_status = 0x02;
int rc = encode_erase_debug_info_resp(instance_id, cc, reason_code,
result_status, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
}
TEST(DiagnosticsHelpersTest, DecodeEraseDebugInfoRespValid)
{
std::vector<uint8_t> responseMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_debug_info_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t instance_id = 0x1E;
uint8_t cc_in = NSM_SUCCESS;
uint16_t reason_code_in = 0;
uint8_t result_status_in = 0xCD;
int rc = encode_erase_debug_info_resp(
instance_id, cc_in, reason_code_in, result_status_in, msg);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
uint8_t cc_out = 0;
uint16_t reason_code_out = 0;
uint8_t result_status_out = 0;
rc = decode_erase_debug_info_resp(msg, responseMsg.size(), &cc_out,
&reason_code_out, &result_status_out);
EXPECT_EQ(rc, NSM_SW_SUCCESS);
EXPECT_EQ(cc_out, cc_in);
EXPECT_EQ(result_status_out, result_status_in);
}
TEST(DiagnosticsHelpersTest, DecodeEraseDebugInfoRespNullResultStatus)
{
std::vector<uint8_t> responseMsg(sizeof(nsm_msg_hdr) +
sizeof(nsm_erase_debug_info_resp));
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t cc = 0;
uint16_t reason_code = 0;
int rc = decode_erase_debug_info_resp(msg, responseMsg.size(), &cc,
&reason_code, nullptr);
EXPECT_EQ(rc, NSM_SW_ERROR_NULL);
}
TEST(DiagnosticsHelpersTest, DecodeEraseDebugInfoRespInvalidLength)
{
std::vector<uint8_t> responseMsg(10);
auto *msg = reinterpret_cast<struct nsm_msg *>(responseMsg.data());
uint8_t cc = 0;
uint16_t reason_code = 0;
uint8_t result_status = 0;
int rc = decode_erase_debug_info_resp(msg, 5, &cc, &reason_code,
&result_status);
EXPECT_EQ(rc, NSM_SW_ERROR_LENGTH);
}