193 lines
4.1 KiB
Go
193 lines
4.1 KiB
Go
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")
|
|
}
|
|
}
|