budibase/packages/datastores/tests/index.js

62 lines
1.4 KiB
JavaScript

import setup from "./setup"
import records from "./records"
import { register } from "./diagnosticPlugin"
import pLimit from "p-limit"
import papa from "papaparse"
import { writeFileSync } from "fs"
const limit = pLimit(1)
const iterateActions = async (apis, getIterator) => {
const iterator = getIterator(apis)
let result = iterator()
while (!result.done) {
try {
const runPromises = result.action.iterator(i =>
limit(() => result.action.run(i))
)
let n = 1
await Promise.all(runPromises)
result = iterator()
} catch (e) {
e.message = `FAILED: ${result.action.name}: ${e.message}`
throw e
}
}
}
export default async (datastore, config) => {
const apis = await setup(datastore)
const diagnostics = []
let currentRecordCount = 0
register(
apis,
(ev, elapsed, info) => {
if (ev === "recordApi:save:onComplete") {
currentRecordCount++
} else if (ev === "recordApi:delete:onComplete") {
currentRecordCount--
}
diagnostics.push({ method: ev, elapsed, info, count: currentRecordCount })
console.log(`${ev} ${info} ${elapsed / 1000} s`)
},
[
"recordApi:save",
"recordApi:load",
"viewApi:listItems",
"recordApi:delete",
]
)
await iterateActions(apis, records)
const diagnosticscsv = papa.unparse(diagnostics)
writeFileSync(config.root + "\\results.csv", diagnosticscsv, {
encoding: "utf8",
})
}