Машинопись Мокко & AWS Тестирование - PullRequest
0 голосов
/ 14 марта 2020

Это моя первая попытка Мокко / Чай при тестировании. У меня есть проект Ia C, и, прежде чем он будет запущен, я хочу убедиться, что секреты, хранящиеся в диспетчере секретов, действительно есть, прежде чем выполнять работу.

Когда я запускаю это. Я просто получаю вывод 0 passing (0ms)

Код: код получает учетные данные для разных регионов, а затем должен сравнить, если этот секрет выходит из не сравнения строки в expect.to.equal

import * as awsSdk from 'aws-sdk';
import { expect } from 'chai';
import { secretValues } from './config';

// Assume Role
const sts = new awsSdk.STS();

// Function to Update Credentials
const getCrossAccountCredentials = async (account: string, role: string) =>
  new Promise((resolve, reject) => {
    const timestamp = new Date().getTime();
    const params = {
      RoleArn: `arn:aws:iam::${account}:role/${role}`,
      RoleSessionName: `sts-session-${timestamp}`
    };
    sts.assumeRole(params, (err, data) => {
      if (err) reject(err);
      else {
        resolve({
          accessKeyId: data.Credentials.AccessKeyId,
          secretAccessKey: data.Credentials.SecretAccessKey,
          sessionToken: data.Credentials.SessionToken
        });
      }
    });
  });

// Run Test for Secrets Manager
describe('# Secrets Manager Tests:', () => {
    secretValues.map(async dir => {
        // Configure the AWS SDK with the correct region
        awsSdk.config.update({
        region: dir.region
        });

        // Get Assume Role
        const accessparams = await getCrossAccountCredentials(
        dir.account,
        dir.role
        );

        // Initialize SecretsManager Client
        const sm = new awsSdk.SecretsManager(accessparams);

        // Set Params for Describe Secret
        const params = {
        SecretId: `ServiceAccounts/${dir.name}/admin`
        };

        // Run Each Account
        it('Should exists in AWS', async ()  => {
            // Describe the Secret
            sm.describeSecret(params, (err, data) => {
                if (err) {
                    throw err;
                }
                else {
                    expect(`${data.Name}`).to.equal(`ServiceAccounts/${dir.name}/admin`);
                }
            });
        }); 
    }); 
}); 

Ожидаемое поведение:

Secrets Manager Tests:
3 of 3 passing

1 Ответ

0 голосов
/ 16 марта 2020

Я выяснил свою проблему (хотя до сих пор не понимаю ее полностью)

Рабочий код теперь:

import * as AWS from 'aws-sdk';
import { expect } from 'chai';
import { secretValues } from './config';

// Run Test for Secrets Manager
describe('# Secrets Manager Tests:', () => {    
    config.ad.directories.map( dir => {
        it(`${dir.name} should exist in AWS`, async ()  => {
            // Configure the AWS SDK with the correct region
            AWS.config.update({
                region: config.ad.region
            });

            const sts = new AWS.STS();

            const stsParams = {
                RoleArn: `arn:aws:iam::${dir.account}:role/${config.provider.role}`,
                RoleSessionName: `session-${dir.account}`,
                DurationSeconds: 900
            }

            const assumeRole = await sts.assumeRole(stsParams)
                .promise().then(data => data.Credentials)
                .catch((err) => { console.log(err);})

            const credJSON = JSON.stringify(await assumeRole)
            const creds = JSON.parse(credJSON)

            const smParams = {
                accessKeyId: creds.AccessKeyId,
                secretAccessKey: creds.SecretAccessKey,
                sessionToken: creds.SessionToken
            };

            const sm = new AWS.SecretsManager(smParams);

            // Set Params for Describe Secret
            const params = {SecretId: `ServiceAccounts/${dir.name}/admin`};

            const response = await sm.describeSecret(params).promise()
                .then((data) => data.Name)
                .catch(() => {})  

            expect(await response).to.equal(`ServiceAccounts/${dir.name}/admin`);

        }) // dirMap
    }) // it
}) // describe
...