Check usage across dev and prod app
This commit is contained in:
parent
dee8d5f3c4
commit
ec02ce76ad
|
@ -7,7 +7,7 @@ import path from "path"
|
|||
import { KEYCLOAK_IMAGE } from "../../../../integrations/tests/utils/images"
|
||||
import { startContainer } from "../../../../integrations/tests/utils"
|
||||
import { OAuth2CredentialsMethod } from "@budibase/types"
|
||||
import { cache, context, docIds } from "@budibase/backend-core"
|
||||
import { cache } from "@budibase/backend-core"
|
||||
import tk from "timekeeper"
|
||||
|
||||
const config = new TestConfiguration()
|
||||
|
@ -140,16 +140,10 @@ describe("oauth2 utils", () => {
|
|||
)
|
||||
|
||||
const usageLog = await config.doInContext(config.appId, () =>
|
||||
context
|
||||
.getAppDB()
|
||||
.tryGet(docIds.generateOAuth2LogID(oauthConfig._id))
|
||||
sdk.oauth2.getLastUsages([oauthConfig._id])
|
||||
)
|
||||
|
||||
expect(usageLog).toEqual(
|
||||
expect.objectContaining({
|
||||
lastUsage: Date.now(),
|
||||
})
|
||||
)
|
||||
expect(usageLog[oauthConfig._id]).toEqual(Date.now())
|
||||
})
|
||||
|
||||
it("does not track on failed usages", async () => {
|
||||
|
@ -171,12 +165,46 @@ describe("oauth2 utils", () => {
|
|||
)
|
||||
|
||||
const usageLog = await config.doInContext(config.appId, () =>
|
||||
context
|
||||
.getAppDB()
|
||||
.tryGet(docIds.generateOAuth2LogID(oauthConfig._id))
|
||||
sdk.oauth2.getLastUsages([oauthConfig._id])
|
||||
)
|
||||
|
||||
expect(usageLog).toBeUndefined()
|
||||
expect(usageLog[oauthConfig._id]).toBeUndefined()
|
||||
})
|
||||
|
||||
it("tracks usages between prod and dev, keeping always the latest", async () => {
|
||||
const oauthConfig = await config.doInContext(config.appId, () =>
|
||||
sdk.oauth2.create({
|
||||
name: generator.guid(),
|
||||
url: `${keycloakUrl}/realms/myrealm/protocol/openid-connect/token`,
|
||||
clientId: "my-client",
|
||||
clientSecret: "my-secret",
|
||||
method,
|
||||
})
|
||||
)
|
||||
|
||||
await config.doInContext(config.appId, () =>
|
||||
getToken(oauthConfig._id)
|
||||
)
|
||||
|
||||
await config.publish()
|
||||
|
||||
tk.travel(Date.now() + 100)
|
||||
await config.doInContext(config.prodAppId, () =>
|
||||
getToken(oauthConfig._id)
|
||||
)
|
||||
await testUtils.queue.processMessages(
|
||||
cache.docWritethrough.DocWritethroughProcessor.queue
|
||||
)
|
||||
|
||||
for (const appId of [config.appId, config.prodAppId]) {
|
||||
const usageLog = await config.doInContext(appId, () =>
|
||||
sdk.oauth2.getLastUsages([oauthConfig._id])
|
||||
)
|
||||
|
||||
expect(usageLog).toEqual({
|
||||
[oauthConfig._id]: Date.now(),
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
|
|
@ -99,15 +99,27 @@ export async function validateConfig(config: {
|
|||
}
|
||||
|
||||
export async function getLastUsages(ids: string[]) {
|
||||
const docs = await context
|
||||
const devDocs = await context
|
||||
.getAppDB()
|
||||
.getMultiple<OAuth2LogDocument>(ids.map(docIds.generateOAuth2LogID), {
|
||||
allowMissing: true,
|
||||
})
|
||||
|
||||
const prodDocs = await context
|
||||
.getProdAppDB()
|
||||
.getMultiple<OAuth2LogDocument>(ids.map(docIds.generateOAuth2LogID), {
|
||||
allowMissing: true,
|
||||
})
|
||||
|
||||
const result = ids.reduce<Record<string, number>>((acc, id) => {
|
||||
const doc = docs.find(d => d._id === docIds.generateOAuth2LogID(id))
|
||||
if (doc) {
|
||||
acc[id] = doc.lastUsage
|
||||
const devDoc = devDocs.find(d => d._id === docIds.generateOAuth2LogID(id))
|
||||
if (devDoc) {
|
||||
acc[id] = devDoc.lastUsage
|
||||
}
|
||||
|
||||
const prodDoc = prodDocs.find(d => d._id === docIds.generateOAuth2LogID(id))
|
||||
if (prodDoc && (!acc[id] || acc[id] < prodDoc.lastUsage)) {
|
||||
acc[id] = prodDoc.lastUsage
|
||||
}
|
||||
return acc
|
||||
}, {})
|
||||
|
|
Loading…
Reference in New Issue