@@ -7,7 +7,7 @@ const k8sCRDApi = kc.makeApiClient(k8s.CustomObjectsApi);
77const k8sBatchApi = kc . makeApiClient ( k8s . BatchV1Api ) ;
88const k8sPodsApi = kc . makeApiClient ( k8s . CoreV1Api ) ;
99
10- const namespace = "integration-tests" ;
10+ let namespace = "integration-tests" ;
1111
1212const sleep = ( ms ) => new Promise ( ( resolve ) => setTimeout ( resolve , ms * 1000 ) ) ;
1313
@@ -109,6 +109,7 @@ async function disasterRecovery(scanName) {
109109 * @returns {scan.findings } returns findings { categories, severities, count }
110110 */
111111async function scan ( name , scanType , parameters = [ ] , timeout = 180 ) {
112+ namespace = "integration-tests"
112113 const scanDefinition = {
113114 apiVersion : "execution.experimental.securecodebox.io/v1" ,
114115 kind : "Scan" ,
@@ -165,34 +166,8 @@ async function scan(name, scanType, parameters = [], timeout = 180) {
165166 * @param {number } timeout in seconds
166167 * @returns {scan.findings } returns findings { categories, severities, count }
167168 */
168- async function cascadingScan ( name , scanType , parameters = [ ] , nameCascade , scanTypeCascade , parametersCascade , intensive , invasive , timeout = 180 ) {
169- const cascadingDefinition = {
170- apiVersion : "cascading.experimental.securecodebox.io/v1" ,
171- kind : "CascadingRule" ,
172- metadata : {
173- generateName : `${ nameCascade } -` ,
174- labels : {
175- invasive,
176- intensive,
177- } ,
178- spec : {
179- matches : {
180- anyOf : {
181- category : "Open Port" ,
182- attributes : {
183- port : 22 ,
184- state : "open"
185- }
186- }
187- } ,
188- scanSpec : {
189- scanTypeCascade,
190- parametersCascade
191- }
192- }
193- }
194- } ;
195-
169+ async function cascadingScan ( name , scanType , parameters = [ ] , { nameCascade, matchLabels } , timeout = 180 ) {
170+ namespace = "cascading-tests" ;
196171
197172 const scanDefinition = {
198173 apiVersion : "execution.experimental.securecodebox.io/v1" ,
@@ -204,22 +179,12 @@ async function cascadingScan(name, scanType, parameters = [], nameCascade, scanT
204179 spec : {
205180 scanType,
206181 parameters,
182+ cascades : {
183+ matchLabels,
184+ }
207185 } ,
208- cascades : {
209- matchLabels : {
210- intensive
211- }
212- }
213186 } ;
214187
215- const { bodyCascade } = await k8sCRDApi . createNamespacedCustomObject (
216- "cascading.experimental.securecodebox.io" ,
217- "v1" ,
218- namespace ,
219- "scans" ,
220- cascadingDefinition
221- ) ;
222-
223188 const { body } = await k8sCRDApi . createNamespacedCustomObject (
224189 "execution.experimental.securecodebox.io" ,
225190 "v1" ,
@@ -229,7 +194,6 @@ async function cascadingScan(name, scanType, parameters = [], nameCascade, scanT
229194 ) ;
230195
231196 const actualName = body . metadata . name ;
232- const actualNameCascade = bodyCascade . metadata . name ;
233197
234198 for ( let i = 0 ; i < timeout ; i ++ ) {
235199 await sleep ( 1 ) ;
@@ -238,41 +202,70 @@ async function cascadingScan(name, scanType, parameters = [], nameCascade, scanT
238202 if ( status && status . state === "Done" ) {
239203 // Wait a couple seconds to give kubernetes more time to update the fields
240204 await sleep ( 2 ) ;
241-
242- for ( let j = 0 ; j < timeout ; j ++ ) {
243- await sleep ( 1 )
244- const { statusCascade } = await getScan ( actualNameCascade ) ;
245- if ( statusCascade && statusCascade . state === "Done" ) {
246- await sleep ( 2 ) ;
247- const { statusCascade } = await getScan ( actualNameCascade ) ;
248-
249- await deleteScan ( actualName ) ;
250- await deleteScan ( actualNameCascade ) ;
251- return statusCascade . findings ;
252- } else if ( statusCascade && statusCascade . state === "Errored" ) {
253- console . error ( "Scan Errored" ) ;
254- await disasterRecovery ( actualNameCascade ) ;
255- throw new Error (
256- `Cascade Scan failed with description "${ statusCascade . errorDescription } "`
257- ) ;
258- }
259- console . error ( "Cascade Scan Timed out!" ) ;
260- await disasterRecovery ( actualNameCascade ) ;
261-
262- throw new Error ( "timed out while waiting for cascading scan results" ) ;
263- }
264205
206+ break ;
265207 } else if ( status && status . state === "Errored" ) {
266208 console . error ( "Scan Errored" ) ;
267209 await disasterRecovery ( actualName ) ;
210+ throw new Error (
211+ `Initial Scan failed with description "${ status . errorDescription } "`
212+ ) ;
213+ }
268214
215+ if ( i === ( timeout - 1 ) ) {
269216 throw new Error (
270- `Scan failed with description " ${ status . errorDescription } " `
217+ `Initial Scan timed out failed `
271218 ) ;
272219 }
273220 }
274- console . error ( "Scan Timed out!" ) ;
221+
222+ console . log ( "First Scan finished" )
223+
224+ const { body : scans } = await k8sCRDApi . listNamespacedCustomObject (
225+ "execution.experimental.securecodebox.io" ,
226+ "v1" ,
227+ namespace ,
228+ namespace ,
229+ "scans"
230+ )
231+
232+ let cascadedScan = null ;
233+
234+ for ( const scan of scans . items ) {
235+ if ( scan . metadata . annotations && scan . metadata . annotations [ "cascading.securecodebox.io/chain" ] === nameCascade ) {
236+ cascadedScan = scan ;
237+ break ;
238+ }
239+ }
240+
241+ if ( cascadedScan === null ) {
242+ throw new Error ( `Didn't find cascaded Scan for ${ nameCascade } ` )
243+ }
244+ const actualNameCascade = cascadedScan . metadata . name ;
245+
246+ for ( let j = 0 ; j < timeout ; j ++ ) {
247+ await sleep ( 1 )
248+ const { status : statusCascade } = await getScan ( actualNameCascade ) ;
249+
250+ if ( statusCascade && statusCascade . state === "Done" ) {
251+ await sleep ( 2 ) ;
252+ const { status : statusCascade } = await getScan ( actualNameCascade ) ;
253+
254+ await deleteScan ( actualName ) ;
255+ await deleteScan ( actualNameCascade ) ;
256+ return statusCascade . findings ;
257+ } else if ( statusCascade && statusCascade . state === "Errored" ) {
258+ console . error ( "Scan Errored" ) ;
259+ await disasterRecovery ( actualName ) ;
260+ await disasterRecovery ( actualNameCascade ) ;
261+ throw new Error (
262+ `Cascade Scan failed with description "${ statusCascade . errorDescription } "`
263+ ) ;
264+ }
265+ }
266+ console . error ( "Cascade Scan Timed out!" ) ;
275267 await disasterRecovery ( actualName ) ;
268+ await disasterRecovery ( actualNameCascade ) ;
276269
277270 throw new Error ( "timed out while waiting for scan results" ) ;
278271}
0 commit comments