Add unit tests for various packages including config, buffer, debug, pathfinder, rate, and resolver.
This commit is contained in:
192
pkg/config/config_test.go
Normal file
192
pkg/config/config_test.go
Normal file
@@ -0,0 +1,192 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestLoadConfig(t *testing.T) {
|
||||
tmpDir := t.TempDir()
|
||||
configPath := filepath.Join(tmpDir, "test_config")
|
||||
|
||||
configContent := `[identity]
|
||||
name = test-identity
|
||||
storage_path = /tmp/test-storage
|
||||
|
||||
[transport]
|
||||
announce_interval = 300
|
||||
path_request_timeout = 15
|
||||
max_hops = 8
|
||||
bitrate_limit = 1000000
|
||||
|
||||
[logging]
|
||||
level = info
|
||||
file = /tmp/test.log
|
||||
|
||||
[interface test-interface]
|
||||
type = UDPInterface
|
||||
enabled = true
|
||||
listen_ip = 127.0.0.1
|
||||
listen_port = 37696
|
||||
`
|
||||
|
||||
if err := os.WriteFile(configPath, []byte(configContent), 0600); err != nil {
|
||||
t.Fatalf("Failed to write test config: %v", err)
|
||||
}
|
||||
|
||||
cfg, err := LoadConfig(configPath)
|
||||
if err != nil {
|
||||
t.Fatalf("LoadConfig() error = %v", err)
|
||||
}
|
||||
|
||||
if cfg == nil {
|
||||
t.Fatal("LoadConfig() returned nil")
|
||||
}
|
||||
|
||||
if len(cfg.Interfaces) == 0 {
|
||||
t.Error("No interfaces loaded")
|
||||
}
|
||||
|
||||
iface := cfg.Interfaces[0]
|
||||
if iface.Type != "UDPInterface" {
|
||||
t.Errorf("Interface type = %s, want UDPInterface", iface.Type)
|
||||
}
|
||||
if !iface.Enabled {
|
||||
t.Error("Interface should be enabled")
|
||||
}
|
||||
if iface.ListenIP != "127.0.0.1" {
|
||||
t.Errorf("Interface ListenIP = %s, want 127.0.0.1", iface.ListenIP)
|
||||
}
|
||||
if iface.ListenPort != 37696 {
|
||||
t.Errorf("Interface ListenPort = %d, want 37696", iface.ListenPort)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadConfig_NonexistentFile(t *testing.T) {
|
||||
_, err := LoadConfig("/nonexistent/path/config")
|
||||
if err == nil {
|
||||
t.Error("LoadConfig() should return error for nonexistent file")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadConfig_EmptyFile(t *testing.T) {
|
||||
tmpDir := t.TempDir()
|
||||
configPath := filepath.Join(tmpDir, "empty_config")
|
||||
|
||||
if err := os.WriteFile(configPath, []byte(""), 0600); err != nil {
|
||||
t.Fatalf("Failed to write empty config: %v", err)
|
||||
}
|
||||
|
||||
cfg, err := LoadConfig(configPath)
|
||||
if err != nil {
|
||||
t.Fatalf("LoadConfig() error = %v", err)
|
||||
}
|
||||
|
||||
if cfg == nil {
|
||||
t.Fatal("LoadConfig() returned nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadConfig_CommentsAndEmptyLines(t *testing.T) {
|
||||
tmpDir := t.TempDir()
|
||||
configPath := filepath.Join(tmpDir, "test_config")
|
||||
|
||||
configContent := `# Comment line
|
||||
|
||||
[identity]
|
||||
name = test
|
||||
# Another comment
|
||||
|
||||
[interface test-interface]
|
||||
# Interface comment
|
||||
type = UDPInterface
|
||||
enabled = true
|
||||
`
|
||||
|
||||
if err := os.WriteFile(configPath, []byte(configContent), 0600); err != nil {
|
||||
t.Fatalf("Failed to write test config: %v", err)
|
||||
}
|
||||
|
||||
cfg, err := LoadConfig(configPath)
|
||||
if err != nil {
|
||||
t.Fatalf("LoadConfig() error = %v", err)
|
||||
}
|
||||
|
||||
if cfg == nil {
|
||||
t.Fatal("LoadConfig() returned nil")
|
||||
}
|
||||
|
||||
if cfg.Identity.Name != "test" {
|
||||
t.Errorf("Identity.Name = %s, want test", cfg.Identity.Name)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSaveConfig(t *testing.T) {
|
||||
tmpDir := t.TempDir()
|
||||
configPath := filepath.Join(tmpDir, "test_config")
|
||||
|
||||
cfg := &Config{}
|
||||
cfg.Identity.Name = "test-identity"
|
||||
cfg.Identity.StoragePath = "/tmp/test"
|
||||
cfg.Transport.AnnounceInterval = 600
|
||||
cfg.Logging.Level = "debug"
|
||||
cfg.Logging.File = "/tmp/test.log"
|
||||
|
||||
if err := SaveConfig(cfg, configPath); err != nil {
|
||||
t.Fatalf("SaveConfig() error = %v", err)
|
||||
}
|
||||
|
||||
loaded, err := LoadConfig(configPath)
|
||||
if err != nil {
|
||||
t.Fatalf("LoadConfig() error = %v", err)
|
||||
}
|
||||
|
||||
if loaded.Identity.Name != "test-identity" {
|
||||
t.Errorf("Identity.Name = %s, want test-identity", loaded.Identity.Name)
|
||||
}
|
||||
if loaded.Transport.AnnounceInterval != 600 {
|
||||
t.Errorf("Transport.AnnounceInterval = %d, want 600", loaded.Transport.AnnounceInterval)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetConfigDir(t *testing.T) {
|
||||
dir := GetConfigDir()
|
||||
if dir == "" {
|
||||
t.Error("GetConfigDir() returned empty string")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetDefaultConfigPath(t *testing.T) {
|
||||
path := GetDefaultConfigPath()
|
||||
if path == "" {
|
||||
t.Error("GetDefaultConfigPath() returned empty string")
|
||||
}
|
||||
}
|
||||
|
||||
func TestEnsureConfigDir(t *testing.T) {
|
||||
if err := EnsureConfigDir(); err != nil {
|
||||
t.Fatalf("EnsureConfigDir() error = %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestInitConfig(t *testing.T) {
|
||||
tmpDir := t.TempDir()
|
||||
originalHome := os.Getenv("HOME")
|
||||
defer func() {
|
||||
if originalHome != "" {
|
||||
os.Setenv("HOME", originalHome)
|
||||
}
|
||||
}()
|
||||
|
||||
os.Setenv("HOME", tmpDir)
|
||||
|
||||
cfg, err := InitConfig()
|
||||
if err != nil {
|
||||
t.Fatalf("InitConfig() error = %v", err)
|
||||
}
|
||||
|
||||
if cfg == nil {
|
||||
t.Fatal("InitConfig() returned nil")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user