Skip to content

Commit

Permalink
fix: serverless event test (#967)
Browse files Browse the repository at this point in the history
  • Loading branch information
czy88840616 committed Apr 5, 2021
1 parent d76a2c5 commit e0c15e3
Show file tree
Hide file tree
Showing 24 changed files with 144 additions and 95 deletions.
18 changes: 10 additions & 8 deletions packages-serverless/runtime-mock/src/trigger.ts
@@ -1,30 +1,32 @@
export interface Trigger {
useCallback: boolean;
toArgs(): any;
getEvent(): any;
delegate(invokeWrapper: (invokeArgs: any[]) => any): any;
close();
createCallback(cb);
createContext();
}

export class BaseTrigger implements Trigger {
triggerOptions: any;
useCallback = false;

constructor(triggerOptions?: any) {
this.triggerOptions = triggerOptions || {};
}

async toArgs(): Promise<any[]> {
return Promise.resolve([]);
const event = this.getEvent();
return Promise.resolve([event, this.createContext()]);
}

async close() {}

createCallback(handler) {
return (err, result) => {
handler(err, result);
};
}

async delegate(invokeWrapper: (invokeArgs: any[]) => any): Promise<any> {}

async close() {}

getEvent() {}

createContext() {}
}
2 changes: 2 additions & 0 deletions packages-serverless/serverless-app/index.d.ts
@@ -0,0 +1,2 @@
export * from '@midwayjs/faas-typings';
export * from './dist/index';
3 changes: 2 additions & 1 deletion packages-serverless/serverless-app/package.json
Expand Up @@ -2,10 +2,11 @@
"name": "@midwayjs/serverless-app",
"version": "2.10.1",
"main": "dist/index",
"typings": "dist/index.d.ts",
"typings": "index.d.ts",
"dependencies": {
"@midwayjs/bootstrap": "^2.10.0",
"@midwayjs/core": "^2.10.0",
"@midwayjs/faas-typings": "^2.10.0",
"@midwayjs/gateway-common-http": "^1.2.41",
"@midwayjs/serverless-spec-builder": "^1.2.41",
"body-parser": "^1.19.0",
Expand Down
4 changes: 2 additions & 2 deletions packages-serverless/serverless-app/src/framework.ts
Expand Up @@ -144,12 +144,12 @@ export class Framework
);
}

private async getServerlessInstance<T>(cls: any): Promise<T> {
async getServerlessInstance<T>(cls: any): Promise<T> {
// 濡備綍浼爄nitializeContext
const context: IMidwayContext = await new Promise(resolve => {
this.runtime.asyncEvent(async ctx => {
resolve((this.innerFramework as any).getContext(ctx));
})({}, this.configurationOptions.initContext || {});
})({}, this.configurationOptions.initContext ?? {});
});

return context.requestContext.getAsync(cls);
Expand Down
11 changes: 8 additions & 3 deletions packages-serverless/serverless-app/test/faas-v2.test.ts
Expand Up @@ -4,6 +4,9 @@ import * as assert from 'assert';
import { createApp, close, createHttpRequest } from '@midwayjs/mock';
import { Framework, Application } from '../src';
import { EventService } from './fixtures/faas-v2/src/event';
import { createInitializeContext, createTimerEvent } from '../../serverless-fc-trigger';
import { FC } from '@midwayjs/faas-typings';

const cwd = join(__dirname, 'fixtures/faas-v2');
describe('test/faas-v2.test.ts', () => {

Expand All @@ -14,7 +17,9 @@ describe('test/faas-v2.test.ts', () => {

let app: Application;
beforeAll(async () => {
app = await createApp<Framework>(cwd, {}, join(__dirname, '../src'));
app = await createApp<Framework>(cwd, {
initContext: createInitializeContext() as FC.InitializeContext,
}, join(__dirname, '../src'));
});
afterAll(async () => {
await close(app);
Expand Down Expand Up @@ -89,8 +94,8 @@ describe('test/faas-v2.test.ts', () => {

it('oth event trigger', async () => {
const instance = await app.getServerlessInstance<EventService>(EventService);
const result = instance.handler({ name: 123 });
assert(result.name === 123);
const result = await instance.handler(createTimerEvent());
expect(result.triggerName).toEqual('timer');
});

it('should use @ServerlessTrigger with http event', async () => {
Expand Down
@@ -1,11 +1,23 @@
import { Provide, Func, Inject } from '@midwayjs/decorator';
import { Provide, Inject, ServerlessTrigger, ServerlessTriggerType, App } from '@midwayjs/decorator';
import { FC } from '@midwayjs/faas-typings';
import * as assert from 'assert';
import { Application } from '../../../../src';

@Provide()
export class EventService {
@Inject()
ctx;

@Func('event.handler')
handler(event?: any) {
@App()
app: Application;

@ServerlessTrigger(ServerlessTriggerType.TIMER, {
type: 'cron',
value: '* * * * 4',
payload: 'test'
})
async handler(event: FC.TimerEvent): Promise<FC.TimerEvent> {
assert(this.app.getInitializeContext());
return event;
}
}
4 changes: 3 additions & 1 deletion packages-serverless/serverless-fc-trigger/package.json
Expand Up @@ -4,10 +4,12 @@
"main": "dist/index",
"typings": "dist/index.d.ts",
"dependencies": {
"@midwayjs/faas-typings": "^2.10.0",
"@midwayjs/runtime-mock": "^2.10.0",
"@midwayjs/serverless-fc-starter": "^2.10.0",
"body-parser": "^1.19.0",
"express": "^4.17.1"
"express": "^4.17.1",
"extend2": "^1.0.0"
},
"devDependencies": {
"@midwayjs/cli": "^1.2.36",
Expand Down
17 changes: 15 additions & 2 deletions packages-serverless/serverless-fc-trigger/src/base.ts
@@ -1,7 +1,15 @@
import { BaseTrigger } from '@midwayjs/runtime-mock';
import * as extend from 'extend2';
import { FC } from '@midwayjs/faas-typings';

export class FCBaseTrigger extends BaseTrigger {
useCallback = true;
triggerOptions: any;

constructor(triggerOptions = {}) {
super();
this.triggerOptions = triggerOptions;
}

createContext() {
return {
Expand Down Expand Up @@ -31,9 +39,14 @@ export class FCBaseTrigger extends BaseTrigger {
};
}

async toArgs(): Promise<any[]> {
return [this.triggerOptions, this.createContext()];
getEvent() {
return this.triggerOptions;
}
}

export const event = FCBaseTrigger;
export const createInitializeContext = (
ctx: any = {}
): FC.InitializeContext => {
return extend(true, new FCBaseTrigger().createContext(), ctx);
};
14 changes: 7 additions & 7 deletions packages-serverless/serverless-fc-trigger/src/cdn.ts
@@ -1,13 +1,12 @@
import { FCBaseTrigger } from './base';

import * as extend from 'extend2';
import { FC } from '@midwayjs/faas-typings';
/**
* https://help.aliyun.com/document_detail/62922.html
*/
export class CDNTrigger extends FCBaseTrigger {
handler;

async toArgs(): Promise<any[]> {
const event = {
getEvent() {
return {
events: [
{
eventName: 'LogFileCreated',
Expand All @@ -33,9 +32,10 @@ export class CDNTrigger extends FCBaseTrigger {
},
],
};

return [event, this.createContext()];
}
}

export const cdn = CDNTrigger;
export const createCDNEvent = (data: any = {}): FC.CDNEvent => {
return extend(true, new CDNTrigger().getEvent(), data);
};
14 changes: 7 additions & 7 deletions packages-serverless/serverless-fc-trigger/src/mns.ts
@@ -1,13 +1,12 @@
import { FCBaseTrigger } from './base';

import * as extend from 'extend2';
import { FC } from '@midwayjs/faas-typings';
/**
* https://help.aliyun.com/document_detail/100092.html
*/
export class MNSTrigger extends FCBaseTrigger {
handler;

async toArgs(): Promise<any[]> {
const event = {
getEvent() {
return {
Context: 'user custom info',
TopicOwner: '1186202104331798',
Message: 'hello topic',
Expand All @@ -18,9 +17,10 @@ export class MNSTrigger extends FCBaseTrigger {
TopicName: 'test-topic',
MessageId: '2F5B3C281B283D4EAC694B7425288675',
};

return [event, this.createContext()];
}
}

export const mq = MNSTrigger;
export const createMNSEvent = (data: any = {}): FC.MNSEvent => {
return extend(true, new MNSTrigger().getEvent(), data);
};
15 changes: 8 additions & 7 deletions packages-serverless/serverless-fc-trigger/src/oss.ts
@@ -1,13 +1,12 @@
import { FCBaseTrigger } from './base';

import * as extend from 'extend2';
import { FC } from '@midwayjs/faas-typings';
/**
* https://help.aliyun.com/document_detail/62922.html
*/
export class OSSTrigger extends FCBaseTrigger {
handler;

async toArgs(): Promise<any[]> {
const event = {
getEvent() {
return {
events: [
{
eventName: 'ObjectCreated:PutObject',
Expand Down Expand Up @@ -43,11 +42,13 @@ export class OSSTrigger extends FCBaseTrigger {
},
],
};

return [event, this.createContext()];
}
}

export const oss = OSSTrigger;
export const os = OSSTrigger;
export const cos = OSSTrigger;

export const createOSSEvent = (data: any = {}): FC.OSSEvent => {
return extend(true, new OSSTrigger().getEvent(), data);
};
14 changes: 7 additions & 7 deletions packages-serverless/serverless-fc-trigger/src/sls.ts
@@ -1,13 +1,12 @@
import { FCBaseTrigger } from './base';

import * as extend from 'extend2';
import { FC } from '@midwayjs/faas-typings';
/**
* https://help.aliyun.com/document_detail/84092.html
*/
export class SLSTrigger extends FCBaseTrigger {
handler;

async toArgs(): Promise<any[]> {
const event = {
getEvent() {
return {
parameter: {},
source: {
endpoint: 'http://cn-shanghai-intranet.log.aliyuncs.com',
Expand All @@ -21,9 +20,10 @@ export class SLSTrigger extends FCBaseTrigger {
taskId: 'c2691505-38da-4d1b-998a-f1d4bb8c9994',
cursorTime: 1529486425,
};

return [event, this.createContext()];
}
}

export const sls = SLSTrigger;
export const createSLSEvent = (data: any = {}): FC.SLSEvent => {
return extend(true, new SLSTrigger().getEvent(), data);
};
14 changes: 7 additions & 7 deletions packages-serverless/serverless-fc-trigger/src/tableStore.ts
@@ -1,13 +1,12 @@
import { FCBaseTrigger } from './base';

import * as extend from 'extend2';
import { FC } from '@midwayjs/faas-typings';
/**
* https://help.aliyun.com/document_detail/100092.html
*/
export class TableStoreTrigger extends FCBaseTrigger {
handler;

async toArgs(): Promise<any[]> {
const event = {
getEvent() {
return {
Version: 'string',
Records: [
{
Expand All @@ -32,9 +31,10 @@ export class TableStoreTrigger extends FCBaseTrigger {
},
],
};

return [event, this.createContext()];
}
}

export const tableStore = TableStoreTrigger;
export const createTableStoreEvent = (data: any = {}): FC.TableStoreEvent => {
return extend(true, new TableStoreTrigger().getEvent(), data);
};
16 changes: 9 additions & 7 deletions packages-serverless/serverless-fc-trigger/src/timer.ts
@@ -1,18 +1,20 @@
import { FCBaseTrigger } from './base';

import * as extend from 'extend2';
import { FC } from '@midwayjs/faas-typings';
/**
* https://help.aliyun.com/document_detail/62922.html
*/
export class TimerTrigger extends FCBaseTrigger {
handler;

async toArgs(): Promise<any[]> {
const event = {
triggerTime: '2019-12-01T16:00:00Z',
getEvent() {
return {
triggerTime: new Date().toJSON(),
triggerName: 'timer',
payload: '',
};
return [event, this.createContext()];
}
}
export const timer = TimerTrigger;
export const createTimerEvent = (data: any = {}): FC.TimerEvent => {
const result = {};
return extend(true, result, new TimerTrigger().getEvent(), data);
};
Expand Up @@ -23,7 +23,7 @@ describe('/test/index.test.ts', () => {
bbb: 111,
})
);
assert.deepEqual(result, { bbb: 111 });
expect(result).toEqual({ bbb: 111 });
await runtime.close();
});

Expand Down
3 changes: 2 additions & 1 deletion packages-serverless/serverless-scf-trigger/package.json
Expand Up @@ -9,7 +9,8 @@
"@midwayjs/serverless-fc-starter": "^2.10.0",
"@midwayjs/serverless-scf-starter": "^2.10.0",
"body-parser": "^1.19.0",
"express": "^4.17.1"
"express": "^4.17.1",
"extend2": "^1.0.0"
},
"devDependencies": {
"@midwayjs/cli": "^1.2.36"
Expand Down
2 changes: 0 additions & 2 deletions packages-serverless/serverless-scf-trigger/src/apiGateway.ts
Expand Up @@ -7,8 +7,6 @@ import * as expressBodyParser from 'body-parser';
* https://cloud.tencent.com/document/product/583/12513
*/
export class ApiGatewayTrigger extends SCFBaseTrigger {
handler;

app: express.Application;

async delegate(invokeWrapper: (invokeArgs: any[]) => any) {
Expand Down

0 comments on commit e0c15e3

Please sign in to comment.