From 135f6edbd9389bc4783f13c26aed0a74d3c8aca0 Mon Sep 17 00:00:00 2001 From: James O'Doherty Date: Fri, 22 May 2026 16:17:55 -0400 Subject: refactor: unify path management and complete profile management system - Create internal/paths package for unified config and runtime directory resolution - Implement robust WireGuard config parsing in pkg/wgconf - Implement profile management subcommands: list, import, configure, delete, stop - Fix namespace pinning path collisions (separating .ns files from pids directories) - Implement and verify namespace unpinning logic - Fix linting errors and improve error handling across the project --- pkg/wgconf/wgconf_test.go | 66 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 61 insertions(+), 5 deletions(-) (limited to 'pkg/wgconf/wgconf_test.go') diff --git a/pkg/wgconf/wgconf_test.go b/pkg/wgconf/wgconf_test.go index d0bcb0b..805aeaa 100644 --- a/pkg/wgconf/wgconf_test.go +++ b/pkg/wgconf/wgconf_test.go @@ -1,15 +1,71 @@ package wgconf import ( + "os" + "path/filepath" "testing" ) func TestParseConfig(t *testing.T) { - // Test that valid .conf files are parsed correctly and invalid ones return errors. - t.Skip("not implemented") + content := `[Interface] +PrivateKey = ABC123XYZ +Address = 10.0.0.1/24 +DNS = 1.1.1.1 + +[Peer] +PublicKey = DEF456UVW +Endpoint = 1.2.3.4:51820 +AllowedIPs = 0.0.0.0/0 + +[Peer] +PublicKey = GHI789TSR +Endpoint = 5.6.7.8:51820 +AllowedIPs = 192.168.1.0/24, 192.168.2.0/24` + + tmpFile := filepath.Join(t.TempDir(), "test.conf") + if err := os.WriteFile(tmpFile, []byte(content), 0644); err != nil { + t.Fatal(err) + } + + cfg, err := Parse(tmpFile) + if err != nil { + t.Fatalf("Parse failed: %v", err) + } + + if cfg.PrivateKey != "ABC123XYZ" { + t.Errorf("expected PrivateKey ABC123XYZ, got %s", cfg.PrivateKey) + } + if cfg.Address != "10.0.0.1/24" { + t.Errorf("expected Address 10.0.0.1/24, got %s", cfg.Address) + } + if cfg.DNS != "1.1.1.1" { + t.Errorf("expected DNS 1.1.1.1, got %s", cfg.DNS) + } + if len(cfg.Peers) != 2 { + t.Fatalf("expected 2 peers, got %d", len(cfg.Peers)) + } + + p1 := cfg.Peers[0] + if p1.PublicKey != "DEF456UVW" || p1.Endpoint != "1.2.3.4:51820" || len(p1.AllowedIPs) != 1 || p1.AllowedIPs[0] != "0.0.0.0/0" { + t.Errorf("Peer 1 mismatch: %+v", p1) + } + + p2 := cfg.Peers[1] + if p2.PublicKey != "GHI789TSR" || p2.Endpoint != "5.6.7.8:51820" || len(p2.AllowedIPs) != 2 || p2.AllowedIPs[0] != "192.168.1.0/24" { + t.Errorf("Peer 2 mismatch: %+v", p2) + } } -func TestValidateProfile(t *testing.T) { - // Test that profile names are resolved correctly to ~/.config/wg-wrap/profiles/*.conf. - t.Skip("not implemented") +func TestParseInvalidConfig(t *testing.T) { + content := `[Interface] +InvalidLineWithoutEquals` + tmpFile := filepath.Join(t.TempDir(), "invalid.conf") + if err := os.WriteFile(tmpFile, []byte(content), 0644); err != nil { + t.Fatal(err) + } + + _, err := Parse(tmpFile) + if err == nil { + t.Error("expected error for invalid line format, got nil") + } } -- cgit v1.2.3