Skip to content
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

Add zephyr testing github action #6586

Merged
merged 1 commit into from
Jul 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ jobs:
uses: ./.github/workflows/hostap.yml
nginx:
uses: ./.github/workflows/nginx.yml
zephyr:
uses: ./.github/workflows/zephyr.yml
# TODO: Currently this test fails. Enable it once it becomes passing.
# haproxy:
# uses: ./.github/workflows/haproxy.yml
95 changes: 95 additions & 0 deletions .github/workflows/zephyr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
name: Zephyr tests

on:
workflow_call:

jobs:
run_test:
name: Build and run
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Install dependencies
run: |
# Don't prompt for anything
export DEBIAN_FRONTEND=noninteractive
sudo apt-get update
# most of the ci-base zephyr docker image packages
sudo apt-get install -y zip bridge-utils uml-utilities \
git cmake ninja-build gperf ccache dfu-util device-tree-compiler wget \
python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \
make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 \
autoconf automake bison build-essential ca-certificates cargo ccache chrpath cmake \
cpio device-tree-compiler dfu-util diffstat dos2unix doxygen file flex g++ gawk gcc \
gcovr git git-core gnupg gperf gtk-sharp2 help2man iproute2 lcov libcairo2-dev \
libglib2.0-dev libgtk2.0-0 liblocale-gettext-perl libncurses5-dev libpcap-dev \
libpopt0 libsdl1.2-dev libsdl2-dev libssl-dev libtool libtool-bin locales make \
net-tools ninja-build openssh-client parallel pkg-config python3-dev python3-pip \
python3-ply python3-setuptools python-is-python3 qemu rsync socat srecord sudo \
texinfo unzip wget ovmf xz-utils

- name: Install west
run: sudo pip install west

- name: Init west workspace
run: west init zephyr

- name: Update west.yml
working-directory: zephyr/zephyr
run: |
REF=$(echo '${{ github.ref }}' | sed -e 's/\//\\\//g')
sed -e 's/remotes:/remotes:\n \- name: wolfssl\n url\-base: https:\/\/github.com\/${{ github.repository_owner }}/' -i west.yml
sed -e "s/projects:/projects:\n \- name: wolfssl\n path: modules\/crypto\/wolfssl\n remote: wolfssl\n revision: $REF/" -i west.yml

- name: Update west workspace
working-directory: zephyr
run: west update -n -o=--depth=1

- name: Export zephyr
working-directory: zephyr
run: west zephyr-export

- name: Install pip dependencies
working-directory: zephyr
run: sudo pip install -r zephyr/scripts/requirements.txt

- name: Install zephyr SDK
run: |
wget -q https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/zephyr-sdk-0.16.1_linux-x86_64.tar.xz
tar xf zephyr-sdk-0.16.1_linux-x86_64.tar.xz
cd zephyr-sdk-0.16.1
./setup.sh -h -c

- name: Run wolfssl test
id: wolfssl-test
working-directory: zephyr
run: |
./zephyr/scripts/twister --testsuite-root modules/crypto/wolfssl --test zephyr/samples/wolfssl_test/sample.crypto.wolfssl_test -vvv
rm -rf zephyr/twister-out

- name: Run wolfssl TLS sock test
id: wolfssl-tls-sock
working-directory: zephyr
run: |
./zephyr/scripts/twister --testsuite-root modules/crypto/wolfssl --test zephyr/samples/wolfssl_tls_sock/sample.crypto.wolfssl_tls_sock -vvv
rm -rf zephyr/twister-out

- name: Run wolfssl TLS thread test
id: wolfssl-tls-thread
working-directory: zephyr
run: |
./zephyr/scripts/twister --testsuite-root modules/crypto/wolfssl --test zephyr/samples/wolfssl_tls_thread/sample.crypto.wolfssl_tls_thread -vvv
rm -rf zephyr/twister-out

- name: Zip failure logs
if: ${{ failure() && (steps.wolfssl-test.outcome == 'failure' || steps.wolfssl-tls-sock.outcome == 'failure' || steps.wolfssl-tls-thread.outcome == 'failure') }}
run: |
zip -9 -r logs.zip zephyr/twister-out

- name: Upload failure logs
if: ${{ failure() && (steps.wolfssl-test.outcome == 'failure' || steps.wolfssl-tls-sock.outcome == 'failure' || steps.wolfssl-tls-thread.outcome == 'failure') }}
uses: actions/upload-artifact@v3
with:
name: zephyr-client-test-logs
path: logs.zip
retention-days: 5
4 changes: 0 additions & 4 deletions wolfcrypt/benchmark/benchmark.c
Original file line number Diff line number Diff line change
Expand Up @@ -253,10 +253,6 @@
#include <esp_log.h>
#endif /* WOLFSSL_ESPIDF */

#ifdef HAVE_PTHREAD
#include <pthread.h>
#endif

#if defined(HAVE_PTHREAD) || \
(!defined(NO_CRYPT_BENCHMARK) && !defined(NO_STDIO_FILESYSTEM) && \
!defined(NO_ERROR_STRINGS) && !defined(NO_MAIN_DRIVER) && \
Expand Down
8 changes: 8 additions & 0 deletions zephyr/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,14 @@ then "Open Terminal".

## Build and Run wolfCrypt Test Application

If you want to run build apps without running `west zephyr-export` then it is
possible by setting the `CMAKE_PREFIX_PATH` variable to the location of the
zephyr sdk and building from the `zephyr` directory. For example:

```
CMAKE_PREFIX_PATH=/path/to/zephyr-sdk-<VERSION> west build -p always -b qemu_x86 ../modules/crypto/wolfssl/zephyr/samples/wolfssl_test/
```

build and execute `wolfssl_test`

```
Expand Down
2 changes: 0 additions & 2 deletions zephyr/samples/wolfssl_benchmark/prj.conf
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@

# Configure stack and heap sizes
CONFIG_MAIN_STACK_SIZE=32768
CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE=16384

# Pthreads
CONFIG_PTHREAD_IPC=y
Expand Down
13 changes: 9 additions & 4 deletions zephyr/samples/wolfssl_benchmark/sample.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,14 @@ sample:
description: wolfCrypt benchmark sample app
name: wolfCrypt benchmark
common:
min_flash: 65
min_ram: 36
tags: crypto wolfssl userspace random
harness: console
harness_config:
type: one_line
regex:
- "Benchmark complete"
tests:
crypto.wolfssl_benchmark:
platform_allow: qemu_x86 nrf5340dk_nrf5340_cpuapp_ns nrf5340dk_nrf5340_cpuapp
sample.crypto.wolfssl_benchmark:
platform_allow: qemu_x86
integration_platforms:
- qemu_x86
2 changes: 1 addition & 1 deletion zephyr/samples/wolfssl_test/prj.conf
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

# Configure stack and heap sizes
CONFIG_MAIN_STACK_SIZE=32768
CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE=16384
CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=16384

# Pthreads
CONFIG_PTHREAD_IPC=y
Expand Down
15 changes: 10 additions & 5 deletions zephyr/samples/wolfssl_test/sample.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,14 @@ sample:
description: wolfCrypt test sample app
name: wolfCrypt test
common:
min_flash: 65
min_ram: 36
tags: crypto wolfssl userspace random
harness: console
harness_config:
type: one_line
regex:
- "Exiting main with return code: 0"
tests:
crypto.wolfssl_test:
platform_allow: qemu_x86 nrf5340dk_nrf5340_cpuapp_ns nrf5340dk_nrf5340_cpuapp
sample.crypto.wolfssl_test:
timeout: 120
platform_allow: qemu_x86
integration_platforms:
- qemu_x86
2 changes: 1 addition & 1 deletion zephyr/samples/wolfssl_tls_sock/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
CONFIG_MAIN_STACK_SIZE=16384
CONFIG_ENTROPY_GENERATOR=y
CONFIG_INIT_STACKS=y
CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE=8192
CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=8192

# General config
CONFIG_NEWLIB_LIBC=y
Expand Down
17 changes: 12 additions & 5 deletions zephyr/samples/wolfssl_tls_sock/sample.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
common:
harness: crypto
tags: crypto
sample:
description: wolfSSL TLS test application
name: wolfSSL TLS Test
common:
harness: console
harness_config:
type: multi_line
regex:
- "Server Return: 0"
- "Client Return: 0"
tests:
test:
platform_whitelist: qemu_x86
sample.crypto.wolfssl_tls_sock:
timeout: 60
platform_allow: qemu_x86
integration_platforms:
- qemu_x86
6 changes: 4 additions & 2 deletions zephyr/samples/wolfssl_tls_sock/src/tls_sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -296,8 +296,10 @@ static void wolfssl_memstats(WOLFSSL* ssl)
/* Start the server thread. */
void start_thread(THREAD_CB func, func_args* args, THREAD_TYPE* thread)
{
/* Casting to k_thread_entry_t should be fine since we just ignore the
* extra arguments being passed in */
k_thread_create(thread, server_stack, K_THREAD_STACK_SIZEOF(server_stack),
func, args, NULL, NULL, 5, 0, K_NO_WAIT);
(k_thread_entry_t)func, args, NULL, NULL, 5, 0, K_NO_WAIT);
}

void join_thread(THREAD_TYPE thread)
Expand Down Expand Up @@ -350,7 +352,7 @@ int wolfssl_server_accept_tcp(WOLFSSL* ssl, SOCKET_T* fd, SOCKET_T* acceptfd)
}

/* Thread to do the server operations. */
void server_thread(void* arg1, void* arg2, void* arg3)
void server_thread(void* arg1)
{
int ret = 0;
WOLFSSL_CTX* server_ctx = NULL;
Expand Down
2 changes: 1 addition & 1 deletion zephyr/samples/wolfssl_tls_thread/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
CONFIG_MAIN_STACK_SIZE=16384
CONFIG_ENTROPY_GENERATOR=y
CONFIG_INIT_STACKS=y
CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE=65536
CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=65536

# Pthreads
CONFIG_PTHREAD_IPC=y
Expand Down
19 changes: 14 additions & 5 deletions zephyr/samples/wolfssl_tls_thread/sample.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
common:
harness: crypto
tags: crypto
sample:
description: wolfSSL TLS test application
name: wolfSSL TLS Test
common:
harness: console
harness_config:
type: multi_line
regex:
- "Server Return: 0"
- "Server Error: 0"
- "Client Return: 0"
- "Client Error: 0"
tests:
test:
platform_whitelist: qemu_x86
sample.crypto.wolfssl_tls_thread:
timeout: 60
platform_allow: qemu_x86
integration_platforms:
- qemu_x86
6 changes: 4 additions & 2 deletions zephyr/samples/wolfssl_tls_thread/src/tls_threaded.c
Original file line number Diff line number Diff line change
Expand Up @@ -519,8 +519,10 @@ static void wolfssl_memstats(WOLFSSL* ssl)
/* Start the server thread. */
void start_thread(THREAD_CB func, func_args* args, THREAD_TYPE* thread)
{
/* Casting to k_thread_entry_t should be fine since we just ignore the
* extra arguments being passed in */
k_thread_create(thread, server_stack, K_THREAD_STACK_SIZEOF(server_stack),
func, args, NULL, NULL, 5, 0, K_NO_WAIT);
(k_thread_entry_t)func, args, NULL, NULL, 5, 0, K_NO_WAIT);
}

void join_thread(THREAD_TYPE thread)
Expand All @@ -530,7 +532,7 @@ void join_thread(THREAD_TYPE thread)


/* Thread to do the server operations. */
void server_thread(void* arg1, void* arg2, void* arg3)
void server_thread(void* arg1)
{
int ret = 0;
WOLFSSL_CTX* server_ctx = NULL;
Expand Down