Skip to content
5 changes: 3 additions & 2 deletions .github/workflows/L2-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ jobs:
with:
repository: rdkcentral/entservices-testframework
path: entservices-testframework
ref: develop
ref: RDKEMW-4719_upto_date_validation
token: ${{ secrets.RDKCM_RDKE }}

- name: Checkout googletest
Expand Down Expand Up @@ -127,11 +127,12 @@ jobs:

- name: Apply patches Thunder
run: |
cd $GITHUB_WORKSPACE/Thunder
cd $GITHUB_WORKSPACE/Thunder
patch -p1 < $GITHUB_WORKSPACE/entservices-testframework/patches/Use_Legact_Alt_Based_On_ThunderTools_R4.4.3.patch
patch -p1 < $GITHUB_WORKSPACE/entservices-testframework/patches/error_code_R4_4.patch
patch -p1 < $GITHUB_WORKSPACE/entservices-testframework/patches/1004-Add-support-for-project-dir.patch
patch -p1 < $GITHUB_WORKSPACE/entservices-testframework/patches/RDKEMW-733-Add-ENTOS-IDS.patch
patch -p1 < $GITHUB_WORKSPACE/entservices-testframework/patches/FirmwareUpdate_UptoDate.patch
cd -
- name: Build Thunder
run: >
Expand Down
77 changes: 38 additions & 39 deletions FirmwareUpdate/FirmwareUpdateImplementation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -669,39 +669,13 @@ namespace WPEFramework {
string dri = (firmwareType == "DRI") ? "yes" : "no";
string name = firmwareFilepath.substr(firmwareFilepath.find_last_of("/\\") + 1);
string path = firmwareFilepath.substr(0, firmwareFilepath.find_last_of("/\\") + 1);

string currentFlashedImage = readProperty("/version.txt","imagename", ":") ;
SWUPDATEINFO("currentFlashedImage : %s",currentFlashedImage.c_str());
std::string fileWithoutExtension ="";
// Find the position of the last '.'
size_t dotPos = name.find_last_of('.');
if (dotPos != std::string::npos) {
// Extract substring before the '.'
fileWithoutExtension = name.substr(0, dotPos);
} else {
// If no '.' is found, use the original string
fileWithoutExtension = name;
}

if (fileWithoutExtension == currentFlashedImage)
{

SWUPDATEERR("FW version of the active image and the image to be upgraded are the same. No upgrade required.");
isFlashingInProgress = false; // Reset the flag if exiting early
snprintf(fwdls.status, sizeof(fwdls.status), "Status|No upgrade needed\n");
snprintf(fwdls.FwUpdateState, sizeof(fwdls.FwUpdateState), "FwUpdateState|No upgrade needed\n");
snprintf(fwdls.failureReason, sizeof(fwdls.failureReason), "FailureReason|No upgrade needed\n");
updateFWDownloadStatus(&fwdls, dri.c_str(),initiated_type);
dispatchAndUpdateEvent(_VALIDATION_FAILED,_FIRMWARE_UPTODATE);
return ;
}


if(std::string(proto) == "usb")
{
if (!copyFileToDirectory(upgrade_file.c_str(), USB_TMP_COPY)) {
SWUPDATEERR("File copy operation failed.\n");
dispatchAndUpdateEvent(_VALIDATION_FAILED,"");
dispatchAndUpdateEvent(_VALIDATION_FAILED,_FIRMWARE_NOT_FOUND);
isFlashingInProgress = false; // Reset the flag if exiting early
snprintf(fwdls.status, sizeof(fwdls.status), "Status|Failure\n");
snprintf(fwdls.FwUpdateState, sizeof(fwdls.FwUpdateState), "FwUpdateState|Failed\n");
Expand Down Expand Up @@ -737,7 +711,6 @@ namespace WPEFramework {
if(firmwareFilepath == "")
{
SWUPDATEERR("firmwareFilepath is empty");
dispatchAndUpdateEvent(_VALIDATION_FAILED,_FIRMWARE_NOT_FOUND);
snprintf(fwdls.status, sizeof(fwdls.status), "Status|Failure\n");
snprintf(fwdls.FwUpdateState, sizeof(fwdls.FwUpdateState), "FwUpdateState|Failed\n");
snprintf(fwdls.failureReason, sizeof(fwdls.failureReason), "FailureReason|firmwareFilepath is empty\n");
Expand All @@ -748,7 +721,6 @@ namespace WPEFramework {
else if (!(Utils::fileExists(firmwareFilepath.c_str()))) {
SWUPDATEERR("firmwareFile is not present %s",firmwareFilepath.c_str());
SWUPDATEERR("Local image Download Failed"); //Existing marker
dispatchAndUpdateEvent(_VALIDATION_FAILED,_FIRMWARE_NOT_FOUND);
snprintf(fwdls.status, sizeof(fwdls.status), "Status|Failure\n");
snprintf(fwdls.FwUpdateState, sizeof(fwdls.FwUpdateState), "FwUpdateState|Failed\n");
snprintf(fwdls.failureReason, sizeof(fwdls.failureReason), "FailureReason|firmwareFile is not present\n");
Expand All @@ -760,7 +732,6 @@ namespace WPEFramework {
if(firmwareType !=""){
if (firmwareType != "PCI" && firmwareType != "DRI") {
SWUPDATEERR("firmwareType must be either 'PCI' or 'DRI'.");
dispatchAndUpdateEvent(_VALIDATION_FAILED,"");
snprintf(fwdls.status, sizeof(fwdls.status), "Status|Failure\n");
snprintf(fwdls.FwUpdateState, sizeof(fwdls.FwUpdateState), "FwUpdateState|Failed\n");
snprintf(fwdls.failureReason, sizeof(fwdls.failureReason), "FailureReason|firmwareType must be either 'PCI' or 'DRI'.\n");
Expand All @@ -772,7 +743,6 @@ namespace WPEFramework {
else
{
SWUPDATEERR("firmwareType is empty");
dispatchAndUpdateEvent(_VALIDATION_FAILED,"");
snprintf(fwdls.status, sizeof(fwdls.status), "Status|Failure\n");
snprintf(fwdls.FwUpdateState, sizeof(fwdls.FwUpdateState), "FwUpdateState|Failed\n");
snprintf(fwdls.failureReason, sizeof(fwdls.failureReason), "FailureReason|firmwareType is empty\n");
Expand All @@ -781,6 +751,35 @@ namespace WPEFramework {
return status;
}

string name = firmwareFilepath.substr(firmwareFilepath.find_last_of("/\\") + 1);
string path = firmwareFilepath.substr(0, firmwareFilepath.find_last_of("/\\") + 1);

string currentFlashedImage = readProperty("/version.txt","imagename", ":") ;
SWUPDATEINFO("currentFlashedImage : %s",currentFlashedImage.c_str());
std::string fileWithoutExtension ="";
// Find the position of the last '.'
size_t dotPos = name.find_last_of('.');
if (dotPos != std::string::npos) {
// Extract substring before the '.'
fileWithoutExtension = name.substr(0, dotPos);
} else {
// If no '.' is found, use the original string
fileWithoutExtension = name;
}

if (fileWithoutExtension == currentFlashedImage)
{

SWUPDATEERR("FW version of the active image and the image to be upgraded are the same. No upgrade required. imagename : %s" ,name.c_str());
snprintf(fwdls.status, sizeof(fwdls.status), "Status|No upgrade needed\n");
snprintf(fwdls.FwUpdateState, sizeof(fwdls.FwUpdateState), "FwUpdateState|No upgrade needed\n");
snprintf(fwdls.failureReason, sizeof(fwdls.failureReason), "FailureReason|No upgrade needed\n");
updateFWDownloadStatus(&fwdls, dri.c_str(),initiated_type.c_str());
status = Core::ERROR_FIRMWAREUPDATE_UPTODATE;
return status;
}


// Ensure only one flashing operation happens at a time
bool expected = false;
if (!isFlashingInProgress.compare_exchange_strong(expected, true)) {
Expand Down Expand Up @@ -1353,11 +1352,7 @@ bool copyFileToDirectory(const char *source_file, const char *destination_dir) {

// Extract file name from the source file path
const char *file_name = strrchr(source_file, '/');
if (!file_name) {
SWUPDATEERR("Invalid source file path: %s\n", source_file);
return false;
}
file_name++; // Skip the '/' character
file_name = file_name ? file_name + 1 : source_file;

// Construct the destination file path
std::string dest_file_path = std::string(destination_dir) + "/" + file_name;
Expand Down Expand Up @@ -1385,12 +1380,16 @@ bool copyFileToDirectory(const char *source_file, const char *destination_dir) {
return false;
}

if (src.peek() == std::ifstream::traits_type::eof()) {
SWUPDATEINFO("Source file is empty. Copying as empty file.\n");
}

// Copy the file content
dest << src.rdbuf();

// Check if the copy was successful
if (!src || !dest) {
SWUPDATEERR("Error: File copy failed.\n");
// Check for actual I/O errors (ignore EOF)
if (src.bad() || dest.bad()) {
SWUPDATEERR("Error: File copy failed due to I/O error.\n");
return false;
}

Expand Down
50 changes: 5 additions & 45 deletions Tests/L2Tests/tests/FirmwareUpdate_L2Test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,17 +90,7 @@ TEST_F(FirmwareUpdateTest,EmptyFirmwareFilepath)
params["firmwareType"] = "PCI";
status = InvokeServiceMethod("org.rdk.FirmwareUpdate", "updateFirmware", params, result);

JsonObject params1;
JsonObject result1;
status = InvokeServiceMethod("org.rdk.FirmwareUpdate", "getUpdateState", params1, result1);
EXPECT_EQ(Core::ERROR_NONE, status);

if (result1.HasLabel("state")) {
EXPECT_STREQ("VALIDATION_FAILED", result1["state"].String().c_str());
}
if (result1.HasLabel("substate")) {
EXPECT_STREQ("FIRMWARE_NOT_FOUND", result1["substate"].String().c_str());
}
EXPECT_NE(status,Core::ERROR_NONE);
}

TEST_F(FirmwareUpdateTest,EmptyFirmwareType)
Expand All @@ -116,18 +106,7 @@ TEST_F(FirmwareUpdateTest,EmptyFirmwareType)
params["firmwareFilepath"] = "/tmp/ELTE11MWR_MIDDLEWARE_DEV_default_20241122145614.bin";
params["firmwareType"] = "";
status = InvokeServiceMethod("org.rdk.FirmwareUpdate", "updateFirmware", params, result);

JsonObject params1;
JsonObject result1;
status = InvokeServiceMethod("org.rdk.FirmwareUpdate", "getUpdateState", params1, result1);
EXPECT_EQ(Core::ERROR_NONE, status);

if (result1.HasLabel("state")) {
EXPECT_STREQ("VALIDATION_FAILED", result1["state"].String().c_str());
}
if (result1.HasLabel("substate")) {
EXPECT_STREQ("NOT_APPLICABLE", result1["substate"].String().c_str());
}
EXPECT_NE(status,Core::ERROR_NONE);
}
}

Expand All @@ -143,19 +122,12 @@ TEST_F(FirmwareUpdateTest,InvalidFirmwareType)
params["firmwareFilepath"] = "/tmp/ELTE11MWR_MIDDLEWARE_DEV_default_20241122145614.bin";
params["firmwareType"] = "ABC";
status = InvokeServiceMethod("org.rdk.FirmwareUpdate", "updateFirmware", params, result);
EXPECT_NE(status,Core::ERROR_NONE);


JsonObject params1;
JsonObject result1;
status = InvokeServiceMethod("org.rdk.FirmwareUpdate", "getUpdateState", params1, result1);
EXPECT_EQ(Core::ERROR_NONE, status);

if (result1.HasLabel("state")) {
EXPECT_STREQ("VALIDATION_FAILED", result1["state"].String().c_str());
}
if (result1.HasLabel("substate")) {
EXPECT_STREQ("NOT_APPLICABLE", result1["substate"].String().c_str());
}
}
}

Expand All @@ -173,18 +145,7 @@ TEST_F(FirmwareUpdateTest,FirmwareFilepath_not_exist)
if (std::remove(filePath) == 0) {
std::cout << "File removed successfully.\n";
status = InvokeServiceMethod("org.rdk.FirmwareUpdate", "updateFirmware", params, result);

JsonObject params1;
JsonObject result1;
status = InvokeServiceMethod("org.rdk.FirmwareUpdate", "getUpdateState", params1, result1);
EXPECT_EQ(Core::ERROR_NONE, status);

if (result1.HasLabel("state")) {
EXPECT_STREQ("VALIDATION_FAILED", result1["state"].String().c_str());
}
if (result1.HasLabel("substate")) {
EXPECT_STREQ("FIRMWARE_NOT_FOUND", result1["substate"].String().c_str());
}
EXPECT_NE(status,Core::ERROR_NONE);
}
}

Expand All @@ -206,8 +167,7 @@ TEST_F(FirmwareUpdateTest,FirmwareUptoDateValidatation)
params["firmwareFilepath"] = "/tmp/ELTE11MWR_MIDDLEWARE_DEV_default_20241122145614.bin";
params["firmwareType"] = "PCI";
status = InvokeServiceMethod("org.rdk.FirmwareUpdate", "updateFirmware", params, result);
EXPECT_EQ(Core::ERROR_NONE, status);
sleep(5);
EXPECT_NE(status,Core::ERROR_NONE);
}
}

Expand Down
5 changes: 3 additions & 2 deletions build_dependencies.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ git clone --branch R4.4.1 https://github.com/rdkcentral/Thunder.git

git clone --branch main https://github.com/rdkcentral/entservices-apis.git

git clone https://[email protected]/rdkcentral/entservices-testframework.git
git clone --branch RDKEMW-4719_upto_date_validation https://[email protected]/rdkcentral/entservices-testframework.git

############################
# Build Thunder-Tools
Expand Down Expand Up @@ -63,6 +63,7 @@ patch -p1 < $GITHUB_WORKSPACE/entservices-testframework/patches/Use_Legact_Alt_B
patch -p1 < $GITHUB_WORKSPACE/entservices-testframework/patches/error_code_R4_4.patch
patch -p1 < $GITHUB_WORKSPACE/entservices-testframework/patches/1004-Add-support-for-project-dir.patch
patch -p1 < $GITHUB_WORKSPACE/entservices-testframework/patches/RDKEMW-733-Add-ENTOS-IDS.patch
patch -p1 < $GITHUB_WORKSPACE/entservices-testframework/patches/FirmwareUpdate_UptoDate.patch
cd -

cmake -G Ninja -S Thunder -B build/Thunder \
Expand Down Expand Up @@ -170,4 +171,4 @@ echo "==========================================================================
cd ../../
cp -r /usr/include/gstreamer-1.0/gst /usr/include/glib-2.0/* /usr/lib/x86_64-linux-gnu/glib-2.0/include/* /usr/local/include/trower-base64/base64.h .

ls -la ${GITHUB_WORKSPACE}
ls -la ${GITHUB_WORKSPACE}
Loading