Skip to content

Commit 9ed19c8

Browse files
authored
Merge pull request #71 from HyperloopUPV-H8/features/test-workflow
[backend] [actions] Add testing workflow for the backend
2 parents 4032ae0 + bc457f5 commit 9ed19c8

6 files changed

Lines changed: 402 additions & 25 deletions

File tree

.github/workflows/build-backend.yaml

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ on:
66
SECRET:
77
required: true
88
workflow_dispatch:
9+
pull_request:
10+
paths:
11+
- backend/**
912

1013
env:
1114
SECRET: ${{ secrets.SECRET }}
@@ -26,7 +29,9 @@ jobs:
2629
- name: "Install packages"
2730
run: apk update && apk add --no-cache libpcap-dev musl-dev gcc go
2831

29-
- uses: actions/checkout@v3
32+
- uses: actions/checkout@v4
33+
with:
34+
sparse-checkout: backend
3035

3136
- name: "Create output path"
3237
working-directory: "${{env.BACKEND_DIR}}"
@@ -47,10 +52,12 @@ jobs:
4752
go build -ldflags '-linkmode external -extldflags "-static"' -o ../output/backend-linux-64
4853
4954
- name: "Upload build"
50-
uses: actions/upload-artifact@v3
55+
uses: actions/upload-artifact@v4
5156
with:
5257
name: backend-linux
5358
path: "${{env.BACKEND_DIR}}/output/*"
59+
retention-days: 3
60+
compression-level: 9
5461

5562
build-backend-windows:
5663
name: "Build backend for windows"
@@ -90,10 +97,12 @@ jobs:
9097
go build -o ..\output\backend-windows-64.exe
9198
9299
- name: "Upload build"
93-
uses: actions/upload-artifact@v3
100+
uses: actions/upload-artifact@v4
94101
with:
95102
name: backend-windows
96103
path: "${{env.BACKEND_DIR}}\\output\\*"
104+
retention-days: 3
105+
compression-level: 9
97106

98107
build-backend-mac:
99108
name: "Build backend for macOS"
@@ -142,7 +151,9 @@ jobs:
142151
go build -o ../output/backend-macos-m1-64
143152
144153
- name: "Upload build"
145-
uses: actions/upload-artifact@v3
154+
uses: actions/upload-artifact@v4
146155
with:
147156
name: backend-macos
148157
path: "${{env.BACKEND_DIR}}/output/*"
158+
retention-days: 3
159+
compression-level: 9

.github/workflows/build-ethernet-view.yaml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ name: Build ethernet view
33
on:
44
workflow_call:
55
workflow_dispatch:
6+
pull_request:
7+
paths:
8+
- ethernet-view/**
9+
- common-front/**
610

711
jobs:
812
build-ethernet-view:
@@ -14,7 +18,11 @@ jobs:
1418
COMMON_DIR: ./common-front
1519

1620
steps:
17-
- uses: actions/checkout@v3
21+
- uses: actions/checkout@v4
22+
with:
23+
sparse-checkout: |
24+
ethernet-view
25+
common-front
1826
1927
- name: "Install common front dependencies"
2028
working-directory: "${{env.COMMON_DIR}}"
@@ -36,7 +44,9 @@ jobs:
3644

3745

3846
- name: "Upload build"
39-
uses: actions/upload-artifact@v3
47+
uses: actions/upload-artifact@v4
4048
with:
4149
name: ethernet-view
4250
path: "${{env.FRONTEND_DIR}}/static/*"
51+
retention-days: 3
52+
compression-level: 9
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
name: Test backend
2+
3+
on:
4+
push:
5+
paths:
6+
- backend/**
7+
pull_request:
8+
paths:
9+
- backend/**
10+
workflow_dispatch:
11+
12+
env:
13+
SECRET: ${{ secrets.SECRET }}
14+
15+
jobs:
16+
test-backend:
17+
name: "Test backend"
18+
runs-on: ubuntu-latest
19+
20+
env:
21+
BACKEND_DIR: ./backend
22+
23+
steps:
24+
- name: Checkout
25+
uses: actions/checkout@v4
26+
27+
- name: Setup Go
28+
uses: actions/setup-go@v4
29+
with:
30+
go-version: 1.21
31+
cache: false
32+
33+
34+
- name: Install Dependencies
35+
run: |
36+
sudo apt-get update && sudo apt-get install -y libpcap-dev
37+
38+
- name: "Load secret"
39+
working-directory: "${{env.BACKEND_DIR}}"
40+
run: |
41+
./load-secret.sh "$SECRET"
42+
43+
- name: Test with Go
44+
working-directory: "${{env.BACKEND_DIR}}"
45+
run: go test -v -timeout 30s ./...
Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,46 @@
11
package session
22

3+
import "io"
4+
35
type Buffer struct {
4-
data chan byte
6+
data chan byte
7+
closed chan struct{}
58
}
69

710
func NewBuffer(size int) *Buffer {
811
return &Buffer{
9-
data: make(chan byte, size),
12+
data: make(chan byte, size),
13+
closed: make(chan struct{}),
1014
}
1115
}
1216

1317
func (buffer *Buffer) Read(b []byte) (n int, err error) {
1418
n = 0
1519
ok := true
16-
loop:
1720
for i := range b {
18-
b[i], ok = <-buffer.data
19-
n++
20-
if !ok {
21-
break loop
21+
select {
22+
case b[i], ok = <-buffer.data:
23+
if !ok {
24+
err = io.EOF
25+
return
26+
}
27+
n++
28+
default:
29+
return
2230
}
2331
}
24-
25-
return n, nil
32+
return
2633
}
2734

2835
func (buffer *Buffer) Write(b []byte) (n int, err error) {
36+
select {
37+
case _, ok := <-buffer.closed:
38+
if !ok {
39+
return 0, io.ErrClosedPipe
40+
}
41+
default:
42+
}
43+
2944
n = 0
3045
for i := range b {
3146
buffer.data <- b[i]
@@ -34,3 +49,9 @@ func (buffer *Buffer) Write(b []byte) (n int, err error) {
3449

3550
return n, nil
3651
}
52+
53+
func (buffer *Buffer) Close() error {
54+
close(buffer.data)
55+
close(buffer.closed)
56+
return nil
57+
}

backend/pkg/transport/session/sniffer_test.go

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"io"
66
"sync"
77
"testing"
8+
"time"
89

910
"github.com/HyperloopUPV-H8/h9-backend/pkg/transport/network"
1011
"github.com/HyperloopUPV-H8/h9-backend/pkg/transport/session"
@@ -216,19 +217,40 @@ func TestSnifferDemux(t *testing.T) {
216217
go func(socket network.Socket, reader io.Reader) {
217218
defer wg.Done()
218219
buf := make([]byte, 65536)
220+
timeout := time.After(time.Millisecond)
221+
readChan := make(chan []byte)
219222
for {
220-
n, err := reader.Read(buf)
221-
if err != nil {
223+
go func() {
224+
for {
225+
n, err := reader.Read(buf)
226+
if err != nil {
227+
close(readChan)
228+
return
229+
}
230+
if n > 0 {
231+
readChan <- buf[:n]
232+
return
233+
}
234+
}
235+
}()
236+
237+
select {
238+
case <-timeout:
222239
return
240+
case buf, ok := <-readChan:
241+
if !ok {
242+
return
243+
}
244+
mapMx.Lock()
245+
data := string(buf)
246+
prev, ok := outputMap[socket]
247+
if ok {
248+
data = prev + data
249+
}
250+
outputMap[socket] = data
251+
mapMx.Unlock()
223252
}
224-
mapMx.Lock()
225-
data := string(buf[:n])
226-
prev, ok := outputMap[socket]
227-
if ok {
228-
data = prev + data
229-
}
230-
outputMap[socket] = data
231-
mapMx.Unlock()
253+
232254
}
233255
}(socket, reader)
234256
}

0 commit comments

Comments
 (0)