73 lines
1.8 KiB
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")
|
|
}
|
|
}
|