Skip to content

Commit 26d5646

Browse files
author
Bologna
committed
Add test use cases
1 parent 51ce413 commit 26d5646

File tree

2 files changed

+127
-2
lines changed

2 files changed

+127
-2
lines changed

internal/core/services/events/events_forwarder_service.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,18 @@ func (es *EventsForwarderService) updatePlayerState(ctx context.Context, event *
335335
return
336336
}
337337

338-
players := room.Metadata["players"].(int)
338+
if room.IsValidationRoom {
339+
return
340+
}
341+
342+
if room.Metadata == nil {
343+
room.Metadata = make(map[string]interface{})
344+
}
345+
346+
var players int
347+
if key, ok := room.Metadata["players"]; ok {
348+
players = key.(int)
349+
}
339350

340351
switch playerAttributes.EventType {
341352
case events.PlayerJoin:

internal/core/services/events/events_forwarder_service_test.go

Lines changed: 115 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,76 @@ func TestEventsForwarderService_ProduceEvent(t *testing.T) {
172172
})
173173

174174
t.Run("should succeed when event is PlayerEvent", func(t *testing.T) {
175-
eventsForwarderService, config, eventsForwarder, schedulerStorage, _, instanceStorage, schedulerCache := testSetup(t)
175+
eventsForwarderService, config, eventsForwarder, schedulerStorage, roomStorage, instanceStorage, schedulerCache := testSetup(t)
176+
177+
event := &events.Event{
178+
Name: events.PlayerEvent,
179+
SchedulerID: expectedScheduler.Name,
180+
RoomID: "room",
181+
Attributes: map[string]interface{}{
182+
"eventType": "playerLeft",
183+
"playerId": "player",
184+
},
185+
}
186+
187+
room := &game_room.GameRoom{
188+
ID: event.RoomID,
189+
SchedulerID: event.SchedulerID,
190+
IsValidationRoom: false,
191+
}
192+
193+
schedulerCache.EXPECT().GetScheduler(context.Background(), event.SchedulerID).Return(nil, nil)
194+
schedulerStorage.EXPECT().GetScheduler(context.Background(), event.SchedulerID).Return(expectedScheduler, nil)
195+
instanceStorage.EXPECT().GetInstance(context.Background(), event.SchedulerID, event.RoomID).Return(expectedGameRoomInstance, nil).Times(0)
196+
schedulerCache.EXPECT().SetScheduler(context.Background(), expectedScheduler, config.SchedulerCacheTtl).Return(nil)
197+
eventsForwarder.EXPECT().ForwardPlayerEvent(context.Background(), gomock.Any(), gomock.Any()).Return(nil)
198+
roomStorage.EXPECT().GetRoom(gomock.Any(), event.SchedulerID, event.RoomID).Return(room, nil)
199+
roomStorage.EXPECT().UpdateRoom(gomock.Any(), gomock.Any()).Return(nil)
200+
201+
err := eventsForwarderService.ProduceEvent(context.Background(), event)
202+
require.NoError(t, err)
203+
require.Empty(t, event.Attributes["ports"])
204+
})
205+
206+
t.Run("should increase player count for PlayerEvent", func(t *testing.T) {
207+
eventsForwarderService, config, eventsForwarder, schedulerStorage, roomStorage, instanceStorage, schedulerCache := testSetup(t)
208+
209+
event := &events.Event{
210+
Name: events.PlayerEvent,
211+
SchedulerID: expectedScheduler.Name,
212+
RoomID: "room",
213+
Attributes: map[string]interface{}{
214+
"eventType": "playerJoin",
215+
"playerId": "player",
216+
},
217+
}
218+
219+
room := &game_room.GameRoom{
220+
ID: event.RoomID,
221+
SchedulerID: event.SchedulerID,
222+
IsValidationRoom: false,
223+
Metadata: map[string]interface{}{
224+
"players": 5,
225+
},
226+
}
227+
228+
schedulerCache.EXPECT().GetScheduler(context.Background(), event.SchedulerID).Return(nil, nil)
229+
schedulerStorage.EXPECT().GetScheduler(context.Background(), event.SchedulerID).Return(expectedScheduler, nil)
230+
instanceStorage.EXPECT().GetInstance(context.Background(), event.SchedulerID, event.RoomID).Return(expectedGameRoomInstance, nil).Times(0)
231+
schedulerCache.EXPECT().SetScheduler(context.Background(), expectedScheduler, config.SchedulerCacheTtl).Return(nil)
232+
eventsForwarder.EXPECT().ForwardPlayerEvent(context.Background(), gomock.Any(), gomock.Any()).Return(nil)
233+
roomStorage.EXPECT().GetRoom(gomock.Any(), event.SchedulerID, event.RoomID).Return(room, nil)
234+
235+
room.Metadata["players"] = 6
236+
roomStorage.EXPECT().UpdateRoom(gomock.Any(), room).Return(nil)
237+
238+
err := eventsForwarderService.ProduceEvent(context.Background(), event)
239+
require.NoError(t, err)
240+
require.Empty(t, event.Attributes["ports"])
241+
})
242+
243+
t.Run("should decrease player count for PlayerEvent", func(t *testing.T) {
244+
eventsForwarderService, config, eventsForwarder, schedulerStorage, roomStorage, instanceStorage, schedulerCache := testSetup(t)
176245

177246
event := &events.Event{
178247
Name: events.PlayerEvent,
@@ -184,11 +253,56 @@ func TestEventsForwarderService_ProduceEvent(t *testing.T) {
184253
},
185254
}
186255

256+
room := &game_room.GameRoom{
257+
ID: event.RoomID,
258+
SchedulerID: event.SchedulerID,
259+
IsValidationRoom: true,
260+
}
261+
187262
schedulerCache.EXPECT().GetScheduler(context.Background(), event.SchedulerID).Return(nil, nil)
188263
schedulerStorage.EXPECT().GetScheduler(context.Background(), event.SchedulerID).Return(expectedScheduler, nil)
189264
instanceStorage.EXPECT().GetInstance(context.Background(), event.SchedulerID, event.RoomID).Return(expectedGameRoomInstance, nil).Times(0)
190265
schedulerCache.EXPECT().SetScheduler(context.Background(), expectedScheduler, config.SchedulerCacheTtl).Return(nil)
191266
eventsForwarder.EXPECT().ForwardPlayerEvent(context.Background(), gomock.Any(), gomock.Any()).Return(nil)
267+
roomStorage.EXPECT().GetRoom(gomock.Any(), event.SchedulerID, event.RoomID).Return(room, nil)
268+
roomStorage.EXPECT().UpdateRoom(gomock.Any(), room).MaxTimes(0)
269+
270+
err := eventsForwarderService.ProduceEvent(context.Background(), event)
271+
require.NoError(t, err)
272+
require.Empty(t, event.Attributes["ports"])
273+
})
274+
275+
t.Run("should ignore player state update for PlayerEvent", func(t *testing.T) {
276+
eventsForwarderService, config, eventsForwarder, schedulerStorage, roomStorage, instanceStorage, schedulerCache := testSetup(t)
277+
278+
event := &events.Event{
279+
Name: events.PlayerEvent,
280+
SchedulerID: expectedScheduler.Name,
281+
RoomID: "room",
282+
Attributes: map[string]interface{}{
283+
"eventType": "playerLeft",
284+
"playerId": "player",
285+
},
286+
}
287+
288+
room := &game_room.GameRoom{
289+
ID: event.RoomID,
290+
SchedulerID: event.SchedulerID,
291+
IsValidationRoom: false,
292+
Metadata: map[string]interface{}{
293+
"players": 5,
294+
},
295+
}
296+
297+
schedulerCache.EXPECT().GetScheduler(context.Background(), event.SchedulerID).Return(nil, nil)
298+
schedulerStorage.EXPECT().GetScheduler(context.Background(), event.SchedulerID).Return(expectedScheduler, nil)
299+
instanceStorage.EXPECT().GetInstance(context.Background(), event.SchedulerID, event.RoomID).Return(expectedGameRoomInstance, nil).Times(0)
300+
schedulerCache.EXPECT().SetScheduler(context.Background(), expectedScheduler, config.SchedulerCacheTtl).Return(nil)
301+
eventsForwarder.EXPECT().ForwardPlayerEvent(context.Background(), gomock.Any(), gomock.Any()).Return(nil)
302+
roomStorage.EXPECT().GetRoom(gomock.Any(), event.SchedulerID, event.RoomID).Return(room, nil)
303+
304+
room.Metadata["players"] = 4
305+
roomStorage.EXPECT().UpdateRoom(gomock.Any(), room).Return(nil)
192306

193307
err := eventsForwarderService.ProduceEvent(context.Background(), event)
194308
require.NoError(t, err)

0 commit comments

Comments
 (0)