diff --git a/.github/workflows/L2-tests.yml b/.github/workflows/L2-tests.yml index 32000cee..f4718d23 100755 --- a/.github/workflows/L2-tests.yml +++ b/.github/workflows/L2-tests.yml @@ -107,7 +107,15 @@ jobs: with: repository: rdkcentral/entservices-testframework path: entservices-testframework - ref: develop + ref: feature/L2mock + token: ${{ secrets.RDKCM_RDKE }} + + - name: Checkout networkmanager + uses: actions/checkout@v3 + with: + repository: rdkcentral/networkmanager + path: networkmanager + ref: feature/L2mock token: ${{ secrets.RDKCM_RDKE }} - name: Checkout googletest @@ -197,7 +205,7 @@ jobs: cmake --build build/entservices-apis -j8 && cmake --install build/entservices-apis - + - name: Generate external headers # Empty headers to mute errors run: > @@ -369,6 +377,7 @@ jobs: -DCMAKE_DISABLE_FIND_PACKAGE_RFC=ON -DCMAKE_DISABLE_FIND_PACKAGE_RBus=ON -DPLUGIN_FIRMWAREUPDATE=ON + -DPLUGIN_MAINTENANCEMANAGER=ON -DUSE_THUNDER_R4=ON -DPLUGIN_L2Tests=ON -DRDK_SERVICE_L2_TEST=ON @@ -378,6 +387,17 @@ jobs: cmake --build build/entservices-softwareupdate -j8 && cmake --install build/entservices-softwareupdate + + - name: Generate IARM headers + run: | + touch install/usr/lib/libIARMBus.so + mkdir -p install/usr/include/rdk/iarmbus + touch install/usr/include/rdk/iarmbus/libIARM.h + cd "${{github.workspace}}/networkmanager/tests/" + mkdir -p headers/rdk/iarmbus + cd headers + touch rdk/iarmbus/libIARM.h rdk/iarmbus/libIBus.h + - name: Build entservices-testframework run: > @@ -388,6 +408,8 @@ jobs: -DCMAKE_INSTALL_PREFIX="$GITHUB_WORKSPACE/install/usr" -DCMAKE_MODULE_PATH="$GITHUB_WORKSPACE/install/tools/cmake" -DHIDE_NON_EXTERNAL_SYMBOLS=OFF + -DRDK_SERVICE_L2_TEST=ON + -DL2_TEST_OOP_RPC=ON -DCMAKE_CXX_FLAGS=" -DEXCEPTIONS_ENABLE=ON -fprofile-arcs @@ -397,6 +419,7 @@ jobs: -DTHUNDER_VERSION_MAJOR=4 -DTHUNDER_VERSION_MINOR=4 -DDEVICE_TYPE=AVOutputTV + -DMOCKACCESSOR_LIBRARIES=ON -DPLUGIN_PERSISTENTSTORE_PATH="/tmp/secure/persistent/rdkservicestore" -DPLUGIN_PERSISTENTSTORE_LEGACYPATH="/tmp/persistent/rdkservicestore" -I $GITHUB_WORKSPACE/entservices-testframework/Tests/headers @@ -440,6 +463,7 @@ jobs: -DCMAKE_DISABLE_FIND_PACKAGE_RFC=ON -DCMAKE_DISABLE_FIND_PACKAGE_RBus=ON -DPLUGIN_FIRMWAREUPDATE=ON + -DPLUGIN_MAINTENANCEMANAGER=ON -DUSE_THUNDER_R4=ON -DPLUGIN_L2Tests=ON -DRDK_SERVICE_L2_TEST=ON @@ -554,8 +578,7 @@ jobs: LD_LIBRARY_PATH=$GITHUB_WORKSPACE/install/usr/lib:$GITHUB_WORKSPACE/install/usr/lib/wpeframework/plugins:${LD_LIBRARY_PATH} RdkServicesL2Test && cp -rf $(pwd)/rdkL2TestResults.json $GITHUB_WORKSPACE/rdkL2TestResultsWithoutValgrind.json && - rm -rf $(pwd)/rdkL2TestResults.json - + rm -rf $(pwd)/rdkL2TestResults.json - name: Run unit tests with valgrind if: ${{ !env.ACT }} run: > diff --git a/MaintenanceManager/CMakeLists.txt b/MaintenanceManager/CMakeLists.txt index fab96858..6b2be569 100644 --- a/MaintenanceManager/CMakeLists.txt +++ b/MaintenanceManager/CMakeLists.txt @@ -21,7 +21,7 @@ set(MODULE_NAME ${NAMESPACE}${PLUGIN_NAME}) set(PLUGIN_MAINTENANCEMGR_STARTUPORDER "" CACHE STRING "To configure startup order of MaintenanceManager plugin") find_package(${NAMESPACE}Plugins REQUIRED) - +#add_executable(${MODULE_NAME} add_library(${MODULE_NAME} SHARED MaintenanceManager.cpp Module.cpp) @@ -61,6 +61,17 @@ if (ENABLE_JOURNAL_LOGGING) target_link_libraries(${MODULE_NAME} PRIVATE systemd) endif() +if (RDK_SERVICE_L2_TEST) + find_library(TESTMOCKLIB_LIBRARIES NAMES TestMocklib) + if (TESTMOCKLIB_LIBRARIES) + message ("linking mock libraries ${TESTMOCKLIB_LIBRARIES} library") + target_link_libraries(${MODULE_NAME} PRIVATE ${TESTMOCKLIB_LIBRARIES}) + target_link_options(${MODULE_NAME} PRIVATE -Wl,--wrap,open -Wl,--wrap,mkdir -Wl,--wrap,mount -Wl,--wrap,umount -Wl,--wrap,ioctl -Wl,--wrap,statvfs -Wl,--wrap,statfs -Wl,--wrap,stat -Wl,--wrap,rmdir) + else (TESTMOCKLIB_LIBRARIES) + message ("Require ${TESTMOCKLIB_LIBRARIES} library") + endif (TESTMOCKLIB_LIBRARIES) +endif (RDK_SERVICES_L2_TEST) + # Add Task Timeout if (TASK_TIMEOUT) message(STATUS "Task Timeout set to ${TASK_TIMEOUT}") diff --git a/MaintenanceManager/MaintenanceManager.cpp b/MaintenanceManager/MaintenanceManager.cpp index 2f667547..47e55264 100644 --- a/MaintenanceManager/MaintenanceManager.cpp +++ b/MaintenanceManager/MaintenanceManager.cpp @@ -332,6 +332,7 @@ namespace WPEFramework Register("startMaintenance", &MaintenanceManager::startMaintenance, this); Register("stopMaintenance", &MaintenanceManager::stopMaintenance, this); Register("getMaintenanceMode", &MaintenanceManager::getMaintenanceMode, this); + Register("isConnectedToInternet", &MaintenanceManager::isConnectedToInternet, this); MaintenanceManager::m_task_map[task_names_foreground[TASK_RFC].c_str()] = false; MaintenanceManager::m_task_map[task_names_foreground[TASK_SWUPDATE].c_str()] = false; @@ -535,9 +536,9 @@ namespace WPEFramework else /* system() executes successfully */ { MM_LOGINFO("Waiting to unlock.. [%d/%d]", i + 1, (int)tasks.size()); -#if !defined(GTEST_ENABLE) - task_thread.wait(lck); -#endif +//#if !defined(GTEST_ENABLE) +// task_thread.wait(lck); +//#endif if (task_stopTimer()) { MM_LOGINFO("Stopped Timer Successfully"); @@ -1243,12 +1244,13 @@ namespace WPEFramework { JsonObject joGetParams; JsonObject joGetResult; - std::string callsign = "org.rdk.Network.1"; + std::string callsign = "org.rdk.MaintenanceManager"; + //std::string callsign = "org.rdk.Network.1"; PluginHost::IShell::state state; string token; - if ((getServiceState(m_service, "org.rdk.Network", state) == Core::ERROR_NONE) && (state == PluginHost::IShell::state::ACTIVATED)) + if ((getServiceState(m_service, "org.rdk.MaintenanceManager", state) == Core::ERROR_NONE) && (state == PluginHost::IShell::state::ACTIVATED)) { MM_LOGINFO("Network plugin is active"); @@ -1301,8 +1303,11 @@ namespace WPEFramework auto thunder_client = make_shared>(callsign.c_str(), "", false, query); if (thunder_client != nullptr) { - uint32_t status = thunder_client->Invoke(5000, "isConnectedToInternet", joGetParams, joGetResult); - if (status > 0) + uint32_t status = 0; + status = thunder_client->Invoke(5000, "isConnectedToInternet", joGetParams, joGetResult); + + MM_LOGINFO("%s call failed %d", callsign.c_str(), status); + if (status > 0) { MM_LOGINFO("%s call failed %d", callsign.c_str(), status); #if defined(GTEST_ENABLE) @@ -1313,11 +1318,16 @@ namespace WPEFramework } else if (joGetResult.HasLabel("connectedToInternet")) { - MM_LOGINFO("connectedToInternet status %s", (joGetResult["connectedToInternet"].Boolean()) ? "true" : "false"); + + std::string jsonStr; + joGetResult.ToString(jsonStr); + MM_LOGINFO("joGetResult content: %s", jsonStr.c_str()); + MM_LOGINFO("connectedToInternet status %s", (joGetResult["connectedToInternet"].Boolean()) ? "true" : "false"); return joGetResult["connectedToInternet"].Boolean(); } else { + MM_LOGINFO("checkNetwork reaching here- returning false"); return false; } } @@ -2677,6 +2687,18 @@ namespace WPEFramework MM_SEND_NOTIFY(EVT_ONMAINTENANCSTATUSCHANGE, params); #endif } + uint32_t MaintenanceManager::isConnectedToInternet(const JsonObject& parameters, JsonObject& response) + { + uint32_t rc = Core::ERROR_NONE; + MM_LOGINFO("Inside isConnectedTointernet"); + //response["connectedToInternet"] = "true"; + response["connectedToInternet"] = true; + response["success"] = "true"; + return rc; + } + + + } /* namespace Plugin */ } /* namespace WPEFramework */ diff --git a/MaintenanceManager/MaintenanceManager.h b/MaintenanceManager/MaintenanceManager.h index 282f9ad4..30f41ff1 100644 --- a/MaintenanceManager/MaintenanceManager.h +++ b/MaintenanceManager/MaintenanceManager.h @@ -326,6 +326,8 @@ namespace WPEFramework uint32_t startMaintenance(const JsonObject ¶meters, JsonObject &response); uint32_t stopMaintenance(const JsonObject ¶meters, JsonObject &response); uint32_t getMaintenanceMode(const JsonObject ¶meters, JsonObject &response); + uint32_t isConnectedToInternet(const JsonObject& parameters, JsonObject& response); + }; /* end of MaintenanceManager service class */ } /* end of plugin */ } /* end of wpeframework */ diff --git a/Tests/L2Tests/CMakeLists.txt b/Tests/L2Tests/CMakeLists.txt index fcaca29d..ce6bb6e9 100755 --- a/Tests/L2Tests/CMakeLists.txt +++ b/Tests/L2Tests/CMakeLists.txt @@ -26,6 +26,10 @@ if(PLUGIN_FIRMWAREUPDATE) set(SRC_FILES ${SRC_FILES} tests/FirmwareUpdate_L2Test.cpp) endif() +if(PLUGIN_MAINTENANCEMANAGER) +set(SRC_FILES ${SRC_FILES} tests/MaintenancemanagerL2.cpp) +endif() + add_library(${MODULE_NAME} SHARED ${SRC_FILES}) set_target_properties(${MODULE_NAME} PROPERTIES @@ -65,6 +69,7 @@ target_include_directories( ../../../entservices-testframework/Tests/mocks/thunder ../../../entservices-testframework/Tests/mocks/devicesettings ../../../entservices-testframework/Tests/mocks/MockPlugin + ../../../entservices-testframework/Tests/mocks/MockNetwork ../../../entservices-testframework/Tests/L2Tests/L2TestsPlugin ${CMAKE_INSTALL_PREFIX}/include ) diff --git a/Tests/L2Tests/tests/MaintenancemanagerL2.cpp b/Tests/L2Tests/tests/MaintenancemanagerL2.cpp new file mode 100644 index 00000000..db9d2997 --- /dev/null +++ b/Tests/L2Tests/tests/MaintenancemanagerL2.cpp @@ -0,0 +1,179 @@ +#include +#include +#include "L2Tests.h" +#include "L2TestsMock.h" +#include +#include +#include +#include "MockNetworkPlugin.h" +//#include "MockNetworkPlugin.cpp" + +//gv +using ::testing::_; +using ::testing::Invoke; +using ::testing::Test; +using ::testing::StrEq; +using namespace WPEFramework; + +/* +#define TEST_LOG(x, ...) fprintf( stderr, "\033[1;32m[%s:%d](%s)" x "\n\033[0m", __FILE__, __LINE__, __FUNCTION__, getpid(), gettid(), ##__VA_ARGS__); fflush(stderr); + +#define JSON_TIMEOUT (1000) +*/ +#define MAINTENANCEMANAGER_CALLSIGN _T("org.rdk.MaintenanceManager") +#define MAINTENANCEMANAGERL2TEST_CALLSIGN _T("L2tests.1") + + + +class MaintenanceManagerTest : public L2TestMocks { +protected: + virtual ~MaintenanceManagerTest() override; + +public: + MaintenanceManagerTest(); +}; + +MaintenanceManagerTest::MaintenanceManagerTest() : L2TestMocks() { + IARM_EventHandler_t controlEventHandler_; + uint32_t status = Core::ERROR_GENERAL; + status = ActivateService("org.rdk.MaintenanceManager"); + EXPECT_EQ(Core::ERROR_NONE, status); + status =ActivateService("org.rdk.Network"); + EXPECT_EQ(Core::ERROR_NONE, status); + /* + EXPECT_CALL(*p_iarmBusImplMock, IARM_Bus_RegisterEventHandler(StrEq(IARM_BUS_MAINTENANCE_MGR_NAME),IARM_BUS_MAINTENANCEMGR_EVENT_UPDATE, _)) + .WillOnce(Invoke( + [&](const char* ownerName, IARM_EventId_t eventId, IARM_EventHandler_t handler) { + controlEventHandler_ = handler; + return IARM_RESULT_SUCCESS; + })); */ + + +/* EXPECT_CALL(*p_iarmBusImplMock, IARM_Bus_RegisterEventHandler(StrEq(IARM_BUS_MAINTENANCE_MGR_NAME), IARM_BUS_DCM_NEW_START_TIME_EVENT, _)) + .WillRepeatedly(Invoke( + [&](const char* ownerName, IARM_EventId_t eventId, IARM_EventHandler_t handler) { + EXPECT_TRUE(isValidCtrlmRcuIarmEvent(eventId)); + controlEventHandler_ = handler; + return IARM_RESULT_SUCCESS; + })); */ + + // PluginHost::IShell::state state = PluginHost::IShell::state::ACTIVATED; //ghg + //ActivateService("org.rdk.Network"); + //status = ActivateService("org.rdk.MockPlugin"); + // EXPECT_EQ(Core::ERROR_NONE, status); + + +/* + status = ActivateService("org.rdk.Network"); + EXPECT_EQ(Core::ERROR_NONE, status); + +*/ + /* status = ActivateService("org.rdk.Network"); + EXPECT_EQ(Core::ERROR_NONE, status); + status = Core::ERROR_GENERAL; + status = ActivateService("org.rdk.AuthService"); + EXPECT_EQ(Core::ERROR_NONE, status); + status = Core::ERROR_GENERAL; */ + + /* + status = Core::ERROR_GENERAL; + status = ActivateService("org.rdk.Network.1"); + status = ActivateService("org.rdk.MaintenanceManager"); + EXPECT_EQ(Core::ERROR_NONE, status); + JsonObject params, params1; + JsonObject results, results1; + params1["ipversion"] ="IPv4"; */ + + //status = InvokeServiceMethod("org.rdk.MaintenanceManager", "isConnectedToInternet", params1, results1); + //status = InvokeServiceMethod("org.rdk.Network", "isConnectedToInternet", params1, results1); +} + +MaintenanceManagerTest::~MaintenanceManagerTest() { + uint32_t status = Core::ERROR_GENERAL; + status = DeactivateService("org.rdk.MaintenanceManager"); + // EXPECT_EQ(Core::ERROR_NONE, status); //hbhj +} + +//worked +// commented background + +TEST_F(MaintenanceManagerTest, TestStartMaintenance) +{ + JsonObject params, params1; + JsonObject results, results1; + params["maintenanceMode"] = "BACKGROUND"; + params["optOut"] = "IGNORE_UPDATE"; + + //InvokeServiceMethod("org.rdk.MaintenanceManager", "isConnectedToInternet", params1, results1); + + EXPECT_CALL(*p_iarmBusImplMock, IARM_Bus_BroadcastEvent) + .Times(::testing::AnyNumber()) + .WillRepeatedly( + [](const char* ownerName, int eventId, void* arg, size_t argLen) { + return IARM_RESULT_SUCCESS; + }); + sleep(30); + uint32_t status = InvokeServiceMethod("org.rdk.MaintenanceManager", "setMaintenanceMode", params, results); + + params1["ipversion"] ="IPv4"; + //InvokeServiceMethod("org.rdk.MaintenanceManager", "isConnectedToInternet", params1, results1); + //InvokeServiceMethod("org.rdk.Network.1", "isConnectedToInternet", params1, results1); + ASSERT_EQ(status, Core::ERROR_NONE); + ASSERT_EQ(results["success"].Boolean(), true); + DeactivateService("org.rdk.MaintenanceManager"); + + + //status = DeactivateService("org.rdk.MaintenanceManager"); //jjj + // EXPECT_EQ(Core::ERROR_NONE, status); +} + + +/* working +TEST_F(MaintenanceManagerTest, TestStartMaintenance1) +{ + JsonObject params; + JsonObject results; + params["reason"] = "scheduled"; + uint32_t status = InvokeServiceMethod("org.rdk.MaintenanceManager", "startMaintenance", params, results); + + ASSERT_EQ(status, Core::ERROR_NONE); + ASSERT_EQ(results["success"].Boolean(), true); +} +*/ + + + +/* +TEST_F(L2TestMocks, TestStartMaintenance) +{ + JsonObject params; + JsonObject results; + params["reason"] = "scheduled"; + uint32_t status = InvokeServiceMethod("MaintenanceManager.1", "startMaintenance", params, results); + + ASSERT_EQ(status, Core::ERROR_NONE); + ASSERT_EQ(results["success"].Boolean(), true); +} +*/ + +/* +TEST_F(MaintenanceManagerTest, EmptyPartnerId) { + JsonObject params, result; + params["partnerId"] = ""; + uint32_t status = InvokeServiceMethod("org.rdk.MaintenanceManager", "isConnectedToInternet", params, result); + EXPECT_NE(status, Core::ERROR_NONE); // Should fail or return error for empty partnerId +} +*/ + +// +/* +TEST_F(MaintenanceManagerTest, ValidDeviceInitializationContext) { + + JsonObject contextData, fullResponse, result; + contextData["partnerId"] = "Sky"; + contextData["regionalConfigService"] = "region.sky.com"; + fullResponse["deviceInitializationContext"] = contextData; + uint32_t status = InvokeServiceMethod("org.rdk.MaintenanceManager", "setDeviceInitializationContext", fullResponse, result); + EXPECT_EQ(status, Core::ERROR_NONE); //hbbhkm +*/ +