Skip to content

Commit 5ba08de

Browse files
authored
fix: unit test not returning error when test fails
* fix: unit test not returning error when test fails * chore: add unit test to smoketest.yml * fix: make linter happy
1 parent 3f320e5 commit 5ba08de

File tree

7 files changed

+114
-56
lines changed

7 files changed

+114
-56
lines changed

.github/workflows/smoketest.yml

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,40 @@ jobs:
7575
make build_dev_test
7676
7777
echo "+ Copying device-tests.tar.gz to remote host"
78-
ssh jkci "cat > /userdata/jetkvm/device-tests.tar.gz" < device-tests.tar.gz
78+
ssh jkci "cat > /tmp/device-tests.tar.gz" < device-tests.tar.gz
7979
echo "+ Running go tests"
80-
ssh jkci "cd /userdata/jetkvm && tar zxvf device-tests.tar.gz && ./run_all_tests -json"
80+
ssh jkci ash << 'EOF'
81+
set -e
82+
TMP_DIR=$(mktemp -d)
83+
cd ${TMP_DIR}
84+
tar zxf /tmp/device-tests.tar.gz
85+
./gotestsum --format=testdox \
86+
--jsonfile=/tmp/device-tests.json \
87+
--post-run-command 'sh -c "echo $TESTS_FAILED > /tmp/device-tests.failed"' \
88+
--raw-command -- ./run_all_tests -json
89+
90+
GOTESTSUM_EXIT_CODE=$?
91+
if [ $GOTESTSUM_EXIT_CODE -ne 0 ]; then
92+
echo "❌ Tests failed (exit code: $GOTESTSUM_EXIT_CODE)"
93+
rm -rf ${TMP_DIR} /tmp/device-tests.tar.gz
94+
exit 1
95+
fi
96+
97+
TESTS_FAILED=$(cat /tmp/device-tests.failed)
98+
if [ "$TESTS_FAILED" -ne 0 ]; then
99+
echo "❌ Tests failed $TESTS_FAILED tests failed"
100+
rm -rf ${TMP_DIR} /tmp/device-tests.tar.gz
101+
exit 1
102+
fi
103+
104+
echo "✅ Tests passed"
105+
rm -rf ${TMP_DIR} /tmp/device-tests.tar.gz
106+
EOF
107+
ssh jkci "cat /tmp/device-tests.json" > device-tests.json
108+
- name: Golang Test Report
109+
uses: becheran/[email protected]
110+
with:
111+
input: "device-tests.json"
81112
- name: Deploy application
82113
run: |
83114
set -e
@@ -117,15 +148,25 @@ jobs:
117148
run: |
118149
echo "+ Checking the status of the device"
119150
curl -v http://$CI_HOST/device/status && echo
120-
echo "+ Waiting for 10 seconds to allow all services to start"
121-
sleep 10
151+
echo "+ Waiting for 15 seconds to allow all services to start"
152+
sleep 15
122153
echo "+ Collecting logs"
123-
ssh jkci "cat /userdata/jetkvm/last.log" > last.log
124-
cat last.log
154+
local_log_tar=$(mktemp)
155+
ssh jkci ash > $local_log_tar <<'EOF'
156+
log_path=$(mktemp -d)
157+
dmesg > $log_path/dmesg.log
158+
cp /userdata/jetkvm/last.log $log_path/last.log
159+
tar -czf - -C $log_path .
160+
EOF
161+
tar -xf $local_log_tar
162+
cat dmesg.log last.log
125163
env:
126164
CI_HOST: ${{ vars.JETKVM_CI_HOST }}
127165
- name: Upload logs
128166
uses: actions/upload-artifact@v4
129167
with:
130168
name: device-logs
131-
path: last.log
169+
path: |
170+
last.log
171+
dmesg.log
172+
device-tests.json

Makefile

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,38 +15,45 @@ GO_LDFLAGS := \
1515
-X $(PROMETHEUS_TAG).Revision=$(REVISION) \
1616
-X $(KVM_PKG_NAME).builtTimestamp=$(BUILDTS)
1717

18+
GO_CMD := GOOS=linux GOARCH=arm GOARM=7 go
19+
BIN_DIR := $(shell pwd)/bin
20+
1821
TEST_DIRS := $(shell find . -name "*_test.go" -type f -exec dirname {} \; | sort -u)
1922

2023
hash_resource:
2124
@shasum -a 256 resource/jetkvm_native | cut -d ' ' -f 1 > resource/jetkvm_native.sha256
2225

2326
build_dev: hash_resource
2427
@echo "Building..."
25-
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
28+
$(GO_CMD) build -ldflags="$(GO_LDFLAGS) -X $(KVM_PKG_NAME).builtAppVersion=$(VERSION_DEV)" -o $(BIN_DIR)/jetkvm_app cmd/main.go
2629

2730
build_test2json:
28-
GOOS=linux GOARCH=arm GOARM=7 go build -o bin/test2json cmd/test2json
31+
$(GO_CMD) build -o $(BIN_DIR)/test2json cmd/test2json
32+
33+
build_gotestsum:
34+
@echo "Building gotestsum..."
35+
$(GO_CMD) install gotest.tools/gotestsum@latest
36+
cp $(shell $(GO_CMD) env GOPATH)/bin/linux_arm/gotestsum $(BIN_DIR)/gotestsum
2937

30-
build_dev_test: build_test2json
38+
build_dev_test: build_test2json build_gotestsum
3139
# collect all directories that contain tests
3240
@echo "Building tests for devices ..."
33-
@rm -rf bin/tests && mkdir -p bin/tests
41+
@rm -rf $(BIN_DIR)/tests && mkdir -p $(BIN_DIR)/tests
3442

35-
@cat resource/dev_test.sh > bin/tests/run_all_tests
43+
@cat resource/dev_test.sh > $(BIN_DIR)/tests/run_all_tests
3644
@for test in $(TEST_DIRS); do \
3745
test_pkg_name=$$(echo $$test | sed 's/^.\///g'); \
3846
test_pkg_full_name=$(KVM_PKG_NAME)/$$(echo $$test | sed 's/^.\///g'); \
3947
test_filename=$$(echo $$test_pkg_name | sed 's/\//__/g')_test; \
40-
GOOS=linux GOARCH=arm GOARM=7 \
41-
go test -v \
48+
$(GO_CMD) test -v \
4249
-ldflags="$(GO_LDFLAGS) -X $(KVM_PKG_NAME).builtAppVersion=$(VERSION_DEV)" \
43-
-c -o bin/tests/$$test_filename $$test; \
44-
echo "runTest ./$$test_filename $$test_pkg_full_name" >> bin/tests/run_all_tests; \
50+
-c -o $(BIN_DIR)/tests/$$test_filename $$test; \
51+
echo "runTest ./$$test_filename $$test_pkg_full_name" >> $(BIN_DIR)/tests/run_all_tests; \
4552
done; \
46-
chmod +x bin/tests/run_all_tests; \
47-
cp bin/test2json bin/tests/; \
48-
chmod +x bin/tests/test2json; \
49-
tar czfv device-tests.tar.gz -C bin/tests .
53+
chmod +x $(BIN_DIR)/tests/run_all_tests; \
54+
cp $(BIN_DIR)/test2json $(BIN_DIR)/tests/ && chmod +x $(BIN_DIR)/tests/test2json; \
55+
cp $(BIN_DIR)/gotestsum $(BIN_DIR)/tests/ && chmod +x $(BIN_DIR)/tests/gotestsum; \
56+
tar czfv device-tests.tar.gz -C $(BIN_DIR)/tests .
5057

5158
frontend:
5259
cd ui && npm ci && npm run build:device
@@ -59,7 +66,7 @@ dev_release: frontend build_dev
5966

6067
build_release: frontend hash_resource
6168
@echo "Building release..."
62-
GOOS=linux GOARCH=arm GOARM=7 go build -ldflags="$(GO_LDFLAGS) -X $(KVM_PKG_NAME).builtAppVersion=$(VERSION)" -o bin/jetkvm_app cmd/main.go
69+
$(GO_CMD) build -ldflags="$(GO_LDFLAGS) -X $(KVM_PKG_NAME).builtAppVersion=$(VERSION)" -o bin/jetkvm_app cmd/main.go
6370

6471
release:
6572
@if rclone lsf r2://jetkvm-update/app/$(VERSION)/ | grep -q "jetkvm_app"; then \

dev_deploy.sh

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ show_help() {
2727
echo " -u, --user <remote_user> Remote username (default: root)"
2828
echo " --run-go-tests Run go tests"
2929
echo " --run-go-tests-only Run go tests and exit"
30-
echo " --run-go-tests-json Run go tests and output JSON"
3130
echo " --skip-ui-build Skip frontend/UI build"
3231
echo " --help Display this help message"
3332
echo
@@ -43,7 +42,6 @@ SKIP_UI_BUILD=false
4342
RESET_USB_HID_DEVICE=false
4443
LOG_TRACE_SCOPES="${LOG_TRACE_SCOPES:-jetkvm,cloud,websocket,native,jsonrpc}"
4544
RUN_GO_TESTS=false
46-
RUN_GO_TESTS_JSON=false
4745
RUN_GO_TESTS_ONLY=false
4846

4947
# Parse command line arguments
@@ -69,11 +67,6 @@ while [[ $# -gt 0 ]]; do
6967
RUN_GO_TESTS=true
7068
shift
7169
;;
72-
--run-go-tests-json)
73-
RUN_GO_TESTS_JSON=true
74-
RUN_GO_TESTS=true
75-
shift
76-
;;
7770
--run-go-tests-only)
7871
RUN_GO_TESTS_ONLY=true
7972
RUN_GO_TESTS=true
@@ -109,18 +102,35 @@ if [ "$RUN_GO_TESTS" = true ]; then
109102
make build_dev_test
110103

111104
msg_info "▶ Copying device-tests.tar.gz to remote host"
112-
ssh "${REMOTE_USER}@${REMOTE_HOST}" "cat > ${REMOTE_PATH}/device-tests.tar.gz" < device-tests.tar.gz
105+
ssh "${REMOTE_USER}@${REMOTE_HOST}" "cat > /tmp/device-tests.tar.gz" < device-tests.tar.gz
113106

114107
msg_info "▶ Running go tests"
115-
TEST_ARGS=""
116-
if [ "$RUN_GO_TESTS_JSON" = true ]; then
117-
TEST_ARGS="-json"
118-
fi
119-
ssh "${REMOTE_USER}@${REMOTE_HOST}" ash << EOF
108+
ssh "${REMOTE_USER}@${REMOTE_HOST}" ash << 'EOF'
120109
set -e
121-
cd ${REMOTE_PATH}
122-
tar zxvf device-tests.tar.gz
123-
PION_LOG_TRACE=all ./run_all_tests $TEST_ARGS
110+
TMP_DIR=$(mktemp -d)
111+
cd ${TMP_DIR}
112+
tar zxf /tmp/device-tests.tar.gz
113+
./gotestsum --format=testdox \
114+
--jsonfile=/tmp/device-tests.json \
115+
--post-run-command 'sh -c "echo $TESTS_FAILED > /tmp/device-tests.failed"' \
116+
--raw-command -- ./run_all_tests -json
117+
118+
GOTESTSUM_EXIT_CODE=$?
119+
if [ $GOTESTSUM_EXIT_CODE -ne 0 ]; then
120+
echo "❌ Tests failed (exit code: $GOTESTSUM_EXIT_CODE)"
121+
rm -rf ${TMP_DIR} /tmp/device-tests.tar.gz
122+
exit 1
123+
fi
124+
125+
TESTS_FAILED=$(cat /tmp/device-tests.failed)
126+
if [ "$TESTS_FAILED" -ne 0 ]; then
127+
echo "❌ Tests failed $TESTS_FAILED tests failed"
128+
rm -rf ${TMP_DIR} /tmp/device-tests.tar.gz
129+
exit 1
130+
fi
131+
132+
echo "✅ Tests passed"
133+
rm -rf ${TMP_DIR} /tmp/device-tests.tar.gz
124134
EOF
125135

126136
if [ "$RUN_GO_TESTS_ONLY" = true ]; then

go.mod

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ require (
3030
github.com/stretchr/testify v1.10.0
3131
github.com/vishvananda/netlink v1.3.0
3232
go.bug.st/serial v1.6.2
33-
golang.org/x/crypto v0.36.0
34-
golang.org/x/net v0.38.0
35-
golang.org/x/sys v0.32.0
33+
golang.org/x/crypto v0.38.0
34+
golang.org/x/net v0.40.0
35+
golang.org/x/sys v0.33.0
3636
)
3737

3838
replace github.com/pojntfx/go-nbd v0.3.2 => github.com/chemhack/go-nbd v0.0.0-20241006125820-59e45f5b1e7b
@@ -52,6 +52,7 @@ require (
5252
github.com/go-playground/universal-translator v0.18.1 // indirect
5353
github.com/go-playground/validator/v10 v10.26.0 // indirect
5454
github.com/goccy/go-json v0.10.5 // indirect
55+
github.com/google/go-cmp v0.7.0 // indirect
5556
github.com/json-iterator/go v1.1.12 // indirect
5657
github.com/klauspost/compress v1.17.11 // indirect
5758
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
@@ -78,13 +79,14 @@ require (
7879
github.com/pion/turn/v4 v4.0.0 // indirect
7980
github.com/pmezard/go-difflib v1.0.0 // indirect
8081
github.com/prometheus/client_model v0.6.1 // indirect
82+
github.com/rogpeppe/go-internal v1.11.0 // indirect
8183
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
8284
github.com/ugorji/go/codec v1.2.12 // indirect
8385
github.com/vishvananda/netns v0.0.4 // indirect
8486
github.com/wlynxg/anet v0.0.5 // indirect
8587
golang.org/x/arch v0.15.0 // indirect
8688
golang.org/x/oauth2 v0.24.0 // indirect
87-
golang.org/x/text v0.23.0 // indirect
89+
golang.org/x/text v0.25.0 // indirect
8890
google.golang.org/protobuf v1.36.6 // indirect
8991
gopkg.in/yaml.v3 v3.0.1 // indirect
9092
)

go.sum

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ github.com/go-playground/validator/v10 v10.26.0/go.mod h1:I5QpIEbmr8On7W0TktmJAu
5151
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
5252
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
5353
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
54-
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
55-
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
54+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
55+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
5656
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
5757
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
5858
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -147,8 +147,8 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg
147147
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
148148
github.com/psanford/httpreadat v0.1.0 h1:VleW1HS2zO7/4c7c7zNl33fO6oYACSagjJIyMIwZLUE=
149149
github.com/psanford/httpreadat v0.1.0/go.mod h1:Zg7P+TlBm3bYbyHTKv/EdtSJZn3qwbPwpfZ/I9GKCRE=
150-
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
151-
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
150+
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
151+
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
152152
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
153153
github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY=
154154
github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ=
@@ -181,10 +181,10 @@ go.bug.st/serial v1.6.2 h1:kn9LRX3sdm+WxWKufMlIRndwGfPWsH1/9lCWXQCasq8=
181181
go.bug.st/serial v1.6.2/go.mod h1:UABfsluHAiaNI+La2iESysd9Vetq7VRdpxvjx7CmmOE=
182182
golang.org/x/arch v0.15.0 h1:QtOrQd0bTUnhNVNndMpLHNWrDmYzZ2KDqSrEymqInZw=
183183
golang.org/x/arch v0.15.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE=
184-
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
185-
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
186-
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
187-
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
184+
golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
185+
golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
186+
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
187+
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
188188
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
189189
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
190190
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -194,10 +194,10 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
194194
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
195195
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
196196
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
197-
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
198-
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
199-
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
200-
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
197+
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
198+
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
199+
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
200+
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
201201
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
202202
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
203203
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

internal/usbgadget/changeset_symlink.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func checkIfSymlinksInOrder(fc *FileChange, logger *zerolog.Logger) (FileState,
2929
}
3030
l := logger.With().Str("path", fc.Path).Logger()
3131

32-
if fc.ParamSymlinks == nil || len(fc.ParamSymlinks) == 0 {
32+
if len(fc.ParamSymlinks) == 0 {
3333
return FileStateUnknown, fmt.Errorf("no symlinks to check")
3434
}
3535

resource/dev_test.sh

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ runTest() {
2929
function exit_with_code() {
3030
if [ $EXIT_CODE -ne 0 ]; then
3131
printf "\e[0;31m❌ Test failed\e[0m\n"
32-
else
33-
printf "\e[0;32m✅ All tests passed\e[0m\n"
3432
fi
3533

3634
exit $EXIT_CODE

0 commit comments

Comments
 (0)