mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-11-02 00:30:32 +00:00
fix(proxies): make backup references directed and shareable
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
//go:build integration
|
||||
|
||||
package repository
|
||||
|
||||
import "github.com/Wei-Shaw/sub2api/internal/service"
|
||||
|
||||
func (s *ProxyExpirySuite) TestBackupReferencesAreDirectedAndShareable() {
|
||||
backupID := s.mkProxy("shared-backup", service.FallbackModeNone, nil, nil)
|
||||
firstID := s.mkProxy("first-primary", service.FallbackModeProxy, nil, &backupID)
|
||||
backup, err := s.repo.GetByID(s.ctx, backupID)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Nil(backup.BackupProxyID, "assigning a backup must not overwrite its own configuration")
|
||||
|
||||
secondID := s.mkProxy("second-primary", service.FallbackModeProxy, nil, &backupID)
|
||||
for _, id := range []int64{firstID, secondID} {
|
||||
primary, err := s.repo.GetByID(s.ctx, id)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Equal(&backupID, primary.BackupProxyID)
|
||||
}
|
||||
backup, err = s.repo.GetByID(s.ctx, backupID)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Nil(backup.BackupProxyID)
|
||||
}
|
||||
|
||||
func (s *ProxyExpirySuite) TestBackupUpdateAndClearLeaveOtherReferencesIntact() {
|
||||
backupID := s.mkProxy("old-backup", service.FallbackModeNone, nil, nil)
|
||||
replacementID := s.mkProxy("new-backup", service.FallbackModeNone, nil, nil)
|
||||
firstID := s.mkProxy("primary-to-change", service.FallbackModeProxy, nil, &backupID)
|
||||
secondID := s.mkProxy("primary-to-keep", service.FallbackModeProxy, nil, &backupID)
|
||||
first, err := s.repo.GetByID(s.ctx, firstID)
|
||||
s.Require().NoError(err)
|
||||
first.BackupProxyID = &replacementID
|
||||
s.Require().NoError(s.repo.Update(s.ctx, first))
|
||||
first, err = s.repo.GetByID(s.ctx, firstID)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Equal(&replacementID, first.BackupProxyID)
|
||||
first.BackupProxyID = nil
|
||||
first.FallbackMode = service.FallbackModeNone
|
||||
s.Require().NoError(s.repo.Update(s.ctx, first))
|
||||
first, err = s.repo.GetByID(s.ctx, firstID)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Nil(first.BackupProxyID)
|
||||
second, err := s.repo.GetByID(s.ctx, secondID)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Equal(&backupID, second.BackupProxyID)
|
||||
for _, id := range []int64{backupID, replacementID} {
|
||||
backup, err := s.repo.GetByID(s.ctx, id)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Nil(backup.BackupProxyID)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *ProxyExpirySuite) TestBackupReferencesSupportDirectedChains() {
|
||||
lastID := s.mkProxy("chain-last", service.FallbackModeNone, nil, nil)
|
||||
middleID := s.mkProxy("chain-middle", service.FallbackModeProxy, nil, &lastID)
|
||||
firstID := s.mkProxy("chain-first", service.FallbackModeProxy, nil, &middleID)
|
||||
for _, pair := range [][2]int64{{firstID, middleID}, {middleID, lastID}} {
|
||||
primary, err := s.repo.GetByID(s.ctx, pair[0])
|
||||
s.Require().NoError(err)
|
||||
s.Require().Equal(&pair[1], primary.BackupProxyID)
|
||||
}
|
||||
last, err := s.repo.GetByID(s.ctx, lastID)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Nil(last.BackupProxyID)
|
||||
}
|
||||
Reference in New Issue
Block a user