1
1
package io .visual_regression_tracker .sdk_java ;
2
2
3
3
import java .io .IOException ;
4
+ import java .net .SocketTimeoutException ;
4
5
import java .util .Arrays ;
5
6
import java .util .Objects ;
7
+ import java .util .concurrent .TimeUnit ;
6
8
7
9
import ch .qos .logback .classic .Level ;
8
10
import ch .qos .logback .classic .Logger ;
@@ -46,6 +48,7 @@ public class VisualRegressionTrackerTest {
46
48
private final static String CI_BUILD_ID = "123456789" ;
47
49
private final static String NAME = "Test name" ;
48
50
private final static String IMAGE_BASE_64 = "image" ;
51
+ private final static int HTTP_TIMOUT = 1 ;
49
52
50
53
private final Gson gson = new Gson ();
51
54
@@ -67,7 +70,8 @@ public void setup() {
67
70
"XHGDZDFD3GMJDNM87JKEMP0JS1G5" ,
68
71
"develop" ,
69
72
false ,
70
- CI_BUILD_ID );
73
+ CI_BUILD_ID ,
74
+ HTTP_TIMOUT );
71
75
vrt = new VisualRegressionTracker (config );
72
76
vrtMocked = mock (VisualRegressionTracker .class );
73
77
vrtMocked .paths = new PathProvider ("baseApiUrl" );
@@ -339,4 +343,44 @@ public void handleRequestShouldThrowIfNotSuccess() throws IOException {
339
343
340
344
assertThat (exceptionMessage , is (error ));
341
345
}
346
+
347
+ @ Test
348
+ public void httpTimoutWorks () throws IOException , InterruptedException {
349
+ BuildResponse buildResponse = BuildResponse .builder ()
350
+ .id (BUILD_ID )
351
+ .projectId (PROJECT_ID )
352
+ .ciBuildId (CI_BUILD_ID )
353
+ .build ();
354
+ String json = gson .toJson (buildResponse );
355
+ //body size is 97 bytes, http timeout is 1s, set body read delay to 0.9s, wait that vrt get all values correctly
356
+ server .enqueue (new MockResponse ().throttleBody (json .length (), HTTP_TIMOUT * 1000 - 100 , TimeUnit .MILLISECONDS )
357
+ .setResponseCode (200 )
358
+ .setBody (json ));
359
+
360
+ vrt .start ();
361
+
362
+ server .takeRequest ();
363
+
364
+ assertThat (vrt .buildId , is (BUILD_ID ));
365
+ assertThat (vrt .projectId , is (PROJECT_ID ));
366
+ }
367
+
368
+ @ Test (expectedExceptions = SocketTimeoutException .class ,
369
+ expectedExceptionsMessageRegExp = "^(timeout|Read timed out)$" )
370
+ public void httpTimoutElapsed () throws IOException , InterruptedException {
371
+ BuildResponse buildResponse = BuildResponse .builder ()
372
+ .id (BUILD_ID )
373
+ .projectId (PROJECT_ID )
374
+ .ciBuildId (CI_BUILD_ID )
375
+ .build ();
376
+ String json = gson .toJson (buildResponse );
377
+ //body size is 97 bytes, http timeout is 1s, set body read delay to 1s, wait for error
378
+ server .enqueue (new MockResponse ().throttleBody (json .length (), HTTP_TIMOUT , TimeUnit .SECONDS )
379
+ .setResponseCode (200 )
380
+ .setBody (json ));
381
+
382
+ vrt .start ();
383
+
384
+ server .takeRequest ();
385
+ }
342
386
}
0 commit comments