benzcloud-server/internal/core/nebula/nebula_test.go

73 lines
1.8 KiB
Go

package nebula
import (
"os"
"strings"
"testing"
)
func TestNebulaManagerPKI(t *testing.T) {
tempDir, err := os.MkdirTemp("", "benzcloud_nebula_test")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tempDir)
mgr := NewManager(tempDir)
// 1. Initialize PKI
serverOverlayIP := "10.42.0.1"
serverLocalIP := "192.168.1.100"
vpnPort := 4242
if err := mgr.InitPKI(serverOverlayIP, serverLocalIP, vpnPort); err != nil {
t.Fatalf("InitPKI failed: %v", err)
}
// Verify CA files created
if _, err := os.Stat(mgr.caCertPath); err != nil {
t.Fatalf("CA cert missing: %v", err)
}
if _, err := os.Stat(mgr.serverConfigPath); err != nil {
t.Fatalf("Server config YAML missing: %v", err)
}
// 2. Issue client certificate for a user
certPEM, keyPEM, configYAML, err := mgr.IssueClientCert("worker-bob", "10.42.0.2", serverLocalIP, vpnPort)
if err != nil {
t.Fatalf("IssueClientCert failed: %v", err)
}
if len(certPEM) == 0 || len(keyPEM) == 0 || len(configYAML) == 0 {
t.Fatal("Expected non-empty cert, key and config YAML")
}
cfgStr := string(configYAML)
if !strings.Contains(cfgStr, "10.42.0.2") {
t.Fatal("Client config must contain assigned overlay IP")
}
if !strings.Contains(cfgStr, serverLocalIP) {
t.Fatal("Client config must contain server endpoint IP")
}
// 3. Verify peers list
peers := mgr.GetPeers()
if len(peers) != 2 {
t.Fatalf("Expected 2 peers (server + client), got %d", len(peers))
}
// 4. Start controller and verify state
if err := mgr.StartController(); err != nil {
t.Fatalf("StartController failed: %v", err)
}
if !mgr.IsRunning() {
t.Fatal("Expected IsRunning to be true")
}
if err := mgr.Stop(); err != nil {
t.Fatalf("Stop failed: %v", err)
}
if mgr.IsRunning() {
t.Fatal("Expected IsRunning to be false after stop")
}
}