proxy_backup_reference_integration_test.go 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. //go:build integration
  2. package repository
  3. import "github.com/Wei-Shaw/sub2api/internal/service"
  4. func (s *ProxyExpirySuite) TestBackupReferencesAreDirectedAndShareable() {
  5. backupID := s.mkProxy("shared-backup", service.FallbackModeNone, nil, nil)
  6. firstID := s.mkProxy("first-primary", service.FallbackModeProxy, nil, &backupID)
  7. backup, err := s.repo.GetByID(s.ctx, backupID)
  8. s.Require().NoError(err)
  9. s.Require().Nil(backup.BackupProxyID, "assigning a backup must not overwrite its own configuration")
  10. secondID := s.mkProxy("second-primary", service.FallbackModeProxy, nil, &backupID)
  11. // Updating the shared backup must not clear its incoming references.
  12. backup.Name = "renamed-shared-backup"
  13. s.Require().NoError(s.repo.Update(s.ctx, backup))
  14. for _, id := range []int64{firstID, secondID} {
  15. primary, err := s.repo.GetByID(s.ctx, id)
  16. s.Require().NoError(err)
  17. s.Require().Equal(&backupID, primary.BackupProxyID)
  18. }
  19. backup, err = s.repo.GetByID(s.ctx, backupID)
  20. s.Require().NoError(err)
  21. s.Require().Nil(backup.BackupProxyID)
  22. }
  23. func (s *ProxyExpirySuite) TestBackupUpdateAndClearLeaveOtherReferencesIntact() {
  24. backupID := s.mkProxy("old-backup", service.FallbackModeNone, nil, nil)
  25. replacementID := s.mkProxy("new-backup", service.FallbackModeNone, nil, nil)
  26. firstID := s.mkProxy("primary-to-change", service.FallbackModeProxy, nil, &backupID)
  27. secondID := s.mkProxy("primary-to-keep", service.FallbackModeProxy, nil, &backupID)
  28. first, err := s.repo.GetByID(s.ctx, firstID)
  29. s.Require().NoError(err)
  30. first.BackupProxyID = &replacementID
  31. s.Require().NoError(s.repo.Update(s.ctx, first))
  32. first, err = s.repo.GetByID(s.ctx, firstID)
  33. s.Require().NoError(err)
  34. s.Require().Equal(&replacementID, first.BackupProxyID)
  35. first.BackupProxyID = nil
  36. first.FallbackMode = service.FallbackModeNone
  37. s.Require().NoError(s.repo.Update(s.ctx, first))
  38. first, err = s.repo.GetByID(s.ctx, firstID)
  39. s.Require().NoError(err)
  40. s.Require().Nil(first.BackupProxyID)
  41. second, err := s.repo.GetByID(s.ctx, secondID)
  42. s.Require().NoError(err)
  43. s.Require().Equal(&backupID, second.BackupProxyID)
  44. for _, id := range []int64{backupID, replacementID} {
  45. backup, err := s.repo.GetByID(s.ctx, id)
  46. s.Require().NoError(err)
  47. s.Require().Nil(backup.BackupProxyID)
  48. }
  49. }
  50. func (s *ProxyExpirySuite) TestBackupReferencesSupportDirectedChains() {
  51. lastID := s.mkProxy("chain-last", service.FallbackModeNone, nil, nil)
  52. middleID := s.mkProxy("chain-middle", service.FallbackModeProxy, nil, &lastID)
  53. firstID := s.mkProxy("chain-first", service.FallbackModeProxy, nil, &middleID)
  54. for _, pair := range [][2]int64{{firstID, middleID}, {middleID, lastID}} {
  55. primary, err := s.repo.GetByID(s.ctx, pair[0])
  56. s.Require().NoError(err)
  57. s.Require().Equal(&pair[1], primary.BackupProxyID)
  58. }
  59. last, err := s.repo.GetByID(s.ctx, lastID)
  60. s.Require().NoError(err)
  61. s.Require().Nil(last.BackupProxyID)
  62. }