From 7e7d2b6d37d16fee6e3c32c9fe94600bf9bfff9a Mon Sep 17 00:00:00 2001 From: trupthi1403 Date: Fri, 5 Dec 2025 13:09:43 +0530 Subject: [PATCH 1/2] test-L1: Do not merge Reason for change: For testing purpose only --- .github/workflows/jsruntime_L1tests.yml | 106 ------------------------ .github/workflows/native-full-build.yml | 89 -------------------- 2 files changed, 195 deletions(-) delete mode 100644 .github/workflows/jsruntime_L1tests.yml delete mode 100644 .github/workflows/native-full-build.yml diff --git a/.github/workflows/jsruntime_L1tests.yml b/.github/workflows/jsruntime_L1tests.yml deleted file mode 100644 index fd7d3c4..0000000 --- a/.github/workflows/jsruntime_L1tests.yml +++ /dev/null @@ -1,106 +0,0 @@ -name: L1 Unit Tests for rdkNativeScript -permissions: - contents: read - checks: write - -on: - push: - branches: [develop] - pull_request: - branches: [develop] - workflow_dispatch: - -env: - AUTOMATICS_UNAME: ${{ secrets.AUTOMATICS_UNAME }} - AUTOMATICS_PASSCODE: ${{ secrets.AUTOMATICS_PASSCODE }} - -jobs: - build-and-test-l1: - runs-on: ubuntu-latest - - steps: - - name: Checkout source repository - uses: actions/checkout@v3 - - - name: Checkout rdkNativeScript_tests repository - uses: actions/checkout@v3 - with: - repository: rdk-e/rdkNativeScript_tests - ref: topic/RDKEMW-5610 - path: rdkNativeScript_tests - token: ${{ secrets.GH_PAT }} - - - name: Install dependencies - run: | - sudo apt-get update && sudo apt-get install -y \ - g++ \ - cmake \ - build-essential \ - libcurl4-openssl-dev \ - libcjson-dev \ - libgtest-dev \ - libssl-dev \ - zlib1g-dev \ - libuv1-dev \ - lcov \ - libglib2.0-dev - - - name: Build Google Test and Google Mock - run: | - cd /usr/src/googletest - sudo cmake -S . -B build - sudo cmake --build build - sudo cp build/lib/libgmock.a /usr/lib - sudo cp build/lib/libgmock_main.a /usr/lib - sudo cp build/lib/libgtest.a /usr/lib - sudo cp build/lib/libgtest_main.a /usr/lib - - - name: Configure and Build L1 - run: | - mkdir -p build_l1 - cd build_l1 - cmake -DCMAKE_BUILD_TYPE=Debug \ - -DRUN_L1=ON \ - -DRUN_L2=OFF \ - -DENABLE_JSRUNTIME_ESSOS=ON \ - -DENABLE_JSRUNTIME_PLAYER=ON \ - -DENABLE_AAMP_JSBINDINGS=ON \ - -DENABLE_AAMP_JSBINDINGS_DYNAMIC=ON \ - -DENABLE_AAMP_JSBINDINGS_STATIC=OFF \ - -DJSRUNTIME_ENGINE_NAME=jsc \ - -Djsruntime_source=.. ../rdkNativeScript_tests - make -j$(nproc) - - - name: Run L1 Tests and Generate JUnit Results - run: | - cd build_l1 - #ctest -R RunL1Tests --output-on-failure --no-compress-output --output-junit ctest-results.xml - ./L1_tests --gtest_output=xml:ctest-results.xml - - - name: Publish L1 test results - uses: dorny/test-reporter@v1 - with: - name: Unit Test Results - path: build_l1/ctest-results.xml - reporter: java-junit - - - name: Generate coverage report - run: | - cd build_l1 - lcov --capture --directory . --output-file coverage.info --ignore-errors mismatch --rc geninfo_unexecuted_blocks=1 - lcov --remove coverage.info '/usr/*' '*/test/*' '*/tests/*' '*/L1/*' '*/mocks/*' '*/gtest/*' '*/gmock/*' '*/googletest/*' '*/include/*' --output-file coverage.cleaned.info --ignore-errors unused - lcov --extract coverage.cleaned.info '*/src/*' --output-file coverage.final.info - genhtml coverage.final.info --output-directory html_coverage_report - - - name: Upload test result file (JUnit XML) - uses: actions/upload-artifact@v4 - with: - name: ctest-results-l1-${{ github.run_id }} - path: build_l1/ctest-results.xml - - - name: Upload coverage report - uses: actions/upload-artifact@v4 - with: - name: l1-html-coverage-report - path: build_l1/html_coverage_report - if-no-files-found: warn diff --git a/.github/workflows/native-full-build.yml b/.github/workflows/native-full-build.yml deleted file mode 100644 index f8137e6..0000000 --- a/.github/workflows/native-full-build.yml +++ /dev/null @@ -1,89 +0,0 @@ -name: Build Component in Native Environment -permissions: - contents: read - checks: write - -on: - workflow_dispatch: - push: - branches: [develop] - pull_request: - branches: [develop] - -env: - AUTOMATICS_UNAME: ${{ secrets.AUTOMATICS_UNAME }} - AUTOMATICS_PASSCODE: ${{ secrets.AUTOMATICS_PASSCODE }} - -jobs: - build-nativescript: - runs-on: ubuntu-latest - - steps: - - name: Checkout main source repository - uses: actions/checkout@v3 - - - name: Install dependencies - run: | - sudo apt-get update && sudo apt-get install -y \ - git cmake gperf ruby-dev libglew-dev libglut-dev \ - libglib2.0-dev libglib2.0-0 g++ meson bison libjpeg-dev libpng-dev \ - libfreetype6-dev libicu-dev autoconf libtool libxml2-dev \ - libcurl4-openssl-dev libexpat1-dev doxygen vim libcjson-dev \ - libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \ - libwayland-bin libwayland-dev wayland-protocols \ - libreadline-dev net-tools libmount1 libpcre3 libselinux1 zlib1g \ - libunwind-dev libboost-dev libboost-system-dev libboost-thread-dev libboost-chrono-dev libwebsocketpp-dev jq - - - name: Get asset ID for externals.zip - id: asset - run: | - ASSET_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GH_PAT }}" \ - https://api.github.com/repos/rdk-e/rdkNativeScript_tests/releases/tags/extlibs | \ - jq '.assets[] | select(.name=="externals.zip") | .id') - echo "ASSET_ID=$ASSET_ID" >> $GITHUB_ENV - - - name: Download externals.zip using asset ID - run: | - curl -L \ - -H "Authorization: Bearer ${{ secrets.GH_PAT }}" \ - -H "Accept: application/octet-stream" \ - -o externals.zip \ - https://api.github.com/repos/rdk-e/rdkNativeScript_tests/releases/assets/$ASSET_ID - - - name: Check externals.zip download - run: | - file externals.zip - ls -lh externals.zip - unzip -l externals.zip | head -20 - - - name: Extract externals.zip - run: | - unzip -o externals.zip - - - name: Set LD_LIBRARY_PATH for ICU 66 - run: echo "LD_LIBRARY_PATH=$(pwd)/externals/extlibs/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV - - - name: Configure and build nativescript - run: | - mkdir -p build - cd build - cmake .. \ - -DENABLE_JSRUNTIME_ESSOS=ON \ - -DJSRUNTIME_ENGINE_NAME=jsc \ - -DENABLE_JSRUNTIME_PLAYER=ON \ - -DENABLE_AAMP_JSBINDINGS_DYNAMIC=ON \ - -DBUILD_JSRUNTIME_CLIENT=ON \ - -DENABLE_JSRUNTIME_SERVER=ON \ - -DCMAKE_CXX_FLAGS="-I../externals/extlibs/include/rtcore" - cmake --build . - - - name: Upload build outputs to artifact - uses: actions/upload-artifact@v4 - with: - name: jsruntime-build-artifacts - path: | - build/JSRuntimeClient - build/JSRuntimeJSC - build/libjsclib.so - build/libJSRuntimeJSC.so - if-no-files-found: error From 8a334fd2f9ebc5a49903b53648eedbb0b0294fe2 Mon Sep 17 00:00:00 2001 From: trupthi1403 Date: Wed, 3 Dec 2025 10:43:15 +0530 Subject: [PATCH 2/2] RDKEMW-9172: L2testcase for rdkNativeScript Reason for change: Added jsruntime_L2tests.yml and updated to run L2 test cases Test Procedure: Able to build and run test cases in CI Risks: low Priority: P2 --- .github/workflows/jsruntime_L2tests.yml | 137 ++++++++++++++++++++++++ CMakeLists.txt | 20 ++++ include/NativeJSRenderer.h | 1 + src/NativeJSRenderer.cpp | 7 +- src/jsruntime.cpp | 21 +++- 5 files changed, 183 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/jsruntime_L2tests.yml diff --git a/.github/workflows/jsruntime_L2tests.yml b/.github/workflows/jsruntime_L2tests.yml new file mode 100644 index 0000000..bb81dac --- /dev/null +++ b/.github/workflows/jsruntime_L2tests.yml @@ -0,0 +1,137 @@ +name: JSRuntime L2 Tests with Coverage +permissions: + contents: read + checks: write + +on: + workflow_dispatch: + push: + branches: [develop] + pull_request: + branches: [develop] + +jobs: + build-nativescript: + runs-on: ubuntu-latest + + steps: + - name: Checkout main source repository + uses: actions/checkout@v3 + + - name: Install dependencies + run: | + sudo apt-get update && sudo apt-get install -y \ + git cmake gperf ruby-dev libglew-dev libglut-dev \ + libglib2.0-dev libglib2.0-0 g++ meson bison libjpeg-dev libpng-dev \ + libfreetype6-dev libicu-dev autoconf libtool libxml2-dev \ + libcurl4-openssl-dev libexpat1-dev doxygen vim libcjson-dev \ + libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \ + gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \ + gstreamer1.0-plugins-ugly gstreamer1.0-libav \ + gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa \ + libwayland-bin libwayland-dev wayland-protocols \ + libreadline-dev net-tools libmount1 libpcre3 libselinux1 zlib1g \ + libunwind-dev libboost-dev libboost-system-dev libboost-thread-dev libboost-chrono-dev libwebsocketpp-dev jq \ + lcov + + - name: Get asset ID for externals.zip + id: asset + run: | + ASSET_ID=$(curl -s -H "Authorization: Bearer ${{ secrets.GH_PAT }}" \ + https://api.github.com/repos/rdk-e/rdkNativeScript_tests/releases/tags/extlibs | \ + jq '.assets[] | select(.name=="externals.zip") | .id') + echo "ASSET_ID=$ASSET_ID" >> $GITHUB_ENV + + - name: Download externals.zip using asset ID + run: | + curl -L \ + -H "Authorization: Bearer ${{ secrets.GH_PAT }}" \ + -H "Accept: application/octet-stream" \ + -o externals.zip \ + https://api.github.com/repos/rdk-e/rdkNativeScript_tests/releases/assets/$ASSET_ID + + - name: Check externals.zip download + run: | + file externals.zip + ls -lh externals.zip + unzip -l externals.zip | head -20 + + - name: Extract externals.zip + run: | + unzip -o externals.zip + + - name: Set LD_LIBRARY_PATH for ICU 66 + run: echo "LD_LIBRARY_PATH=$(pwd)/externals/extlibs/lib:$LD_LIBRARY_PATH" >> $GITHUB_ENV + + - name: Configure and build nativescript with coverage + run: | + mkdir -p build + cd build + cmake .. \ + -DENABLE_JSRUNTIME_ESSOS=ON \ + -DJSRUNTIME_ENGINE_NAME=jsc \ + -DENABLE_JSRUNTIME_PLAYER=ON \ + -DENABLE_AAMP_JSBINDINGS_DYNAMIC=ON \ + -DBUILD_JSRUNTIME_CLIENT=ON \ + -DENABLE_JSRUNTIME_SERVER=ON \ + -DENABLE_COVERAGE=ON \ + -DNATIVEJS_DEVELOPER_MODE=ON \ + -DNATIVEJS_L2_BUILD=ON \ + -DCMAKE_CXX_FLAGS="-I../externals/extlibs/include/rtcore" \ + -DCMAKE_BUILD_TYPE=Debug + cmake --build . + + - name: Setup modules directory + run: | + cd build + mkdir -p modules + cp -R ../utils jsc_modules + cp -R ../src/jsc/modules/* modules/. + cp -R ../utils/* modules/. + + - name: Set library paths + run: | + echo "LD_LIBRARY_PATH=$(pwd)/build:$(pwd)/externals/extlibs/lib:/usr/lib/javascriptcore:$LD_LIBRARY_PATH" >> $GITHUB_ENV + + - name: Checkout L2 test repository + uses: actions/checkout@v3 + with: + repository: rdk-e/rdkNativeScript_tests + token: ${{ secrets.GH_PAT }} + path: rdkNativeScript_tests + ref: topic/RDKEMW-9172 + + - name: Run L2 tests with coverage + run: | + export SRC_REPO_DIR="${GITHUB_WORKSPACE}" + export BUILD_DIR="${SRC_REPO_DIR}/build" + export TEST_REPO_DIR="${GITHUB_WORKSPACE}/rdkNativeScript_tests" + export TEST_FRAMEWORK_DIR="${TEST_REPO_DIR}/L2/test_framework" + export TEST_SCRIPTS_DIR="${TEST_REPO_DIR}/L2/test_scripts" + export TEST_RESULTS_DIR="${TEST_FRAMEWORK_DIR}/../test_results" + export JSRUNTIME_BINARY="${BUILD_DIR}/JSRuntimeJSC" + export LD_LIBRARY_PATH="${BUILD_DIR}:${SRC_REPO_DIR}/externals/extlibs/lib:${SRC_REPO_DIR}/externals/extlibs/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH}" + cd "${TEST_FRAMEWORK_DIR}" + chmod +x ./coverage.sh ./run_tests.sh + ./coverage.sh + + - name: Upload coverage report + uses: actions/upload-artifact@v4 + with: + name: l2-coverage-report + path: rdkNativeScript_tests/L2/coverage_report/ + if-no-files-found: error + + - name: Upload test results + uses: actions/upload-artifact@v4 + with: + name: l2-test-results + path: rdkNativeScript_tests/L2/test_results/ + if-no-files-found: warn + + - name: Check coverage summary + run: | + if [ -f "rdkNativeScript_tests/L2/coverage_report/coverage_summary.txt" ]; then + echo "=== Coverage Summary ===" + cat rdkNativeScript_tests/L2/coverage_report/coverage_summary.txt + fi diff --git a/CMakeLists.txt b/CMakeLists.txt index f888133..df6acc3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,6 +26,7 @@ option(BUILD_JSRUNTIME_APP "BUILD_JSRUNTIME_APP" ON) option(ENABLE_JSRUNTIME_SERVER "ENABLE_JSRUNTIME_SERVER" OFF) option(BUILD_JSRUNTIME_CLIENT "BUILD_JSRUNTIME_CLIENT" OFF) option(NATIVEJS_DEVELOPER_MODE "NATIVEJS_DEVELOPER_MODE" OFF) +option(NATIVEJS_L2_BUILD "NATIVEJS_L2_BUILD" OFF) #can be jsc or node or v8 or quickjs option(JSRUNTIME_ENGINE_NAME "JSRUNTIME_ENGINE_NAME" "jsc") @@ -39,6 +40,7 @@ option(ENABLE_JSRUNTIME_PLAYER "ENABLE_JSRUNTIME_PLAYER" OFF) option(ENABLE_JSRUNTIME_THUNDER_SECURITYAGENT "ENABLE_JSRUNTIME_THUNDER_SECURITYAGENT" OFF) option(BUILD_JSRUNTIME_DESKTOP "BUILD_JSRUNTIME_DESKTOP" ON) option(USE_ETHANLOG "USE_ETHANLOG" OFF) +option(ENABLE_COVERAGE "ENABLE_COVERAGE" OFF) option(PKG_CONFIG_SYSROOT_DIR "PKG_CONFIG_SYSROOT_DIR" "${CMAKE_CURRENT_SOURCE_DIR}/externals/extlibs") if(JSRUNTIME_ENGINE_NAME STREQUAL "jsc") @@ -101,6 +103,14 @@ if (ENABLE_JSRUNTIME_THUNDER_SECURITYAGENT) add_definitions("-DENABLE_JSRUNTIME_THUNDER_SECURITYAGENT") endif (ENABLE_JSRUNTIME_THUNDER_SECURITYAGENT) +if (NATIVEJS_DEVELOPER_MODE) + add_definitions("-DNATIVEJS_DEVELOPER_MODE") +endif (NATIVEJS_DEVELOPER_MODE) + +if (NATIVEJS_L2_BUILD) + add_definitions("-DNATIVEJS_L2_BUILD") +endif (NATIVEJS_L2_BUILD) + include (${JSRUNTIME_SOURCE_DIRECTORY}/include.cmake) set(JSRUNTIME_APP_FILES ${JSRUNTIME_COMMON_SOURCE_DIRECTORY}/jsruntime.cpp @@ -188,6 +198,16 @@ if (APPLE) endif (APPLE) add_definitions("-std=c++17 -DUSE_LIBUV") + +# Coverage support +if (ENABLE_COVERAGE) + message("Enabling code coverage support") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O0 --coverage -fprofile-arcs -ftest-coverage") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O0 --coverage -fprofile-arcs -ftest-coverage") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --coverage") +endif (ENABLE_COVERAGE) + set_target_properties(${JSRUNTIME_LIBRARY_NAME} PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED YES) diff --git a/include/NativeJSRenderer.h b/include/NativeJSRenderer.h index 51fde0f..796594a 100644 --- a/include/NativeJSRenderer.h +++ b/include/NativeJSRenderer.h @@ -31,6 +31,7 @@ #include #include #include +#include namespace JsRuntime { diff --git a/src/NativeJSRenderer.cpp b/src/NativeJSRenderer.cpp index a7b71e6..4657e4b 100644 --- a/src/NativeJSRenderer.cpp +++ b/src/NativeJSRenderer.cpp @@ -571,7 +571,12 @@ void NativeJSRenderer::runDeveloperConsole(ModuleSettings moduleSettings) // Short-cirtuit: in case consoleLoop was altered by signal handler we shouldn't execute lines below if (!consoleLoop || input == "exit") { delete mConsoleState->consoleContext; - break; + + #ifdef NATIVEJS_L2_BUILD + std::this_thread::sleep_for(std::chrono::milliseconds(200)); + terminate(); + #endif + break; } mConsoleState->inputMutex.lock(); diff --git a/src/jsruntime.cpp b/src/jsruntime.cpp index 0f6390c..2859880 100644 --- a/src/jsruntime.cpp +++ b/src/jsruntime.cpp @@ -140,8 +140,25 @@ int main(int argc, char* argv[]) #if defined(NATIVEJS_DEVELOPER_MODE) std::this_thread::sleep_for(std::chrono::milliseconds(500)); renderer->getApplications(); - sleep(10); - renderer->terminateApplication(id); + + #ifdef NATIVEJS_L2_BUILD + int waitTime = 10; + if (moduleSettings.enableWebSocket || moduleSettings.enableWebSocketEnhanced) { + waitTime = 30; + NativeJSLogger::log(INFO, "WebSocket enabled - using extended wait time: %d seconds\n", waitTime); + } + sleep(waitTime); + #else + sleep(10) ; + #endif + + renderer->terminateApplication(id); + + #ifdef NATIVEJS_L2_BUILD + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + renderer->terminate(); + #endif + #endif }); }