Pulse/internal/config/migration_test.go
rcourtman 4a8f9827fe feat: add config migration system and multi-tenant support
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
2026-01-24 22:43:10 +00:00

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))
}