diff --git a/.github/workflows/L1-Test.yaml b/.github/workflows/L1-Test.yaml index 46dc3dcc..7c045f12 100644 --- a/.github/workflows/L1-Test.yaml +++ b/.github/workflows/L1-Test.yaml @@ -1,6 +1,8 @@ name: Unit tests RdkFirmwareUpgrader on: + push: + branches: [ topic/* ] pull_request: branches: [ develop, main ] diff --git a/Makefile.am b/Makefile.am index 58363925..4eb09210 100644 --- a/Makefile.am +++ b/Makefile.am @@ -79,6 +79,10 @@ if IS_IARMEVENT_ENABLED librdksw_iarmIntf_la_CFLAGS += $(IARM_EVENT_FLAG) endif +if IS_IARMEVENT_ENABLED +librdksw_fwutils_la_CFLAGS += $(IARM_EVENT_FLAG) +endif + if IS_LIBRFCAPI_ENABLED librdksw_rfcIntf_la_CFLAGS += $(LIBRFCAPI_FLAG) endif diff --git a/run_ut.sh b/run_ut.sh index 8c547198..4394e456 100755 --- a/run_ut.sh +++ b/run_ut.sh @@ -65,7 +65,6 @@ echo "-------------> Return value $rdkfwupdatemgr_main_flow" dbus_handlers_gtest=$? echo "-------------> Return value $dbus_handlers_gtest" - if [ "$devicestatus" = "0" ] && [ "$deviceutils" = "0" ] && [ "$mainapp" = "0" ] && [ "$rdkfw_interface" = "0" ]&& [ "$rdkFwupdateMgr_handlers" = "0" ] && [ "$dbus_handlers_gtest" = "0" ] && [ "$rdkfwupdatemgr_main_flow" = "0" ]; then cd ../src/ @@ -77,4 +76,4 @@ if [ "$devicestatus" = "0" ] && [ "$deviceutils" = "0" ] && [ "$mainapp" = "0" ] else echo "L1 UNIT TEST FAILED. PLEASE CHECK AND FIX" exit 1 -fi +fi diff --git a/src/deviceutils/device_api.c b/src/deviceutils/device_api.c index cc092a44..1fc6239b 100644 --- a/src/deviceutils/device_api.c +++ b/src/deviceutils/device_api.c @@ -208,6 +208,7 @@ size_t GetAdditionalFwVerInfo( char *pAdditionalFwVerInfo, size_t szBufSize ) RETURN - number of characters copied to the output buffer. */ +#if 0 size_t GetPDRIFileName( char *pPDRIFilename, size_t szBufSize ) { char *pTmp; @@ -234,7 +235,16 @@ size_t GetPDRIFileName( char *pPDRIFilename, size_t szBufSize ) } return len; } +#endif +size_t GetPDRIFileName( char *pPDRIFilename, size_t szBufSize ) +{ + size_t len = 0; +#if defined(IARM_ENABLED) + len = GetPDRIFileNameUsingMFR(pPDRIFilename, szBufSize); +#endif + return len; +} /* function GetInstalledBundles - gets the bundles installed on a device. Usage: size_t GetInstalledBundles diff --git a/src/deviceutils/device_api.h b/src/deviceutils/device_api.h index a4d15da7..edab2e35 100644 --- a/src/deviceutils/device_api.h +++ b/src/deviceutils/device_api.h @@ -23,6 +23,10 @@ #define GETRDMMANIFESTVERSION_IN_SCRIPT #endif +#if defined(IARM_ENABLED) +#include "iarmInterface.h" +#endif + #ifdef GTEST_ENABLE #include "rdkv_cdl_log_wrapper.h" #endif diff --git a/src/iarmInterface/iarmInterface.c b/src/iarmInterface/iarmInterface.c index 51255354..f6264d79 100644 --- a/src/iarmInterface/iarmInterface.c +++ b/src/iarmInterface/iarmInterface.c @@ -318,6 +318,46 @@ bool isConnectedToInternet (void) return isconnected; } +size_t GetPDRIFileNameUsingMFR(char *pPDRIFilename, size_t szBufSize) +{ + size_t len = 0; + IARM_Result_t ret; + IARM_Bus_MFRLib_GetSerializedData_Param_t param; + + if (pPDRIFilename == NULL) { + SWLOG_ERROR("GetPDRIFileName: Error, input argument NULL\n"); + return 0; + } + + SWLOG_INFO("GetPDRIFileName: Fetching PDRI image name via IARM_Bus_Call (MFRMgr)"); + + memset(¶m, 0, sizeof(param)); + param.type = mfrSERIALIZED_TYPE_PDRIVERSION; + + ret = IARM_Bus_Call( + IARM_BUS_MFRLIB_NAME, + IARM_BUS_MFRLIB_API_GetSerializedData, + (void *)¶m, + sizeof(param) + ); + + if (ret == IARM_RESULT_SUCCESS ) + { + SWLOG_INFO("GetPDRIFileName: IARM_Bus_Call Success , param.bufLen : %zu\n" , (size_t)param.bufLen); + if(param.bufLen > 0 && param.bufLen < szBufSize) { + memcpy(pPDRIFilename, param.buffer, param.bufLen); + pPDRIFilename[param.bufLen] = '\0'; + len = param.bufLen; + SWLOG_INFO("GetPDRIFileName: IARM_Bus_Call OK, PDRI Version = %s", pPDRIFilename); + } + } else { + // Error path: be explicit + SWLOG_ERROR("GetPDRIFileName: IARM_Bus_Call failed (ret=%d, bufLen=%zu). Cannot retrieve PDRI image name.", ret, (size_t)param.bufLen); + + } + + return len; +} #else // Do nothing act as pass through function . diff --git a/src/include/iarmInterface.h b/src/include/iarmInterface.h index e3b8232c..f33d6b3e 100644 --- a/src/include/iarmInterface.h +++ b/src/include/iarmInterface.h @@ -21,6 +21,7 @@ #if defined(IARM_ENABLED) #ifndef GTEST_ENABLE +#include "mfrMgr.h" #include "sysMgr.h" #include "libIARMCore.h" #include "libIBus.h" @@ -74,6 +75,22 @@ typedef struct _IARM_BUS_SYSMgr_EventData_t{ typedef char gchar; +#ifndef IARM_BUS_MFRLIB_NAME +#define IARM_BUS_MFRLIB_NAME "IARM_BUS_MFRLIB_NAME_teststub" +#endif + +#ifndef IARM_BUS_MFRLIB_API_GetSerializedData +#define IARM_BUS_MFRLIB_API_GetSerializedData 111 +#endif + +typedef struct { + int type; + size_t bufLen; + char buffer[256]; +} IARM_Bus_MFRLib_GetSerializedData_Param_t; + +#define mfrSERIALIZED_TYPE_PDRIVERSION 0 + #endif #endif @@ -130,5 +147,5 @@ int term_event_handler(void); int init_event_handler(void); void interuptDwnl(int app_mode); bool isConnectedToInternet (void); - +size_t GetPDRIFileNameUsingMFR(char *pPDRIFilename, size_t szBufSize); #endif /* VIDEO_IARMINTERFACE_IARMINTERFACE_H_ */ diff --git a/unittest/Makefile.am b/unittest/Makefile.am index 7c864737..8a87f81b 100644 --- a/unittest/Makefile.am +++ b/unittest/Makefile.am @@ -59,7 +59,8 @@ rdkfw_main_gtest_SOURCES = basic_rdkv_main_gtest.cpp \ ../src/deviceutils/device_api.c \ ../src/deviceutils/deviceutils.c \ deviceutils/json_parse.c \ - ./mocks/deviceutils_mock.cpp + ./mocks/deviceutils_mock.cpp \ + ./mocks/iarmInterface_mock.cpp rdkfw_interface_gtest_SOURCES = fwdl_interface_gtest.cpp \ ./mocks/interface_mock.cpp \ @@ -67,7 +68,7 @@ rdkfw_interface_gtest_SOURCES = fwdl_interface_gtest.cpp \ ../src/iarmInterface/iarmInterface.c \ ./mocks/rbus_mock.c \ ../src/rbusInterface/rbusInterface.c \ - deviceutils/json_parse.c + deviceutils/json_parse.c # rdkFwupdateMgr_handlers_gtest: Tests D-Bus handler functions for daemon @@ -79,7 +80,7 @@ rdkFwupdateMgr_handlers_gtest_SOURCES = rdkFwupdateMgr_handlers_gtest.cpp \ ./mocks/deviceutils_mock.cpp \ ../src/dbus/rdkFwupdateMgr_handlers.c \ ../src/json_process.c \ - deviceutils/json_parse.c + deviceutils/json_parse.c # Note: All functions from rdkv_upgrade.c, chunk.c, device_status_helper.c, download_status_helper.c # are stubbed in rdkFwupdateMgr_mock.cpp # Note: device_api.c and deviceutils.c functions are mocked in deviceutils_mock.cpp @@ -134,7 +135,8 @@ rdkfwupdatemgr_main_flow_gtest_SOURCES = rdkfwupdatemgr_main_flow_gtest.cpp \ ../src/deviceutils/deviceutils.c \ deviceutils/json_parse.c \ miscellaneous_mock.cpp \ - ./mocks/deviceutils_mock.cpp + ./mocks/deviceutils_mock.cpp \ + ./mocks/iarmInterface_mock.cpp rdkfwupdatemgr_main_flow_gtest_CPPFLAGS = $(COMMON_CPPFLAGS) -I../src/dbus $(GLIB_CFLAGS) rdkfwupdatemgr_main_flow_gtest_LDFLAGS = $(GLIB_LIBS) diff --git a/unittest/deviceutils/device_api_gtest.cpp b/unittest/deviceutils/device_api_gtest.cpp index 23e62bee..0aa7e07a 100644 --- a/unittest/deviceutils/device_api_gtest.cpp +++ b/unittest/deviceutils/device_api_gtest.cpp @@ -175,6 +175,22 @@ TEST_F(DeviceApiTestFixture,TestName_getadditionfw_nullcheck) { EXPECT_EQ(GetAdditionalFwVerInfo(NULL, 0), 0); } +#if 0 +TEST_F(DeviceApiTestFixture, TestName_Success) +{ + char data[64]; + // Instead of v_secure_popen, expect the MFR call: + EXPECT_CALL(*g_DeviceStatusMock, GetPDRIFileNameUsingMFR(_, _)) + .Times(1) + .WillOnce([](char* out, size_t sz){ + strcpy(out, "mockpdri.bin"); + return strlen(out); + }); + + // Now call and expect correct result: + EXPECT_EQ(GetAdditionalFwVerInfo(data, sizeof(data)), strlen("mockpdri.bin")); + EXPECT_STREQ(data, "mockpdri.bin"); +} //TODO: Need to check why v_secure_popen is not returning properly TEST_F(DeviceApiTestFixture,TestName_Success) { @@ -191,6 +207,7 @@ TEST_F(DeviceApiTestFixture,TestName_Success) EXPECT_CALL(*g_DeviceUtilsMock, v_secure_popen(_, _, _)).Times(1).WillOnce(Return(fp)); EXPECT_EQ(GetAdditionalFwVerInfo(data, sizeof(data)), 0); } +#endif TEST(TestGetPDRIFileName, Test_pdri_Nullcheck) { EXPECT_EQ(GetPDRIFileName(NULL, 0), 0); diff --git a/unittest/mocks/device_status_helper_mock.cpp b/unittest/mocks/device_status_helper_mock.cpp index 87c85f5d..a2661e65 100644 --- a/unittest/mocks/device_status_helper_mock.cpp +++ b/unittest/mocks/device_status_helper_mock.cpp @@ -316,6 +316,24 @@ extern "C" void eventManager(const char *cur_event_name, const char *event_statu return g_DeviceStatusMock->eventManager(cur_event_name, event_status); } +extern "C" size_t GetPDRIFileNameUsingMFR(char *pPDRIFilename, size_t szBufSize) +{ + if (!g_DeviceStatusMock) { + cout << "GetPDRIFileNameUsingMFR g_IarmInterfaceMock object is NULL" << endl; + return 0; + } + printf("Inside Mock Function GetPDRIFileNameUsingMFR\n"); + // Give a fake file name for tests unless you want to do more in your mock object + const char *mockPDRI = "mock-PDRI-image.bin"; + size_t len = strlen(mockPDRI); + if (pPDRIFilename && szBufSize > len) { + strncpy(pPDRIFilename, mockPDRI, szBufSize); + pPDRIFilename[szBufSize - 1] = '\0'; + return len; + } + return g_DeviceStatusMock->GetPDRIFileNameUsingMFR(pPDRIFilename, szBufSize); +} + extern "C" size_t GetPDRIFileName( char *pPDRIFilename, size_t szBufSize ) { if (!g_DeviceStatusMock) diff --git a/unittest/mocks/device_status_helper_mock.h b/unittest/mocks/device_status_helper_mock.h index 58b71ac4..cfc0ac53 100644 --- a/unittest/mocks/device_status_helper_mock.h +++ b/unittest/mocks/device_status_helper_mock.h @@ -55,6 +55,7 @@ class DeviceStatusInterface virtual int write_RFCProperty(const char *key, const char *value, RFCVALDATATYPE datatype) = 0; virtual void uninitialize(int data) = 0; virtual void eventManager(const char *cur_event_name, const char *event_status) = 0; + virtual size_t GetPDRIFileNameUsingMFR( char *pPDRIFilename, size_t szBufSize ) = 0; virtual size_t GetPDRIFileName( char *pPDRIFilename, size_t szBufSize ) = 0; virtual void updateUpgradeFlag(int action) = 0; virtual void t2CountNotify(char *marker) = 0; @@ -93,6 +94,7 @@ class DeviceStatusMock: public DeviceStatusInterface MOCK_METHOD(void, uninitialize, (int data), ()); MOCK_METHOD(void, eventManager, (const char *cur_event_name, const char *event_status), ()); MOCK_METHOD(size_t, GetPDRIFileName, ( char *pPDRIFilename, size_t szBufSize ), ()); + MOCK_METHOD(size_t, GetPDRIFileNameUsingMFR, ( char *pPDRIFilename, size_t szBufSize ), ()); MOCK_METHOD(void, updateUpgradeFlag, (int action), ()); MOCK_METHOD(void, t2CountNotify, (char *marker), ()); MOCK_METHOD(void, t2ValNotify, (char *marker, char *val), ()); diff --git a/unittest/mocks/deviceutils_mock.cpp b/unittest/mocks/deviceutils_mock.cpp index 8eb831ee..c09a8caf 100644 --- a/unittest/mocks/deviceutils_mock.cpp +++ b/unittest/mocks/deviceutils_mock.cpp @@ -266,6 +266,23 @@ extern "C" void t2ValNotify(char *marker, char *val) return g_DeviceUtilsMock->t2ValNotify(marker, val); } +extern "C" size_t GetPDRIFileNameUsingMFR(char *pPDRIFilename, size_t szBufSize) +{ + if (!g_DeviceUtilsMock) { + cout << "GetPDRIFileNameUsingMFR g_IarmInterfaceMock object is NULL" << endl; + return 0; + } + printf("Inside Mock Function GetPDRIFileNameUsingMFR\n"); + // Give a fake file name for tests unless you want to do more in your mock object + const char *mockPDRI = "mock-PDRI-image.bin"; + size_t len = strlen(mockPDRI); + if (pPDRIFilename && szBufSize > len) { + strncpy(pPDRIFilename, mockPDRI, szBufSize); + pPDRIFilename[szBufSize - 1] = '\0'; + return len; + } + return g_DeviceUtilsMock->GetPDRIFileNameUsingMFR(pPDRIFilename, szBufSize); +} // ========== Mocks for external functions (moved to common_utilities) ========== /* extern "C" size_t GetTimezone(char *pTimezone, const char *arch, size_t szBufSize) diff --git a/unittest/mocks/deviceutils_mock.h b/unittest/mocks/deviceutils_mock.h index 9e8c5205..3d4b69f6 100644 --- a/unittest/mocks/deviceutils_mock.h +++ b/unittest/mocks/deviceutils_mock.h @@ -59,6 +59,7 @@ class DeviceUtilsInterface virtual size_t GetModelNum( char *pModelNum, size_t szBufSize ) = 0; virtual void t2CountNotify(char *marker) = 0; virtual void t2ValNotify(char *marker, char *val) = 0; + virtual size_t GetPDRIFileNameUsingMFR( char *pPDRIFilename, size_t szBufSize ) = 0; }; class DeviceUtilsMock: public DeviceUtilsInterface @@ -83,5 +84,6 @@ class DeviceUtilsMock: public DeviceUtilsInterface MOCK_METHOD(size_t, GetModelNum, ( char *pModelNum, size_t szBufSize ), ()); MOCK_METHOD(void, t2CountNotify, (char *marker), ()); MOCK_METHOD(void, t2ValNotify, (char *marker, char *val), ()); + MOCK_METHOD(size_t, GetPDRIFileNameUsingMFR, ( char *pPDRIFilename, size_t szBufSize ), ()); }; #endif diff --git a/unittest/mocks/iarmInterface_mock.cpp b/unittest/mocks/iarmInterface_mock.cpp new file mode 100644 index 00000000..17cf395e --- /dev/null +++ b/unittest/mocks/iarmInterface_mock.cpp @@ -0,0 +1,44 @@ +/* + * Copyright 2023 Comcast Cable Communications Management, LLC + * + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "iarmInterface_mock.h" +#include +#include + +using namespace std; + +// A simple global pointer for mocking; in real use you can extend this with gmock if desired +IarmInterfaceMock *g_IarmInterfaceMock = nullptr; + +extern "C" size_t GetPDRIFileNameUsingMFR(char *pPDRIFilename, size_t szBufSize) +{ + if (!g_IarmInterfaceMock) { + cout << "GetPDRIFileNameUsingMFR g_IarmInterfaceMock object is NULL" << endl; + return 0; + } + printf("Inside Mock Function GetPDRIFileNameUsingMFR\n"); + // Give a fake file name for tests unless you want to do more in your mock object + const char *mockPDRI = "mock-PDRI-image.bin"; + size_t len = strlen(mockPDRI); + if (pPDRIFilename && szBufSize > len) { + strncpy(pPDRIFilename, mockPDRI, szBufSize); + pPDRIFilename[szBufSize - 1] = '\0'; + return len; + } + return g_IarmInterfaceMock->GetPDRIFileNameUsingMFR(pPDRIFilename, szBufSize); +} diff --git a/unittest/mocks/iarmInterface_mock.h b/unittest/mocks/iarmInterface_mock.h new file mode 100644 index 00000000..feb7b9b8 --- /dev/null +++ b/unittest/mocks/iarmInterface_mock.h @@ -0,0 +1,15 @@ +// File: unittest/mocks/iarmInterface_mock.h + +#pragma once +#include + +class IarmInterfaceMock { +public: + virtual ~IarmInterfaceMock() = default; + virtual size_t GetPDRIFileNameUsingMFR(char *pPDRIFilename, size_t szBufSize) { + // Default mock does nothing real + return 0; + } +}; + +extern IarmInterfaceMock *g_IarmInterfaceMock; diff --git a/unittest/mocks/interface_mock.cpp b/unittest/mocks/interface_mock.cpp index 05ea8a22..af3248d6 100644 --- a/unittest/mocks/interface_mock.cpp +++ b/unittest/mocks/interface_mock.cpp @@ -228,3 +228,14 @@ extern "C" int getJsonRpc(char *data, void *ptr) printf("Inside Mock Function getJsonRpc\n"); return g_InterfaceMock->getJsonRpc(data, ptr); } + +extern "C" int IARM_Bus_Call(const char* ownerName, int apiId, void* param, unsigned int paramLen) +{ + if(!g_InterfaceMock) + { + cout << "g_InterfaceMock object is NULL" << endl; + return -1; + } + printf("Inside Mock Function IARM_Bus_Call\n"); + return g_InterfaceMock->IARM_Bus_Call(ownerName,apiId,param,paramLen); +} diff --git a/unittest/mocks/interface_mock.h b/unittest/mocks/interface_mock.h index 58336671..a8b86aa2 100644 --- a/unittest/mocks/interface_mock.h +++ b/unittest/mocks/interface_mock.h @@ -50,6 +50,7 @@ class FwDlInterface virtual int IARM_Bus_Term() = 0; virtual int allocDowndLoadDataMem(void *ptr, int size) = 0; virtual int getJsonRpc(char *data, void *ptr) = 0; + virtual int IARM_Bus_Call(const char* ownerName, int apiId, void* param, unsigned int paramLen) = 0; }; class FwDlInterfaceMock: public FwDlInterface @@ -75,6 +76,8 @@ class FwDlInterfaceMock: public FwDlInterface MOCK_METHOD(int, IARM_Bus_Term, (), ()); MOCK_METHOD(int, allocDowndLoadDataMem, (void *ptr, int size), ()); MOCK_METHOD(int, getJsonRpc, (char *data, void *ptr), ()); + MOCK_METHOD(int, IARM_Bus_Call, (const char*, int, void*, unsigned int), ()); + }; #endif diff --git a/unittest/mocks/rdkFwupdateMgr_mock.cpp b/unittest/mocks/rdkFwupdateMgr_mock.cpp index 0b9c035b..219a97ec 100755 --- a/unittest/mocks/rdkFwupdateMgr_mock.cpp +++ b/unittest/mocks/rdkFwupdateMgr_mock.cpp @@ -138,6 +138,23 @@ extern "C" size_t GetFirmwareVersion(char *pFWVersion, size_t szBufSize) { return g_RdkFwupdateMgrMock->GetFirmwareVersion(pFWVersion, szBufSize); } +extern "C" size_t GetPDRIFileNameUsingMFR(char *pPDRIFilename, size_t szBufSize) +{ + if (!g_RdkFwupdateMgrMock) { + cout << "GetPDRIFileNameUsingMFR g_IarmInterfaceMock object is NULL" << endl; + return 0; + } + printf("Inside Mock Function GetPDRIFileNameUsingMFR\n"); + // Give a fake file name for tests unless you want to do more in your mock object + const char *mockPDRI = "mock-PDRI-image.bin"; + size_t len = strlen(mockPDRI); + if (pPDRIFilename && szBufSize > len) { + strncpy(pPDRIFilename, mockPDRI, szBufSize); + pPDRIFilename[szBufSize - 1] = '\0'; + return len; + } + return g_RdkFwupdateMgrMock->GetPDRIFileNameUsingMFR(pPDRIFilename, szBufSize); +} // ============================================================================= // File operations // ============================================================================= @@ -325,9 +342,9 @@ extern "C" size_t lastDwnlImg(char *pLastImg, size_t szBufSize) { // v_secure_system is now in deviceutils_mock.cpp -extern "C" void eventManager(int event_type, const char *event_data) { +extern "C" void eventManager(const char *cur_event_name, const char *event_status) { // Stub - event manager - printf("EventManager: type=%d, data=%s\n", event_type, event_data ? event_data : "NULL"); + //printf("EventManager: type=%d, data=%s\n", , event_data ? event_data : "NULL"); } /* extern "C" int processJsonResponse(XCONFRES *response, const char *myfwversion, const char *model, const char *maint) { diff --git a/unittest/mocks/rdkFwupdateMgr_mock.h b/unittest/mocks/rdkFwupdateMgr_mock.h index 940af3e6..e9d578df 100755 --- a/unittest/mocks/rdkFwupdateMgr_mock.h +++ b/unittest/mocks/rdkFwupdateMgr_mock.h @@ -55,6 +55,7 @@ class RdkFwupdateMgrInterface { // File operations mocks virtual int filePresentCheck(const char *filename) = 0; virtual bool isConnectedToInternet() = 0; + virtual size_t GetPDRIFileNameUsingMFR( char *pPDRIFilename, size_t szBufSize ) = 0; // Upgrade request mock - signature MUST match real function (const RdkUpgradeContext_t*) virtual int rdkv_upgrade_request(const RdkUpgradeContext_t *context, void **curl, int *pHttp_code) = 0; @@ -77,6 +78,7 @@ class RdkFwupdateMgrMock : public RdkFwupdateMgrInterface { MOCK_METHOD(size_t, GetFirmwareVersion, (char *pFWVersion, size_t szBufSize), ()); MOCK_METHOD(int, filePresentCheck, (const char *filename), ()); MOCK_METHOD(bool, isConnectedToInternet, (), ()); + MOCK_METHOD(size_t, GetPDRIFileNameUsingMFR, ( char *pPDRIFilename, size_t szBufSize ), ()); // Note: Signature must match real function (const RdkUpgradeContext_t*) MOCK_METHOD(int, rdkv_upgrade_request,(const RdkUpgradeContext_t *context, void **curl, int *pHttp_code), ()); };