test: Add LoadNodesConfig PBS/PMG migration tests
Test PBS and PMG token clearing and host normalization migrations. Coverage: 61.4% → 76.3%
This commit is contained in:
parent
6d1eb44f7b
commit
d0fc62d45f
1 changed files with 166 additions and 0 deletions
|
|
@ -1504,6 +1504,172 @@ func TestLoadNodesConfigFileNotExist(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestLoadNodesConfig_PBSTokenClearing(t *testing.T) {
|
||||||
|
tempDir := t.TempDir()
|
||||||
|
cp := config.NewConfigPersistence(tempDir)
|
||||||
|
if err := cp.EnsureConfigDir(); err != nil {
|
||||||
|
t.Fatalf("EnsureConfigDir: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save PBS instance with both Password and TokenName (buggy config)
|
||||||
|
pbsInstances := []config.PBSInstance{
|
||||||
|
{
|
||||||
|
Name: "pbs-buggy",
|
||||||
|
Host: "https://pbs.local:8007",
|
||||||
|
User: "root@pam",
|
||||||
|
Password: "secret-password",
|
||||||
|
TokenName: "should-be-cleared",
|
||||||
|
TokenValue: "also-cleared",
|
||||||
|
MonitorBackups: true, // Already set so no migration needed for this
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cp.SaveNodesConfig(nil, pbsInstances, nil); err != nil {
|
||||||
|
t.Fatalf("SaveNodesConfig: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
loaded, err := cp.LoadNodesConfig()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("LoadNodesConfig: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(loaded.PBSInstances) != 1 {
|
||||||
|
t.Fatalf("expected 1 PBS instance, got %d", len(loaded.PBSInstances))
|
||||||
|
}
|
||||||
|
|
||||||
|
pbs := loaded.PBSInstances[0]
|
||||||
|
// TokenName/TokenValue should be cleared since Password is set
|
||||||
|
if pbs.TokenName != "" {
|
||||||
|
t.Errorf("expected TokenName cleared, got %q", pbs.TokenName)
|
||||||
|
}
|
||||||
|
if pbs.TokenValue != "" {
|
||||||
|
t.Errorf("expected TokenValue cleared, got %q", pbs.TokenValue)
|
||||||
|
}
|
||||||
|
// Password should remain
|
||||||
|
if pbs.Password != "secret-password" {
|
||||||
|
t.Errorf("expected Password preserved, got %q", pbs.Password)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLoadNodesConfig_PBSHostNormalization(t *testing.T) {
|
||||||
|
tempDir := t.TempDir()
|
||||||
|
cp := config.NewConfigPersistence(tempDir)
|
||||||
|
if err := cp.EnsureConfigDir(); err != nil {
|
||||||
|
t.Fatalf("EnsureConfigDir: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save PBS instance without port (should be normalized to :8007)
|
||||||
|
pbsInstances := []config.PBSInstance{
|
||||||
|
{
|
||||||
|
Name: "pbs-noport",
|
||||||
|
Host: "https://pbs.local",
|
||||||
|
User: "root@pam",
|
||||||
|
Password: "pass",
|
||||||
|
MonitorBackups: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cp.SaveNodesConfig(nil, pbsInstances, nil); err != nil {
|
||||||
|
t.Fatalf("SaveNodesConfig: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
loaded, err := cp.LoadNodesConfig()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("LoadNodesConfig: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(loaded.PBSInstances) != 1 {
|
||||||
|
t.Fatalf("expected 1 PBS instance, got %d", len(loaded.PBSInstances))
|
||||||
|
}
|
||||||
|
|
||||||
|
pbs := loaded.PBSInstances[0]
|
||||||
|
if pbs.Host != "https://pbs.local:8007" {
|
||||||
|
t.Errorf("expected PBS host normalized with port, got %q", pbs.Host)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLoadNodesConfig_PMGTokenClearing(t *testing.T) {
|
||||||
|
tempDir := t.TempDir()
|
||||||
|
cp := config.NewConfigPersistence(tempDir)
|
||||||
|
if err := cp.EnsureConfigDir(); err != nil {
|
||||||
|
t.Fatalf("EnsureConfigDir: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save PMG instance with both Password and TokenName (buggy config)
|
||||||
|
pmgInstances := []config.PMGInstance{
|
||||||
|
{
|
||||||
|
Name: "pmg-buggy",
|
||||||
|
Host: "https://pmg.local:8006",
|
||||||
|
User: "root@pam",
|
||||||
|
Password: "secret-password",
|
||||||
|
TokenName: "should-be-cleared",
|
||||||
|
TokenValue: "also-cleared",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cp.SaveNodesConfig(nil, nil, pmgInstances); err != nil {
|
||||||
|
t.Fatalf("SaveNodesConfig: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
loaded, err := cp.LoadNodesConfig()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("LoadNodesConfig: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(loaded.PMGInstances) != 1 {
|
||||||
|
t.Fatalf("expected 1 PMG instance, got %d", len(loaded.PMGInstances))
|
||||||
|
}
|
||||||
|
|
||||||
|
pmg := loaded.PMGInstances[0]
|
||||||
|
// TokenName/TokenValue should be cleared since Password is set
|
||||||
|
if pmg.TokenName != "" {
|
||||||
|
t.Errorf("expected TokenName cleared, got %q", pmg.TokenName)
|
||||||
|
}
|
||||||
|
if pmg.TokenValue != "" {
|
||||||
|
t.Errorf("expected TokenValue cleared, got %q", pmg.TokenValue)
|
||||||
|
}
|
||||||
|
// Password should remain
|
||||||
|
if pmg.Password != "secret-password" {
|
||||||
|
t.Errorf("expected Password preserved, got %q", pmg.Password)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestLoadNodesConfig_PMGHostNormalization(t *testing.T) {
|
||||||
|
tempDir := t.TempDir()
|
||||||
|
cp := config.NewConfigPersistence(tempDir)
|
||||||
|
if err := cp.EnsureConfigDir(); err != nil {
|
||||||
|
t.Fatalf("EnsureConfigDir: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save PMG instance without port (should be normalized to :8006)
|
||||||
|
pmgInstances := []config.PMGInstance{
|
||||||
|
{
|
||||||
|
Name: "pmg-noport",
|
||||||
|
Host: "https://pmg.local",
|
||||||
|
User: "root@pam",
|
||||||
|
Password: "pass",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cp.SaveNodesConfig(nil, nil, pmgInstances); err != nil {
|
||||||
|
t.Fatalf("SaveNodesConfig: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
loaded, err := cp.LoadNodesConfig()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("LoadNodesConfig: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(loaded.PMGInstances) != 1 {
|
||||||
|
t.Fatalf("expected 1 PMG instance, got %d", len(loaded.PMGInstances))
|
||||||
|
}
|
||||||
|
|
||||||
|
pmg := loaded.PMGInstances[0]
|
||||||
|
if pmg.Host != "https://pmg.local:8006" {
|
||||||
|
t.Errorf("expected PMG host normalized with port, got %q", pmg.Host)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestCleanupOldBackupsNonExistentDirectory(t *testing.T) {
|
func TestCleanupOldBackupsNonExistentDirectory(t *testing.T) {
|
||||||
tempDir := t.TempDir()
|
tempDir := t.TempDir()
|
||||||
cp := config.NewConfigPersistence(tempDir)
|
cp := config.NewConfigPersistence(tempDir)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue