Skip to content

Commit add3024

Browse files
authored
fix(scf): optimize deploy flow (#187)
* fix(scf): optimize deploy flow * chore: fix cos sdk version * test: fix cos and cls test case
1 parent d73a2e9 commit add3024

File tree

14 files changed

+228
-148
lines changed

14 files changed

+228
-148
lines changed

__tests__/cos.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ describe('Cos', () => {
7575
const res = await cos.deploy({ ...inputs, bucket: '1234567890' });
7676
expect(res).toBe(undefined);
7777
} catch (err) {
78-
console.log(err);
79-
expect(err.code).toBe('Error');
78+
expect(err.type).toBe('API_COS_putBucket');
8079
}
8180
});
8281

__tests__/scf.test.ts

Lines changed: 95 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,19 @@ describe('Scf', () => {
1515
};
1616

1717
const triggers = {
18+
apigw: {
19+
apigw: {
20+
parameters: {
21+
serviceName: 'serverless_test',
22+
endpoints: [
23+
{
24+
path: '/',
25+
method: 'GET',
26+
},
27+
],
28+
},
29+
},
30+
},
1831
timer: {
1932
timer: {
2033
name: 'timer',
@@ -39,19 +52,6 @@ describe('Scf', () => {
3952
},
4053
},
4154
},
42-
apigw: {
43-
apigw: {
44-
parameters: {
45-
serviceName: 'serverless_test',
46-
endpoints: [
47-
{
48-
path: '/',
49-
method: 'GET',
50-
},
51-
],
52-
},
53-
},
54-
},
5555
cls: {
5656
cls: {
5757
parameters: {
@@ -75,7 +75,8 @@ describe('Scf', () => {
7575
};
7676

7777
const inputs: ScfDeployInputs = {
78-
name: `serverless-test-${Date.now()}`,
78+
// name: `serverless-test-${Date.now()}`,
79+
name: `serverless-test-fixed`,
7980
code: {
8081
bucket: process.env.BUCKET,
8182
object: 'express_code.zip',
@@ -143,7 +144,7 @@ describe('Scf', () => {
143144
});
144145

145146
afterAll(async (done) => {
146-
sleep(5000);
147+
await sleep(3000);
147148
await cfs.remove({
148149
fsName: cfsInputs.fsName,
149150
fileSystemId: inputs.cfs[0].cfsId,
@@ -153,7 +154,7 @@ describe('Scf', () => {
153154
});
154155

155156
test('should deploy SCF success', async () => {
156-
sleep(5000);
157+
await sleep(3000);
157158
outputs = await scf.deploy(inputs);
158159
expect(outputs).toEqual({
159160
Qualifier: '$LATEST',
@@ -209,74 +210,7 @@ describe('Scf', () => {
209210
PublicNetStatus: 'ENABLE',
210211
EipConfig: { EipStatus: 'ENABLE', EipAddress: expect.any(Array) },
211212
},
212-
Triggers: [
213-
{
214-
AddTime: expect.any(String),
215-
AvailableStatus: 'Available',
216-
CustomArgument: triggers.timer.timer.parameters.argument,
217-
Enable: 1,
218-
ModTime: expect.any(String),
219-
TriggerDesc: `{"cron":"${triggers.timer.timer.parameters.cronExpression}"}`,
220-
TriggerName: triggers.timer.timer.name,
221-
Type: 'timer',
222-
BindStatus: '',
223-
ResourceId: '',
224-
TriggerAttribute: '',
225-
},
226-
{
227-
AddTime: expect.any(String),
228-
AvailableStatus: '',
229-
CustomArgument: '',
230-
Enable: 1,
231-
ModTime: expect.any(String),
232-
TriggerDesc: `{"bucketUrl":"${triggers.cos.cos.parameters.bucket}","event":"${triggers.cos.cos.parameters.events}","filter":{"Prefix":"${triggers.cos.cos.parameters.filter.prefix}","Suffix":"${triggers.cos.cos.parameters.filter.suffix}"}}`,
233-
TriggerName: expect.stringContaining('cos_'),
234-
Type: 'cos',
235-
BindStatus: '',
236-
ResourceId: '',
237-
TriggerAttribute: '',
238-
},
239-
{
240-
created: true,
241-
serviceId: expect.stringContaining('service-'),
242-
serviceName: 'serverless_test',
243-
subDomain: expect.stringContaining('.apigw.tencentcs.com'),
244-
protocols: 'http',
245-
environment: 'release',
246-
apiList: [
247-
{
248-
path: '/',
249-
internalDomain: expect.any(String),
250-
method: 'GET',
251-
apiName: 'index',
252-
apiId: expect.stringContaining('api-'),
253-
created: true,
254-
authType: 'NONE',
255-
businessType: 'NORMAL',
256-
isBase64Encoded: false,
257-
},
258-
],
259-
},
260-
{
261-
enable: triggers.cls.cls.parameters.enable,
262-
namespace: inputs.namespace || 'default',
263-
functionName: inputs.name,
264-
maxSize: triggers.cls.cls.parameters.maxSize,
265-
maxWait: triggers.cls.cls.parameters.maxWait,
266-
qualifier: triggers.cls.cls.parameters.qualifier,
267-
topicId: triggers.cls.cls.parameters.topicId,
268-
},
269-
// {
270-
// enable: triggers.mps.mps.parameters.enable,
271-
// namespace: inputs.namespace || 'default',
272-
// functionName: inputs.name,
273-
// qualifier: triggers.mps.mps.parameters.qualifier,
274-
// type: triggers.mps.mps.parameters.type,
275-
// resourceId: expect.stringContaining(
276-
// `TriggerType/${triggers.mps.mps.parameters.type}Event`,
277-
// ),
278-
// },
279-
],
213+
Triggers: expect.any(Array),
280214
ClsLogsetId: '',
281215
ClsTopicId: '',
282216
CodeInfo: '',
@@ -312,9 +246,85 @@ describe('Scf', () => {
312246
Traffic: inputs.traffic,
313247
ConfigTrafficVersion: '1',
314248
});
249+
250+
// expect triggers result
251+
expect(outputs.Triggers).toEqual([
252+
{
253+
NeedCreate: expect.any(Boolean),
254+
created: true,
255+
serviceId: expect.stringContaining('service-'),
256+
serviceName: 'serverless_test',
257+
subDomain: expect.stringContaining('.apigw.tencentcs.com'),
258+
protocols: 'http',
259+
environment: 'release',
260+
apiList: [
261+
{
262+
path: '/',
263+
internalDomain: expect.any(String),
264+
method: 'GET',
265+
apiName: 'index',
266+
apiId: expect.stringContaining('api-'),
267+
created: true,
268+
authType: 'NONE',
269+
businessType: 'NORMAL',
270+
isBase64Encoded: false,
271+
},
272+
],
273+
},
274+
{
275+
NeedCreate: expect.any(Boolean),
276+
AddTime: expect.any(String),
277+
AvailableStatus: expect.any(String),
278+
CustomArgument: triggers.timer.timer.parameters.argument,
279+
Enable: 1,
280+
ModTime: expect.any(String),
281+
TriggerDesc: `{"cron":"${triggers.timer.timer.parameters.cronExpression}"}`,
282+
TriggerName: triggers.timer.timer.name,
283+
Type: 'timer',
284+
BindStatus: expect.any(String),
285+
ResourceId: expect.any(String),
286+
TriggerAttribute: expect.any(String),
287+
Qualifier: expect.any(String),
288+
},
289+
{
290+
NeedCreate: expect.any(Boolean),
291+
AddTime: expect.any(String),
292+
AvailableStatus: expect.any(String),
293+
CustomArgument: expect.any(String),
294+
Enable: 1,
295+
ModTime: expect.any(String),
296+
TriggerDesc: `{"bucketUrl":"${triggers.cos.cos.parameters.bucket}","event":"${triggers.cos.cos.parameters.events}","filter":{"Prefix":"${triggers.cos.cos.parameters.filter.prefix}","Suffix":"${triggers.cos.cos.parameters.filter.suffix}"}}`,
297+
TriggerName: expect.stringContaining('cos'),
298+
Type: 'cos',
299+
BindStatus: expect.any(String),
300+
ResourceId: expect.any(String),
301+
TriggerAttribute: expect.any(String),
302+
Qualifier: expect.any(String),
303+
},
304+
{
305+
NeedCreate: expect.any(Boolean),
306+
enable: triggers.cls.cls.parameters.enable,
307+
namespace: inputs.namespace || 'default',
308+
functionName: inputs.name,
309+
maxSize: triggers.cls.cls.parameters.maxSize,
310+
maxWait: triggers.cls.cls.parameters.maxWait,
311+
qualifier: triggers.cls.cls.parameters.qualifier,
312+
topicId: triggers.cls.cls.parameters.topicId,
313+
Qualifier: expect.any(String),
314+
},
315+
// {
316+
// enable: triggers.mps.mps.parameters.enable,
317+
// namespace: inputs.namespace || 'default',
318+
// functionName: inputs.name,
319+
// qualifier: triggers.mps.mps.parameters.qualifier,
320+
// type: triggers.mps.mps.parameters.type,
321+
// resourceId: expect.stringContaining(
322+
// `TriggerType/${triggers.mps.mps.parameters.type}Event`,
323+
// ),
324+
// },
325+
]);
315326
});
316327
test('should invoke Scf success', async () => {
317-
sleep(5000);
318328
const res = await scf.invoke({
319329
functionName: inputs.name,
320330
});
@@ -333,7 +343,6 @@ describe('Scf', () => {
333343
});
334344
});
335345
test('should remove Scf success', async () => {
336-
sleep(5000);
337346
const res = await scf.remove({
338347
functionName: inputs.name,
339348
...outputs,

__tests__/triggers/cls.test.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ describe('Cls Trigger', () => {
5353
});
5454

5555
test('should create trigger success', async () => {
56-
sleep(5000);
56+
await sleep(5000);
5757
const res = await clsTrigger.create({
5858
inputs: {
5959
namespace: namespace,
@@ -63,6 +63,7 @@ describe('Cls Trigger', () => {
6363
});
6464

6565
expect(res).toEqual({
66+
Qualifier: '$DEFAULT',
6667
namespace: namespace,
6768
functionName: functionName,
6869
maxSize: 100,
@@ -73,7 +74,7 @@ describe('Cls Trigger', () => {
7374
});
7475

7576
test('should enable trigger success', async () => {
76-
sleep(5000);
77+
await sleep(5000);
7778
data.enable = true;
7879
const res = await clsTrigger.create({
7980
inputs: {
@@ -90,6 +91,7 @@ describe('Cls Trigger', () => {
9091
maxWait: 60,
9192
qualifier: '$DEFAULT',
9293
topicId: clsOutputs.topicId,
94+
Qualifier: '$DEFAULT',
9395
});
9496
});
9597

@@ -111,6 +113,7 @@ describe('Cls Trigger', () => {
111113
maxWait: 60,
112114
qualifier: '$DEFAULT',
113115
topicId: clsOutputs.topicId,
116+
Qualifier: '$DEFAULT',
114117
});
115118
});
116119

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
"@types/lodash": "^4.14.167",
9090
"@types/node": "^14.14.20",
9191
"@ygkit/request": "^0.1.8",
92-
"cos-nodejs-sdk-v5": "^2.8.6",
92+
"cos-nodejs-sdk-v5": "2.8.6",
9393
"lodash": "^4.17.20",
9494
"moment": "^2.25.3",
9595
"tencent-cloud-sdk": "^1.0.5",

src/modules/apigw/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -714,8 +714,10 @@ export default class Apigw {
714714
authType: authType,
715715
businessType: businessType,
716716
isBase64Encoded: endpoint.isBase64Encoded === true,
717-
authRelationApiId: endpoint.authRelationApiId,
718717
};
718+
if (endpoint.authRelationApiId) {
719+
output.authRelationApiId = endpoint.authRelationApiId;
720+
}
719721

720722
const apiInputs = {
721723
protocol: endpoint.protocol || 'HTTP',

0 commit comments

Comments
 (0)