UNPKG

@cloudbase/node-sdk

Version:

tencent cloud base server sdk for node.js

191 lines (167 loc) 6.33 kB
// import CloudBase from '@cloudbase/manager-node' import tcb from '../../src/index' import assert from 'assert' import config from '../config.local' import { ERROR } from '../../src/const/code' import path from 'path' import { delay } from '../../src/utils/utils' // const { functions } = new CloudBase(config) function setEnvValue() { process.env.TENCENTCLOUD_RUNENV = 'SCF' process.env._SCF_TCB_LOG = '1' process.env.TCB_ENV = 'MOCK_TCB_ENV' process.env.SCF_NAMESPACE = 'MOCK_SCF_NAMESPACE' process.env.TCB_SEQID = 'MOCK_TCB_SEQID' process.env.TENCENTCLOUD_SECRETID = 'MOCK_TENCENTCLOUD_SECRETID' process.env.TENCENTCLOUD_SECRETKEY = 'MOCK_TENCENTCLOUD_SECRETKEY' process.env.TENCENTCLOUD_SESSIONTOKEN = 'MOCK_TENCENTCLOUD_SESSIONTOKEN' process.env.TCB_SOURCE = 'MOCK_TCB_SOURCE' } function resetEnvValue() { process.env.TENCENTCLOUD_RUNENV = '' process.env._SCF_TCB_LOG = '' process.env.TCB_ENV = '' process.env.SCF_NAMESPACE = '' process.env.TCB_SEQID = '' process.env.TENCENTCLOUD_SECRETID = '' process.env.TENCENTCLOUD_SECRETKEY = '' process.env.TENCENTCLOUD_SESSIONTOKEN = '' process.env.TCB_SOURCE = '' } describe('mock 云函数环境', () => { // const app = tcb.init(config) // console.log(path.join(__dirname, '/case/')) // it('创建云函数', async () => { // // 检查同名云函数是否存在,存在则更新 不存在则创建 // const detail = await functions.getFunctionDetail('luke-case') // if(detail && detail.FunctionName === 'luke-case') { // const updateRes = await functions.updateFunctionCode({ // name: 'luke-case', // config:{ // runtime: 'Nodejs8.9' // } // }, // path.join(__dirname, '/case/'), // '' // ) // assert(updateRes.RequestId) // } else { // const res = await functions.createFunction({ // name: 'luke-case', // config: { // timeout: 20, // envVariables: {}, // runtime: 'Nodejs8.9' // } // }, // path.join(__dirname, '/case/'), // true, // '') // assert(res === undefined) // } // }, 30000) it('验证 symbol', async () => { let newConfig = { ...config, env: tcb.SYMBOL_CURRENT_ENV } const app = tcb.init(newConfig) const testEnv = 'luketest-0nmm1' // const testEnv = '' process.env.TCB_ENV = testEnv const res = await app.callFunction({ name: 'testTCBENV', data: { a: 1 } }) // console.log(res) assert(res.result === testEnv) }) it.skip('注入mock 云函数环境变量', async () => { jest.resetModules() setEnvValue() // 验证环境变量相关逻辑 let app = tcb.init(config) // 1. _SCF_TCB_LOG(日志) assert(process.env._SCF_TCB_LOG == '1' && app.logger().isSupportClsReport == false) app.logger().log({ a: 1 }) // mock support ;(<any>console).__baseLog__ = console.log app = tcb.init(config) assert(process.env._SCF_TCB_LOG == '1' && app.logger().isSupportClsReport === true) app.logger().log({ a: 1 }) app.logger().info({ a: 1 }) app.logger().error({ a: 1 }) app.logger().warn({ a: 1 }) // 2. TENCENTCLOUD_SECRETID TENCENTCLOUD_SECRETKEY TENCENTCLOUD_SESSIONTOKEN TENCENTCLOUD_RUNENV jest.mock('../../src/utils/request.ts', () => { return jest.fn().mockImplementation(opts => { let mockRes = null if (opts.body.action === 'functions.invokeFunction') { mockRes = { data: { response_data: opts }, requestId: 'testRequestId' } } if (opts.body.action === 'database.getDocument') { mockRes = { data: { list: [opts] } } } return Promise.resolve(mockRes) }) }) const tcb1 = require('../../src/index') const app1 = tcb1.init({ env: tcb1.SYMBOL_CURRENT_ENV }) const appWithNoEnv = tcb1.init() let result = await app1.callFunction({ name: 'test', data: { a: 1 } }) let result1 = await appWithNoEnv.callFunction({ name: 'test', data: { a: 1 } }) const checkRes = result.result const checkRes1 = result1.result // scf url assert(checkRes.url.indexOf('http://tcb-admin.tencentyun.com') === 0) // tcb-source assert(checkRes.headers['x-tcb-source'].indexOf('MOCK_TCB_SOURCE') >= 0) // seqId assert(checkRes.url.indexOf('MOCK_TCB_SEQID') >= 0) // secretId // assert(checkRes.body.authorization.indexOf('MOCK_TENCENTCLOUD_SECRETID') >= 0) // sessionToken assert(checkRes.body.sessionToken === 'MOCK_TENCENTCLOUD_SESSIONTOKEN') // env assert(checkRes.body.envName === 'MOCK_TCB_ENV') // 验证不传env,请求参数中不含envName assert(checkRes1.body.envName === undefined) // 3. 验证env 设置 database(env) > init(env) const app2 = tcb1.init({ env: 'testEnv' }) const db = app2.database({ env: 'testDbEnv' }) let result2 = await app2.callFunction({ name: 'test', data: { a: 1 } }) // let dbResult2 = await db // .collection('coll-1') // .where({}) // .get() // assert(result2.result.body.envName === 'testEnv') // assert(dbResult2.data[0].body.envName === 'testDbEnv') // mock scf环境中无secretId或secretKey process.env.TENCENTCLOUD_SECRETID = '' const app4 = tcb.init() try { await app4.callFunction({ name: 'test', data: { a: 1 } }) } catch (err) { assert( err.code === 'INVALID_PARAM' && err.message === 'missing authoration key, redeploy the function' ) } resetEnvValue() }) })