From fea89a0d234eb25c625b13190660713c74172644 Mon Sep 17 00:00:00 2001 From: Aveline <352441+ym@users.noreply.github.com> Date: Fri, 16 May 2025 19:53:01 +0200 Subject: [PATCH] chore: run golang tests --- .github/workflows/build.yml | 7 ++++ .gitignore | 3 ++ Makefile | 23 +++++++++++++ dev_deploy.sh | 46 +++++++++++++++++++++++--- internal/confparser/confparser_test.go | 21 ++++++++++-- resource/dev_test.sh | 35 ++++++++++++++++++++ 6 files changed, 127 insertions(+), 8 deletions(-) create mode 100644 resource/dev_test.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b31041f..e860290 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,6 +32,13 @@ jobs: - name: Build application run: | make build_dev + - name: Run tests + run: | + go test ./... -json > testreport.json + - name: Golang Test Report + uses: becheran/go-testreport@v0.3.2 + with: + output: "testreport.json" - name: Upload artifact uses: actions/upload-artifact@v4 with: diff --git a/.gitignore b/.gitignore index 740f554..f37d922 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ bin/* static/* .idea +.DS_Store + +device-tests.tar.gz \ No newline at end of file diff --git a/Makefile b/Makefile index 062c782..0c9bdbf 100644 --- a/Makefile +++ b/Makefile @@ -22,6 +22,29 @@ build_dev: hash_resource @echo "Building..." GOOS=linux GOARCH=arm GOARM=7 go build -ldflags="$(GO_LDFLAGS) -X $(KVM_PKG_NAME).builtAppVersion=$(VERSION_DEV)" -o bin/jetkvm_app cmd/main.go +build_test2json: + GOOS=linux GOARCH=arm GOARM=7 go build -o bin/test2json cmd/test2json + +build_dev_test: build_test2json +# collect all directories that contain tests + @echo "Building tests for devices ..." + @rm -rf bin/tests && mkdir -p bin/tests + GOOS=linux GOARCH=arm GOARM=7 \ + go test -v \ + -ldflags="$(GO_LDFLAGS) -X $(KVM_PKG_NAME).builtAppVersion=$(VERSION_DEV)" \ + -c -o bin/tests ./...; \ + + @cat resource/dev_test.sh > bin/tests/run_all_tests + @for test in bin/tests/*.test; do \ + chmod +x $$test; \ + base_name=$$(basename $$test); \ + echo "runTest ./$$base_name" >> bin/tests/run_all_tests; \ + done; \ + chmod +x bin/tests/run_all_tests; \ + cp bin/test2json bin/tests/; \ + chmod +x bin/tests/test2json; \ + tar czfv device-tests.tar.gz -C bin/tests . + frontend: cd ui && npm ci && npm run build:device diff --git a/dev_deploy.sh b/dev_deploy.sh index 62e2c4f..03e5dd9 100755 --- a/dev_deploy.sh +++ b/dev_deploy.sh @@ -3,6 +3,19 @@ # Exit immediately if a command exits with a non-zero status set -e +C_RST="$(tput sgr0)" +C_ERR="$(tput setaf 1)" +C_OK="$(tput setaf 2)" +C_WARN="$(tput setaf 3)" +C_INFO="$(tput setaf 5)" + +msg() { printf '%s%s%s\n' $2 "$1" $C_RST; } + +msg_info() { msg "$1" $C_INFO; } +msg_ok() { msg "$1" $C_OK; } +msg_err() { msg "$1" $C_ERR; } +msg_warn() { msg "$1" $C_WARN; } + # Function to display help message show_help() { echo "Usage: $0 [options] -r " @@ -12,6 +25,7 @@ show_help() { echo echo "Optional:" echo " -u, --user Remote username (default: root)" + echo " --run-go-tests Run go tests" echo " --skip-ui-build Skip frontend/UI build" echo " --help Display this help message" echo @@ -26,6 +40,7 @@ REMOTE_PATH="/userdata/jetkvm/bin" SKIP_UI_BUILD=false RESET_USB_HID_DEVICE=false LOG_TRACE_SCOPES="${LOG_TRACE_SCOPES:-jetkvm,cloud,websocket,native,jsonrpc}" +RUN_GO_TESTS=false # Parse command line arguments while [[ $# -gt 0 ]]; do @@ -46,6 +61,10 @@ while [[ $# -gt 0 ]]; do RESET_USB_HID_DEVICE=true shift ;; + --run-go-tests) + RUN_GO_TESTS=true + shift + ;; --help) show_help exit 0 @@ -60,24 +79,41 @@ done # Verify required parameters if [ -z "$REMOTE_HOST" ]; then - echo "Error: Remote IP is a required parameter" + msg_err "Error: Remote IP is a required parameter" show_help + exit 1 fi # Build the development version on the host if [ "$SKIP_UI_BUILD" = false ]; then + msg_info "▶ Building frontend" make frontend fi + +msg_info "▶ Building go binary" make build_dev -# Change directory to the binary output directory -cd bin +if [ "$RUN_GO_TESTS" = true ]; then + msg_info "▶ Building go tests" + make build_dev_test + + msg_info "▶ Copying device-tests.tar.gz to remote host" + ssh "${REMOTE_USER}@${REMOTE_HOST}" "cat > ${REMOTE_PATH}/device-tests.tar.gz" < device-tests.tar.gz + + msg_info "▶ Running go tests" + ssh "${REMOTE_USER}@${REMOTE_HOST}" ash << EOF +set -e +cd ${REMOTE_PATH} +tar zxvf device-tests.tar.gz +./run_all_tests -test.v +EOF +fi # Kill any existing instances of the application ssh "${REMOTE_USER}@${REMOTE_HOST}" "killall jetkvm_app_debug || true" # Copy the binary to the remote host -ssh "${REMOTE_USER}@${REMOTE_HOST}" "cat > ${REMOTE_PATH}/jetkvm_app_debug" < jetkvm_app +ssh "${REMOTE_USER}@${REMOTE_HOST}" "cat > ${REMOTE_PATH}/jetkvm_app_debug" < jetkvm_app_debug if [ "$RESET_USB_HID_DEVICE" = true ]; then # Remove the old USB gadget configuration @@ -106,4 +142,4 @@ chmod +x jetkvm_app_debug PION_LOG_TRACE=${LOG_TRACE_SCOPES} ./jetkvm_app_debug EOF -echo "Deployment complete." +echo "Deployment complete." \ No newline at end of file diff --git a/internal/confparser/confparser_test.go b/internal/confparser/confparser_test.go index dd5e00a..07d057e 100644 --- a/internal/confparser/confparser_test.go +++ b/internal/confparser/confparser_test.go @@ -57,7 +57,22 @@ func TestValidateConfig(t *testing.T) { } } -func TestValidateIPv4StaticConfigRequired(t *testing.T) { +func TestValidateIPv4StaticConfigNetmaskRequiredIfStatic(t *testing.T) { + config := &testNetworkConfig{ + IPv4Static: &testIPv4StaticConfig{ + Address: null.StringFrom("192.168.1.1"), + Gateway: null.StringFrom("192.168.1.1"), + }, + IPv4Mode: null.StringFrom("static"), + } + + err := SetDefaultsAndValidate(config) + if err == nil { + t.Fatalf("expected error, got nil") + } +} + +func TestValidateIPv4StaticConfigNetmaskNotRequiredIfStatic(t *testing.T) { config := &testNetworkConfig{ IPv4Static: &testIPv4StaticConfig{ Address: null.StringFrom("192.168.1.1"), @@ -66,8 +81,8 @@ func TestValidateIPv4StaticConfigRequired(t *testing.T) { } err := SetDefaultsAndValidate(config) - if err == nil { - t.Fatalf("expected error, got nil") + if err != nil { + t.Fatalf("expected no error, got %v", err) } } diff --git a/resource/dev_test.sh b/resource/dev_test.sh new file mode 100644 index 0000000..151dc16 --- /dev/null +++ b/resource/dev_test.sh @@ -0,0 +1,35 @@ +#!/bin/sh +JSON_OUTPUT=false +if [ "$1" = "-json" ]; then + JSON_OUTPUT=true + shift +fi +ADDITIONAL_ARGS=$@ +EXIT_CODE=0 + +runTest() { + if [ "$JSON_OUTPUT" = true ]; then + ./test2json $1 -test.v $ADDITIONAL_ARGS | tee $1.result.json + if [ $? -ne 0 ]; then + EXIT_CODE=1 + fi + else + $@ + if [ $? -ne 0 ]; then + EXIT_CODE=1 + fi + fi +} + + +function exit_with_code() { + if [ $EXIT_CODE -ne 0 ]; then + printf "\e[0;31m❌ Test failed\e[0m\n" + else + printf "\e[0;32m✅ All tests passed\e[0m\n" + fi + + exit $EXIT_CODE +} + +trap exit_with_code EXIT