diff --git a/.github/workflows/ports_psoc6.yml b/.github/workflows/ports_psoc6.yml index 3707867d466f0..02a28f2888eaf 100644 --- a/.github/workflows/ports_psoc6.yml +++ b/.github/workflows/ports_psoc6.yml @@ -51,31 +51,62 @@ jobs: needs: server-build strategy: matrix: + # This matrix can be also generated in a previous job as a JSON list: + # echo 'test-suite-list=["pin", "signal", ...]' >> $GITHUB_OUTPUT + # Then here use the corresponding variable: + # ${{ fromJson(needs..outputs.test-suite-list) }} + # That way we don“t need to hardcode the values here. board: - CY8CPROTO-062-4343W - CY8CPROTO-063-BLE - CY8CKIT-062S2-AI + test-suite: + - vfs-flash + - vfs-sdcard + - no-hw-ext + - pin + - signal + - adc + - pwm + - i2c + - spi + - i2s + - time_pulse + - bitstream + - uart + - pdm_pcm + - watchdog + - multi-instance + exclude: + - board: CY8CPROTO-063-BLE + test-suite: vfs-sdcard + - board: CY8CKIT-062S2-AI + test-suite: vfs-sdcard + - board: CY8CKIT-062S2-AI + test-suite: bitstream + - board: CY8CKIT-062S2-AI + test-suite: time_pulse steps: - - uses: actions/checkout@v4 - - name: Download binaries - uses: actions/download-artifact@v4 - - name: Container setup - run: | - echo ${{ secrets.SELF_HOSTED_PASSWORD }} | sudo -S chmod 666 /var/run/docker.sock - source tools/ci.sh && ci_psoc6_setup - - name: Setup devices - run: | - cp mpy-psoc6_${{ matrix.board }}_${{ needs.server-build.outputs.commit_sha }}/firmware.hex . - source tools/ci.sh && ci_psoc6_flash_multiple_devices ${{ matrix.board }} firmware.hex tools/psoc6/${{ runner.name }}-devs.yml - - name: Run psoc6 tests - timeout-minutes: 12 - run: | - ./tests/ports/psoc6/run_psoc6_tests.sh --test-suite ci-tests --board ${{ matrix.board }} --hil ${{ runner.name }} - - - name: Container teardown - if: failure() || success() - run: | - source tools/ci.sh && ci_psoc6_teardown + - uses: actions/checkout@v4 + - name: Download binaries + uses: actions/download-artifact@v4 + - name: Container setup + run: | + echo ${{ secrets.SELF_HOSTED_PASSWORD }} | sudo -S chmod 666 /var/run/docker.sock + source tools/ci.sh && ci_psoc6_setup + - name: Setup devices + run: | + cp mpy-psoc6_${{ matrix.board }}_${{ needs.server-build.outputs.commit_sha }}/firmware.hex . + source tools/ci.sh && ci_psoc6_flash_multiple_devices ${{ matrix.board }} firmware.hex tools/psoc6/${{ runner.name }}-devs.yml + - name: Run psoc6 tests + timeout-minutes: 12 + run: | + ./tests/ports/psoc6/run_psoc6_tests.sh --test-suite ${{ matrix.test-suite }} --board ${{ matrix.board }} --hil ${{ runner.name }} + + - name: Container teardown + if: failure() || success() + run: | + source tools/ci.sh && ci_psoc6_teardown release: runs-on: ubuntu-latest diff --git a/tests/ports/psoc6/board_ext_hw/diagrams/cy8ckit-062s2-ai-hil-test-diag.png b/tests/ports/psoc6/board_ext_hw/diagrams/cy8ckit-062s2-ai-hil-test-diag.png index 672d96c51e676..99b269ab91f5b 100644 Binary files a/tests/ports/psoc6/board_ext_hw/diagrams/cy8ckit-062s2-ai-hil-test-diag.png and b/tests/ports/psoc6/board_ext_hw/diagrams/cy8ckit-062s2-ai-hil-test-diag.png differ diff --git a/tests/ports/psoc6/board_ext_hw/diagrams/cy8cproto-062-4343w-hil-test-diag.png b/tests/ports/psoc6/board_ext_hw/diagrams/cy8cproto-062-4343w-hil-test-diag.png index 059139fb9eccf..c9f18d8443028 100644 Binary files a/tests/ports/psoc6/board_ext_hw/diagrams/cy8cproto-062-4343w-hil-test-diag.png and b/tests/ports/psoc6/board_ext_hw/diagrams/cy8cproto-062-4343w-hil-test-diag.png differ diff --git a/tests/ports/psoc6/board_ext_hw/diagrams/cy8cproto-063-ble-hil-test-diag.png b/tests/ports/psoc6/board_ext_hw/diagrams/cy8cproto-063-ble-hil-test-diag.png index 0fc191b5e30bd..8964d776c4bd8 100644 Binary files a/tests/ports/psoc6/board_ext_hw/diagrams/cy8cproto-063-ble-hil-test-diag.png and b/tests/ports/psoc6/board_ext_hw/diagrams/cy8cproto-063-ble-hil-test-diag.png differ diff --git a/tests/ports/psoc6/run_psoc6_tests.sh b/tests/ports/psoc6/run_psoc6_tests.sh index 8185545c72764..b4bcce984426a 100755 --- a/tests/ports/psoc6/run_psoc6_tests.sh +++ b/tests/ports/psoc6/run_psoc6_tests.sh @@ -10,8 +10,8 @@ tests_psoc6_dir="./ports/psoc6" usage() { echo "Usage:" echo - echo "sh run_psoc6_tests.sh --test-suite : [[--dev-test | --dev-stub ] | [--booard --hil ]]" - echo "sh run_psoc6_tests.sh -t : [[-d | -s ] | [-b -h ]]" + echo "sh run_psoc6_tests.sh --test-suite [[--dev-test | --dev-stub ] | [--booard --hil ]]" + echo "sh run_psoc6_tests.sh -t [[-d | -s ] | [-b -h ]]" echo echo "Mandatory argument:" echo @@ -19,12 +19,8 @@ usage() { echo echo "Available test suites: " echo - echo " ci-tests run all continuous integration enabled tests. - Requires the following arguments: - - --board, b board name - --hil, h hardware-in-the-loop server name" - echo + echo " ci-tests run all continuous integration enabled tests + Requires --board and --hil options." echo " vfs-flash run virtual filesystem related tests on flash. If followed by -x, runs advance tests too." echo " vfs-sdcard run virtual filesystem related tests on sd card. @@ -46,9 +42,16 @@ usage() { echo " help display this help" echo echo "Available options:" + echo + echo "Locally, you can specify the test device and stub devices by its port:" echo echo " --dev-test, -d test device (default: /dev/ttyACM0)" echo " --dev-stub, -s stub device or second test instance (default: /dev/ttyACM1)" + echo + echo "Alternatively, a hardware-in-the-loop (HIL) file and the required board can be provided:" + echo + echo " --board, b board name" + echo " --hil, h hardware-in-the-loop server name" echo } @@ -91,16 +94,52 @@ while getopts "b:d:h:s:t:x" o; do esac done -if [ -z "${dev_test}" ]; then - dev_test="/dev/ttyACM0" +if [ -z "${afs}" ]; then + afs=0 fi -if [ -z "${dev_stub}" ]; then - dev_stub="/dev/ttyACM1" -fi +if [ -n "${board}" ] && [ -n "${hil}" ]; then + # If the hil and board are provided, the script will use the get-devs.py discover automatically the + # available devices. + use_hil=1 + tools_psoc6_dir=${tools_dir}/psoc6 -if [ -z "${afs}" ]; then - afs=0 + echo + echo "##########################################" + echo "board : ${board}" + echo "hil : ${hil}" + + devs=($(python ${tools_psoc6_dir}/get-devs.py port -b ${board} -y ${tools_psoc6_dir}/${hil}-devs.yml)) + + if [ "${board}" == "CY8CKIT-062S2-AI" ]; then + board_version=0.1.0 + elif [ "${board}" == "CY8CPROTO-062-4343W" ]; then + board_version=0.6.0 + elif [ "${board}" == "CY8CPROTO-063-BLE" ]; then + board_version=0.5.0 + fi + + devs_a=($(python ${tools_psoc6_dir}/get-devs.py port -b ${board} -y ${tools_psoc6_dir}/${hil}-devs.yml --hw-ext ${board_version}.a)) + devs_b=($(python ${tools_psoc6_dir}/get-devs.py port -b ${board} -y ${tools_psoc6_dir}/${hil}-devs.yml --hw-ext ${board_version}.b)) + devs_c=($(python ${tools_psoc6_dir}/get-devs.py port -b ${board} -y ${tools_psoc6_dir}/${hil}-devs.yml --hw-ext ${board_version}.c)) + + echo + echo "##########################################" + + # # Delay to ensure device are ready for repl mode + # sleep 5 +else + # Otherwise, we will use the provided devices or the default ones. + use_hil=0 + if [ -z "${dev_test}" ]; then + dev_test="/dev/ttyACM0" + fi + if [ -z "${dev_stub}" ]; then + dev_stub="/dev/ttyACM1" + fi + + # # Delay to ensure device are ready for repl mode + # sleep 5 fi exit_result=0 @@ -177,6 +216,10 @@ mpremote_vfs_large_file_tests() { } vfs_flash_tests() { + if [ ${use_hil} -eq 1 ]; then + dev_test=${devs[0]} + fi + run_tests "file system flash" ${dev_test} \ "extmod/vfs_basic.py extmod/vfs_lfs_superblock.py @@ -187,75 +230,197 @@ vfs_flash_tests() { } vfs_sdcard_tests() { - run_tests "file system sdcard" ${dev_test} "${tests_psoc6_dir}/board_ext_hw/single/sdcard.py" - - storage_device="sd" - mpremote_vfs_large_file_tests + if [ ${use_hil} -eq 1 ]; then + if [ "${board}" == "CY8CPROTO-062-4343W" ]; then + dev_test=${devs_b[0]} + + run_tests "file system sdcard" ${dev_test} "${tests_psoc6_dir}/board_ext_hw/single/sdcard.py" + + storage_device="sd" + mpremote_vfs_large_file_tests + + fi + fi } no_ext_hw_tests() { + if [ ${use_hil} -eq 1 ]; then + dev_test=${devs[0]} + fi + run_tests "no extended hardware" ${dev_test} "${tests_psoc6_dir}/board_only_hw/single" \ "-e ${tests_psoc6_dir}/board_only_hw/single/wdt.py \ -e ${tests_psoc6_dir}/board_only_hw/single/wdt_reset_check.py" } adc_tests() { + if [ ${use_hil} -eq 1 ]; then + if [ "${board}" == "CY8CPROTO-062-4343W" ] || [ "${board}" == "CY8CPROTO-063-BLE" ]; then + dev_test=${devs_a[0]} + else + if [ "${board}" == "CY8CKIT-062S2-AI" ]; then + dev_test=${devs_b[0]} + fi + fi + fi + run_tests "adc" ${dev_test} "${tests_psoc6_dir}/board_ext_hw/single/adc.py" } pwm_tests() { + if [ ${use_hil} -eq 1 ]; then + dev_test=${devs_a[0]} + fi + run_tests "pwm" ${dev_test} "${tests_psoc6_dir}/board_ext_hw/single/pwm.py" } pin_tests() { + if [ ${use_hil} -eq 1 ]; then + dev_test=${devs_a[0]} + fi + run_tests "pin" ${dev_test} "${tests_psoc6_dir}/board_ext_hw/single/pin.py" } signal_tests() { + if [ ${use_hil} -eq 1 ]; then + dev_test=${devs_a[0]} + fi + run_tests "signal" ${dev_test} "${tests_psoc6_dir}/board_ext_hw/single/signal.py" } i2c_tests() { + if [ ${use_hil} -eq 1 ]; then + if [ "${board}" == "CY8CPROTO-062-4343W" ]; then + dev_test=${devs_b[0]} + else + if [ "${board}" == "CY8CPROTO-063-BLE" ] || [ "${board}" == "CY8CKIT-062S2-AI" ]; then + dev_test=${devs_a[0]} + fi + fi + fi + run_tests "i2c" ${dev_test} "${tests_psoc6_dir}/board_ext_hw/single/i2c.py" } uart_tests() { + if [ ${use_hil} -eq 1 ]; then + if [ "${board}" == "CY8CPROTO-062-4343W" ] || [ "${board}" == "CY8CKIT-062S2-AI" ]; then + dev_test=${devs_a[0]} + else + if [ "${board}" == "CY8CPROTO-063-BLE" ]; then + dev_test=${devs_b[0]} + fi + fi + fi + run_tests "uart" ${dev_test} "${tests_psoc6_dir}/board_ext_hw/single/uart.py" } bitstream_tests() { + if [ ${use_hil} -eq 1 ]; then + if [ "${board}" == "CY8CPROTO-062-4343W" ] || [ "${board}" == "CY8CPROTO-063-BLE" ]; then + dev_test=${devs_a[0]} + dev_stub=${devs_b[0]} + else + if [ "${board}" == "CY8CKIT-062S2-AI" ]; then + dev_test=${devs_b[0]} + dev_stub=${devs_c[0]} + fi + fi + fi + run_tests "bitstream" ${dev_test} "${tests_psoc6_dir}/board_ext_hw/multi/bitstream_rx.py" \ "" "bitstream_tx" ${dev_stub} "${tests_psoc6_dir}/board_ext_hw/multi/bitstream_tx.py" } spi_tests() { + if [ ${use_hil} -eq 1 ]; then + if [ "${board}" == "CY8CPROTO-062-4343W" ] || [ "${board}" == "CY8CPROTO-063-BLE" ]; then + dev_test=${devs_a[0]} + dev_stub=${devs_b[0]} + else + if [ "${board}" == "CY8CKIT-062S2-AI" ]; then + dev_test=${devs_c[0]} + dev_stub=${devs_b[0]} + fi + fi + fi + run_tests "spi" ${dev_test} "${tests_psoc6_dir}/board_ext_hw/multi/spi_master.py" \ "" "spi_slave" ${dev_stub} "${tests_psoc6_dir}/board_ext_hw/multi/spi_slave.py" } i2s_tests() { + if [ ${use_hil} -eq 1 ]; then + if [ "${board}" == "CY8CPROTO-062-4343W" ] || [ "${board}" == "CY8CPROTO-063-BLE" ]; then + dev_test=${devs_b[0]} + dev_stub=${devs_a[0]} + else + if [ "${board}" == "CY8CKIT-062S2-AI" ]; then + dev_test=${devs_c[0]} + dev_stub=${devs_b[0]} + fi + fi + fi + run_tests "i2s" ${dev_test} "${tests_psoc6_dir}/board_ext_hw/multi/i2s_rx.py" \ "" "i2s_tx" ${dev_stub} "${tests_psoc6_dir}/board_ext_hw/multi/i2s_tx.py" } time_pulse_tests() { + if [ ${use_hil} -eq 1 ]; then + if [ "${board}" == "CY8CPROTO-062-4343W" ] || [ "${board}" == "CY8CPROTO-063-BLE" ]; then + dev_test=${devs_a[0]} + dev_stub=${devs_b[0]} + else + if [ "${board}" == "CY8CKIT-062S2-AI" ]; then + dev_test=${devs_b[0]} + dev_stub=${devs_c[0]} + fi + fi + fi + run_tests "time_pulse" ${dev_test} "${tests_psoc6_dir}/board_ext_hw/multi/time_pulse_us.py" \ "" "time_pulse_sig_gen" ${dev_stub} "${tests_psoc6_dir}/board_ext_hw/multi/time_pulse_sig_gen.py" } pdm_pcm_tests() { + if [ ${use_hil} -eq 1 ]; then + if [ "${board}" == "CY8CPROTO-062-4343W" ] || [ "${board}" == "CY8CPROTO-063-BLE" ]; then + dev_test=${devs_b[0]} + dev_stub=${devs_a[0]} + else + if [ "${board}" == "CY8CKIT-062S2-AI" ]; then + dev_test=${devs_c[0]} + dev_stub=${devs_b[0]} + fi + fi + fi + run_tests "pdm_pcm" ${dev_test} "${tests_psoc6_dir}/board_ext_hw/multi/pdm_pcm_rx.py" \ "" "pdm_pcm_tx" ${dev_stub} "${tests_psoc6_dir}/board_ext_hw/multi/pdm_pcm_tx.py" } wdt_tests() { + if [ ${use_hil} -eq 1 ]; then + dev_test=${devs[0]} + fi + run_tests "wdt" ${dev_test} "${tests_psoc6_dir}/board_only_hw/single/wdt.py" sleep 2 run_tests "wdt reset check" ${dev_test} "${tests_psoc6_dir}/board_only_hw/single/wdt_reset_check.py" } multi_tests() { + if [ ${use_hil} -eq 1 ]; then + dev_test=${devs[0]} + dev_stub=${devs[1]} + fi + start_test_info "multiple boards instances" ${dev_test} ${dev_stub} multi_tests=$(find ${tests_psoc6_dir}/board_only_hw/multi/ -type f -name "*.py") @@ -266,147 +431,36 @@ multi_tests() { } run_ci_tests() { - board=$1 - hil_name=$2 - tools_psoc6_dir=${tools_dir}/psoc6 - - echo - echo "##########################################" - echo "running tests : ci-tests" - echo "board : ${board}" - echo "hil : ${hil_name}" - - devs=($(python ${tools_psoc6_dir}/get-devs.py port -b ${board} -y ${tools_psoc6_dir}/${hil_name}-devs.yml)) - - # TODO: This mess needs to be solved in a future script rework using yml files to define the compatible boards requirements - if [ "${board}" == "CY8CKIT-062S2-AI" ]; then - board_version=0.1.0 - elif [ "${board}" == "CY8CPROTO-062-4343W" ]; then - board_version=0.6.0 - elif [ "${board}" == "CY8CPROTO-063-BLE" ]; then - board_version=0.5.0 - fi - - devs_a=($(python ${tools_psoc6_dir}/get-devs.py port -b ${board} -y ${tools_psoc6_dir}/${hil_name}-devs.yml --hw-ext ${board_version}.a)) - devs_b=($(python ${tools_psoc6_dir}/get-devs.py port -b ${board} -y ${tools_psoc6_dir}/${hil_name}-devs.yml --hw-ext ${board_version}.b)) - devs_c=($(python ${tools_psoc6_dir}/get-devs.py port -b ${board} -y ${tools_psoc6_dir}/${hil_name}-devs.yml --hw-ext ${board_version}.c)) - - #dev_test=${devs[0]} - #vfs_flash_tests - - if [ "${board}" == "CY8CPROTO-062-4343W" ]; then - dev_test=${devs_b[0]} - vfs_sdcard_tests - fi - - dev_test=${devs[0]} + vfs_flash_tests + vfs_sdcard_tests no_ext_hw_tests - - dev_test=${devs_a[0]} pin_tests signal_tests - - dev_test=${devs_a[0]} pwm_tests - - if [ "${board}" == "CY8CPROTO-062-4343W" ] || [ "${board}" == "CY8CPROTO-063-BLE" ]; then - dev_test=${devs_a[0]} - else - if [ "${board}" == "CY8CKIT-062S2-AI" ]; then - dev_test=${devs_b[0]} - fi - fi adc_tests - - if [ "${board}" == "CY8CPROTO-062-4343W" ]; then - dev_test=${devs_b[0]} - else - if [ "${board}" == "CY8CPROTO-063-BLE" ] || [ "${board}" == "CY8CKIT-062S2-AI" ]; then - dev_test=${devs_a[0]} - fi - fi i2c_tests - - if [ "${board}" == "CY8CPROTO-062-4343W" ] || [ "${board}" == "CY8CKIT-062S2-AI" ]; then - dev_test=${devs_a[0]} - else - if [ "${board}" == "CY8CPROTO-063-BLE" ]; then - dev_test=${devs_b[0]} - fi - fi uart_tests - - if [ "${board}" == "CY8CPROTO-062-4343W" ] || [ "${board}" == "CY8CPROTO-063-BLE" ]; then - dev_test=${devs_a[0]} - dev_stub=${devs_b[0]} - # else - # if [ "${board}" == "CY8CKIT-062S2-AI" ]; then - # dev_test=${devs_c[0]} - # dev_stub=${devs_b[0]} - # fi - spi_tests - fi - - if [ "${board}" == "CY8CPROTO-062-4343W" ] || [ "${board}" == "CY8CPROTO-063-BLE" ]; then - dev_test=${devs_b[0]} - dev_stub=${devs_a[0]} - else - if [ "${board}" == "CY8CKIT-062S2-AI" ]; then - dev_test=${devs_c[0]} - dev_stub=${devs_b[0]} - fi - fi + spi_tests i2s_tests - - - if [ "${board}" == "CY8CPROTO-062-4343W" ] || [ "${board}" == "CY8CPROTO-063-BLE" ]; then - dev_test=${devs_b[0]} - dev_stub=${devs_a[0]} - else - if [ "${board}" == "CY8CKIT-062S2-AI" ]; then - dev_test=${devs_c[0]} - dev_stub=${devs_b[0]} - fi - fi pdm_pcm_tests - - if [ "${board}" == "CY8CPROTO-062-4343W" ] || [ "${board}" == "CY8CPROTO-063-BLE" ]; then - dev_test=${devs_a[0]} - dev_stub=${devs_b[0]} - bitstream_tests - else - if [ "${board}" == "CY8CKIT-062S2-AI" ]; then - dev_test=${devs_b[0]} - dev_stub=${devs_c[0]} - fi - fi - # TODO:Enable this 2 test properly in the HIL! - # bitstream_tests - #time_pulse_tests - - dev_test=${devs[0]} + bitstream_tests + time_pulse_tests wdt_tests - - dev_test=${devs[0]} - dev_stub=${devs[1]} multi_tests - - echo - echo "##########################################" } case ${test_suite} in "ci-tests") - run_ci_tests ${board} ${hil} + run_ci_tests ;; "vfs-flash") - vfs_flash_tests + vfs_flash_tests ;; "vfs-sdcard") - vfs_sdcard_tests + vfs_sdcard_tests ;; "no-hw-ext") - no_ext_hw_tests + no_ext_hw_tests ;; "pin") pin_tests @@ -427,7 +481,7 @@ case ${test_suite} in spi_tests ;; "i2s") - i2s_tests + i2s_tests ;; "time_pulse") time_pulse_tests @@ -436,16 +490,16 @@ case ${test_suite} in pdm_pcm_tests ;; "uart") - uart_tests + uart_tests ;; "bitstream") - bitstream_tests + bitstream_tests ;; "watchdog") - wdt_tests + wdt_tests ;; "multi-instance") - multi_tests + multi_tests ;; "help") usage