This commit is contained in:
41666 2024-11-13 19:26:55 -08:00
parent 0fa1de3b4e
commit a755b4d2c8
6 changed files with 59 additions and 15 deletions

View file

@ -10,23 +10,25 @@ import (
"github.com/genudine/saerro-go/types" "github.com/genudine/saerro-go/types"
) )
func getEventHandlerTestShim(t *testing.T) (EventHandler, context.Context, *storemock.MockPlayerStore) { func getEventHandlerTestShim(t *testing.T) (EventHandler, context.Context, *storemock.MockPlayerStore, *storemock.MockVehicleStore) {
t.Helper() t.Helper()
ctx, cancel := context.WithTimeout(context.Background(), time.Second*15) ctx, cancel := context.WithTimeout(context.Background(), time.Second*15)
t.Cleanup(cancel) t.Cleanup(cancel)
ps := new(storemock.MockPlayerStore) ps := new(storemock.MockPlayerStore)
vs := new(storemock.MockVehicleStore)
return EventHandler{ return EventHandler{
Ingest: &ingest.Ingest{ Ingest: &ingest.Ingest{
PlayerStore: ps, PlayerStore: ps,
VehicleStore: vs,
}, },
}, ctx, ps }, ctx, ps, vs
} }
func TestHandleDeath(t *testing.T) { func TestHandleDeath(t *testing.T) {
eh, ctx, ps := getEventHandlerTestShim(t) eh, ctx, ps, _ := getEventHandlerTestShim(t)
event := types.ESSEvent{ event := types.ESSEvent{
EventName: "Death", EventName: "Death",
@ -52,7 +54,7 @@ func TestHandleDeath(t *testing.T) {
} }
func TestHandleExperience(t *testing.T) { func TestHandleExperience(t *testing.T) {
eh, ctx, ps := getEventHandlerTestShim(t) eh, ctx, ps, vs := getEventHandlerTestShim(t)
event := types.ESSEvent{ event := types.ESSEvent{
EventName: "GainExperience", EventName: "GainExperience",
@ -66,14 +68,17 @@ func TestHandleExperience(t *testing.T) {
ExperienceID: 674, ExperienceID: 674,
} }
p := types.PopEventFromESSEvent(event, false).ToPlayer() p := types.PopEventFromESSEvent(event, false)
ps.On("Insert", ctx, p).Return(nil) v := p.ToVehicle()
v.VehicleName = "ant" // exp event translation
ps.On("Insert", ctx, p.ToPlayer()).Return(nil)
vs.On("Insert", ctx, v).Return(nil)
eh.HandleExperience(ctx, event) eh.HandleExperience(ctx, event)
} }
func TestHandleAnalytics(t *testing.T) { func TestHandleAnalytics(t *testing.T) {
eh, ctx, _ := getEventHandlerTestShim(t) eh, ctx, _, _ := getEventHandlerTestShim(t)
event := types.ESSEvent{ event := types.ESSEvent{
EventName: "GainExperience", EventName: "GainExperience",
WorldID: 17, WorldID: 17,
@ -90,7 +95,7 @@ func TestHandleAnalytics(t *testing.T) {
} }
func TestHandleEvent(t *testing.T) { func TestHandleEvent(t *testing.T) {
eh, ctx, ps := getEventHandlerTestShim(t) eh, ctx, ps, vs := getEventHandlerTestShim(t)
events := []types.ESSEvent{ events := []types.ESSEvent{
{ {
@ -124,11 +129,18 @@ func TestHandleEvent(t *testing.T) {
p1 := types.PopEventFromESSEvent(events[0], false).ToPlayer() p1 := types.PopEventFromESSEvent(events[0], false).ToPlayer()
ps.On("Insert", ctx, p1).Return(nil).Once() ps.On("Insert", ctx, p1).Return(nil).Once()
p2 := types.PopEventFromESSEvent(events[0], true).ToPlayer() p2 := types.PopEventFromESSEvent(events[0], true).ToPlayer()
ps.On("Insert", ctx, p2).Return(nil).Once() ps.On("Insert", ctx, p2).Return(nil).Once()
p3 := types.PopEventFromESSEvent(events[1], false).ToPlayer()
e3 := types.PopEventFromESSEvent(events[1], false)
p3 := e3.ToPlayer()
ps.On("Insert", ctx, p3).Return(nil).Once() ps.On("Insert", ctx, p3).Return(nil).Once()
v3 := types.PopEventFromESSEvent(events[1], false).ToVehicle()
v3.VehicleName = "galaxy" // exp event translation
vs.On("Insert", ctx, v3).Return(nil).Once()
for _, event := range events { for _, event := range events {
eh.HandleEvent(ctx, event) eh.HandleEvent(ctx, event)
} }

View file

@ -39,6 +39,7 @@ func TestTrackPopHappyPath(t *testing.T) {
TeamID: types.TR, TeamID: types.TR,
LoadoutID: 4, LoadoutID: 4,
ClassName: translators.CombatMedic, ClassName: translators.CombatMedic,
VehicleName: "unknown",
CharacterID: "aaaa", CharacterID: "aaaa",
} }
@ -57,6 +58,7 @@ func TestTrackPopFixup(t *testing.T) {
ZoneID: 4, ZoneID: 4,
TeamID: 0, TeamID: 0,
ClassName: "unknown", ClassName: "unknown",
VehicleName: "unknown",
CharacterID: "bbbb", CharacterID: "bbbb",
} }
pastEventPlayer := event.ToPlayer() pastEventPlayer := event.ToPlayer()
@ -77,6 +79,7 @@ func TestTrackPopFixupFailed(t *testing.T) {
ZoneID: 4, ZoneID: 4,
TeamID: 0, TeamID: 0,
ClassName: "unknown", ClassName: "unknown",
VehicleName: "unknown",
CharacterID: "bbbb", CharacterID: "bbbb",
} }

View file

@ -1,6 +1,6 @@
services: services:
tsdb: postgres:
image: docker.io/timescale/timescaledb:latest-pg14 image: docker.io/library/postgres
environment: environment:
POSTGRES_PASSWORD: saerro321 POSTGRES_PASSWORD: saerro321
POSTGRES_USER: saerrouser POSTGRES_USER: saerrouser

View file

@ -10,6 +10,31 @@
systems = [ "x86_64-linux" "aarch64-linux" ]; systems = [ "x86_64-linux" "aarch64-linux" ];
perSystem = { config, self', pkgs, lib, system, ... }: { perSystem = { config, self', pkgs, lib, system, ... }: {
devShells.default = import ./shell.nix { inherit pkgs; }; devShells.default = import ./shell.nix { inherit pkgs; };
packages = let
vendorHash = "sha256-A5hZxo0zZ3w6qryV24PjYaKQatN2G2heyuee6QaU55M=";
in rec {
default = saerro;
saerro = pkgs.buildGoModule {
inherit vendorHash;
name = "saerro-ws";
src = ./.;
subPackages = [
"cmd/ws"
"cmd/pruner"
];
};
ws = pkgs.ociTools.buildContainer {
args = [
"${saerro}/ws"
];
};
pruner = pkgs.ociTools.buildContainer {
args = [
"${saerro}/pruner"
];
};
};
}; };
}; };
} }

1
result Symbolic link
View file

@ -0,0 +1 @@
/nix/store/aa9byv99dpxncm4pf9baih91ni4x23cw-join

View file

@ -147,9 +147,12 @@ func (ps *VehicleStore) Prune(ctx context.Context) (int64, error) {
// Avoid using sql idioms here for portability // Avoid using sql idioms here for portability
// SQLite and PgSQL do now() differently, we don't need to at all. // SQLite and PgSQL do now() differently, we don't need to at all.
res, err := ps.DB.ExecContext(ctx, ` res, err := ps.DB.ExecContext(ctx,
DELETE FROM vehicles WHERE last_updated < $1; `
`, time.Now().Add(-time.Minute*15)) DELETE FROM vehicles WHERE last_updated < $1;
`,
util.TimeToString(time.Now().Add(-time.Minute*15)),
)
if err != nil { if err != nil {
return 0, err return 0, err
} }