gateway_cache_live_test.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package repository
  2. import (
  3. "context"
  4. "testing"
  5. "time"
  6. "github.com/Wei-Shaw/sub2api/internal/service"
  7. "github.com/alicebob/miniredis/v2"
  8. "github.com/redis/go-redis/v9"
  9. "github.com/stretchr/testify/require"
  10. )
  11. func TestGatewayCacheLiveCallIdentityAndController(t *testing.T) {
  12. redisServer := miniredis.RunT(t)
  13. client := redis.NewClient(&redis.Options{Addr: redisServer.Addr()})
  14. cache, ok := NewGatewayCache(client).(service.LiveCallStore)
  15. require.True(t, ok)
  16. otherInstance, ok := NewGatewayCache(client).(service.LiveCallStore)
  17. require.True(t, ok)
  18. record := &service.LiveCallRecord{
  19. CallID: "call_secret",
  20. CallHash: HashLiveCallID("call_secret"),
  21. AccountID: 11,
  22. APIKeyID: 22,
  23. UserID: 33,
  24. GroupID: 44,
  25. LeaseID: "lease",
  26. Model: "gpt-live-test",
  27. AttestationCiphertext: "encrypted-attestation",
  28. CreatedAt: time.Now(),
  29. ExpiresAt: time.Now().Add(time.Hour),
  30. Controller: service.LiveControllerPending,
  31. }
  32. require.NoError(t, cache.SaveLiveCall(context.Background(), record, time.Hour))
  33. loaded, err := otherInstance.GetLiveCall(context.Background(), record.CallHash)
  34. require.NoError(t, err)
  35. require.Equal(t, record.CallID, loaded.CallID)
  36. require.Equal(t, record.AccountID, loaded.AccountID)
  37. require.Equal(t, record.AttestationCiphertext, loaded.AttestationCiphertext)
  38. claimed, err := cache.ClaimLiveController(context.Background(), record.CallHash, service.LiveControllerObserver, "observer-1")
  39. require.NoError(t, err)
  40. require.True(t, claimed)
  41. claimed, err = cache.ClaimLiveController(context.Background(), record.CallHash, service.LiveControllerProxy, "proxy-1")
  42. require.NoError(t, err)
  43. require.True(t, claimed)
  44. controller, err := cache.GetLiveController(context.Background(), record.CallHash)
  45. require.NoError(t, err)
  46. require.Equal(t, service.LiveControllerProxy, controller)
  47. released, err := cache.ReleaseLiveController(context.Background(), record.CallHash, "proxy-1")
  48. require.NoError(t, err)
  49. require.True(t, released)
  50. closed, err := cache.MarkLiveCallClosed(context.Background(), record.CallHash, time.Hour)
  51. require.NoError(t, err)
  52. require.True(t, closed)
  53. closed, err = cache.MarkLiveCallClosed(context.Background(), record.CallHash, time.Hour)
  54. require.NoError(t, err)
  55. require.False(t, closed)
  56. }