Reticulum-Go/pkg/interfaces/https_race_test.go

61 lines
1.2 KiB
Go
Raw Permalink Normal View History

// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2024-2026 Quad4.io
//go:build !js
package interfaces
import (
"sync"
"sync/atomic"
"testing"
"time"
"quad4/reticulum-go/pkg/common"
)
func TestHTTPSRaceStopSend(t *testing.T) {
port := freeHTTPSPort(t)
srv, err := NewHTTPSServerInterface("https_race_srv", "127.0.0.1", port, HTTPSServerOptions{
Path: "/rns",
LongPoll: 300 * time.Millisecond,
})
if err != nil {
t.Fatal(err)
}
var n atomic.Int32
srv.SetPacketCallback(func([]byte, common.NetworkInterface) { n.Add(1) })
if err := srv.Start(); err != nil {
t.Fatal(err)
}
defer srv.Stop()
port = listenHTTPSPort(t, srv)
cli, err := NewHTTPSClientInterfaceWithRetries("https_race_cli", "127.0.0.1", port, true, 20, HTTPSClientOptions{
Path: "/rns",
LongPoll: 300 * time.Millisecond,
})
if err != nil {
t.Fatal(err)
}
waitOnline(t, cli, 5*time.Second)
waitHTTPSPeers(t, srv, 1, 5*time.Second)
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
for i := range 60 {
_ = cli.Send([]byte{0x50, byte(i)}, "")
time.Sleep(2 * time.Millisecond)
}
}()
go func() {
defer wg.Done()
time.Sleep(40 * time.Millisecond)
_ = cli.Stop()
}()
wg.Wait()
_ = n.Load()
}