mirror of
https://github.com/DeBrosOfficial/orama.git
synced 2026-03-17 14:56:58 +00:00
120 lines
2.7 KiB
Go
120 lines
2.7 KiB
Go
package utils
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
"time"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
func TestWaitForTCPPort_Success(t *testing.T) {
|
|
// Start a TCP listener on a random port
|
|
ln, err := net.Listen("tcp", "localhost:0")
|
|
if err != nil {
|
|
t.Fatalf("failed to start listener: %v", err)
|
|
}
|
|
defer ln.Close()
|
|
|
|
port := ln.Addr().(*net.TCPAddr).Port
|
|
|
|
err = waitForTCPPort(port, 5*time.Second)
|
|
if err != nil {
|
|
t.Errorf("expected success, got error: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestWaitForTCPPort_Timeout(t *testing.T) {
|
|
// Use a port that nothing is listening on
|
|
ln, err := net.Listen("tcp", "localhost:0")
|
|
if err != nil {
|
|
t.Fatalf("failed to get free port: %v", err)
|
|
}
|
|
port := ln.Addr().(*net.TCPAddr).Port
|
|
ln.Close() // Close immediately so nothing is listening
|
|
|
|
err = waitForTCPPort(port, 3*time.Second)
|
|
if err == nil {
|
|
t.Error("expected timeout error, got nil")
|
|
}
|
|
}
|
|
|
|
func TestWaitForTCPPort_DelayedStart(t *testing.T) {
|
|
// Get a free port
|
|
ln, err := net.Listen("tcp", "localhost:0")
|
|
if err != nil {
|
|
t.Fatalf("failed to get free port: %v", err)
|
|
}
|
|
port := ln.Addr().(*net.TCPAddr).Port
|
|
ln.Close()
|
|
|
|
// Start listening after a delay
|
|
go func() {
|
|
time.Sleep(2 * time.Second)
|
|
newLn, err := net.Listen("tcp", ln.Addr().String())
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer newLn.Close()
|
|
// Keep it open long enough for the test
|
|
time.Sleep(10 * time.Second)
|
|
}()
|
|
|
|
err = waitForTCPPort(port, 10*time.Second)
|
|
if err != nil {
|
|
t.Errorf("expected success after delayed start, got error: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestOlricConfigYAMLParsing(t *testing.T) {
|
|
// Verify that the YAML parsing struct matches the format
|
|
// generated by pkg/namespace/systemd_spawner.go
|
|
configContent := `server:
|
|
bindAddr: 10.0.0.1
|
|
bindPort: 10002
|
|
memberlist:
|
|
environment: lan
|
|
bindAddr: 10.0.0.1
|
|
bindPort: 10003
|
|
peers:
|
|
- 10.0.0.2:10003
|
|
partitionCount: 12
|
|
`
|
|
|
|
var cfg struct {
|
|
Memberlist struct {
|
|
BindPort int `yaml:"bindPort"`
|
|
} `yaml:"memberlist"`
|
|
}
|
|
|
|
if err := yaml.Unmarshal([]byte(configContent), &cfg); err != nil {
|
|
t.Fatalf("failed to parse Olric config YAML: %v", err)
|
|
}
|
|
|
|
if cfg.Memberlist.BindPort != 10003 {
|
|
t.Errorf("expected memberlist port 10003, got %d", cfg.Memberlist.BindPort)
|
|
}
|
|
}
|
|
|
|
func TestOlricConfigYAMLParsing_MissingMemberlist(t *testing.T) {
|
|
// Config without memberlist section should return zero port
|
|
configContent := `server:
|
|
bindAddr: 10.0.0.1
|
|
bindPort: 10002
|
|
`
|
|
|
|
var cfg struct {
|
|
Memberlist struct {
|
|
BindPort int `yaml:"bindPort"`
|
|
} `yaml:"memberlist"`
|
|
}
|
|
|
|
if err := yaml.Unmarshal([]byte(configContent), &cfg); err != nil {
|
|
t.Fatalf("unexpected parse error: %v", err)
|
|
}
|
|
|
|
if cfg.Memberlist.BindPort != 0 {
|
|
t.Errorf("expected port 0 for missing memberlist, got %d", cfg.Memberlist.BindPort)
|
|
}
|
|
}
|