'use strict'; const { expect } = require('chai'); const awsRequest = require('@serverless/test/aws-request'); const LambdaService = require('aws-sdk').Lambda; const fixtures = require('../../fixtures/programmatic'); const { confirmCloudWatchLogs } = require('../../utils/misc'); const { deployService, removeService } = require('../../utils/integration'); describe('test/integration/aws/function.test.js', function () { this.timeout(1000 * 60 * 20); // Involves time-taking deploys let stackName; let serviceDir; const stage = 'dev'; before(async () => { const serviceData = await fixtures.setup('function', { configExt: { functions: { arch: { handler: 'basic.handler', architecture: 'arm64', }, target: { handler: 'target.handler', }, trigger: { handler: 'trigger.handler', destinations: { onSuccess: 'target' }, }, }, }, }); ({ servicePath: serviceDir } = serviceData); const serviceName = serviceData.serviceConfig.service; stackName = `${serviceName}-${stage}`; await deployService(serviceDir); }); after(async () => { if (!serviceDir) return; await removeService(serviceDir); }); it('should invoke destination target on async invocation', async () => { const events = await confirmCloudWatchLogs( `/aws/lambda/${stackName}-target`, async () => { await awsRequest(LambdaService, 'invoke', { FunctionName: `${stackName}-trigger`, InvocationType: 'Event', }); }, { checkIsComplete: (soFarEvents) => soFarEvents.length } ); expect(events.length > 0).to.equal(true); }); it('should run lambda in `arm64` architecture', async () => { const events = await confirmCloudWatchLogs( `/aws/lambda/${stackName}-arch`, async () => { await awsRequest(LambdaService, 'invoke', { FunctionName: `${stackName}-arch`, InvocationType: 'Event', }); }, { checkIsComplete: (soFarEvents) => soFarEvents.length } ); expect(events.length > 0).to.equal(true); }); });