From 5c850cdad338f0fe65b35858bff25bfee7b3c5d1 Mon Sep 17 00:00:00 2001 From: David Cermak Date: Fri, 13 Sep 2024 10:16:14 +0200 Subject: [PATCH] feat(mosq): Add target tests with localhost broker-client --- .github/workflows/mosq__build.yml | 49 +++++++++++++++++-- .../examples/broker/pytest_mosq_local.py | 18 +++++++ 2 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 components/mosquitto/examples/broker/pytest_mosq_local.py diff --git a/.github/workflows/mosq__build.yml b/.github/workflows/mosq__build.yml index 26064ead8..b1fc163f6 100644 --- a/.github/workflows/mosq__build.yml +++ b/.github/workflows/mosq__build.yml @@ -9,13 +9,16 @@ on: jobs: build_mosq: - if: contains(github.event.pull_request.labels.*.name, 'Comp::mosq') || github.event_name == 'push' - name: Build + if: contains(github.event.pull_request.labels.*.name, 'mosquitto') || github.event_name == 'push' + name: Mosquitto build strategy: matrix: idf_ver: ["latest", "release-v5.3"] runs-on: ubuntu-22.04 container: espressif/idf:${{ matrix.idf_ver }} + env: + TEST_DIR: components/mosquitto/examples/broker + TARGET_TEST_DIR: build_esp32_default steps: - name: Checkout esp-protocols uses: actions/checkout@v4 @@ -28,4 +31,44 @@ jobs: run: | . ${IDF_PATH}/export.sh pip install idf-component-manager idf-build-apps --upgrade - python ci/build_apps.py components/mosquitto/examples/ -c + python ci/build_apps.py ${TEST_DIR} + cd ${TEST_DIR} + ${GITHUB_WORKSPACE}/ci/clean_build_artifacts.sh `pwd`/${TARGET_TEST_DIR} + zip -qur artifacts.zip ${TARGET_TEST_DIR} + - uses: actions/upload-artifact@v4 + with: + name: mosq_target_esp32_${{ matrix.idf_ver }} + path: ${{ env.TEST_DIR }}/artifacts.zip + if-no-files-found: error + + test_mosq: + # Skip running on forks since it won't have access to secrets + if: | + github.repository == 'espressif/esp-protocols' && + ( contains(github.event.pull_request.labels.*.name, 'mosquitto') || github.event_name == 'push' ) + name: Mosquitto target test + needs: build_mosq + strategy: + matrix: + idf_ver: ["latest", "release-v5.3"] + runs-on: + - self-hosted + - ESP32-ETHERNET-KIT + env: + TEST_DIR: components/mosquitto/examples/broker + TARGET_TEST_DIR: build_esp32_default + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + with: + name: mosq_target_esp32_${{ matrix.idf_ver }} + path: ${{ env.TEST_DIR }}/ci/ + - name: Run Test + working-directory: ${{ env.TEST_DIR }} + run: | + unzip ci/artifacts.zip -d ci + for dir in `ls -d ci/build_*`; do + rm -rf build sdkconfig.defaults + mv $dir build + python -m pytest --log-cli-level DEBUG --junit-xml=./results_esp32_${{ matrix.idf_ver }}_${dir#"ci/build_"}.xml --target=esp32 + done diff --git a/components/mosquitto/examples/broker/pytest_mosq_local.py b/components/mosquitto/examples/broker/pytest_mosq_local.py new file mode 100644 index 000000000..50e5522bf --- /dev/null +++ b/components/mosquitto/examples/broker/pytest_mosq_local.py @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Unlicense OR CC0-1.0 + +def test_mosq_local(dut): + """ + steps: + 1. Start mosquitto broker + 2. Start mqtt client + 3. Checks that the client connected to broker + 4. checks that the client received published data + """ + # We expect the client to connect from IPv4 localhost address + dut.expect('New client connected from 127.0.0.1') + # We expect the client to get "connected" event and receive the published data + dut.expect('MQTT_EVENT_CONNECTED') + dut.expect('MQTT_EVENT_DATA') + dut.expect('TOPIC=/topic/qos0') + dut.expect('DATA=data')