@@ -5,7 +5,7 @@ import setup = require('../setup'); // Must be located before 'tap' import
55// tslint:disable-next-line: ordered-imports
66import * as tap from 'tap' ;
77import * as config from '../../src/common/config' ;
8- import { IWorkloadLocator } from '../../src/transmitter/types' ;
8+ import { IWorkloadLocator , IWorkloadMetadata } from '../../src/transmitter/types' ;
99import { getKindConfigPath } from '../helpers/kind' ;
1010import { WorkloadKind } from '../../src/kube-scanner/types' ;
1111
@@ -14,6 +14,7 @@ const toneDownFactor = 5;
1414const maxPodChecks = setup . KUBERNETES_MONITOR_MAX_WAIT_TIME_SECONDS / toneDownFactor ;
1515
1616type WorkloadLocatorValidator = ( workloads : IWorkloadLocator [ ] | undefined ) => boolean ;
17+ type WorkloadMetadataValidator = ( workloadInfo : IWorkloadMetadata | undefined ) => boolean ;
1718
1819async function tearDown ( ) {
1920 console . log ( 'Begin removing the snyk-monitor...' ) ;
@@ -75,7 +76,6 @@ tap.test('snyk-monitor container started', async (t) => {
7576async function validateHomebaseStoredData (
7677 validatorFn : WorkloadLocatorValidator , relativeUrl : string , remainingChecks : number = maxPodChecks ,
7778) : Promise < boolean > {
78- // TODO: consider if we're OK to expose this publicly?
7979 while ( remainingChecks > 0 ) {
8080 const responseBody = await getHomebaseResponseBody ( relativeUrl ) ;
8181 const workloads : IWorkloadLocator [ ] | undefined = responseBody . workloads ;
@@ -89,6 +89,22 @@ async function validateHomebaseStoredData(
8989 return false ;
9090}
9191
92+ async function validateHomebaseStoredMetadata (
93+ validatorFn : WorkloadMetadataValidator , relativeUrl : string , remainingChecks : number = maxPodChecks ,
94+ ) : Promise < boolean > {
95+ while ( remainingChecks > 0 ) {
96+ const responseBody = await getHomebaseResponseBody ( relativeUrl ) ;
97+ const workloadInfo : IWorkloadMetadata | undefined = responseBody . workloadInfo ;
98+ const result = validatorFn ( workloadInfo ) ;
99+ if ( result ) {
100+ return true ;
101+ }
102+ await sleep ( 1000 * toneDownFactor ) ;
103+ remainingChecks -- ;
104+ }
105+ return false ;
106+ }
107+
92108async function getHomebaseResponseBody ( relativeUrl : string ) : Promise < any > {
93109 const url = `https://${ config . INTERNAL_PROXY_CREDENTIALS } @homebase-int.dev.snyk.io/${ relativeUrl } ` ;
94110 const homebaseResponse = await needle ( 'get' , url , null ) ;
@@ -97,7 +113,7 @@ async function getHomebaseResponseBody(relativeUrl: string): Promise<any> {
97113}
98114
99115tap . test ( 'snyk-monitor sends data to homebase' , async ( t ) => {
100- t . plan ( 1 ) ;
116+ t . plan ( 2 ) ;
101117
102118 console . log ( `Begin polling Homebase for the expected workloads with integration ID ${ integrationId } ...` ) ;
103119
@@ -113,10 +129,18 @@ tap.test('snyk-monitor sends data to homebase', async (t) => {
113129 workload . type === WorkloadKind . Deployment ) !== undefined ;
114130 } ;
115131
132+ const metaValidator : WorkloadMetadataValidator = ( workloadInfo ) => {
133+ return workloadInfo !== undefined && 'revision' in workloadInfo && 'labels' in workloadInfo &&
134+ 'specLabels' in workloadInfo && 'annotations' in workloadInfo && 'specAnnotations' in workloadInfo ;
135+ } ;
136+
116137 // We don't want to spam Homebase with requests; do it infrequently
117- const homebaseTestResult = await validateHomebaseStoredData (
138+ const homebaseDepGraphTestResult = await validateHomebaseStoredData (
118139 validatorFn , `api/v2/workloads/${ integrationId } /Default cluster/services` ) ;
119- t . ok ( homebaseTestResult , 'snyk-monitor sent expected data to homebase in the expected timeframe' ) ;
140+ t . ok ( homebaseDepGraphTestResult , 'snyk-monitor sent expected data to homebase in the expected timeframe' ) ;
141+ const homebaseWorkloadMetadataResult = await validateHomebaseStoredMetadata ( metaValidator ,
142+ `api/v1/workload/${ integrationId } /Default cluster/services/Deployment/redis` ) ;
143+ t . ok ( homebaseWorkloadMetadataResult , 'snyk-monitor sent expected metadata in the expected timeframe' ) ;
120144} ) ;
121145
122146tap . test ( 'snyk-monitor sends correct data to homebase after adding another deployment' , async ( t ) => {
0 commit comments