summaryrefslogtreecommitdiff
path: root/pkg/wgconf/wgconf_test.go
diff options
context:
space:
mode:
authorJames O'Doherty <james@theodohertyfamily.com>2026-05-22 16:17:55 -0400
committerJames O'Doherty <james@theodohertyfamily.com>2026-05-22 16:17:55 -0400
commit135f6edbd9389bc4783f13c26aed0a74d3c8aca0 (patch)
tree41a8e80b0dcf2c42b045bc91d9101deceb049f47 /pkg/wgconf/wgconf_test.go
parent2e3a1d07b43e6e942e51ba263c6fcdc2351afc0d (diff)
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
Diffstat (limited to 'pkg/wgconf/wgconf_test.go')
-rw-r--r--pkg/wgconf/wgconf_test.go66
1 files changed, 61 insertions, 5 deletions
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")
+ }
}