feat: notification service
This commit is contained in:
@@ -15,8 +15,10 @@ import (
|
||||
"galaxy/gateway/internal/push"
|
||||
"galaxy/gateway/internal/session"
|
||||
gatewayv1 "galaxy/gateway/proto/galaxy/gateway/v1"
|
||||
notificationfbs "galaxy/schema/fbs/notification"
|
||||
|
||||
"github.com/alicebob/miniredis/v2"
|
||||
flatbuffers "github.com/google/flatbuffers/go"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"go.uber.org/zap"
|
||||
@@ -63,31 +65,37 @@ func TestSubscribeEventsFanOutsUserTargetedEventToAllUserSessions(t *testing.T)
|
||||
require.NoError(t, err)
|
||||
assertPushBootstrapEvent(t, recvPushEvent(t, unrelated), "request-3", "trace-device-session-3")
|
||||
|
||||
payloadBytes := buildGameTurnReadyPayload(t, "game-123", 54)
|
||||
addClientEvent(t, server, "gateway:client_events", map[string]any{
|
||||
"user_id": "user-123",
|
||||
"event_type": "fleet.updated",
|
||||
"event_type": "game.turn.ready",
|
||||
"event_id": "event-123",
|
||||
"payload_bytes": []byte("payload-123"),
|
||||
"payload_bytes": payloadBytes,
|
||||
"request_id": "request-123",
|
||||
"trace_id": "trace-123",
|
||||
})
|
||||
|
||||
assertSignedPushEvent(t, recvPushEvent(t, targetOne), push.Event{
|
||||
firstDelivered := recvPushEvent(t, targetOne)
|
||||
assertSignedPushEvent(t, firstDelivered, push.Event{
|
||||
UserID: "user-123",
|
||||
EventType: "fleet.updated",
|
||||
EventType: "game.turn.ready",
|
||||
EventID: "event-123",
|
||||
PayloadBytes: []byte("payload-123"),
|
||||
PayloadBytes: payloadBytes,
|
||||
RequestID: "request-123",
|
||||
TraceID: "trace-123",
|
||||
})
|
||||
assertSignedPushEvent(t, recvPushEvent(t, targetTwo), push.Event{
|
||||
assertDecodedGameTurnReadyPayload(t, firstDelivered.GetPayloadBytes(), "game-123", 54)
|
||||
|
||||
secondDelivered := recvPushEvent(t, targetTwo)
|
||||
assertSignedPushEvent(t, secondDelivered, push.Event{
|
||||
UserID: "user-123",
|
||||
EventType: "fleet.updated",
|
||||
EventType: "game.turn.ready",
|
||||
EventID: "event-123",
|
||||
PayloadBytes: []byte("payload-123"),
|
||||
PayloadBytes: payloadBytes,
|
||||
RequestID: "request-123",
|
||||
TraceID: "trace-123",
|
||||
})
|
||||
assertDecodedGameTurnReadyPayload(t, secondDelivered.GetPayloadBytes(), "game-123", 54)
|
||||
assertNoPushEvent(t, unrelated, cancelUnrelated)
|
||||
}
|
||||
|
||||
@@ -414,3 +422,26 @@ func pushResponseSignerPublicKey() ed25519.PublicKey {
|
||||
seed := sha256.Sum256([]byte("gateway-events-grpc-test-response"))
|
||||
return ed25519.NewKeyFromSeed(seed[:]).Public().(ed25519.PublicKey)
|
||||
}
|
||||
|
||||
func buildGameTurnReadyPayload(t *testing.T, gameID string, turnNumber int64) []byte {
|
||||
t.Helper()
|
||||
|
||||
builder := flatbuffers.NewBuilder(64)
|
||||
gameIDOffset := builder.CreateString(gameID)
|
||||
|
||||
notificationfbs.GameTurnReadyEventStart(builder)
|
||||
notificationfbs.GameTurnReadyEventAddGameId(builder, gameIDOffset)
|
||||
notificationfbs.GameTurnReadyEventAddTurnNumber(builder, turnNumber)
|
||||
offset := notificationfbs.GameTurnReadyEventEnd(builder)
|
||||
notificationfbs.FinishGameTurnReadyEventBuffer(builder, offset)
|
||||
|
||||
return builder.FinishedBytes()
|
||||
}
|
||||
|
||||
func assertDecodedGameTurnReadyPayload(t *testing.T, payload []byte, wantGameID string, wantTurnNumber int64) {
|
||||
t.Helper()
|
||||
|
||||
event := notificationfbs.GetRootAsGameTurnReadyEvent(payload, 0)
|
||||
require.Equal(t, wantGameID, string(event.GameId()))
|
||||
require.Equal(t, wantTurnNumber, event.TurnNumber())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user