From 68572b194eb740238be8101efed6fdb2a207f65b Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Tue, 9 Feb 2021 19:37:32 +0100 Subject: [PATCH] Added card generation speed tests (part 1) ref #14 --- src/tests/speedtest.ts | 49 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/tests/speedtest.ts b/src/tests/speedtest.ts index c016204..aefb2a1 100644 --- a/src/tests/speedtest.ts +++ b/src/tests/speedtest.ts @@ -1,6 +1,7 @@ import axios from "axios" import faker from "faker" import { Runner } from '../models/Runner' +import { RunnerCard } from '../models/RunnerCard' import { RunnerGroup } from '../models/RunnerGroup' const baseurl = "http://localhost:4010" @@ -33,11 +34,45 @@ function generateRunners(amount: number): Runner[] { return runners; } +function generateCards(amount: number): RunnerCard[] { + let cards: RunnerCard[] = new Array(); + let card = new RunnerCard(); + for (let runner of generateRunners(amount)) { + card.id = runner.id; + card.code = idToEan13(card.id); + card.runner = runner; + cards.push(card); + } + return cards; +} + +function idToEan13(id): string { + const multiply = [1, 3]; + id = id.toString(); + + if (id.length > 12) { + throw new Error("id too long"); + } + while (id.length < 12) { id = '0' + id; } + + let total = 0; + this.id.split('').forEach((letter, index) => { + total += parseInt(letter, 10) * multiply[index % 2]; + }); + const checkSum = (Math.ceil(total / 10) * 10) - total; + return this.id + checkSum.toString(); +} + async function postContracts(runners: Runner[]): Promise { const res = await axios.post(`${baseurl}/contracts`, runners); return new Measurement("contract", runners.length, parseInt(res.headers['request-duration'])) } +async function postCards(cards: RunnerCard[]): Promise { + const res = await axios.post(`${baseurl}/cards`, cards); + return new Measurement("card", cards.length, parseInt(res.headers['request-duration'])) +} + async function testContracts(sizes): Promise { let measurements = new Array(); console.log("#### Testing contracts ####"); @@ -50,14 +85,28 @@ async function testContracts(sizes): Promise { return measurements; } +async function testCards(sizes): Promise { + let measurements = new Array(); + console.log("#### Testing Cards ####"); + + for (let size of sizes) { + const m = await postCards(generateCards(size)); + console.log(m.toString()); + measurements.push(m); + } + return measurements; +} + async function main() { const sizes = [0, 1, 10, 50, 100, 200, 500, 1000] console.log("########### Speedtest ###########"); console.log(`Document server version (according to the api): ${(await axios.get("http://localhost:4010/version")).data.version}`); console.log("####### Running tests #######"); const contractResults = await testContracts(sizes); + const cardResults = await testCards(sizes); console.log("####### Results #######"); console.table(contractResults); + console.table(cardResults); } main();