forked from tsai/budibase
committed by
GitHub
10 changed files with 196 additions and 53 deletions
@ -0,0 +1,97 @@ |
|||
// get the JWT secret etc
|
|||
require("../../src/environment") |
|||
require("@budibase/backend-core").init() |
|||
const { |
|||
getProdAppID, |
|||
generateGlobalUserID, |
|||
} = require("@budibase/backend-core/db") |
|||
const { doInTenant, getGlobalDB } = require("@budibase/backend-core/tenancy") |
|||
const { internalSaveUser } = require("@budibase/backend-core/utils") |
|||
const { publicApiUserFix } = require("../../src/utilities/users") |
|||
const { hash } = require("@budibase/backend-core/utils") |
|||
|
|||
const USER_LOAD_NUMBER = 10000 |
|||
const BATCH_SIZE = 200 |
|||
const PASSWORD = "test" |
|||
const TENANT_ID = "default" |
|||
|
|||
const APP_ID = process.argv[2] |
|||
|
|||
const words = [ |
|||
"test", |
|||
"testing", |
|||
"budi", |
|||
"mail", |
|||
"age", |
|||
"risk", |
|||
"load", |
|||
"uno", |
|||
"arm", |
|||
"leg", |
|||
"pen", |
|||
"glass", |
|||
"box", |
|||
"chicken", |
|||
"bottle", |
|||
] |
|||
|
|||
if (!APP_ID) { |
|||
console.error("Must supply app ID as first CLI option!") |
|||
process.exit(-1) |
|||
} |
|||
|
|||
const WORD_1 = words[Math.floor(Math.random() * words.length)] |
|||
const WORD_2 = words[Math.floor(Math.random() * words.length)] |
|||
let HASHED_PASSWORD |
|||
|
|||
function generateUser(count) { |
|||
return { |
|||
_id: generateGlobalUserID(), |
|||
password: HASHED_PASSWORD, |
|||
email: `${WORD_1}${count}@${WORD_2}.com`, |
|||
roles: { |
|||
[getProdAppID(APP_ID)]: "BASIC", |
|||
}, |
|||
status: "active", |
|||
forceResetPassword: false, |
|||
firstName: "John", |
|||
lastName: "Smith", |
|||
} |
|||
} |
|||
|
|||
async function run() { |
|||
HASHED_PASSWORD = await hash(PASSWORD) |
|||
return doInTenant(TENANT_ID, async () => { |
|||
const db = getGlobalDB() |
|||
for (let i = 0; i < USER_LOAD_NUMBER; i += BATCH_SIZE) { |
|||
let userSavePromises = [] |
|||
for (let j = 0; j < BATCH_SIZE; j++) { |
|||
// like the public API
|
|||
const ctx = publicApiUserFix({ |
|||
request: { |
|||
body: generateUser(i + j), |
|||
}, |
|||
}) |
|||
userSavePromises.push( |
|||
internalSaveUser(ctx.request.body, TENANT_ID, { |
|||
hashPassword: false, |
|||
requirePassword: true, |
|||
bulkCreate: true, |
|||
}) |
|||
) |
|||
} |
|||
const users = await Promise.all(userSavePromises) |
|||
await db.bulkDocs(users) |
|||
console.log(`${i + BATCH_SIZE} users have been created.`) |
|||
} |
|||
}) |
|||
} |
|||
|
|||
run() |
|||
.then(() => { |
|||
console.log(`Generated ${USER_LOAD_NUMBER} users!`) |
|||
}) |
|||
.catch(err => { |
|||
console.error("Failed for reason: ", err) |
|||
process.exit(-1) |
|||
}) |
|||
Loading…
Reference in new issue