diff --git a/.github/workflows/validate_pr_desc.yml b/.github/workflows/validate_pr_desc.yml new file mode 100644 index 00000000..b6249ff7 --- /dev/null +++ b/.github/workflows/validate_pr_desc.yml @@ -0,0 +1,82 @@ +name: PR Title Validation +permissions: + contents: read +on: + pull_request: + branches: [develop, main, 'support/**', 'hotfix/**', 'topic/**'] + types: [opened, edited, synchronize] + +jobs: + validate-pr-title: + runs-on: ubuntu-latest + steps: + - name: Validate PR Title Only + env: + PR_TITLE: ${{ github.event.pull_request.title }} + run: | + # Define valid ticket IDs + VALID_TICKET_IDS=("RDKEMW") + + # Function to validate ticket format and ID + validate_ticket() { + local text="$1" + + echo "Validating PR title: $text" + + # Check if text matches the pattern - : + if [[ ! "$text" =~ ^[A-Z0-9]+-[0-9]+[[:space:]]*:[[:space:]]*.+ ]]; then + echo "ERROR: PR title format is invalid." + echo "Expected format: - : " + echo "Example: RDKEMW-123 : Fix playbook issue" + echo "" + echo "Valid ticket IDs are:" + printf "%s\n" "${VALID_TICKET_IDS[@]}" + return 1 + fi + + # Extract ticket ID from the text + local ticket_prefix=$(echo "$text" | sed -n 's/^\([A-Z0-9]\+\)-[0-9]\+[[:space:]]*:.*$/\1/p') + + if [ -z "$ticket_prefix" ]; then + echo "ERROR: Could not extract ticket ID from PR title." + echo "Expected format: - : " + echo "" + echo "Valid ticket IDs are:" + printf "%s\n" "${VALID_TICKET_IDS[@]}" + return 1 + fi + + # Check if extracted ticket ID is in the valid list + local valid=false + for valid_id in "${VALID_TICKET_IDS[@]}"; do + if [ "$ticket_prefix" = "$valid_id" ]; then + valid=true + break + fi + done + + if [ "$valid" = false ]; then + echo "ERROR: Invalid ticket ID '$ticket_prefix' in PR title" + echo "" + echo "Valid ticket IDs are:" + printf "%s\n" "${VALID_TICKET_IDS[@]}" + echo "" + echo "Your PR title should start with one of the above ticket IDs followed by a number." + echo "Example: RDKEMW-123 : Fix playbook issue" + return 1 + fi + + echo "PR title validation passed! Ticket ID: $ticket_prefix" + return 0 + } + + # Validate PR Title Only + echo "=== Validating PR Title ===" + if ! validate_ticket "$PR_TITLE"; then + echo "" + echo "VALIDATION FAILED: PR title must contain valid ticket ID from the approved list." + exit 1 + fi + + echo "" + echo "🎉 PR TITLE VALIDATION PASSED! Title contains valid ticket ID." diff --git a/CHANGELOG.md b/CHANGELOG.md index 0cf9af89..37b74361 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,29 @@ All notable changes to this RDK Service will be documented in this file. * Changes in CHANGELOG should be updated when commits are added to the main or release branches. There should be one CHANGELOG entry per JIRA Ticket. This is not enforced on sprint branches since there could be multiple changes for the same JIRA ticket during development. +## [1.11.0] - 2025-12-19 +### Added +- Added support to build for Thunder R5.x + +## [1.10.0] - 2025-12-05 +### Fixed +- Fixed the GetIPSettings for RDK Backend to return only when all the information like DNS info retrieved +- Fixed the retrieval of psk to pass it to MfrMgr. + +## [1.9.0] - 2025-11-21 +### Added +- Added shortterm solution to print the AP Info + +## [1.8.0] - 2025-11-14 +### Fixed +- Removed logging of WiFi PII information + +## [1.7.0] - 2025-11-13 +### Fixed +- Fixed bug MfrMgr Integration +- Subscribed to WiFi Events even when the device boots with wifi disabled +- Fixed the WiFi signal monitoring as the reporred RSSI was stale data + ## [1.6.0] - 2025-10-31 ### Added - Integrated MfrMgr to persist WiFi Credential for DRI & Rollback to RDK-V Backend diff --git a/CMakeLists.txt b/CMakeLists.txt index 1ea85ed5..69be7c5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,11 +19,25 @@ cmake_minimum_required(VERSION 3.3) project(NetworkManager) -find_package(WPEFramework) + +# Try WPEFramework first +find_package(WPEFramework QUIET CONFIG) + +# If WPEFramework isn't found, try Thunder +if (NOT WPEFramework_FOUND) + find_package(Thunder QUIET CONFIG) +endif() + +# Error out if neither is found +if (NOT WPEFramework_FOUND AND NOT Thunder_FOUND) + message(FATAL_ERROR + "Neither WPEFramework nor Thunder could be found.\n" + "Install one of them and ensure its CMake package is discoverable via CMAKE_PREFIX_PATH or default locations.") +endif() list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") set(VERSION_MAJOR 1) -set(VERSION_MINOR 6) +set(VERSION_MINOR 11) set(VERSION_PATCH 0) add_compile_definitions(NETWORKMANAGER_MAJOR_VERSION=${VERSION_MAJOR}) diff --git a/definition/NetworkManager.json b/definition/NetworkManager.json index 7b819ffc..93f03d45 100644 --- a/definition/NetworkManager.json +++ b/definition/NetworkManager.json @@ -5,11 +5,10 @@ "title": "NetworkManager Plugin", "class": "NetworkManager", "callsign": "org.rdk.NetworkManager", - "locator": "libWPEFrameworkNetworkManager.so", "status": "production", "description": "A Unified `NetworkManager` plugin that allows you to manage Ethernet and Wifi interfaces on the device.", "sourcelocation": "https://github.com/rdkcentral/networkmanager/blob/main/definition/NetworkManager.json", - "version": "1.6.0" + "version": "1.11.0" }, "definitions": { "success": { @@ -135,7 +134,7 @@ "noise":{ "summary": "The WiFi Signal Noise detected in dBm", "type": "string", - "example": "-106" + "example": "-96" }, "snr":{ "summary": "Signal to Noise Ratio(SNR) in dBm", diff --git a/docs/NetworkManagerPlugin.md b/docs/NetworkManagerPlugin.md index 5764c645..17276b3f 100644 --- a/docs/NetworkManagerPlugin.md +++ b/docs/NetworkManagerPlugin.md @@ -2,7 +2,7 @@ # NetworkManager Plugin -**Version: 1.6.0** +**Version: 1.11.0** **Status: :black_circle::black_circle::black_circle:** @@ -23,7 +23,7 @@ org.rdk.NetworkManager interface for Thunder framework. ## Scope -This document describes purpose and functionality of the org.rdk.NetworkManager interface (version 1.6.0). It includes detailed specification about its methods provided and notifications sent. +This document describes purpose and functionality of the org.rdk.NetworkManager interface (version 1.11.0). It includes detailed specification about its methods provided and notifications sent. ## Case Sensitivity @@ -1398,7 +1398,7 @@ This method takes no parameters. "strength": "-32", "frequency": "2.4420", "rate": "144", - "noise": "-106", + "noise": "-96", "success": true } } @@ -1552,7 +1552,7 @@ This method takes no parameters. "quality": "Excellent", "snr": "74", "strength": "-32", - "noise": "-106", + "noise": "-96", "success": true } } @@ -1947,7 +1947,7 @@ Triggered when WIFI Signal quality changed which is decided based on SNR value w "quality": "Excellent", "snr": "74", "strength": "-32", - "noise": "-106" + "noise": "-96" } } ``` diff --git a/legacy/LegacyNetworkAPIs.cpp b/legacy/LegacyNetworkAPIs.cpp index bc0a669e..7bf3b941 100644 --- a/legacy/LegacyNetworkAPIs.cpp +++ b/legacy/LegacyNetworkAPIs.cpp @@ -25,7 +25,7 @@ using namespace WPEFramework::Plugin; #define API_VERSION_NUMBER_MAJOR 2 #define API_VERSION_NUMBER_MINOR 0 #define API_VERSION_NUMBER_PATCH 0 -#define NETWORK_MANAGER_CALLSIGN "org.rdk.NetworkManager.1" +#define NETWORK_MANAGER_CALLSIGN "org.rdk.NetworkManager" #define SUBSCRIPTION_TIMEOUT_IN_MILLISECONDS 500 #define DEFAULT_PING_PACKETS 15 diff --git a/legacy/LegacyWiFiManagerAPIs.cpp b/legacy/LegacyWiFiManagerAPIs.cpp index dc032dc8..a075e43e 100644 --- a/legacy/LegacyWiFiManagerAPIs.cpp +++ b/legacy/LegacyWiFiManagerAPIs.cpp @@ -26,7 +26,7 @@ using namespace WPEFramework::Plugin; #define API_VERSION_NUMBER_MAJOR 2 #define API_VERSION_NUMBER_MINOR 0 #define API_VERSION_NUMBER_PATCH 0 -#define NETWORK_MANAGER_CALLSIGN "org.rdk.NetworkManager.1" +#define NETWORK_MANAGER_CALLSIGN "org.rdk.NetworkManager" #define SUBSCRIPTION_TIMEOUT_IN_MILLISECONDS 500 #define WPA_SUPPLICANT_CONF "/opt/secure/wifi/wpa_supplicant.conf" diff --git a/plugin/CMakeLists.txt b/plugin/CMakeLists.txt index bd50eef6..abfd9998 100644 --- a/plugin/CMakeLists.txt +++ b/plugin/CMakeLists.txt @@ -56,7 +56,7 @@ add_definitions(-DPLUGIN_BUILD_REFERENCE=${PLUGIN_BUILD_REFERENCE}) include_directories(${PROJECT_SOURCE_DIR}/interface) include_directories(${PROJECT_SOURCE_DIR}/plugin) -# Build the main plugin that runs inside the WPEFramework daemon +# Build the main plugin that runs inside the daemon add_library(${MODULE_NAME} SHARED NetworkManager.cpp NetworkManagerJsonRpc.cpp @@ -104,6 +104,8 @@ if(ENABLE_GNOME_NETWORKMANAGER) if(ENABLE_MIGRATION_MFRMGR_SUPPORT) target_sources(${MODULE_IMPL_NAME} PRIVATE gnome/NetworkManagerGnomeMfrMgr.cpp + gnome/gdbus/NetworkManagerGdbusMgr.cpp + gnome/gdbus/NetworkManagerGdbusUtils.cpp ) endif() if(ENABLE_MIGRATION_MFRMGR_SUPPORT) diff --git a/plugin/NetworkManager.h b/plugin/NetworkManager.h index eb1dec58..6529e058 100644 --- a/plugin/NetworkManager.h +++ b/plugin/NetworkManager.h @@ -132,14 +132,6 @@ namespace WPEFramework void Deinitialize(PluginHost::IShell *service) override; string Information() const override; - //override Subscribe from IDispatcher - uint32_t Subscribe(const uint32_t channel, const string& event, const string& designator) override - { - NMLOG_DEBUG("Subscription received for %s event from channelID (%u) with designator as %s", event.c_str(), channel, designator.c_str()); - JSONRPC::Subscribe(channel, event, designator); - return Core::ERROR_NONE; - } - // Do not allow copy/move constructors NetworkManager(const NetworkManager &) = delete; NetworkManager &operator=(const NetworkManager &) = delete; diff --git a/plugin/NetworkManagerImplementation.cpp b/plugin/NetworkManagerImplementation.cpp index 69b018bb..ef3165a4 100644 --- a/plugin/NetworkManagerImplementation.cpp +++ b/plugin/NetworkManagerImplementation.cpp @@ -26,7 +26,7 @@ using namespace NetworkManagerLogger; #define CIDR_NETMASK_IP_LEN 32 #define SSID_COMMAND "wpa_cli status" -#define BSS_COMMAND "wpa_cli bss" +#define SIGNAL_POLL_COMMAND "wpa_cli signal_poll" namespace WPEFramework { @@ -841,116 +841,158 @@ namespace WPEFramework /* The below implementation of GetWiFiSignalQuality is a temporary mitigation. Need to be revisited */ uint32_t NetworkManagerImplementation::GetWiFiSignalQuality(string& ssid /* @out */, string& strength /* @out */, string& noise /* @out */, string& snr /* @out */, WiFiSignalQuality& quality /* @out */) { - uint32_t rc = Core::ERROR_RPC_CALL_FAILED; - int16_t readSnr = 0; - - std::string key, value; - int16_t readNoise = 0; - string bssid{}; + std::string key{}, value{}, bssid{}, band{}; char buff[512] = {'\0'}; - FILE *fp = NULL; - /* SSID */ + /* Get BSSID and SSID from wpa_cli status */ fp = popen(SSID_COMMAND, "r"); if (!fp) { - NMLOG_ERROR("Failed in getting output from command %s",SSID_COMMAND); - return Core::ERROR_RPC_CALL_FAILED; + NMLOG_ERROR("Failed in getting output from command %s", SSID_COMMAND); + return Core::ERROR_GENERAL; } - while ((!feof(fp)) && (fgets(buff, sizeof (buff), fp) != NULL)) { + + while ((!feof(fp)) && (fgets(buff, sizeof (buff), fp) != NULL)) + { std::istringstream mystream(buff); if(std::getline(std::getline(mystream, key, '=') >> std::ws, value)) { - if (key == "bssid") { + if (key == "ssid") { + ssid = value; + } + else if (key == "bssid") { bssid = value; - break; } + if (!ssid.empty() && !bssid.empty()) + break; } } pclose(fp); - /* Noise n RSSI */ - std::string bssCommand = std::string(BSS_COMMAND) + " " + bssid; - fp = popen(bssCommand.c_str(), "r"); + /* If BSSID is empty, WiFi is disconnected */ + if (bssid.empty()) { + NMLOG_WARNING("WiFi is disconnected (BSSID is empty)"); + quality = WiFiSignalQuality::WIFI_SIGNAL_DISCONNECTED; + ssid = ""; + strength = "0"; + noise = "0"; + snr = "0"; + return Core::ERROR_NONE; + } + + /*Get real-time signal data from wpa_cli signal_poll */ + fp = popen(SIGNAL_POLL_COMMAND, "r"); if (!fp) { - NMLOG_ERROR("Failed in getting output from command %s",BSS_COMMAND); - return Core::ERROR_RPC_CALL_FAILED; + NMLOG_ERROR("Failed in getting output from command %s", SIGNAL_POLL_COMMAND); + return Core::ERROR_GENERAL; } + + std::string linkSpeed; while ((!feof(fp)) && (fgets(buff, sizeof (buff), fp) != NULL)) { std::istringstream mystream(buff); if(std::getline(std::getline(mystream, key, '=') >> std::ws, value)) { - if (key == "level") { + if (key == "RSSI") { strength = value; } - else if (key == "noise") { + else if (key == "NOISE") { noise = value; } - else if (key == "ssid") { - ssid = value; + else if (key == "AVG_RSSI") { // if RSSI is not available + if (strength.empty()) + strength = value; + } + else if (key == "FREQUENCY") + { + if (!value.empty()) + { + int freq = std::stoi(value); + if (freq >= 2400 && freq < 5000) + band = "2.4GHz"; + else if (freq >= 5000 && freq < 6000) + band = "5GHz"; + else if (freq >= 6000) + band = "6GHz"; + else + band = "not known"; + } } - else if (key == "snr") { - snr = value; + else if (key == "LINKSPEED") + { + linkSpeed = value; } - if (!strength.empty() && !noise.empty() && !ssid.empty() && !snr.empty()) - break; } } pclose(fp); - /* NOTE: The std::stoi() will throw exception if the string input is empty; so set to 0 */ if (noise.empty()) - noise= "0"; - if (snr.empty()) - snr = "0"; + noise = "0"; if (strength.empty()) strength = "0"; - readNoise = std::stoi(noise); - readSnr = std::stoi(snr); + int16_t readRssi = std::stoi(strength); + int16_t readNoise = std::stoi(noise); + + /* Check the RSSI is within range between -10 and -100 dbm*/ + if (readRssi >= 0 || readRssi < -100) { + NMLOG_WARNING("Received RSSI (%d dBm) is out of valid range (-10 to -100 dBm); Resetting to default", readRssi); + if (readRssi >= 0) { + readRssi = -10; + } + else if (readRssi < -100) { + readRssi = -100; + } + } /* Check the Noise is within range between 0 and -96 dbm*/ if((readNoise >= 0) || (readNoise < DEFAULT_NOISE)) { NMLOG_DEBUG("Received Noise (%d) from wifi driver is not valid; so clamping it", readNoise); if (readNoise >= 0) { + readNoise = 0; noise = std::to_string(0); } else if (readNoise < DEFAULT_NOISE) { + readNoise = DEFAULT_NOISE; noise = std::to_string(DEFAULT_NOISE); } } + /*Calculate SNR = RSSI - Noise */ + int16_t calculatedSnr = readRssi - readNoise; + snr = std::to_string(calculatedSnr); + /* mapping rssi value when the SNR value is not proper */ - if(!(readSnr > 0 && readSnr <= MAX_SNR_VALUE)) + if(!(calculatedSnr > 0 && calculatedSnr <= MAX_SNR_VALUE)) { - NMLOG_WARNING("Received SNR (%d) from wifi driver is not valid; Lets map with RSSI (%s)", readSnr, strength.c_str()); - readSnr = std::stoi(strength); + NMLOG_WARNING("calculated SNR (%d) is not valid; Lets map with RSSI (%s)", calculatedSnr, strength.c_str()); + calculatedSnr = std::stoi(strength); /* Take the absolute value */ - readSnr = (readSnr < 0) ? -readSnr : readSnr; + calculatedSnr = (calculatedSnr < 0) ? -calculatedSnr : calculatedSnr; - snr = std::to_string(readSnr); + snr = std::to_string(calculatedSnr); } - NMLOG_INFO("RSSI: %s dBm; Noise: %s dBm; SNR: %s dBm", strength.c_str(), noise.c_str(), snr.c_str()); + NMLOG_INFO("SSID:%s, BSSID:%s, Band:%s, RSSI:%s, Noise:%s, SNR:%s", ssid.c_str(), bssid.c_str(), band.c_str(), strength.c_str(), noise.c_str(), snr.c_str()); + NMLOG_INFO("bssid=%s,ssid=%s,rssi=%s,phyrate=%s,noise=%s,Band=%s", bssid.c_str(), ssid.c_str(), strength.c_str(), linkSpeed.c_str(), noise.c_str(), band.c_str()); - if (readSnr == 0) + if (calculatedSnr == 0) { quality = WiFiSignalQuality::WIFI_SIGNAL_DISCONNECTED; strength = "0"; } - else if (readSnr > 0 && readSnr < NM_WIFI_SNR_THRESHOLD_FAIR) + else if (calculatedSnr > 0 && calculatedSnr < NM_WIFI_SNR_THRESHOLD_FAIR) { quality = WiFiSignalQuality::WIFI_SIGNAL_WEAK; } - else if (readSnr > NM_WIFI_SNR_THRESHOLD_FAIR && readSnr < NM_WIFI_SNR_THRESHOLD_GOOD) + else if (calculatedSnr >= NM_WIFI_SNR_THRESHOLD_FAIR && calculatedSnr < NM_WIFI_SNR_THRESHOLD_GOOD) { quality = WiFiSignalQuality::WIFI_SIGNAL_FAIR; } - else if (readSnr > NM_WIFI_SNR_THRESHOLD_GOOD && readSnr < NM_WIFI_SNR_THRESHOLD_EXCELLENT) + else if (calculatedSnr >= NM_WIFI_SNR_THRESHOLD_GOOD && calculatedSnr < NM_WIFI_SNR_THRESHOLD_EXCELLENT) { quality = WiFiSignalQuality::WIFI_SIGNAL_GOOD; } @@ -959,9 +1001,7 @@ namespace WPEFramework quality = WiFiSignalQuality::WIFI_SIGNAL_EXCELLENT; } - rc = Core::ERROR_NONE; - - return rc; + return Core::ERROR_NONE; } void NetworkManagerImplementation::processMonitor(uint16_t interval) diff --git a/plugin/gnome/NetworkManagerGnomeEvents.cpp b/plugin/gnome/NetworkManagerGnomeEvents.cpp index 39db2ca5..dea7c5ef 100644 --- a/plugin/gnome/NetworkManagerGnomeEvents.cpp +++ b/plugin/gnome/NetworkManagerGnomeEvents.cpp @@ -335,9 +335,11 @@ namespace WPEFramework std::string ifname = nm_device_get_iface(device); if(ifname == nmUtils::wlanIface()) { GnomeNetworkManagerEvents::onInterfaceStateChangeCb(Exchange::INetworkManager::INTERFACE_ADDED, nmUtils::wlanIface()); + NMLOG_INFO("WIFI device added: %s", ifname.c_str()); } else if(ifname == nmUtils::ethIface()) { GnomeNetworkManagerEvents::onInterfaceStateChangeCb(Exchange::INetworkManager::INTERFACE_ADDED, nmUtils::ethIface()); + NMLOG_INFO("ETHERNET device added: %s", ifname.c_str()); } /* ip events added only for eth0 and wlan0 */ @@ -376,10 +378,12 @@ namespace WPEFramework if(ifname == nmUtils::wlanIface()) { GnomeNetworkManagerEvents::onInterfaceStateChangeCb(Exchange::INetworkManager::INTERFACE_REMOVED, nmUtils::wlanIface()); g_signal_handlers_disconnect_by_func(device, (gpointer)GnomeNetworkManagerEvents::deviceStateChangeCb, nmEvents); + NMLOG_INFO("WIFI device removed: %s", ifname.c_str()); } else if(ifname == nmUtils::ethIface()) { GnomeNetworkManagerEvents::onInterfaceStateChangeCb(Exchange::INetworkManager::INTERFACE_REMOVED, nmUtils::ethIface()); g_signal_handlers_disconnect_by_func(device, (gpointer)GnomeNetworkManagerEvents::deviceStateChangeCb, nmEvents); + NMLOG_INFO("ETHERNET device removed: %s", ifname.c_str()); } } @@ -445,35 +449,41 @@ namespace WPEFramework if((ifname == nmUtils::ethIface()) || (ifname == nmUtils::wlanIface())) { NMDeviceState devState = nm_device_get_state(device); - // NM_DEVICE_STATE_UNAVAILABLE can occur for an Ethernet interface when it is disconnected (e.g., no cable connected). - bool isDeviceEnabled = devState >= NM_DEVICE_STATE_UNAVAILABLE && devState <= NM_DEVICE_STATE_ACTIVATED; - if(!isDeviceEnabled) + + if(devState > NM_DEVICE_STATE_DISCONNECTED && devState <= NM_DEVICE_STATE_ACTIVATED) { - NMLOG_WARNING("device %s is not enabled, So no event monitor", ifname.c_str()); - continue; + // posting device state change event if interface already connected + GnomeNetworkManagerEvents::deviceStateChangeCb(device, nullptr, nullptr); } - GnomeNetworkManagerEvents::deviceStateChangeCb(device, nullptr, nullptr); //posting event if interface already connected + + /* Register device state change event */ g_signal_connect(device, "notify::" NM_DEVICE_STATE, G_CALLBACK(GnomeNetworkManagerEvents::deviceStateChangeCb), nmEvents); + if(NM_IS_DEVICE_WIFI(device)) { + nmEvents->wifiDevice = NM_DEVICE_WIFI(device); + g_signal_connect(nmEvents->wifiDevice, "notify::" NM_DEVICE_WIFI_LAST_SCAN, G_CALLBACK(GnomeNetworkManagerEvents::onAvailableSSIDsCb), nmEvents); + } + NMIPConfig *ipv4Config = nm_device_get_ip4_config(device); NMIPConfig *ipv6Config = nm_device_get_ip6_config(device); if (ipv4Config) { ip4ChangedCb(ipv4Config, NULL, device); // posting event if interface already connected g_signal_connect(ipv4Config, "notify::addresses", G_CALLBACK(ip4ChangedCb), device); } + else + NMLOG_WARNING("IPv4 config is null for device: %s, No IPv4 monitor", ifname.c_str()); if (ipv6Config) { ip6ChangedCb(ipv6Config, NULL, device); g_signal_connect(ipv6Config, "notify::addresses", G_CALLBACK(ip6ChangedCb), device); } - - if(NM_IS_DEVICE_WIFI(device)) { - nmEvents->wifiDevice = NM_DEVICE_WIFI(device); - g_signal_connect(nmEvents->wifiDevice, "notify::" NM_DEVICE_WIFI_LAST_SCAN, G_CALLBACK(GnomeNetworkManagerEvents::onAvailableSSIDsCb), nmEvents); - } + else + NMLOG_WARNING("IPv6 config is null for device: %s, No IPv6 monitor", ifname.c_str()); } else NMLOG_DEBUG("device type not eth/wifi %s", ifname.c_str()); } + else + NMLOG_WARNING("device error null"); } NMLOG_INFO("registered all networkmnager dbus events"); diff --git a/plugin/gnome/NetworkManagerGnomeMfrMgr.cpp b/plugin/gnome/NetworkManagerGnomeMfrMgr.cpp index b9e5cc29..12a4368d 100644 --- a/plugin/gnome/NetworkManagerGnomeMfrMgr.cpp +++ b/plugin/gnome/NetworkManagerGnomeMfrMgr.cpp @@ -21,10 +21,14 @@ #include "NetworkManagerLogger.h" #include "NetworkManagerImplementation.h" #include "INetworkManager.h" +#include "NetworkManagerGnomeUtils.h" +#include "gdbus/NetworkManagerGdbusMgr.h" +#include "gdbus/NetworkManagerGdbusUtils.h" #include "mfrMgr.h" #include #include +#include #include "libIBus.h" namespace WPEFramework @@ -39,139 +43,286 @@ namespace WPEFramework static bool ensureIARMConnection() { std::lock_guard lock(iarm_mutex); - + if (!iarm_initialized) { IARM_Result_t ret = IARM_Bus_Init("NetworkMfrMgr"); if (ret != IARM_RESULT_SUCCESS) { NMLOG_ERROR("IARM_Bus_Init failed: %d", ret); return false; } - + ret = IARM_Bus_Connect(); if (ret != IARM_RESULT_SUCCESS) { NMLOG_ERROR("IARM_Bus_Connect failed: %d", ret); return false; } - + iarm_initialized = true; NMLOG_DEBUG("IARM Bus connection established for MfrMgr"); } return true; } - // Helper function to retrieve current WiFi connection details using nmcli and connection files + // Helper function to retrieve current WiFi connection details using GDBus utilities static bool getCurrentWiFiConnectionDetails(std::string& ssid, std::string& passphrase, int& security) { - // Use nmcli to get current WiFi connection info - FILE* pipe = popen("nmcli device wifi show-password 2>/dev/null", "r"); - if (!pipe) { - NMLOG_ERROR("Failed to execute nmcli command"); + GError *error = NULL; + GDBusProxy *connection_proxy = NULL; + GDBusProxy *device_proxy = NULL; + bool result = false; + + NMLOG_DEBUG("Retrieving WiFi connection details using GDBus utilities"); + + // Create DbusMgr instance for proxy management + DbusMgr dbusMgr; + + // Get WiFi device information using existing utility + deviceInfo devInfo; + if (!GnomeUtils::getDeviceInfoByIfname(dbusMgr, nmUtils::wlanIface(), devInfo)) { + NMLOG_ERROR("WiFi device '%s' not found", nmUtils::wlanIface()); return false; } - char buffer[1024]; - std::string nmcliOutput; - - // Read nmcli output - while (fgets(buffer, sizeof(buffer), pipe) != nullptr) { - nmcliOutput += buffer; - } - - int exitCode = pclose(pipe); - if (exitCode != 0) { - NMLOG_ERROR("nmcli command failed with exit code: %d", exitCode); + NMLOG_DEBUG("Found WiFi device at path: %s", devInfo.path.c_str()); + + // Create device proxy to check state and refresh ActiveConnection property + device_proxy = dbusMgr.getNetworkManagerDeviceProxy(devInfo.path.c_str()); + if (!device_proxy) { + NMLOG_ERROR("Failed to create device proxy"); return false; } - // Parse SSID from nmcli output - size_t ssidPos = nmcliOutput.find("SSID:"); - if (ssidPos == std::string::npos) { - NMLOG_ERROR("SSID not found in nmcli output"); + // Check device state first + GVariant *state_variant = g_dbus_proxy_get_cached_property(device_proxy, "State"); + if (state_variant) { + guint32 device_state = g_variant_get_uint32(state_variant); + NMLOG_DEBUG("WiFi device state: %u (100=activated, 30=disconnected)", device_state); + g_variant_unref(state_variant); + + // NM_DEVICE_STATE_ACTIVATED = 100 + if (device_state != NM_DEVICE_STATE_ACTIVATED) { + NMLOG_WARNING("WiFi device not in activated state (state=%u)", device_state); + } + } + + // Force refresh ActiveConnection property from D-Bus instead of using cached value + std::string active_conn_path; + error = NULL; + GVariant *props_variant = g_dbus_proxy_call_sync(device_proxy, + "org.freedesktop.DBus.Properties.Get", + g_variant_new("(ss)", + "org.freedesktop.NetworkManager.Device", + "ActiveConnection"), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error); + if (!props_variant) { + NMLOG_ERROR("Failed to get ActiveConnection property: %s", error ? error->message : "unknown"); + if (error) g_error_free(error); + g_object_unref(device_proxy); return false; } - - size_t ssidStart = nmcliOutput.find_first_not_of(" \t", ssidPos + 5); - size_t ssidEnd = nmcliOutput.find_first_of("\n\r", ssidStart); - if (ssidStart == std::string::npos || ssidEnd == std::string::npos) { - NMLOG_ERROR("Failed to parse SSID from nmcli output"); + + GVariant *active_conn_variant = NULL; + g_variant_get(props_variant, "(v)", &active_conn_variant); + + if (!active_conn_variant) { + NMLOG_ERROR("ActiveConnection property variant is NULL"); + g_variant_unref(props_variant); + g_object_unref(device_proxy); return false; } - - ssid = nmcliOutput.substr(ssidStart, ssidEnd - ssidStart); - NMLOG_DEBUG("Parsed SSID from nmcli: %s", ssid.c_str()); - // Construct connection file path - std::string connectionFile = "/etc/NetworkManager/system-connections/" + ssid + ".nmconnection"; + const gchar *active_conn_path_str = g_variant_get_string(active_conn_variant, NULL); - // Try to open the connection file - std::ifstream file(connectionFile); - if (!file.is_open()) { - NMLOG_ERROR("Failed to open NetworkManager connection file: %s", connectionFile.c_str()); + if (active_conn_path_str) { + active_conn_path = active_conn_path_str; + } + + g_variant_unref(active_conn_variant); + g_variant_unref(props_variant); + g_object_unref(device_proxy); + + NMLOG_DEBUG("ActiveConnection path: %s", active_conn_path.c_str()); + + // Check if device has an active connection + if (active_conn_path.empty() || active_conn_path == "/") { + NMLOG_ERROR("No active connection on WiFi device (path: %s)", active_conn_path.c_str()); return false; } - // Read entire file into string buffer - more efficient than line-by-line - std::string content((std::istreambuf_iterator(file)), std::istreambuf_iterator()); + // Create active connection proxy using DbusMgr + GDBusProxy *active_conn_proxy = dbusMgr.getNetworkManagerActiveConnProxy(active_conn_path.c_str()); + if (!active_conn_proxy) { + NMLOG_ERROR("Failed to create active connection proxy"); + return false; + } - // Find [wifi-security] section using string search - size_t sectionStart = content.find("[wifi-security]"); - if (sectionStart == std::string::npos) { - NMLOG_DEBUG("No [wifi-security] section found in connection file"); - file.close(); + // Get connection path from active connection + GVariant *conn_path_variant = g_dbus_proxy_get_cached_property(active_conn_proxy, "Connection"); + if (!conn_path_variant) { + NMLOG_ERROR("Failed to get connection path from active connection"); + g_object_unref(active_conn_proxy); return false; } - - // Find the end of the wifi-security section (next section or end of file) - size_t sectionEnd = content.find("\n[", sectionStart + 15); // 15 = length of "[wifi-security]" - if (sectionEnd == std::string::npos) { - sectionEnd = content.length(); + + const gchar *connection_path = g_variant_get_string(conn_path_variant, NULL); + if (connection_path == NULL) { + NMLOG_ERROR("Connection path variant did not contain a valid string"); + g_variant_unref(conn_path_variant); + g_object_unref(active_conn_proxy); + return false; } + NMLOG_DEBUG("Connection settings path: %s", connection_path); - // Extract just the wifi-security section - std::string wifiSection = content.substr(sectionStart, sectionEnd - sectionStart); + // Create connection proxy using DbusMgr + connection_proxy = dbusMgr.getNetworkManagerSettingsConnectionProxy(connection_path); + g_variant_unref(conn_path_variant); + g_object_unref(active_conn_proxy); - std::string keyMgmt; + if (!connection_proxy) { + NMLOG_ERROR("Failed to create connection proxy"); + return false; + } - // Use regex or direct string search for key-mgmt - size_t keyMgmtPos = wifiSection.find("key-mgmt="); - if (keyMgmtPos != std::string::npos) { - size_t valueStart = keyMgmtPos + 9; // Skip "key-mgmt=" - size_t valueEnd = wifiSection.find_first_of("\r\n", valueStart); - if (valueEnd == std::string::npos) valueEnd = wifiSection.length(); - keyMgmt = wifiSection.substr(valueStart, valueEnd - valueStart); - NMLOG_DEBUG("Found key-mgmt: %s", keyMgmt.c_str()); + // Get connection settings (without secrets) + GVariant *settings_variant = g_dbus_proxy_call_sync(connection_proxy, + "GetSettings", + NULL, + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error); + if (!settings_variant) { + NMLOG_ERROR("Failed to get connection settings: %s", error ? error->message : "unknown"); + if (error) g_error_free(error); + g_object_unref(connection_proxy); + return false; } - // Use direct string search for psk - size_t pskPos = wifiSection.find("psk="); - if (pskPos != std::string::npos) { - size_t valueStart = pskPos + 4; // Skip "psk=" - size_t valueEnd = wifiSection.find_first_of("\r\n", valueStart); - if (valueEnd == std::string::npos) valueEnd = wifiSection.length(); - passphrase = wifiSection.substr(valueStart, valueEnd - valueStart); - NMLOG_DEBUG("Found psk in connection file"); + // Parse settings to get SSID and security type + GVariantIter *settings_iter; + g_variant_get(settings_variant, "(a{sa{sv}})", &settings_iter); + + gchar *setting_name; + GVariant *setting_dict; + security = NET_WIFI_SECURITY_NONE; + bool has_wireless_security = false; + + while (g_variant_iter_loop(settings_iter, "{s@a{sv}}", &setting_name, &setting_dict)) { + if (g_strcmp0(setting_name, "802-11-wireless") == 0) { + // Extract SSID + GVariant *ssid_variant = g_variant_lookup_value(setting_dict, "ssid", G_VARIANT_TYPE_BYTESTRING); + if (ssid_variant) { + gsize ssid_len; + const guint8 *ssid_data = static_cast(g_variant_get_fixed_array(ssid_variant, &ssid_len, sizeof(guint8))); + ssid = std::string(reinterpret_cast(ssid_data), ssid_len); + NMLOG_DEBUG("Retrieved SSID: %s", ssid.c_str()); + g_variant_unref(ssid_variant); + } + } else if (g_strcmp0(setting_name, "802-11-wireless-security") == 0) { + has_wireless_security = true; + // Extract key-mgmt + GVariant *key_mgmt_variant = g_variant_lookup_value(setting_dict, "key-mgmt", G_VARIANT_TYPE_STRING); + if (key_mgmt_variant) { + const gchar *key_mgmt = g_variant_get_string(key_mgmt_variant, NULL); + NMLOG_DEBUG("Key management: %s", key_mgmt); + + if (g_strcmp0(key_mgmt, "sae") == 0) { + security = NET_WIFI_SECURITY_WPA3_SAE; + } else if (g_strcmp0(key_mgmt, "wpa-psk") == 0) { + security = NET_WIFI_SECURITY_WPA2_PSK_AES; + } else if (g_strcmp0(key_mgmt, "wpa-eap") == 0) { + security = NET_WIFI_SECURITY_WPA2_ENTERPRISE_AES; + } else if (g_strcmp0(key_mgmt, "none") == 0) { + security = NET_WIFI_SECURITY_NONE; + } else { + security = NET_WIFI_SECURITY_WPA2_PSK_AES; + } + + g_variant_unref(key_mgmt_variant); + } + } } - file.close(); + g_variant_iter_free(settings_iter); + g_variant_unref(settings_variant); + + // Request secrets if PSK-based security + if (has_wireless_security && (security == NET_WIFI_SECURITY_WPA2_PSK_AES || security == NET_WIFI_SECURITY_WPA3_SAE)) { + NMLOG_DEBUG("Requesting secrets for PSK-based connection"); + + // Use synchronous call instead of async to avoid cancellation complexity + error = NULL; + GVariant *secrets = g_dbus_proxy_call_sync(connection_proxy, + "GetSecrets", + g_variant_new("(s)", "802-11-wireless-security"), + G_DBUS_CALL_FLAGS_NONE, + 5000, // 5 second timeout + NULL, + &error); + + if (error) { + NMLOG_WARNING("Failed to get secrets: %s", error->message); + g_error_free(error); + result = false; + } else if (secrets) { + // Parse the returned secrets + // GetSecrets returns (a{sa{sv}}) - dict of dicts + GVariantIter *iter; + g_variant_get(secrets, "(a{sa{sv}})", &iter); + + gchar *setting_name_key; + GVariant *setting_dict_value; + bool found_psk = false; + // Iterate through settings + while (g_variant_iter_loop(iter, "{s@a{sv}}", &setting_name_key, &setting_dict_value)) { + if (g_strcmp0(setting_name_key, "802-11-wireless-security") == 0) { + // Found wireless security settings + GVariantIter *setting_iter; + g_variant_get(setting_dict_value, "a{sv}", &setting_iter); - // Map key management to security type - if (keyMgmt.empty()) { - security = NET_WIFI_SECURITY_NONE; - } else if (keyMgmt == "none") { - security = NET_WIFI_SECURITY_NONE; - } else if (keyMgmt == "wpa-psk") { - security = NET_WIFI_SECURITY_WPA2_PSK_AES; - } else if (keyMgmt == "sae") { - security = NET_WIFI_SECURITY_WPA3_SAE; + gchar *key; + GVariant *value; + + // Look for psk key + while (g_variant_iter_loop(setting_iter, "{sv}", &key, &value)) { + if (g_strcmp0(key, "psk") == 0) { + const gchar *psk = g_variant_get_string(value, NULL); + if (psk) { + passphrase = psk; + NMLOG_DEBUG("Successfully retrieved PSK"); + found_psk = true; + } + break; + } + } + g_variant_iter_free(setting_iter); + break; + } + } + + g_variant_iter_free(iter); + g_variant_unref(secrets); + result = found_psk; + } else { + NMLOG_WARNING("GetSecrets returned NULL"); + result = false; + } } else { - // Default to WPA PSK for unknown key management - security = NET_WIFI_SECURITY_WPA2_PSK_AES; + // No secrets needed for open networks + result = true; } - NMLOG_DEBUG("Retrieved WiFi connection details - SSID: %s, Security: %d, Key-mgmt: %s", - ssid.c_str(), security, keyMgmt.c_str()); - return true; + // Cleanup + g_object_unref(connection_proxy); + + NMLOG_INFO("Retrieved WiFi connection details - SSID: %s, Security: %d, Has Passphrase: %s", + ssid.c_str(), security, passphrase.empty() ? "no" : "yes"); + + return result && !ssid.empty(); } NetworkManagerMfrManager* NetworkManagerMfrManager::getInstance() @@ -206,14 +357,14 @@ namespace WPEFramework std::thread saveThread([this]() { std::string ssid, passphrase; int security; - + if (!getCurrentWiFiConnectionDetails(ssid, passphrase, security)) { NMLOG_ERROR("Failed to retrieve current WiFi connection details for MfrMgr save"); return; } - + NMLOG_INFO("Retrieved current WiFi connection details for MfrMgr save - SSID: %s, Security: %d", ssid.c_str(), security); - + // Save the retrieved details synchronously bool result = this->saveWiFiSettingsToMfrSync(ssid, passphrase, security); if (result) { @@ -222,10 +373,10 @@ namespace WPEFramework NMLOG_ERROR("Background WiFi connection details retrieval and save failed for SSID: %s", ssid.c_str()); } }); - + // Detach the thread to run independently saveThread.detach(); - + NMLOG_DEBUG("WiFi connection details retrieval and save operation queued for background execution"); return true; // Return immediately, actual retrieval and save happens asynchronously } @@ -237,15 +388,15 @@ namespace WPEFramework NMLOG_ERROR("IARM connection not available for saving WiFi settings"); return false; } - + NMLOG_INFO("Saving WiFi settings to MfrMgr via IARM - SSID: %s, Security: %d", ssid.c_str(), security); - + IARM_BUS_MFRLIB_API_WIFI_Credentials_Param_t param{0}; IARM_BUS_MFRLIB_API_WIFI_Credentials_Param_t setParam{0}; IARM_Result_t ret; param.requestType = WIFI_GET_CREDENTIALS; ret = IARM_Bus_Call(IARM_BUS_MFRLIB_NAME, IARM_BUS_MFRLIB_API_WIFI_Credentials, - (void*)¶m, sizeof(param)); + (void*)¶m, sizeof(param)); if(security == Exchange::INetworkManager::WIFISecurityMode::WIFI_SECURITY_NONE) securityMode = NET_WIFI_SECURITY_NONE; else if(security == Exchange::INetworkManager::WIFISecurityMode::WIFI_SECURITY_SAE) @@ -280,12 +431,12 @@ namespace WPEFramework } setParam.wifiCredentials.iSecurityMode = securityMode; - + setParam.requestType = WIFI_SET_CREDENTIALS; - NMLOG_INFO(" Set Params param.requestType = %d, param.wifiCredentials.cSSID = %s, param.wifiCredentials.cPassword = %s, param.wifiCredentials.iSecurityMode = %d", setParam.requestType, setParam.wifiCredentials.cSSID, setParam.wifiCredentials.cPassword, setParam.wifiCredentials.iSecurityMode); + NMLOG_INFO(" Set Params param.requestType = %d, param.wifiCredentials.cSSID = %s, param.wifiCredentials.iSecurityMode = %d", setParam.requestType, setParam.wifiCredentials.cSSID, setParam.wifiCredentials.iSecurityMode); // Make IARM Bus call to save credentials ret = IARM_Bus_Call(IARM_BUS_MFRLIB_NAME, IARM_BUS_MFRLIB_API_WIFI_Credentials, - (void*)&setParam, sizeof(setParam)); + (void*)&setParam, sizeof(setParam)); if(ret == IARM_RESULT_SUCCESS) { memset(¶m,0,sizeof(param)); @@ -301,10 +452,10 @@ namespace WPEFramework if (ret == IARM_RESULT_SUCCESS) { if ((strcmp (param.wifiCredentials.cSSID, ssid.c_str()) == 0) && - (strcmp (param.wifiCredentials.cPassword, passphrase.c_str()) == 0) && - (param.wifiCredentials.iSecurityMode == securityMode)) + (strcmp (param.wifiCredentials.cPassword, passphrase.c_str()) == 0) && + (param.wifiCredentials.iSecurityMode == securityMode)) { - NMLOG_INFO("Successfully stored the credentails and verified stored ssid %s current ssid %s and security_mode %d", param.wifiCredentials.cSSID, ssid.c_str(), param.wifiCredentials.iSecurityMode); + NMLOG_INFO("Successfully stored the credentials and verified stored ssid %s current ssid %s and security_mode %d", param.wifiCredentials.cSSID, ssid.c_str(), param.wifiCredentials.iSecurityMode); return true; } else @@ -318,7 +469,7 @@ namespace WPEFramework NMLOG_ERROR("IARM Bus call failed for WiFi credentials save: %d", ret); return false; } - + NMLOG_INFO("Successfully saved WiFi settings to MfrMgr via IARM - SSID: %s, Security: %d", ssid.c_str(), security); return true; } @@ -329,16 +480,16 @@ namespace WPEFramework NMLOG_ERROR("IARM connection not available for clearing WiFi settings"); return false; } - + NMLOG_DEBUG("Clearing WiFi settings from MfrMgr via IARM"); - + // Make IARM Bus call to clear credentials IARM_Result_t ret = IARM_Bus_Call(IARM_BUS_MFRLIB_NAME,IARM_BUS_MFRLIB_API_WIFI_EraseAllData,0,0); if (ret != IARM_RESULT_SUCCESS) { NMLOG_ERROR("IARM Bus call failed for WiFi credentials clear: %d", ret); return false; - } - + } + NMLOG_INFO("Successfully cleared WiFi settings from MfrMgr via IARM"); return true; } diff --git a/plugin/gnome/NetworkManagerGnomeWIFI.cpp b/plugin/gnome/NetworkManagerGnomeWIFI.cpp index f842f9ed..5c5dba0c 100644 --- a/plugin/gnome/NetworkManagerGnomeWIFI.cpp +++ b/plugin/gnome/NetworkManagerGnomeWIFI.cpp @@ -338,13 +338,6 @@ namespace WPEFramework NMLOG_WARNING("no active access point!; wifi device state: (%d)", deviceState); deleteClientConnection(); -#ifdef ENABLE_MIGRATION_MFRMGR_SUPPORT - NetworkManagerMfrManager* mfrManager = NetworkManagerMfrManager::getInstance(); - if (mfrManager != nullptr) - { - mfrManager->clearWiFiSettingsFromMfr(); - } -#endif return true; } @@ -1185,6 +1178,13 @@ namespace WPEFramework } deleteClientConnection(); +#ifdef ENABLE_MIGRATION_MFRMGR_SUPPORT + NetworkManagerMfrManager* mfrManager = NetworkManagerMfrManager::getInstance(); + if (mfrManager != nullptr) + { + mfrManager->clearWiFiSettingsFromMfr(); + } +#endif // ssid is specified and connection is not found return false // all other case return true, even if no wificonnection is found return((ssidSpecified && !connectionFound)? false : true); diff --git a/plugin/rdk/NetworkManagerRDKProxy.cpp b/plugin/rdk/NetworkManagerRDKProxy.cpp index 01885969..608d22d7 100644 --- a/plugin/rdk/NetworkManagerRDKProxy.cpp +++ b/plugin/rdk/NetworkManagerRDKProxy.cpp @@ -750,48 +750,55 @@ namespace WPEFramework if (IARM_RESULT_SUCCESS == IARM_Bus_Call (IARM_BUS_NM_SRV_MGR_NAME, IARM_BUS_NETSRVMGR_API_getIPSettings, (void *)&iarmData, sizeof(iarmData))) { - address.autoconfig = iarmData.autoconfig; - address.dhcpserver = string(iarmData.dhcpserver); - address.ula = string(""); - address.ipaddress = string(iarmData.ipaddress); - address.gateway = string(iarmData.gateway); - address.primarydns = string(iarmData.primarydns); - address.secondarydns = string(iarmData.secondarydns); - if (0 == strcasecmp("ipv4", iarmData.ipversion)) + if(iarmData.errCode == NETWORK_IPADDRESS_ACQUIRED) { - address.ipversion = string ("IPv4"); - address.prefix = NetmaskToPrefix(iarmData.netmask); - if("eth0" == interface) - m_ethIPv4Address = address; - else if("wlan0" == interface) - m_wlanIPv4Address = address; - } - else if (0 == strcasecmp("ipv6", iarmData.ipversion)) - { - address.ipversion = string ("IPv6"); - address.prefix = std::atoi(iarmData.netmask); - if("eth0" == interface) - m_ethIPv6Address = address; - else if("wlan0" == interface) - m_wlanIPv6Address = address; - } + address.autoconfig = iarmData.autoconfig; + address.dhcpserver = string(iarmData.dhcpserver); + address.ula = string(""); + address.ipaddress = string(iarmData.ipaddress); + address.gateway = string(iarmData.gateway); + address.primarydns = string(iarmData.primarydns); + address.secondarydns = string(iarmData.secondarydns); + if (0 == strcasecmp("ipv4", iarmData.ipversion)) + { + address.ipversion = string ("IPv4"); + address.prefix = NetmaskToPrefix(iarmData.netmask); + if("eth0" == interface) + m_ethIPv4Address = address; + else if("wlan0" == interface) + m_wlanIPv4Address = address; + } + else if (0 == strcasecmp("ipv6", iarmData.ipversion)) + { + address.ipversion = string ("IPv6"); + address.prefix = std::atoi(iarmData.netmask); + if("eth0" == interface) + m_ethIPv6Address = address; + else if("wlan0" == interface) + m_wlanIPv6Address = address; + } - rc = Core::ERROR_NONE; - /* Return the default interface information */ - if (interface.empty()) + rc = Core::ERROR_NONE; + /* Return the default interface information */ + if (interface.empty()) + { + string tmpInterface = string(iarmData.interface); + if ("ETHERNET" == tmpInterface) + interface = "eth0"; + else if ("WIFI" == tmpInterface) + interface = "wlan0"; + else + rc = Core::ERROR_BAD_REQUEST; + } + } + else { - string tmpInterface = string(iarmData.interface); - if ("ETHERNET" == tmpInterface) - interface = "eth0"; - else if ("WIFI" == tmpInterface) - interface = "wlan0"; - else - rc = Core::ERROR_BAD_REQUEST; + NMLOG_WARNING("IP Address is not ready to use yet; err = %d", iarmData.errCode); } } else { - NMLOG_ERROR("NetworkManagerImplementation::GetIPSettings - Calling IARM Failed"); + NMLOG_ERROR("GetIPSettings - Calling IARM Failed"); } return rc; diff --git a/tests/l2Test/CMakeLists.txt b/tests/l2Test/CMakeLists.txt index f9cfa948..74c150bf 100644 --- a/tests/l2Test/CMakeLists.txt +++ b/tests/l2Test/CMakeLists.txt @@ -20,7 +20,6 @@ cmake_minimum_required(VERSION 3.3) message ("building Networkmanager plugin l2 tests") find_package(CURL) -find_package(WPEFramework) find_package(PkgConfig REQUIRED) find_package(${NAMESPACE}Core REQUIRED) find_package(${NAMESPACE}Plugins REQUIRED) diff --git a/tests/l2Test/legacy/l2_test_LegacyPlugin_NetworkAPIs.cpp b/tests/l2Test/legacy/l2_test_LegacyPlugin_NetworkAPIs.cpp index 16231583..d55de392 100644 --- a/tests/l2Test/legacy/l2_test_LegacyPlugin_NetworkAPIs.cpp +++ b/tests/l2Test/legacy/l2_test_LegacyPlugin_NetworkAPIs.cpp @@ -77,7 +77,7 @@ class NetworkTest : public ::testing::Test{ })) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); m_subsIfaceStateChange = true; m_subsActIfaceChange = true; m_subsIPAddrChange = true; @@ -128,7 +128,7 @@ TEST_F(NetworkTest, getInterfaces) .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); EXPECT_CALL(*mockNetworkManager, GetAvailableInterfaces(::testing::_)) @@ -183,7 +183,7 @@ TEST_F(NetworkTest, setStunEndpoint) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); EXPECT_CALL(*mockNetworkManager, SetStunEndpoint(::testing::_, ::testing::_, ::testing::_, ::testing::_)) @@ -210,7 +210,7 @@ TEST_F(NetworkTest, setInterfaceEnabled){ .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -234,7 +234,7 @@ TEST_F(NetworkTest, getDefaultInterface) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -279,7 +279,7 @@ TEST_F(NetworkTest, setIPSettings) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -309,7 +309,7 @@ TEST_F(NetworkTest, getIPSettings) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -350,7 +350,7 @@ TEST_F(NetworkTest, getIPSettingsIPv6) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -391,7 +391,7 @@ TEST_F(NetworkTest, getIPSettingsErrorEmptyString) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -428,7 +428,7 @@ TEST_F(NetworkTest, getIPSettings2) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -468,7 +468,7 @@ TEST_F(NetworkTest, isConnectedToInternet) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -501,7 +501,7 @@ TEST_F(NetworkTest, getInternetConnectionState) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -532,7 +532,7 @@ TEST_F(NetworkTest, doPing) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -578,7 +578,7 @@ TEST_F(NetworkTest, doTrace) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -627,7 +627,7 @@ TEST_F(NetworkTest, getPublicIP) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -659,7 +659,7 @@ TEST_F(NetworkTest, isInterfaceEnabled) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -700,7 +700,7 @@ TEST_F(NetworkTest, setConnectivityTestEndpoints) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -773,7 +773,7 @@ TEST_F(NetworkTest, getCaptivePortalURI) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -811,7 +811,7 @@ TEST_F(NetworkTest, getStbIp) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); EXPECT_CALL(*mockNetworkManager, GetIPSettings(::testing::_, ::testing::_, ::testing::_)) @@ -846,7 +846,7 @@ TEST_F(NetworkTest, getSTBIPFamily) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); EXPECT_CALL(*mockNetworkManager, GetIPSettings(::testing::_, ::testing::_, ::testing::_)) diff --git a/tests/l2Test/legacy/l2_test_LegacyPlugin_WiFiManagerAPIs.cpp b/tests/l2Test/legacy/l2_test_LegacyPlugin_WiFiManagerAPIs.cpp index aa2c8a56..aa90be47 100644 --- a/tests/l2Test/legacy/l2_test_LegacyPlugin_WiFiManagerAPIs.cpp +++ b/tests/l2Test/legacy/l2_test_LegacyPlugin_WiFiManagerAPIs.cpp @@ -68,7 +68,7 @@ class WiFiManagerTest : public ::testing::Test { })) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockShell); })); m_service = service; @@ -114,7 +114,7 @@ TEST_F(WiFiManagerTest, cancelWPSPairing) .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); EXPECT_CALL(*mockNetworkManager, StopWPS()) @@ -134,7 +134,7 @@ TEST_F(WiFiManagerTest, clearSSID) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); EXPECT_CALL(*mockNetworkManager, RemoveKnownSSID(::testing::_)) @@ -153,7 +153,7 @@ TEST_F(WiFiManagerTest, connect) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); EXPECT_CALL(*mockNetworkManager, WiFiConnect(::testing::_)) @@ -182,7 +182,7 @@ TEST_F(WiFiManagerTest, getConnectedSSID) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); Exchange::INetworkManager::WiFiSSIDInfo ssidInfo{}; @@ -215,7 +215,7 @@ TEST_F(WiFiManagerTest, getConnectedSSIDSAE) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); Exchange::INetworkManager::WiFiSSIDInfo ssidInfo{}; @@ -248,7 +248,7 @@ TEST_F(WiFiManagerTest, getConnectedSSIDEAP) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); Exchange::INetworkManager::WiFiSSIDInfo ssidInfo{}; @@ -281,7 +281,7 @@ TEST_F(WiFiManagerTest, getCurrentState) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); Exchange::INetworkManager::WiFiState state = Exchange::INetworkManager::WiFiState::WIFI_STATE_CONNECTED; @@ -309,7 +309,7 @@ TEST_F(WiFiManagerTest, getCurrentStateFailed1) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); Exchange::INetworkManager::WiFiState state = Exchange::INetworkManager::WiFiState::WIFI_STATE_ERROR; @@ -337,7 +337,7 @@ TEST_F(WiFiManagerTest, getCurrentStateFailed2) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); Exchange::INetworkManager::WiFiState state = Exchange::INetworkManager::WiFiState::WIFI_STATE_CONNECTION_INTERRUPTED; @@ -365,7 +365,7 @@ TEST_F(WiFiManagerTest, getCurrentStateDisconnected) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); Exchange::INetworkManager::WiFiState state = Exchange::INetworkManager::WiFiState::WIFI_STATE_DISCONNECTED; @@ -393,7 +393,7 @@ TEST_F(WiFiManagerTest, getCurrentStateConnected) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); Exchange::INetworkManager::WiFiState state = Exchange::INetworkManager::WiFiState::WIFI_STATE_CONNECTED; @@ -421,7 +421,7 @@ TEST_F(WiFiManagerTest, getPairedSSIDInfo) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); Exchange::INetworkManager::WiFiSSIDInfo ssidInfo{}; @@ -459,7 +459,7 @@ TEST_F(WiFiManagerTest, saveSSID) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); Exchange::INetworkManager::WiFiConnectTo ssid{}; @@ -496,7 +496,7 @@ TEST_F(WiFiManagerTest, disconnect) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); EXPECT_CALL(*mockNetworkManager, WiFiDisconnect()) @@ -519,7 +519,7 @@ TEST_F(WiFiManagerTest, initiateWPSPairing) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); EXPECT_CALL(*mockNetworkManager, StartWPS(::testing::_, ::testing::_)) @@ -549,7 +549,7 @@ TEST_F(WiFiManagerTest, startScan) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); EXPECT_CALL(*mockNetworkManager, StartWiFiScan(::testing::_, ::testing::_)) @@ -579,7 +579,7 @@ TEST_F(WiFiManagerTest, stopScan) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); EXPECT_CALL(*mockNetworkManager, StopWiFiScan()) @@ -603,7 +603,7 @@ TEST_F(WiFiManagerTest, stopScan_Error) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); EXPECT_CALL(*mockNetworkManager, StopWiFiScan()) @@ -715,7 +715,7 @@ TEST_F(WiFiManagerTest, getPairedSSID) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -751,7 +751,7 @@ TEST_F(WiFiManagerTest, isPaired) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); @@ -787,7 +787,7 @@ TEST_F(WiFiManagerTest, isPairedNoSSID) { .Times(1) .WillOnce(::testing::Invoke( [&](const uint32_t, const string& name) -> void* { - EXPECT_EQ(name, string(_T("org.rdk.NetworkManager.1"))); + EXPECT_EQ(name, string(_T("org.rdk.NetworkManager"))); return static_cast(mockNetworkManager); })); diff --git a/tests/l2Test/rdk/l2_test_rdkproxy.cpp b/tests/l2Test/rdk/l2_test_rdkproxy.cpp index a0845dbf..d1b97ca9 100644 --- a/tests/l2Test/rdk/l2_test_rdkproxy.cpp +++ b/tests/l2Test/rdk/l2_test_rdkproxy.cpp @@ -1313,7 +1313,7 @@ TEST_F(NetworkManagerTest, GetWiFiSignalQualityWpa_cliFailed) TEST_F(NetworkManagerTest, GetWiFiSignalQualityDisconnected2) { EXPECT_CALL(*p_wrapsImplMock, popen(::testing::_, ::testing::_)) - .Times(2) + .Times(1) .WillOnce(::testing::Invoke( [&](const char* command, const char* type) -> FILE* { EXPECT_THAT(string(command), ::testing::MatchesRegex("wpa_cli status")); @@ -1328,16 +1328,6 @@ TEST_F(NetworkManagerTest, GetWiFiSignalQualityDisconnected2) rewind(tempFile); } return tempFile; - })) - .WillOnce(::testing::Invoke( - [&](const char* command, const char* type) -> FILE* { - EXPECT_THAT(string(command), ::testing::MatchesRegex("wpa_cli bss ")); - FILE* tempFile = tmpfile(); - if (tempFile) { - fputs("driver error", tempFile); - rewind(tempFile); - } - return tempFile; })); EXPECT_EQ(Core::ERROR_NONE, handler.Invoke(connection, _T("GetWiFiSignalQuality"), _T("{}"), response)); @@ -1364,21 +1354,22 @@ TEST_F(NetworkManagerTest, GetWiFiSignalQualityConnected) })) .WillOnce(::testing::Invoke( [&](const char* command, const char* type) -> FILE* { - EXPECT_THAT(string(command), ::testing::MatchesRegex("wpa_cli bss aa:bb:cc:dd:ee:ff")); + EXPECT_THAT(string(command), ::testing::MatchesRegex("wpa_cli signal_poll")); FILE* tempFile = tmpfile(); if (tempFile) { fputs("Selected interface 'wlan0'\n" - "ssid=dummySSID\n" - "noise=-117\n" - "level=-49\n" - "snr=65\n", tempFile); + "RSSI=-30\n" + "LINKSPEED=300\n" + "NOISE=-114\n" + "FREQUENCY=2417\n" + "AVG_RSSI=-30\n", tempFile); rewind(tempFile); } return tempFile; })); EXPECT_EQ(Core::ERROR_NONE, handler.Invoke(connection, _T("GetWiFiSignalQuality"), _T("{}"), response)); - EXPECT_EQ(response, _T("{\"ssid\":\"dummySSID\",\"quality\":\"Excellent\",\"snr\":\"65\",\"strength\":\"-49\",\"noise\":\"-96\",\"success\":true}")); + EXPECT_EQ(response, _T("{\"ssid\":\"dummySSID\",\"quality\":\"Excellent\",\"snr\":\"66\",\"strength\":\"-30\",\"noise\":\"-96\",\"success\":true}")); } TEST_F(NetworkManagerTest, GetWiFiSignalQualityConnectedGood) @@ -1401,21 +1392,22 @@ TEST_F(NetworkManagerTest, GetWiFiSignalQualityConnectedGood) })) .WillOnce(::testing::Invoke( [&](const char* command, const char* type) -> FILE* { - EXPECT_THAT(string(command), ::testing::MatchesRegex("wpa_cli bss aa:bb:cc:dd:ee:ff")); + EXPECT_THAT(string(command), ::testing::MatchesRegex("wpa_cli signal_poll")); FILE* tempFile = tmpfile(); if (tempFile) { fputs("Selected interface 'wlan0'\n" - "ssid=dummySSID\n" - "noise=-30\n" - "level=-90\n" - "snr=33\n", tempFile); + "RSSI=\n" + "LINKSPEED=300\n" + "NOISE=-114\n" + "FREQUENCY=2417\n" + "AVG_RSSI=-90\n", tempFile); rewind(tempFile); } return tempFile; })); EXPECT_EQ(Core::ERROR_NONE, handler.Invoke(connection, _T("GetWiFiSignalQuality"), _T("{}"), response)); - EXPECT_EQ(response, _T("{\"ssid\":\"dummySSID\",\"quality\":\"Good\",\"snr\":\"33\",\"strength\":\"-90\",\"noise\":\"-30\",\"success\":true}")); + EXPECT_EQ(response, _T("{\"ssid\":\"dummySSID\",\"quality\":\"Weak\",\"snr\":\"6\",\"strength\":\"-90\",\"noise\":\"-96\",\"success\":true}")); } TEST_F(NetworkManagerTest, GetWiFiSignalQualityConnectedLowBad) @@ -1438,21 +1430,22 @@ TEST_F(NetworkManagerTest, GetWiFiSignalQualityConnectedLowBad) })) .WillOnce(::testing::Invoke( [&](const char* command, const char* type) -> FILE* { - EXPECT_THAT(string(command), ::testing::MatchesRegex("wpa_cli bss aa:bb:cc:dd:ee:ff")); + EXPECT_THAT(string(command), ::testing::MatchesRegex("wpa_cli signal_poll")); FILE* tempFile = tmpfile(); if (tempFile) { fputs("Selected interface 'wlan0'\n" - "ssid=dummySSID\n" - "noise=9999\n" - "level=-120\n" - "snr=33\n", tempFile); + "RSSI=\n" + "LINKSPEED=300\n" + "NOISE=9999\n" + "FREQUENCY=5462\n" + "AVG_RSSI=-120\n", tempFile); rewind(tempFile); } return tempFile; })); EXPECT_EQ(Core::ERROR_NONE, handler.Invoke(connection, _T("GetWiFiSignalQuality"), _T("{}"), response)); - EXPECT_EQ(response, _T("{\"ssid\":\"dummySSID\",\"quality\":\"Good\",\"snr\":\"33\",\"strength\":\"-120\",\"noise\":\"0\",\"success\":true}")); + EXPECT_EQ(response, _T("{\"ssid\":\"dummySSID\",\"quality\":\"Excellent\",\"snr\":\"120\",\"strength\":\"-120\",\"noise\":\"0\",\"success\":true}")); } TEST_F(NetworkManagerTest, Trace_Success_ipv4) diff --git a/tests/l2Test/rdk/l2_test_rdkproxyEvent.cpp b/tests/l2Test/rdk/l2_test_rdkproxyEvent.cpp index 1b174a0b..89be4686 100644 --- a/tests/l2Test/rdk/l2_test_rdkproxyEvent.cpp +++ b/tests/l2Test/rdk/l2_test_rdkproxyEvent.cpp @@ -293,7 +293,7 @@ TEST_F(NetworkManagerEventTest, onWiFiStateChange) if (tempFile) { fputs("Selected interface 'wlan0'\n" "bssid=aa:bb:cc:dd:ee:ff\n" - "freq=5462\n" + "freq=2462\n" "ssid=dummySSID\n", tempFile); rewind(tempFile); } @@ -301,14 +301,15 @@ TEST_F(NetworkManagerEventTest, onWiFiStateChange) })) .WillOnce(::testing::Invoke( [&](const char* command, const char* type) -> FILE* { - EXPECT_THAT(string(command), ::testing::MatchesRegex("wpa_cli bss aa:bb:cc:dd:ee:ff")); + EXPECT_THAT(string(command), ::testing::MatchesRegex("wpa_cli signal_poll")); FILE* tempFile = tmpfile(); if (tempFile) { fputs("Selected interface 'wlan0'\n" - "ssid=dummySSID\n" - "noise=-114\n" - "level=-90\n" - "snr=33\n", tempFile); + "RSSI=-30\n" + "LINKSPEED=300\n" + "NOISE=-114\n" + "FREQUENCY=2417\n" + "AVG_RSSI=-30\n", tempFile); rewind(tempFile); } return tempFile;