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 { KEYCLOAK_IMAGE } from "../../../../integrations/tests/utils/images"
|
||||||
import { startContainer } from "../../../../integrations/tests/utils"
|
import { startContainer } from "../../../../integrations/tests/utils"
|
||||||
import { OAuth2CredentialsMethod } from "@budibase/types"
|
import { OAuth2CredentialsMethod } from "@budibase/types"
|
||||||
import { cache, context, docIds } from "@budibase/backend-core"
|
import { cache } from "@budibase/backend-core"
|
||||||
import tk from "timekeeper"
|
import tk from "timekeeper"
|
||||||
|
|
||||||
const config = new TestConfiguration()
|
const config = new TestConfiguration()
|
||||||
|
@ -140,16 +140,10 @@ describe("oauth2 utils", () => {
|
||||||
)
|
)
|
||||||
|
|
||||||
const usageLog = await config.doInContext(config.appId, () =>
|
const usageLog = await config.doInContext(config.appId, () =>
|
||||||
context
|
sdk.oauth2.getLastUsages([oauthConfig._id])
|
||||||
.getAppDB()
|
|
||||||
.tryGet(docIds.generateOAuth2LogID(oauthConfig._id))
|
|
||||||
)
|
)
|
||||||
|
|
||||||
expect(usageLog).toEqual(
|
expect(usageLog[oauthConfig._id]).toEqual(Date.now())
|
||||||
expect.objectContaining({
|
|
||||||
lastUsage: Date.now(),
|
|
||||||
})
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it("does not track on failed usages", async () => {
|
it("does not track on failed usages", async () => {
|
||||||
|
@ -171,12 +165,46 @@ describe("oauth2 utils", () => {
|
||||||
)
|
)
|
||||||
|
|
||||||
const usageLog = await config.doInContext(config.appId, () =>
|
const usageLog = await config.doInContext(config.appId, () =>
|
||||||
context
|
sdk.oauth2.getLastUsages([oauthConfig._id])
|
||||||
.getAppDB()
|
|
||||||
.tryGet(docIds.generateOAuth2LogID(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[]) {
|
export async function getLastUsages(ids: string[]) {
|
||||||
const docs = await context
|
const devDocs = await context
|
||||||
.getAppDB()
|
.getAppDB()
|
||||||
.getMultiple<OAuth2LogDocument>(ids.map(docIds.generateOAuth2LogID), {
|
.getMultiple<OAuth2LogDocument>(ids.map(docIds.generateOAuth2LogID), {
|
||||||
allowMissing: true,
|
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 result = ids.reduce<Record<string, number>>((acc, id) => {
|
||||||
const doc = docs.find(d => d._id === docIds.generateOAuth2LogID(id))
|
const devDoc = devDocs.find(d => d._id === docIds.generateOAuth2LogID(id))
|
||||||
if (doc) {
|
if (devDoc) {
|
||||||
acc[id] = doc.lastUsage
|
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
|
return acc
|
||||||
}, {})
|
}, {})
|
||||||
|
|
Loading…
Reference in New Issue