|
| 1 | +/* eslint-disable no-console */ |
| 2 | +import { AWS_REGION, STACK_NAME } from '../shared-test-code/constants'; |
| 3 | +import { addMessageToQueue } from '../shared-test-code/aws/sqs/add-message-to-queue'; |
| 4 | +import { executeStepFunction } from '../shared-test-code/aws/step-function/execute-step-function'; |
| 5 | +import { generateTimestamp, generateTimestampFormatted } from '../shared-test-code/utils'; |
| 6 | +import { pollForRawLayerData, pollForStageLayerData } from '../shared-test-code/poll-for-athena-data'; |
| 7 | +import { pollForFactJourneyData } from '../shared-test-code/poll-for-redshift-data'; |
| 8 | +import { grantRedshiftAccess } from '../shared-test-code/aws/redshift/grant-access'; |
| 9 | +import { setE2EEnvVarsFromSsm } from './helpers/config/ssm-config'; |
| 10 | +import { constructTestEvent } from './test-events/rp-onboarding-test-event'; |
| 11 | +import { rpOnboardingTestEvents } from './config/rp-onboarding.config'; |
| 12 | +import { getE2ETestEnv } from './helpers/utils/utils'; |
| 13 | +import { AuditEvent } from '../../common/types/event'; |
| 14 | + |
| 15 | +export default async function globalSetup() { |
| 16 | + const setupStartTime = Date.now(); |
| 17 | + |
| 18 | + try { |
| 19 | + process.env.STACK_NAME = process.env.STACK_NAME ?? STACK_NAME; |
| 20 | + process.env.AWS_REGION = process.env.AWS_REGION ?? AWS_REGION; |
| 21 | + |
| 22 | + await setE2EEnvVarsFromSsm(); |
| 23 | + await grantRedshiftAccess(getE2ETestEnv('REDSHIFT_WORKGROUP_NAME')); |
| 24 | + |
| 25 | + const queueUrl = getE2ETestEnv('DAP_E2E_TEST_PRODUCER_QUEUE_URL'); |
| 26 | + const timestamp = generateTimestamp(); |
| 27 | + const timestampFormatted = generateTimestampFormatted(); |
| 28 | + |
| 29 | + const sentEvents: AuditEvent[] = []; |
| 30 | + for (const testEvent of rpOnboardingTestEvents) { |
| 31 | + const event = constructTestEvent(testEvent.clientId, timestamp, timestampFormatted); |
| 32 | + await addMessageToQueue(event, queueUrl); |
| 33 | + sentEvents.push(event); |
| 34 | + console.log(`📤 Sent event:`, JSON.stringify(event, null, 2)); |
| 35 | + } |
| 36 | + |
| 37 | + const eventIds = sentEvents.map(e => e.event_id); |
| 38 | + |
| 39 | + console.log( |
| 40 | + '⏳ Waiting 10 mins before polling (event-processing transit + DAP batching can take up to 15 mins)...', |
| 41 | + ); |
| 42 | + const rawPollStart = Date.now(); |
| 43 | + await new Promise(resolve => setTimeout(resolve, 10 * 60 * 1000)); |
| 44 | + |
| 45 | + console.log('⏳ Now polling for events in raw layer (up to 15 mins)...'); |
| 46 | + await pollForRawLayerData(eventIds, { |
| 47 | + maxWaitTimeMs: 15 * 60 * 1000, |
| 48 | + pollIntervalMs: 10000, |
| 49 | + }); |
| 50 | + console.log(`✅ Events found in raw layer after ${Math.round((Date.now() - rawPollStart) / 1000)}s`); |
| 51 | + |
| 52 | + const rawToStageStepFunction = getE2ETestEnv('RAW_TO_STAGE_STEP_FUNCTION'); |
| 53 | + await executeStepFunction(rawToStageStepFunction, undefined, 'rp-onboarding-e2e', 25 * 60 * 1000); |
| 54 | + await pollForStageLayerData(eventIds, { |
| 55 | + maxWaitTimeMs: 10 * 60 * 1000, |
| 56 | + pollIntervalMs: 10000, |
| 57 | + }); |
| 58 | + await pollForFactJourneyData(eventIds, { maxWaitTimeMs: 5 * 60 * 1000, pollIntervalMs: 5000 }); |
| 59 | + |
| 60 | + const totalSetupDuration = Date.now() - setupStartTime; |
| 61 | + console.log(`🎉 RP Onboarding e2e setup completed in ${Math.round(totalSetupDuration / 1000)}s`); |
| 62 | + } catch (error) { |
| 63 | + const setupDuration = Date.now() - setupStartTime; |
| 64 | + console.error(`❌ RP Onboarding e2e setup failed after ${Math.round(setupDuration / 1000)}s:`, error); |
| 65 | + throw error; |
| 66 | + } |
| 67 | +} |
0 commit comments