succd: add ci, tests
All checks were successful
/ test (push) Successful in 4s

This commit is contained in:
Serge Bazanski 2024-09-28 15:28:49 +02:00
parent 96e07ece2d
commit 2454a44350
3 changed files with 109 additions and 0 deletions

View file

@ -0,0 +1,7 @@
on: [push, pull_request]
jobs:
test:
runs-on: self-hosted-nixos-x86_64
steps:
- uses: https://github.com/actions/checkout@v4
- run: cd succbone/succd && ./ci.sh

30
succbone/succd/ci.sh Executable file
View file

@ -0,0 +1,30 @@
#!/usr/bin/env bash
set -e
set -o pipefail
if [ ! -f go.mod ]; then
echo "Script needs to be run with in succd directory."
exit 1
fi
echo "Running gofmt..."
GOFMT_OUT="$(gofmt -d $(find . -name '*.go'))"
if [ -n "$GOFMT_OUT" ]; then
echo "gofmt generated differences, please run 'go fmt ./' and try again."
echo "$GOFMT_OUT"
exit 1
fi
echo "Running govet..."
GOVET_OUT="$(go vet ./)"
if [ -n "$GOVET_OUT" ]; then
echo "go vet found the following errors:"
echo "$GOVET_OUT"
exit 1
fi
echo "Running tests..."
go test ./
echo "OK."

View file

@ -0,0 +1,72 @@
package main
import (
"math"
"testing"
"time"
)
func TestMomentaryOutput(t *testing.T) {
mo := momentaryOutput{}
mo.trigger()
mo.process()
if !mo.output {
t.Fatalf("output didn't trigger")
}
mo.process()
if !mo.output {
t.Fatalf("output didn't keep triggered")
}
time.Sleep(time.Second)
mo.process()
if mo.output {
t.Fatalf("output didn't untrigger")
}
}
func TestThresholdOutput(t *testing.T) {
to := thresholdOutput{
threshold: 1,
}
to.process(0)
if to.output {
t.Fatalf("output shouldn't have triggered")
}
to.process(2)
if !to.output {
t.Fatalf("output should have triggered")
}
to.process(0)
if !to.output {
t.Fatalf("output should have triggered (in debounce)")
}
}
func TestRingbufferInput(t *testing.T) {
ri := ringbufferInput{
limit: 3,
}
if ri.saturated() {
t.Fatal("ringbuffer shouldn't be saturated yet")
}
ri.process(1)
if ri.saturated() {
t.Fatal("ringbuffer shouldn't be saturated yet")
}
ri.process(2)
if ri.saturated() {
t.Fatal("ringbuffer shouldn't be saturated yet")
}
ri.process(3)
if !ri.saturated() {
t.Fatalf("ringbuffer should be saturated")
}
if diff := math.Abs(float64(ri.avg) - 2); diff > 0.01 {
t.Fatalf("ringbuffer avg should be ~2, is %f", ri.avg)
}
ri.process(10)
if diff := math.Abs(float64(ri.avg) - 5); diff > 0.01 {
t.Fatalf("ringbuffer avg should be ~5, is %f", ri.avg)
}
}