From 5a8ddca8cf824c8e545e33c70af2617b0e4df9ba Mon Sep 17 00:00:00 2001 From: zkldi Date: Mon, 26 Apr 2021 00:52:37 +0100 Subject: [PATCH] Fix insert-score tests to reflect the new cache safety --- .../framework/core/insert-score.test.ts | 38 ++++++++++++++++--- .../framework/core/insert-score.ts | 2 +- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/server/src/score-import/framework/core/insert-score.test.ts b/server/src/score-import/framework/core/insert-score.test.ts index 977eb7f60..ae5b00e16 100644 --- a/server/src/score-import/framework/core/insert-score.test.ts +++ b/server/src/score-import/framework/core/insert-score.test.ts @@ -15,11 +15,11 @@ t.test("#QueueScoreInsert, #InsertQueue", async (t) => { t.test("Single Queue Test", async (t) => { // fake score doc - let res = await QueueScoreInsert(({ testDocument: "foo" } as unknown) as ScoreDocument); + let res = await QueueScoreInsert(({ scoreID: "foo" } as unknown) as ScoreDocument); t.equal( res, - null, + true, "QueueScoreInsert should not insert a score when the queue is not full." ); @@ -29,7 +29,7 @@ t.test("#QueueScoreInsert, #InsertQueue", async (t) => { t.equal(flushSize, 1, "QueueScoreInsert should append the score to the queue."); let dbRes = await db.scores.find({ - testDocument: "foo", + scoreID: "foo", }); t.equal( @@ -48,11 +48,12 @@ t.test("#QueueScoreInsert, #InsertQueue", async (t) => { t.test("Queue Overflow Test", async (t) => { for (let i = 0; i < 499; i++) { // eslint-disable-next-line no-await-in-loop - await QueueScoreInsert(({ testDocument: "foo" } as unknown) as ScoreDocument); + await QueueScoreInsert(({ scoreID: i, chartID: "test" } as unknown) as ScoreDocument); } let overflowRes = await QueueScoreInsert(({ - testDocument: "foo", + scoreID: "foo", + chartID: "test", } as unknown) as ScoreDocument); t.equal( @@ -66,7 +67,8 @@ t.test("#QueueScoreInsert, #InsertQueue", async (t) => { t.equal(flushRes, 0, "The queue should now be empty."); let dbRes = await db.scores.find({ - testDocument: "foo", + scoreID: { $exists: true }, + chartID: "test", }); t.equal( @@ -78,6 +80,30 @@ t.test("#QueueScoreInsert, #InsertQueue", async (t) => { t.end(); }); + r = await InsertQueue(); // flush queue just incase former test fails. + + t.equal(r, 0, "Queue should be empty after test."); + + t.test("Queue Dedupe Test", async (t) => { + await QueueScoreInsert(({ scoreID: 1, chartID: "foo" } as unknown) as ScoreDocument); + let r2 = await QueueScoreInsert(({ + scoreID: 1, + chartID: "foo", + } as unknown) as ScoreDocument); + + t.equal(r2, null, "Should return null when a duplicate scoreID is submitted"); + + let flushRes = await InsertQueue(); + + t.equal(flushRes, 1, "Should flush 1 score document"); + + let dbRes = await db.scores.find({ + chartID: "foo", + }); + + t.equal(dbRes.length, 1, "Should only insert one document"); + }); + t.end(); }); diff --git a/server/src/score-import/framework/core/insert-score.ts b/server/src/score-import/framework/core/insert-score.ts index 6c7ecf17d..8f5614f9e 100644 --- a/server/src/score-import/framework/core/insert-score.ts +++ b/server/src/score-import/framework/core/insert-score.ts @@ -5,7 +5,7 @@ import CreateLogCtx from "../../../logger"; const logger = CreateLogCtx("insert-score.ts"); let ScoreQueue: ScoreDocument[] = []; export let ScoreIDs: Set = new Set(); -const MAX_PIPELINE_LENGTH = 10; +const MAX_PIPELINE_LENGTH = 500; /** * Adds a score to a queue to be inserted in batch to the database.