@@ -23,7 +23,7 @@ import {
2323 TestGenTimedOutError ,
2424} from '../../amazonqTest/error'
2525import { getMd5 , uploadArtifactToS3 } from './securityScanHandler'
26- import { fs , randomUUID , sleep , tempDirPath } from '../../shared'
26+ import { fs , randomUUID , sleep , tempDirPath , waitUntil } from '../../shared'
2727import { ShortAnswer , testGenState } from '../models/model'
2828import { ChatSessionManager } from '../../amazonqTest/chat/storages/chatSession'
2929import { createCodeWhispererChatStreamingClient } from '../../shared/clients/codewhispererChatClient'
@@ -54,17 +54,39 @@ export async function getPresignedUrlAndUploadTestGen(zipMetadata: ZipMetadata)
5454 uploadIntent : CodeWhispererConstants . testGenUploadIntent ,
5555 }
5656 logger . verbose ( `Prepare for uploading src context...` )
57- const srcResp = await codeWhisperer . codeWhispererClient . createUploadUrl ( srcReq ) . catch ( ( err ) => {
58- getLogger ( ) . error ( `Failed getting presigned url for uploading src context. Request id: ${ err . requestId } ` )
59- throw new CreateUploadUrlError ( err . message )
60- } )
61- logger . verbose ( `CreateUploadUrlRequest requestId: ${ srcResp . $response . requestId } ` )
57+ let errorMessage = ''
58+ const result = await waitUntil (
59+ async ( ) => {
60+ try {
61+ const srcResp = await codeWhisperer . codeWhispererClient . createUploadUrl ( srcReq )
62+ // Only return the response if it's successful, otherwise return false to continue retrying
63+ return srcResp . $response ?. httpResponse . statusCode === 200 ? srcResp : false
64+ } catch ( err : any ) {
65+ getLogger ( ) . error (
66+ `Failed getting presigned url for uploading src context. Request id: ${ err . requestId } `
67+ )
68+ errorMessage = err . message
69+ return false // Return false to continue retrying
70+ }
71+ } ,
72+ {
73+ interval : 200 , // 200ms between attempts
74+ timeout : 1000 , // 1 second timeout
75+ truthy : true ,
76+ }
77+ )
78+
79+ if ( ! result ) {
80+ throw new CreateUploadUrlError ( errorMessage )
81+ }
82+
83+ logger . verbose ( `CreateUploadUrlRequest requestId: ${ result . $response . requestId } ` )
6284 logger . verbose ( `Complete Getting presigned Url for uploading src context.` )
6385 logger . verbose ( `Uploading src context...` )
64- await uploadArtifactToS3 ( zipMetadata . zipFilePath , srcResp , CodeWhispererConstants . FeatureUseCase . TEST_GENERATION )
86+ await uploadArtifactToS3 ( zipMetadata . zipFilePath , result , CodeWhispererConstants . FeatureUseCase . TEST_GENERATION )
6587 logger . verbose ( `Complete uploading src context.` )
6688 const artifactMap : ArtifactMap = {
67- SourceCode : srcResp . uploadId ,
89+ SourceCode : result . uploadId ,
6890 }
6991 return artifactMap
7092}
@@ -102,11 +124,31 @@ export async function createTestJob(
102124 logger . debug ( 'target line range start: %O' , firstTargetLineRangeList ?. start )
103125 logger . debug ( 'target line range end: %O' , firstTargetLineRangeList ?. end )
104126
105- const resp = await codewhispererClient . codeWhispererClient . startTestGeneration ( req ) . catch ( ( err ) => {
106- ChatSessionManager . Instance . getSession ( ) . startTestGenerationRequestId = err . requestId
107- logger . error ( `Failed creating test job. Request id: ${ err . requestId } ` )
108- throw new CreateTestJobError ( err . message )
109- } )
127+ let errorMessage = ''
128+ const resp = await waitUntil (
129+ async ( ) => {
130+ try {
131+ const response = await codewhispererClient . codeWhispererClient . startTestGeneration ( req )
132+ // Only return the response if it's successful, otherwise return false to continue retrying
133+ return response . $response ?. httpResponse . statusCode === 200 ? response : false
134+ } catch ( err : any ) {
135+ ChatSessionManager . Instance . getSession ( ) . startTestGenerationRequestId = err . requestId
136+ logger . error ( `Failed creating test job. Request id: ${ err . requestId } ` )
137+ errorMessage = err . message
138+ return false // Return false to continue retrying
139+ }
140+ } ,
141+ {
142+ interval : 200 , // 200ms between attempts
143+ timeout : 1000 , // 1 second timeout
144+ truthy : true ,
145+ }
146+ )
147+
148+ if ( ! resp ) {
149+ throw new CreateTestJobError ( errorMessage )
150+ }
151+
110152 logger . info ( 'Unit test generation request id: %s' , resp . $response . requestId )
111153 logger . debug ( 'Unit test generation data: %O' , resp . $response . data )
112154 ChatSessionManager . Instance . getSession ( ) . startTestGenerationRequestId = resp . $response . requestId
0 commit comments