-
Notifications
You must be signed in to change notification settings - Fork 135
[Tests] Add thunder_test_support static library for plugin integration testing #2084
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
47f1530
7840e23
8e00498
eb858a8
4d5ebda
72d7c40
fe8854f
a146f76
2e76a98
552ce60
24fae29
c532dbb
61cfb19
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,112 @@ | ||
| name: Test Thunder Test Support Library | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| on: | ||
| workflow_dispatch: | ||
| push: | ||
| branches: ["master", "development/Thunder_Test_Lib"] | ||
| paths: | ||
| - 'Tests/test_support/**' | ||
| - 'Source/Thunder/**' | ||
| - 'Source/core/**' | ||
| - 'Source/plugins/**' | ||
| pull_request: | ||
| branches: ["master"] | ||
| paths: | ||
| - 'Tests/test_support/**' | ||
| - 'Source/Thunder/**' | ||
| - 'Source/core/**' | ||
| - 'Source/plugins/**' | ||
|
|
||
| jobs: | ||
| SmokeTest: | ||
| runs-on: ubuntu-24.04 | ||
|
|
||
| strategy: | ||
| matrix: | ||
| build_type: [Debug, Release] | ||
|
|
||
| name: Smoke Test - ${{matrix.build_type}} | ||
|
|
||
| steps: | ||
| - name: Install necessary packages | ||
| uses: nick-fields/retry@v3 | ||
| with: | ||
| timeout_minutes: 10 | ||
| max_attempts: 10 | ||
| command: | | ||
| sudo gem install apt-spy2 | ||
| sudo apt-spy2 fix --commit --launchpad --country=US | ||
| sudo apt-get update | ||
| sudo apt-get install -y python3-pip build-essential cmake ninja-build libusb-1.0-0-dev zlib1g-dev libssl-dev libgtest-dev | ||
| python3 -m venv venv | ||
| source venv/bin/activate | ||
| pip install jsonref | ||
|
|
||
| # ----- Checkout ----- | ||
| - name: Checkout Thunder | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| path: Thunder | ||
| ref: ${{ github.event.pull_request.head.sha || github.sha }} | ||
|
|
||
| - name: Checkout ThunderTools - default | ||
| if: ${{ !contains(github.event.pull_request.body, '[DependsOn=ThunderTools:') }} | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| path: ThunderTools | ||
| repository: rdkcentral/ThunderTools | ||
|
|
||
| - name: Regex ThunderTools | ||
| if: ${{ contains(github.event.pull_request.body, '[DependsOn=ThunderTools:') }} | ||
| id: tools | ||
| uses: AsasInnab/regex-action@v1 | ||
| with: | ||
| regex_pattern: '(?<=\[DependsOn=ThunderTools:).*(?=\])' | ||
| regex_flags: 'gim' | ||
| search_string: ${{github.event.pull_request.body}} | ||
|
|
||
| - name: Checkout ThunderTools - ${{steps.tools.outputs.first_match}} | ||
| if: ${{ contains(github.event.pull_request.body, '[DependsOn=ThunderTools:') }} | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| path: ThunderTools | ||
| repository: rdkcentral/ThunderTools | ||
| ref: ${{steps.tools.outputs.first_match}} | ||
|
|
||
| # ----- Build ----- | ||
| - name: Build ThunderTools | ||
| run: | | ||
| source venv/bin/activate | ||
| cmake -G Ninja -S ThunderTools -B ${{matrix.build_type}}/build/ThunderTools \ | ||
| -DCMAKE_INSTALL_PREFIX="${{matrix.build_type}}/install/usr" | ||
| cmake --build ${{matrix.build_type}}/build/ThunderTools --target install | ||
|
|
||
| - name: Build Thunder with test support | ||
| run: | | ||
| source venv/bin/activate | ||
| cmake -G Ninja -S Thunder -B ${{matrix.build_type}}/build/Thunder \ | ||
| -DBINDING="127.0.0.1" \ | ||
| -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \ | ||
| -DCMAKE_INSTALL_PREFIX="${{matrix.build_type}}/install/usr" \ | ||
| -DCMAKE_MODULE_PATH="${PWD}/${{matrix.build_type}}/install/usr/include/WPEFramework/Modules" \ | ||
| -DPORT="0" \ | ||
| -DENABLE_CXX17=OFF \ | ||
| -DENABLE_TEST_RUNTIME=ON | ||
| cmake --build ${{matrix.build_type}}/build/Thunder --target install | ||
|
|
||
| # ----- Run smoke test ----- | ||
| - name: Run smoke test | ||
| run: | | ||
| LD_LIBRARY_PATH="${{matrix.build_type}}/install/usr/lib:$LD_LIBRARY_PATH" \ | ||
| ${{matrix.build_type}}/build/Thunder/Tests/test_support/tests/thunder_test_runtime_smoke \ | ||
| --gtest_output="xml:smoke-test-results.xml" \ | ||
| --gtest_color=yes | ||
|
|
||
| - name: Upload test results | ||
| uses: actions/upload-artifact@v4 | ||
| with: | ||
| name: smoke-test-results-${{matrix.build_type}} | ||
| path: smoke-test-results.xml |
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,142 @@ | ||||||||||
| # ============================================================================ | ||||||||||
| # thunder_test_support - Static library for Thunder plugin integration testing | ||||||||||
| # | ||||||||||
| # This library embeds the Thunder PluginHost server (PluginServer, Controller, | ||||||||||
| # SystemInfo, etc.) into a static archive so that GTest-based test binaries | ||||||||||
| # can spin up a real Thunder runtime in-process without launching the | ||||||||||
| # standalone Thunder daemon. | ||||||||||
| # | ||||||||||
| # Usage: | ||||||||||
| # 1. Link your test executable against thunder_test_support when the test is | ||||||||||
| # built in the same CMake build as Thunder. | ||||||||||
| # 2. Use ThunderTestRuntime::Initialize() to start the embedded server. | ||||||||||
| # 3. Call JSON-RPC or COM-RPC methods directly against loaded plugins. | ||||||||||
| # 4. Call ThunderTestRuntime::Deinitialize() when done. | ||||||||||
| # | ||||||||||
| # NOTE: PluginHost.cpp is deliberately excluded — it contains main(). | ||||||||||
| # The test binary provides its own main() via GTest. | ||||||||||
| # NOTE: The install rules below publish only the archive and public header. | ||||||||||
| # They do not export a CMake package target for external find_package() | ||||||||||
| # consumers. | ||||||||||
| # ============================================================================ | ||||||||||
|
|
||||||||||
| find_package(Threads REQUIRED) | ||||||||||
|
|
||||||||||
| set(THUNDER_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../Source/Thunder") | ||||||||||
|
|
||||||||||
| set(THREADPOOL_COUNT "4" CACHE STRING "The number of threads in the thread pool for test runtime") | ||||||||||
|
||||||||||
| set(THREADPOOL_COUNT "4" CACHE STRING "The number of threads in the thread pool for test runtime") | |
| if(NOT DEFINED THREADPOOL_COUNT) | |
| set(THREADPOOL_COUNT "4") | |
| endif() |
Copilot
AI
Apr 15, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
MODULE_NAME is set both via target_compile_definitions(... MODULE_NAME=ThunderTestRuntime) and again via #define MODULE_NAME ThunderTestRuntime in Tests/test_support/Module.cpp. This can trigger macro redefinition warnings and also forces the module name for all compiled Thunder server sources in this archive. Prefer defining MODULE_NAME only in the dedicated Module.cpp (and drop the compile definition here), similar to how the main Thunder target sets APPLICATION_NAME/THREADPOOL_COUNT but not MODULE_NAME.
| MODULE_NAME=ThunderTestRuntime |
Copilot
AI
Apr 9, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Install rules hardcode lib/include instead of using GNUInstallDirs variables (${CMAKE_INSTALL_LIBDIR}, ${CMAKE_INSTALL_INCLUDEDIR}) used elsewhere in the project. Using the standard variables improves portability across distros/multilib layouts.
Copilot
AI
Apr 15, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The docs and this CMake target describe consumers linking against the thunder_test_support CMake target to pick up INTERFACE whole-archive link options, but the install rules here only install the .a and header—there is no target export / CMake package config for thunder_test_support, and the include dirs also lack an INSTALL_INTERFACE. If this library is intended for external consumers via find_package, it should be exported and install-interface include dirs should be set; otherwise the docs should avoid implying the imported target exists / carries link options.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| // Module definition for the thunder_test_support static library. | ||
| // | ||
| // MODULE_NAME is supplied by the target compile definitions so the embedded | ||
| // Source/Thunder objects and this archive-level declaration use the same | ||
| // module name. | ||
|
|
||
| #include <core/core.h> | ||
|
|
||
| MODULE_NAME_ARCHIVE_DECLARATION |
Uh oh!
There was an error while loading. Please reload this page.