safing-portmaster/spn/docks/op_latency_test.go

59 lines
1.4 KiB
Go

package docks
import (
"testing"
"time"
"github.com/safing/portmaster/spn/terminal"
)
func TestLatencyOp(t *testing.T) {
t.Parallel()
var (
latTestDelay = 10 * time.Millisecond
latTestQueueSize uint32 = 10
)
// Reduce waiting time.
latencyTestPauseDuration = 100 * time.Millisecond
// Create test terminal pair.
a, b, err := terminal.NewSimpleTestTerminalPair(
latTestDelay,
int(latTestQueueSize),
&terminal.TerminalOpts{
FlowControl: terminal.FlowControlNone,
FlowControlSize: latTestQueueSize,
},
)
if err != nil {
t.Fatalf("failed to create test terminal pair: %s", err)
}
// Grant permission for op on remote terminal and start op.
b.GrantPermission(terminal.IsCraneController)
op, tErr := NewLatencyTestOp(a)
if tErr != nil {
t.Fatalf("failed to start op: %s", err)
}
// Wait for result and check error.
tErr = <-op.Result()
if tErr.IsError() {
t.Fatalf("op failed: %s", tErr)
}
t.Logf("measured latency: %f ms", float64(op.testResult)/float64(time.Millisecond))
// Calculate expected latency.
expectedLatency := float64(latTestDelay * 2)
t.Logf("expected latency: %f ms", expectedLatency/float64(time.Millisecond))
// Check if measured latency is within parameters.
if float64(op.testResult) > expectedLatency*1.2 {
t.Fatal("measured latency too high")
}
if float64(op.testResult) < expectedLatency*0.9 {
t.Fatal("measured latency too low")
}
}