package config import ( "os" "path/filepath" "testing" "git.eeqj.de/sneak/smartconfig" ) func TestGetStringSlice_YAMLList(t *testing.T) { // Create a temp config file with YAML list format tmpDir := t.TempDir() configPath := filepath.Join(tmpDir, "config.yml") yamlContent := ` whitelist_hosts: - static.sneak.cloud - sneak.berlin - s3.sneak.cloud ` err := os.WriteFile(configPath, []byte(yamlContent), 0644) if err != nil { t.Fatalf("failed to write test config: %v", err) } // Load config using smartconfig sc, err := loadTestConfig(configPath) if err != nil { t.Fatalf("failed to load config: %v", err) } // Test that getStringSlice correctly parses YAML list hosts := getStringSlice(sc, "whitelist_hosts") if len(hosts) != 3 { t.Errorf("expected 3 hosts, got %d: %v", len(hosts), hosts) } expected := []string{"static.sneak.cloud", "sneak.berlin", "s3.sneak.cloud"} for i, want := range expected { if i >= len(hosts) { t.Errorf("missing host at index %d: want %q", i, want) continue } if hosts[i] != want { t.Errorf("host[%d] = %q, want %q", i, hosts[i], want) } } } func TestGetStringSlice_CommaSeparated(t *testing.T) { // Test backwards compatibility with comma-separated string tmpDir := t.TempDir() configPath := filepath.Join(tmpDir, "config.yml") yamlContent := `whitelist_hosts: "static.sneak.cloud, sneak.berlin, s3.sneak.cloud"` err := os.WriteFile(configPath, []byte(yamlContent), 0644) if err != nil { t.Fatalf("failed to write test config: %v", err) } sc, err := loadTestConfig(configPath) if err != nil { t.Fatalf("failed to load config: %v", err) } hosts := getStringSlice(sc, "whitelist_hosts") if len(hosts) != 3 { t.Errorf("expected 3 hosts, got %d: %v", len(hosts), hosts) } expected := []string{"static.sneak.cloud", "sneak.berlin", "s3.sneak.cloud"} for i, want := range expected { if i >= len(hosts) { t.Errorf("missing host at index %d: want %q", i, want) continue } if hosts[i] != want { t.Errorf("host[%d] = %q, want %q", i, hosts[i], want) } } } func TestGetStringSlice_Empty(t *testing.T) { tmpDir := t.TempDir() configPath := filepath.Join(tmpDir, "config.yml") yamlContent := `port: 8080` err := os.WriteFile(configPath, []byte(yamlContent), 0644) if err != nil { t.Fatalf("failed to write test config: %v", err) } sc, err := loadTestConfig(configPath) if err != nil { t.Fatalf("failed to load config: %v", err) } hosts := getStringSlice(sc, "whitelist_hosts") if hosts != nil && len(hosts) != 0 { t.Errorf("expected nil or empty slice, got %v", hosts) } } // loadTestConfig is a helper to load a config file for testing func loadTestConfig(path string) (*smartconfig.Config, error) { return smartconfig.NewFromConfigPath(path) }