blob: 84bb851d5273e9904b64eecaab6bc49afc3ed57e [file] [edit]
/*
* SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION &
* AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Branch coverage tests for libnsm/firmware-utils.c
* Covers "if (rc != NSM_SW_SUCCESS)" TRUE branches after pack_nsm_header.
*
* pack_nsm_header returns NSM_SW_ERROR_DATA when instance_id > NSM_INSTANCE_MAX
* (31). Functions that assign header.instance_id = instance_id without masking
* will fail when instance_id = 32. This file tests those error-path branches.
*/
#include "firmware-utils.h"
#include <gtest/gtest.h>
#include <vector>
static constexpr uint8_t BAD_IIDX = 32; // > NSM_INSTANCE_MAX (31)
// Convenience buffer for nsm_msg output
static std::vector<uint8_t> msgBuf(1024, 0);
static nsm_msg *msgPtr() { return reinterpret_cast<nsm_msg *>(msgBuf.data()); }
// ---------------------------------------------------------------------------
// encode_nsm_query_get_erot_state_parameters_resp — L352
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeGetErotStateParamResp_PackFail)
{
auto rc = encode_nsm_query_get_erot_state_parameters_resp(
BAD_IIDX, NSM_SUCCESS, 0, nullptr, msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}
// ---------------------------------------------------------------------------
// encode_nsm_firmware_irreversible_config_req — L886
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeIrreversibleConfigReq_PackFail)
{
struct nsm_firmware_irreversible_config_req fw_req = {};
auto rc = encode_nsm_firmware_irreversible_config_req(BAD_IIDX, &fw_req,
msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}
// ---------------------------------------------------------------------------
// encode_nsm_firmware_irreversible_config_request_0_resp — L940
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeIrreversibleConfigReq0Resp_PackFail)
{
struct nsm_firmware_irreversible_config_request_0_resp cfg_resp = {};
auto rc = encode_nsm_firmware_irreversible_config_request_0_resp(
BAD_IIDX, NSM_SUCCESS, 0, &cfg_resp, msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}
// ---------------------------------------------------------------------------
// encode_nsm_firmware_irreversible_config_request_1_resp — L983
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeIrreversibleConfigReq1Resp_PackFail)
{
auto rc = encode_nsm_firmware_irreversible_config_request_1_resp(
BAD_IIDX, NSM_SUCCESS, 0, msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}
// ---------------------------------------------------------------------------
// encode_nsm_firmware_irreversible_config_request_2_resp — L1021
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeIrreversibleConfigReq2Resp_PackFail)
{
struct nsm_firmware_irreversible_config_request_2_resp cfg_resp = {};
auto rc = encode_nsm_firmware_irreversible_config_request_2_resp(
BAD_IIDX, NSM_SUCCESS, 0, &cfg_resp, msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}
// ---------------------------------------------------------------------------
// encode_nsm_code_auth_key_perm_query_resp — L1279
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeCodeAuthKeyPermQueryResp_PackFail)
{
auto rc = encode_nsm_code_auth_key_perm_query_resp(
BAD_IIDX, NSM_SUCCESS, 0, 0, 0, 0, nullptr, nullptr, nullptr,
nullptr, msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}
// ---------------------------------------------------------------------------
// encode_nsm_code_auth_key_perm_update_req — L1392
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeCodeAuthKeyPermUpdateReq_PackFail)
{
auto rc = encode_nsm_code_auth_key_perm_update_req(
BAD_IIDX,
NSM_CODE_AUTH_KEY_PERM_REQUEST_TYPE_MOST_RESTRICTIVE_VALUE, 0, 0, 0,
0, 0, nullptr, msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}
// ---------------------------------------------------------------------------
// encode_nsm_code_auth_key_perm_update_resp — L1463
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeCodeAuthKeyPermUpdateResp_PackFail)
{
auto rc = encode_nsm_code_auth_key_perm_update_resp(
BAD_IIDX, NSM_SUCCESS, 0, 0, msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}
// ---------------------------------------------------------------------------
// encode_nsm_query_firmware_security_version_number_resp — L1556
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeQueryFwSecVerNumResp_PackFail)
{
struct nsm_firmware_security_version_number_resp sec_info = {};
auto rc = encode_nsm_query_firmware_security_version_number_resp(
BAD_IIDX, NSM_SUCCESS, 0, &sec_info, msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}
// ---------------------------------------------------------------------------
// encode_nsm_firmware_update_sec_ver_req — L1629
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeFwUpdateSecVerReq_PackFail)
{
struct nsm_firmware_update_min_sec_ver_req fw_req = {};
auto rc =
encode_nsm_firmware_update_sec_ver_req(BAD_IIDX, &fw_req, msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}
// ---------------------------------------------------------------------------
// encode_nsm_firmware_update_sec_ver_resp — L1682
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeFwUpdateSecVerResp_PackFail)
{
struct nsm_firmware_update_min_sec_ver_resp sec_resp = {};
auto rc = encode_nsm_firmware_update_sec_ver_resp(
BAD_IIDX, NSM_SUCCESS, 0, &sec_resp, msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}
// ---------------------------------------------------------------------------
// encode_nsm_firmware_set_rot_property_req — L1750
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeFwSetRotPropertyReq_PackFail)
{
struct nsm_firmware_set_rot_property_req fw_req = {};
auto rc = encode_nsm_firmware_set_rot_property_req(BAD_IIDX, &fw_req,
msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}
// ---------------------------------------------------------------------------
// encode_nsm_firmware_set_rot_property_resp — L1821
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeFwSetRotPropertyResp_PackFail)
{
auto rc = encode_nsm_firmware_set_rot_property_resp(
BAD_IIDX, NSM_SUCCESS, 0, msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}
// ---------------------------------------------------------------------------
// encode_nsm_firmware_image_copy_control_req — L2055
// ---------------------------------------------------------------------------
TEST(FwUtilsPackFailBranch, EncodeFwImageCopyControlReq_PackFail)
{
struct nsm_firmware_image_copy_control_req fw_req = {};
auto rc = encode_nsm_firmware_image_copy_control_req(BAD_IIDX, &fw_req,
nullptr, msgPtr());
EXPECT_NE(rc, NSM_SW_SUCCESS);
}