Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
164 changes: 160 additions & 4 deletions unittest/deviceutils/device_api_gtest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -509,7 +509,7 @@ TEST_F(DeviceApiTestFixture, TestName_GetServURL_SuccessStatered_DebugServices_E
//EXPECT_CALL(*g_DeviceUtilsMock, read_RFCProperty(_, _, _, _)).Times(1).WillOnce(Return(1));
ret = system("echo \"BUILD_TYPE=vbn\" > /tmp/device_gtest.prop");
//EXPECT_CALL(*g_DeviceUtilsMock, filePresentCheck(_)).Times(1).WillOnce(Return(1));
EXPECT_CALL(*g_DeviceUtilsMock, isDebugServicesEnabled()).Times(1).WillOnce(Return(true));
// Non-PROD builds are always unlocked; isDebugServicesEnabled() is not called
ret = system("echo \"https://www.statered.com\" > /tmp/stateredrecovry.conf");
ret = GetServURL(output, sizeof(output));
EXPECT_EQ(strncmp(output,servUrl,strlen(servUrl)),0);
Expand All @@ -528,7 +528,7 @@ TEST_F(DeviceApiTestFixture, TestName_GetServURL_SuccessStatered_DebugServices_D
//EXPECT_CALL(*g_DeviceUtilsMock, read_RFCProperty(_, _, _, _)).Times(1).WillOnce(Return(1));
ret = system("echo \"BUILD_TYPE=vbn\" > /tmp/device_gtest.prop");
//EXPECT_CALL(*g_DeviceUtilsMock, filePresentCheck(_)).Times(1).WillOnce(Return(1));
EXPECT_CALL(*g_DeviceUtilsMock, isDebugServicesEnabled()).Times(1).WillOnce(Return(false));
// Non-PROD builds are always unlocked; isDebugServicesEnabled() is not called
ret = system("echo \"https://www.statered.com\" > /tmp/stateredrecovry.conf");
ret = GetServURL(output, sizeof(output));
EXPECT_EQ(strncmp(output,servUrl,strlen(servUrl)),0);
Expand All @@ -548,6 +548,19 @@ TEST_F(DeviceApiTestFixture, TestName_GetServURL_SuccessStatered_Prod_DebugServi
ret = system("echo \"BUILD_TYPE=PROD\" > /tmp/device_gtest.prop");
//EXPECT_CALL(*g_DeviceUtilsMock, filePresentCheck(_)).Times(1).WillOnce(Return(1));
EXPECT_CALL(*g_DeviceUtilsMock, isDebugServicesEnabled()).Times(1).WillOnce(Return(true));
EXPECT_CALL(*g_DeviceUtilsMock, getDeviceTypeRFC(_, _))
.Times(1)
.WillOnce(Invoke([](char* deviceType, size_t size) {
strncpy(deviceType, "test", size - 1);
deviceType[size - 1] = '\0';
}));
EXPECT_CALL(*g_DeviceUtilsMock, getDevicePropertyData(_, _, _))
.Times(1)
.WillOnce(Invoke([](const char* model, char *data, int size) {
strncpy(data, "true", size - 1);
data[size - 1] = '\0';
return 0;
}));
ret = system("echo \"https://www.statered.com\" > /tmp/stateredrecovry.conf");
ret = GetServURL(output, sizeof(output));
EXPECT_EQ(strncmp(output,servUrl,strlen(servUrl)),0);
Expand All @@ -567,6 +580,19 @@ TEST_F(DeviceApiTestFixture, TestName_GetServURL_SuccessStatered_Prod_DebugServi
ret = system("echo \"BUILD_TYPE=PROD\" > /tmp/device_gtest.prop");
//EXPECT_CALL(*g_DeviceUtilsMock, filePresentCheck(_)).Times(1).WillOnce(Return(1));
EXPECT_CALL(*g_DeviceUtilsMock, isDebugServicesEnabled()).Times(1).WillOnce(Return(false));
EXPECT_CALL(*g_DeviceUtilsMock, getDeviceTypeRFC(_, _))
.Times(1)
.WillOnce(Invoke([](char* deviceType, size_t size) {
strncpy(deviceType, "test", size - 1);
deviceType[size - 1] = '\0';
}));
EXPECT_CALL(*g_DeviceUtilsMock, getDevicePropertyData(_, _, _))
.Times(1)
.WillOnce(Invoke([](const char* model, char *data, int size) {
strncpy(data, "true", size - 1);
data[size - 1] = '\0';
return 0;
}));
ret = system("echo \"https://www.statered.com\" > /tmp/stateredrecovry.conf");
ret = system("echo \"https://www.autotool.com\" > /tmp/swupdate.conf");
EXPECT_CALL(*g_DeviceUtilsMock, read_RFCProperty(_, _, _, _))
Expand Down Expand Up @@ -594,7 +620,7 @@ TEST_F(DeviceApiTestFixture, TestName_GetServURL_SuccessSwupdate_DebugServices_E
EXPECT_CALL(*g_DeviceUtilsMock, filePresentCheck(_)).Times(1).WillOnce(Return(0));
//EXPECT_CALL(*g_DeviceUtilsMock, read_RFCProperty(_, _, _, _)).Times(1).WillOnce(Return(1));
ret = system("echo \"BUILD_TYPE=vbn\" > /tmp/device_gtest.prop");
EXPECT_CALL(*g_DeviceUtilsMock, isDebugServicesEnabled()).Times(1).WillOnce(Return(true));
// Non-PROD builds are always unlocked; isDebugServicesEnabled() is not called
ret = system("echo \"https://www.rdkautotool.com\" > /tmp/swupdate.conf");
ret=GetServURL(output , sizeof(output));
EXPECT_EQ(strncmp(output , servUrl , strlen(servUrl)),0);
Expand All @@ -614,7 +640,7 @@ TEST_F(DeviceApiTestFixture, TestName_GetServURL_SuccessSwupdate_DebugServices_D
EXPECT_CALL(*g_DeviceUtilsMock, filePresentCheck(_)).Times(1).WillOnce(Return(0));
//EXPECT_CALL(*g_DeviceUtilsMock, read_RFCProperty(_, _, _, _)).Times(1).WillOnce(Return(1));
ret = system("echo \"BUILD_TYPE=vbn\" > /tmp/device_gtest.prop");
EXPECT_CALL(*g_DeviceUtilsMock, isDebugServicesEnabled()).Times(1).WillOnce(Return(false));
// Non-PROD builds are always unlocked; isDebugServicesEnabled() is not called
ret = system("echo \"https://www.rdkautotool.com\" > /tmp/swupdate.conf");
ret=GetServURL(output , sizeof(output));
EXPECT_EQ(strncmp(output , servUrl , strlen(servUrl)),0);
Expand All @@ -634,6 +660,19 @@ TEST_F(DeviceApiTestFixture, TestName_GetServURL_SuccessSwupdate_Prod_DebugServi
EXPECT_CALL(*g_DeviceUtilsMock, filePresentCheck(_)).Times(1).WillOnce(Return(0));
ret = system("echo \"BUILD_TYPE=PROD\" > /tmp/device_gtest.prop");
EXPECT_CALL(*g_DeviceUtilsMock, isDebugServicesEnabled()).Times(1).WillOnce(Return(true));
EXPECT_CALL(*g_DeviceUtilsMock, getDeviceTypeRFC(_, _))
.Times(1)
.WillOnce(Invoke([](char* deviceType, size_t size) {
strncpy(deviceType, "test", size - 1);
deviceType[size - 1] = '\0';
}));
EXPECT_CALL(*g_DeviceUtilsMock, getDevicePropertyData(_, _, _))
.Times(1)
.WillOnce(Invoke([](const char* model, char *data, int size) {
strncpy(data, "true", size - 1);
data[size - 1] = '\0';
return 0;
}));
ret = system("echo \"https://www.rdkautotool.com\" > /tmp/swupdate.conf");
ret=GetServURL(output , sizeof(output));
EXPECT_EQ(strncmp(output , servUrl , strlen(servUrl)),0);
Expand All @@ -652,6 +691,19 @@ TEST_F(DeviceApiTestFixture, TestName_GetServURL_SuccessSwupdate_Prod_DebugServi
EXPECT_CALL(*g_DeviceUtilsMock, isInStateRed()).Times(1).WillOnce(Return(false));
ret = system("echo \"BUILD_TYPE=PROD\" > /tmp/device_gtest.prop");
EXPECT_CALL(*g_DeviceUtilsMock, isDebugServicesEnabled()).Times(1).WillOnce(Return(false));
EXPECT_CALL(*g_DeviceUtilsMock, getDeviceTypeRFC(_, _))
.Times(1)
.WillOnce(Invoke([](char* deviceType, size_t size) {
strncpy(deviceType, "test", size - 1);
deviceType[size - 1] = '\0';
}));
EXPECT_CALL(*g_DeviceUtilsMock, getDevicePropertyData(_, _, _))
.Times(1)
.WillOnce(Invoke([](const char* model, char *data, int size) {
strncpy(data, "true", size - 1);
data[size - 1] = '\0';
return 0;
}));
ret = system("echo \"https://www.rdkautotool.com\" > /tmp/swupdate.conf");
EXPECT_CALL(*g_DeviceUtilsMock, read_RFCProperty(_, _, _, _))
.Times(1)
Expand Down Expand Up @@ -727,3 +779,107 @@ TEST_F(DeviceApiTestFixture,TestName_GetRemoteVers_Fail)
char pRemoteInfo[256] = {0};
EXPECT_EQ(GetRemoteVers(pRemoteInfo, sizeof(pRemoteInfo)), 0);
}

// ===== Tests for isSecureDbgSrvUnlocked =====

TEST_F(DeviceApiTestFixture, IsSecureDbgSrvUnlocked_NonProdBuild_ReturnsTrue)
{
// Non-PROD builds are always unlocked; none of the gating mocks are needed
EXPECT_TRUE(isSecureDbgSrvUnlocked(eVBN));
}

TEST_F(DeviceApiTestFixture, IsSecureDbgSrvUnlocked_Prod_AllConditionsMet_ReturnsTrue)
{
// PROD + dbgServices=true + deviceType="test" + labsigned="true" => unlocked
EXPECT_CALL(*g_DeviceUtilsMock, isDebugServicesEnabled()).Times(1).WillOnce(Return(true));
EXPECT_CALL(*g_DeviceUtilsMock, getDeviceTypeRFC(_, _))
.Times(1)
.WillOnce(Invoke([](char* deviceType, size_t size) {
strncpy(deviceType, "test", size - 1);
deviceType[size - 1] = '\0';
}));
EXPECT_CALL(*g_DeviceUtilsMock, getDevicePropertyData(_, _, _))
.Times(1)
.WillOnce(Invoke([](const char* model, char *data, int size) {
strncpy(data, "true", size - 1);
data[size - 1] = '\0';
return 0;
}));
EXPECT_TRUE(isSecureDbgSrvUnlocked(ePROD));
}

TEST_F(DeviceApiTestFixture, IsSecureDbgSrvUnlocked_Prod_DebugServicesDisabled_ReturnsFalse)
{
// PROD + dbgServices=false => locked even when deviceType and labsigned would otherwise allow it
EXPECT_CALL(*g_DeviceUtilsMock, isDebugServicesEnabled()).Times(1).WillOnce(Return(false));
EXPECT_CALL(*g_DeviceUtilsMock, getDeviceTypeRFC(_, _))
.Times(1)
.WillOnce(Invoke([](char* deviceType, size_t size) {
strncpy(deviceType, "test", size - 1);
deviceType[size - 1] = '\0';
}));
EXPECT_CALL(*g_DeviceUtilsMock, getDevicePropertyData(_, _, _))
.Times(1)
.WillOnce(Invoke([](const char* model, char *data, int size) {
strncpy(data, "true", size - 1);
data[size - 1] = '\0';
return 0;
}));
EXPECT_FALSE(isSecureDbgSrvUnlocked(ePROD));
}

TEST_F(DeviceApiTestFixture, IsSecureDbgSrvUnlocked_Prod_WrongDeviceType_ReturnsFalse)
{
// PROD + deviceType!="test" => locked even when dbgServices=true and labsigned=true
EXPECT_CALL(*g_DeviceUtilsMock, isDebugServicesEnabled()).Times(1).WillOnce(Return(true));
EXPECT_CALL(*g_DeviceUtilsMock, getDeviceTypeRFC(_, _))
.Times(1)
.WillOnce(Invoke([](char* deviceType, size_t size) {
strncpy(deviceType, "prod", size - 1);
deviceType[size - 1] = '\0';
}));
EXPECT_CALL(*g_DeviceUtilsMock, getDevicePropertyData(_, _, _))
.Times(1)
.WillOnce(Invoke([](const char* model, char *data, int size) {
strncpy(data, "true", size - 1);
data[size - 1] = '\0';
return 0;
}));
EXPECT_FALSE(isSecureDbgSrvUnlocked(ePROD));
}

TEST_F(DeviceApiTestFixture, IsSecureDbgSrvUnlocked_Prod_LabsignedFalse_ReturnsFalse)
{
// PROD + labsigned="false" => locked even when dbgServices=true and deviceType="test"
EXPECT_CALL(*g_DeviceUtilsMock, isDebugServicesEnabled()).Times(1).WillOnce(Return(true));
EXPECT_CALL(*g_DeviceUtilsMock, getDeviceTypeRFC(_, _))
.Times(1)
.WillOnce(Invoke([](char* deviceType, size_t size) {
strncpy(deviceType, "test", size - 1);
deviceType[size - 1] = '\0';
}));
EXPECT_CALL(*g_DeviceUtilsMock, getDevicePropertyData(_, _, _))
.Times(1)
.WillOnce(Invoke([](const char* model, char *data, int size) {
strncpy(data, "false", size - 1);
data[size - 1] = '\0';
return 0;
}));
EXPECT_FALSE(isSecureDbgSrvUnlocked(ePROD));
}

TEST_F(DeviceApiTestFixture, IsSecureDbgSrvUnlocked_Prod_LabsignedPropertyFailed_ReturnsFalse)
{
// PROD + getDevicePropertyData() fails for LABSIGNED_ENABLED => locked
EXPECT_CALL(*g_DeviceUtilsMock, isDebugServicesEnabled()).Times(1).WillOnce(Return(true));
EXPECT_CALL(*g_DeviceUtilsMock, getDeviceTypeRFC(_, _))
.Times(1)
.WillOnce(Invoke([](char* deviceType, size_t size) {
strncpy(deviceType, "test", size - 1);
deviceType[size - 1] = '\0';
}));
EXPECT_CALL(*g_DeviceUtilsMock, getDevicePropertyData(_, _, _))
.Times(1)
.WillOnce(Return(-1));
EXPECT_FALSE(isSecureDbgSrvUnlocked(ePROD));
}