mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 19:41:17 +00:00
Migration System: - Add migration framework for config schema updates - Add migration tests Config Enhancements: - Add multi-tenant configuration support - Add DeepCopy for tenant isolation - Enhance AI config options - Improve API token handling - Update persistence layer Documentation: - Update multi-tenant documentation
62 lines
1.8 KiB
Go
62 lines
1.8 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestMigrateToMultiTenant(t *testing.T) {
|
|
// Setup temp dir
|
|
dataDir := t.TempDir()
|
|
|
|
// Create dummy legacy files
|
|
legacyFiles := []string{"nodes.enc", "system.json", "alerts.json"}
|
|
for _, f := range legacyFiles {
|
|
err := os.WriteFile(filepath.Join(dataDir, f), []byte("dummy content"), 0644)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
// Run migration
|
|
err := MigrateToMultiTenant(dataDir)
|
|
require.NoError(t, err)
|
|
|
|
// Verify files moved to default org
|
|
defaultOrgDir := filepath.Join(dataDir, "orgs", "default")
|
|
for _, f := range legacyFiles {
|
|
// Check file exists in new location
|
|
content, err := os.ReadFile(filepath.Join(defaultOrgDir, f))
|
|
require.NoError(t, err, "File %s should exist in default org dir", f)
|
|
require.Equal(t, "dummy content", string(content))
|
|
|
|
// Check symlink exists in old location
|
|
info, err := os.Lstat(filepath.Join(dataDir, f))
|
|
require.NoError(t, err, "Symlink %s should exist in root data dir", f)
|
|
require.Equal(t, os.ModeSymlink, info.Mode()&os.ModeSymlink, "%s should be a symlink", f)
|
|
}
|
|
|
|
// Verify marker
|
|
_, err = os.Stat(filepath.Join(defaultOrgDir, ".migrated"))
|
|
require.NoError(t, err, "Migration marker should exist")
|
|
|
|
// Run again (should be idempotent)
|
|
err = MigrateToMultiTenant(dataDir)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestIsMigrationNeeded(t *testing.T) {
|
|
dataDir := t.TempDir()
|
|
|
|
// Empty dir - no migration needed
|
|
require.False(t, IsMigrationNeeded(dataDir))
|
|
|
|
// With files - migration needed
|
|
os.WriteFile(filepath.Join(dataDir, "system.json"), []byte("{}"), 0644)
|
|
require.True(t, IsMigrationNeeded(dataDir))
|
|
|
|
// After migration - not needed
|
|
MigrateToMultiTenant(dataDir)
|
|
require.False(t, IsMigrationNeeded(dataDir))
|
|
}
|