UNPKG

@intuitionrobotics/permissions

Version:
92 lines 4.82 kB
/* * ts-common is the basic building blocks of our typescript projects * * Copyright (C) 2020 Intuition Robotics * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { generateHex, currentTimeMillies } from "@intuitionrobotics/ts-common"; import { AccessLevelPermissionsDB, ApiPermissionsDB, DomainPermissionsDB, ProjectPermissionsDB } from "../modules/db-types/managment.js"; import { GroupPermissionsDB, UserPermissionsDB } from "../modules/db-types/assign.js"; import { PermissionsAssert } from "../modules/permissions-assert.js"; import {} from "../../index.js"; import { FirestoreTransaction } from "@intuitionrobotics/firebase/backend"; function makeAlphaBetIdForTestOnly(length) { let result = ''; const characters = `abcdefghijklmnopqrstuvwxyz`; const charactersLength = characters.length; for (let i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } export async function testUserPermissionsTime() { console.log("---￿Inside of permissions test---"); const projectId = 'project-test-ten'; const apiId = generateHex(32); const userId = generateHex(32); const apiPath = '/v1/test/test-it10'; const userUuid = 'test10@intuitionrobotics.com'; const permissionId = generateHex(32); const domainId = generateHex(32); const permissionValue = 50; const customField = { UnitId: 'eq1' }; await ProjectPermissionsDB.upsert({ _id: projectId, name: 'project test' }); await DomainPermissionsDB.upsert({ _id: domainId, projectId: projectId, namespace: 'domain-test' }); const accessLevel = await AccessLevelPermissionsDB.upsert({ _id: permissionId, name: 'test-permission', domainId, value: permissionValue }); await ApiPermissionsDB.upsert({ projectId: projectId, _id: apiId, path: apiPath, accessLevelIds: [permissionId] }); const groupIdArray = []; const dbInstances = []; for (let counter = 0; counter < 100; counter++) { const groupId = generateHex(32); const baseAccessLevel = { domainId: accessLevel.domainId, value: accessLevel.value }; dbInstances.push({ _id: groupId, accessLevelIds: [accessLevel._id], __accessLevels: [baseAccessLevel], customFields: [customField], label: `group-${makeAlphaBetIdForTestOnly(5)}` }); groupIdArray.push({ groupId, customField: { test: "test" } }); } console.log('dbInstances ready to upsert'); const collection = GroupPermissionsDB.collection; await collection.runInTransaction(async (transaction) => { await Promise.all(dbInstances.map(dbInstance => GroupPermissionsDB.assertUniqueness(transaction, dbInstance))); return transaction.upsertAll(collection, dbInstances); }); await UserPermissionsDB.upsert({ _id: userId, accountId: userUuid, groups: groupIdArray }); const tests = new Array().fill(0, 0, 50); const durations = await Promise.all(tests.map(_test => runAssertion(projectId, apiPath, userUuid, customField))); const sum = durations.reduce((_sum, val) => _sum + val, 0); console.log(`Call to assertion on ${tests.length} call took on agerage ${sum / tests.length}ms`); // ----deletes db documents--- await UserPermissionsDB.delete({ where: { _id: userId } }); for (let counter = 0; counter < 10; counter++) { const startIndex = counter * 10; const subDbInstances = dbInstances.slice(startIndex, startIndex + 10); await GroupPermissionsDB.delete({ where: { _id: { $in: subDbInstances.map(e => e._id) } } }); } await AccessLevelPermissionsDB.delete({ where: { _id: permissionId } }); await DomainPermissionsDB.delete({ where: { _id: domainId } }); await ApiPermissionsDB.delete({ where: { _id: apiId } }); await ProjectPermissionsDB.delete({ where: { _id: projectId } }); } async function runAssertion(projectId, apiPath, userUuid, customField) { const start = currentTimeMillies(); await PermissionsAssert.assertUserPermissions(projectId, apiPath, userUuid, customField); const runTime = currentTimeMillies() - start; console.log(`Call to assertion took ${runTime}ms`); return runTime; } //# sourceMappingURL=permission-user-assert-benchmark.js.map