From 24436493a8c2b32193483bcaa58cc81c645ae805 Mon Sep 17 00:00:00 2001 From: Weike Qu Date: Tue, 28 Nov 2023 11:55:35 -0800 Subject: [PATCH] test: added asg runner stack test --- test/asg-runner-stack.test.ts | 57 +++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 test/asg-runner-stack.test.ts diff --git a/test/asg-runner-stack.test.ts b/test/asg-runner-stack.test.ts new file mode 100644 index 00000000..a60dc8b9 --- /dev/null +++ b/test/asg-runner-stack.test.ts @@ -0,0 +1,57 @@ +import * as cdk from 'aws-cdk-lib'; +import { Template } from 'aws-cdk-lib/assertions'; +import { ASGRunnerStack } from '../lib/asg-runner-stack'; +import { ENVIRONMENT_STAGE } from '../lib/finch-pipeline-app-stage'; +import { PlatformType, RunnerConfig, RunnerType } from '../config/runner-config'; + +const generateASGStackName = (runnerType: RunnerType) => + `ASG-${runnerType.platform}-${runnerType.repo}-${runnerType.version.split('.')[0]}-${runnerType.arch}Stack`; + +describe('ASGRunnerStack test', () => { + const app = new cdk.App(); + const runnerConfig = RunnerConfig.runnerProd; + const stacks: ASGRunnerStack[] = []; + runnerConfig.runnerTypes.forEach((runnerType) => { + const ASGStackName = generateASGStackName(runnerType); + const licenseArn = + runnerType.platform === PlatformType.WINDOWS ? runnerConfig.windowsLicenseArn : runnerConfig.macLicenseArn; + stacks.push( + new ASGRunnerStack(app, ASGStackName, { + env: { + account: '123456789012', + region: 'us-east-1' + }, + stage: ENVIRONMENT_STAGE.Prod, + licenseArn: licenseArn, + type: runnerType + }) + ); + }); + const templates = stacks.map((stack) => Template.fromStack(stack)); + + it('should have the correct number of resources', () => { + templates.forEach((template) => { + template.resourceCountIs('AWS::AutoScaling::AutoScalingGroup', 1); + template.resourceCountIs('AWS::EC2::LaunchTemplate', 1); + template.resourceCountIs('AWS::ResourceGroups::Group', 1); + template.resourceCountIs('AWS::EC2::SecurityGroup', 1); + template.resourceCountIs('AWS::IAM::Role', 1); + template.resourceCountIs('AWS::IAM::Policy', 1); + }); + }); + + it('should match the runner configuration', () => { + expect(stacks.length).toBe(runnerConfig.runnerTypes.length); + runnerConfig.runnerTypes.forEach((type) => { + const stack = stacks.find((stack) => stack.stackName === generateASGStackName(type)); + expect(stack).toBeDefined(); + const template = Template.fromStack(stack!); + template.hasResourceProperties('AWS::EC2::LaunchTemplate', { + LaunchTemplateData: { + InstanceType: + type.platform === PlatformType.WINDOWS ? 'm5zn.metal' : type.arch === 'arm' ? 'mac2.metal' : 'mac1.metal' + } + }); + }); + }); +});