mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 11:30:15 +00:00
- Replace barrel import in AuditLogPanel.tsx to fix ad-blocker crash - Remove all Enterprise/Pro badges from nav and feature headers - Simplify upgrade CTAs to clean 'Upgrade to Pro' links - Update docs: PULSE_PRO.md, API.md, README.md, SECURITY.md - Align terminology: single Pro tier, no separate Enterprise tier Also includes prior refactoring: - Move auth package to pkg/auth for enterprise reuse - Export server functions for testability - Stabilize CLI tests
145 lines
3.9 KiB
Go
145 lines
3.9 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/rcourtman/pulse-go-rewrite/internal/config"
|
|
"github.com/rcourtman/pulse-go-rewrite/pkg/server"
|
|
)
|
|
|
|
func TestShouldAutoImport(t *testing.T) {
|
|
dir := t.TempDir()
|
|
t.Setenv("PULSE_DATA_DIR", dir)
|
|
|
|
// No env vars => false.
|
|
t.Setenv("PULSE_INIT_CONFIG_DATA", "")
|
|
t.Setenv("PULSE_INIT_CONFIG_FILE", "")
|
|
if server.ShouldAutoImport() {
|
|
t.Fatalf("expected false when no env vars set")
|
|
}
|
|
|
|
// Env var set => true.
|
|
t.Setenv("PULSE_INIT_CONFIG_DATA", "anything")
|
|
if !server.ShouldAutoImport() {
|
|
t.Fatalf("expected true when init config env var set")
|
|
}
|
|
|
|
// Existing config should disable auto-import.
|
|
if err := os.WriteFile(filepath.Join(dir, "nodes.enc"), []byte("exists"), 0o600); err != nil {
|
|
t.Fatalf("write nodes.enc: %v", err)
|
|
}
|
|
if server.ShouldAutoImport() {
|
|
t.Fatalf("expected false when nodes.enc exists")
|
|
}
|
|
}
|
|
|
|
func TestPerformAutoImport_ValidPayload(t *testing.T) {
|
|
dir := t.TempDir()
|
|
t.Setenv("PULSE_DATA_DIR", dir)
|
|
|
|
pass := "test-passphrase"
|
|
cp := config.NewConfigPersistence(dir)
|
|
exported, err := cp.ExportConfig(pass)
|
|
if err != nil {
|
|
t.Fatalf("ExportConfig: %v", err)
|
|
}
|
|
|
|
t.Setenv("PULSE_INIT_CONFIG_PASSPHRASE", pass)
|
|
t.Setenv("PULSE_INIT_CONFIG_DATA", exported)
|
|
t.Setenv("PULSE_INIT_CONFIG_FILE", "")
|
|
|
|
if err := server.PerformAutoImport(); err != nil {
|
|
t.Fatalf("performAutoImport: %v", err)
|
|
}
|
|
|
|
if _, err := os.Stat(filepath.Join(dir, "nodes.enc")); err != nil {
|
|
t.Fatalf("expected nodes.enc to exist: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestPerformAutoImport_MissingPassphrase(t *testing.T) {
|
|
dir := t.TempDir()
|
|
t.Setenv("PULSE_DATA_DIR", dir)
|
|
t.Setenv("PULSE_INIT_CONFIG_PASSPHRASE", "")
|
|
t.Setenv("PULSE_INIT_CONFIG_DATA", "data")
|
|
t.Setenv("PULSE_INIT_CONFIG_FILE", "")
|
|
|
|
if err := server.PerformAutoImport(); err == nil {
|
|
t.Fatalf("expected error")
|
|
}
|
|
}
|
|
|
|
func TestPerformAutoImport_MissingData(t *testing.T) {
|
|
dir := t.TempDir()
|
|
t.Setenv("PULSE_DATA_DIR", dir)
|
|
t.Setenv("PULSE_INIT_CONFIG_PASSPHRASE", "pass")
|
|
t.Setenv("PULSE_INIT_CONFIG_DATA", "")
|
|
t.Setenv("PULSE_INIT_CONFIG_FILE", "")
|
|
|
|
if err := server.PerformAutoImport(); err == nil {
|
|
t.Fatalf("expected error")
|
|
}
|
|
}
|
|
|
|
func TestPerformAutoImport_File(t *testing.T) {
|
|
dir := t.TempDir()
|
|
t.Setenv("PULSE_DATA_DIR", dir)
|
|
|
|
pass := "test-passphrase"
|
|
cp := config.NewConfigPersistence(dir)
|
|
exported, err := cp.ExportConfig(pass)
|
|
if err != nil {
|
|
t.Fatalf("ExportConfig: %v", err)
|
|
}
|
|
|
|
importFile := filepath.Join(dir, "import.enc")
|
|
if err := os.WriteFile(importFile, []byte(exported), 0600); err != nil {
|
|
t.Fatalf("WriteFile: %v", err)
|
|
}
|
|
|
|
t.Setenv("PULSE_INIT_CONFIG_PASSPHRASE", pass)
|
|
t.Setenv("PULSE_INIT_CONFIG_FILE", importFile)
|
|
t.Setenv("PULSE_INIT_CONFIG_DATA", "")
|
|
|
|
if err := server.PerformAutoImport(); err != nil {
|
|
t.Fatalf("performAutoImport with file: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestPerformAutoImport_FileReadError(t *testing.T) {
|
|
dir := t.TempDir()
|
|
t.Setenv("PULSE_DATA_DIR", dir)
|
|
t.Setenv("PULSE_INIT_CONFIG_PASSPHRASE", "pass")
|
|
t.Setenv("PULSE_INIT_CONFIG_FILE", filepath.Join(dir, "nonexistent"))
|
|
|
|
if err := server.PerformAutoImport(); err == nil {
|
|
t.Fatal("expected error reading nonexistent file")
|
|
}
|
|
}
|
|
|
|
func TestPerformAutoImport_NormalizeError(t *testing.T) {
|
|
dir := t.TempDir()
|
|
t.Setenv("PULSE_DATA_DIR", dir)
|
|
t.Setenv("PULSE_INIT_CONFIG_PASSPHRASE", "pass")
|
|
t.Setenv("PULSE_INIT_CONFIG_DATA", " ") // Will trigger "payload is empty" error
|
|
|
|
if err := server.PerformAutoImport(); err == nil {
|
|
t.Fatal("expected error from normalizeImportPayload")
|
|
}
|
|
}
|
|
|
|
func TestPerformAutoImport_FileNormalizeError(t *testing.T) {
|
|
dir := t.TempDir()
|
|
t.Setenv("PULSE_DATA_DIR", dir)
|
|
t.Setenv("PULSE_INIT_CONFIG_PASSPHRASE", "pass")
|
|
|
|
importFile := filepath.Join(dir, "empty.enc")
|
|
os.WriteFile(importFile, []byte(" "), 0600)
|
|
t.Setenv("PULSE_INIT_CONFIG_FILE", importFile)
|
|
|
|
if err := server.PerformAutoImport(); err == nil {
|
|
t.Fatal("expected error from normalizeImportPayload for file")
|
|
}
|
|
}
|