Adding a script to be able to debug backend like cypress runs, without needing to build everytime - fixing an issue that appears to only occur occasionally in the cypress environment.

This commit is contained in:
mike12345567 2021-11-16 17:40:31 +00:00
parent 5a50129186
commit aaff5260d3
3 changed files with 50 additions and 2 deletions

View File

@ -18,11 +18,16 @@ const populateFromDB = async (appId, CouchDB = null) => {
return db.get(DocumentTypes.APP_METADATA) return db.get(DocumentTypes.APP_METADATA)
} }
const isInvalid = metadata => {
return !metadata || metadata.state === AppState.INVALID
}
/** /**
* Get the requested app metadata by id. * Get the requested app metadata by id.
* Use redis cache to first read the app metadata. * Use redis cache to first read the app metadata.
* If not present fallback to loading the app metadata directly and re-caching. * If not present fallback to loading the app metadata directly and re-caching.
* @param {*} appId the id of the app to get metadata from. * @param {string} appId the id of the app to get metadata from.
* @param {object} CouchDB the database being passed
* @returns {object} the app metadata. * @returns {object} the app metadata.
*/ */
exports.getAppMetadata = async (appId, CouchDB = null) => { exports.getAppMetadata = async (appId, CouchDB = null) => {
@ -44,10 +49,19 @@ exports.getAppMetadata = async (appId, CouchDB = null) => {
throw err throw err
} }
} }
// needed for cypress/some scenarios where the caching happens
// so quickly the requests can get slightly out of sync
// might store its invalid just before it stores its valid
if (isInvalid(metadata)) {
const temp = await client.get(appId)
if (temp) {
metadata = temp
}
}
await client.store(appId, metadata, expiry) await client.store(appId, metadata, expiry)
} }
// we've stored in the cache an object to tell us that it is currently invalid // we've stored in the cache an object to tell us that it is currently invalid
if (!metadata || metadata.state === AppState.INVALID) { if (isInvalid(metadata)) {
throw { status: 404, message: "No app metadata found" } throw { status: 404, message: "No app metadata found" }
} }
return metadata return metadata

View File

@ -17,6 +17,7 @@ process.env.JWT_SECRET = cypressConfig.env.JWT_SECRET
process.env.COUCH_URL = `leveldb://${tmpdir}/.data/` process.env.COUCH_URL = `leveldb://${tmpdir}/.data/`
process.env.SELF_HOSTED = 1 process.env.SELF_HOSTED = 1
process.env.WORKER_URL = "http://localhost:10002/" process.env.WORKER_URL = "http://localhost:10002/"
process.env.APPS_URL = `http://localhost:${MAIN_PORT}/`
process.env.MINIO_URL = `http://localhost:${MAIN_PORT}/` process.env.MINIO_URL = `http://localhost:${MAIN_PORT}/`
process.env.MINIO_ACCESS_KEY = "budibase" process.env.MINIO_ACCESS_KEY = "budibase"
process.env.MINIO_SECRET_KEY = "budibase" process.env.MINIO_SECRET_KEY = "budibase"

View File

@ -0,0 +1,33 @@
/******************************************************
* This script just makes it easy to re-create *
* a cypress like environment for testing the backend *
******************************************************/
const path = require("path")
const tmpdir = path.join(require("os").tmpdir(), ".budibase")
const MAIN_PORT = "4002"
const WORKER_PORT = "4001"
// @ts-ignore
process.env.PORT = "4001"
process.env.BUDIBASE_API_KEY = "6BE826CB-6B30-4AEC-8777-2E90464633DE"
process.env.NODE_ENV = "cypress"
process.env.ENABLE_ANALYTICS = "false"
process.env.JWT_SECRET = "budibase"
process.env.COUCH_URL = `leveldb://${tmpdir}/.data/`
process.env.SELF_HOSTED = "1"
process.env.WORKER_URL = "http://localhost:4002/"
process.env.MINIO_URL = `http://localhost:4001/`
process.env.MINIO_ACCESS_KEY = "budibase"
process.env.MINIO_SECRET_KEY = "budibase"
process.env.COUCH_DB_USER = "budibase"
process.env.COUCH_DB_PASSWORD = "budibase"
process.env.INTERNAL_API_KEY = "budibase"
process.env.ALLOW_DEV_AUTOMATIONS = "1"
// don't make this a variable or top level require
// it will cause environment module to be loaded prematurely
const server = require("../src/app")
process.env.PORT = "4002"
const worker = require("../../worker/src/index")
process.env.PORT = "4001"