1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.hc.client5.http.impl.classic;
28
29 import static org.junit.Assert.assertFalse;
30 import static org.junit.Assert.assertTrue;
31
32 import java.net.ConnectException;
33 import java.net.SocketTimeoutException;
34
35 import org.apache.hc.core5.http.ConnectionRequestTimeoutException;
36 import org.apache.hc.core5.http.HttpResponse;
37 import org.apache.hc.core5.http.HttpStatus;
38 import org.apache.hc.core5.http.message.BasicHttpResponse;
39 import org.junit.Before;
40 import org.junit.Test;
41
42
43 public class TestDefaultBackoffStrategy {
44
45 private DefaultBackoffStrategy impl;
46
47 @Before
48 public void setUp() {
49 impl = new DefaultBackoffStrategy();
50 }
51
52 @Test
53 public void backsOffForSocketTimeouts() {
54 assertTrue(impl.shouldBackoff(new SocketTimeoutException()));
55 }
56
57 @Test
58 public void backsOffForConnectionTimeouts() {
59 assertTrue(impl.shouldBackoff(new ConnectException()));
60 }
61
62 @Test
63 public void doesNotBackOffForConnectionManagerTimeout() {
64 assertFalse(impl.shouldBackoff(new ConnectionRequestTimeoutException()));
65 }
66
67 @Test
68 public void backsOffForServiceUnavailable() {
69 final HttpResponse resp = new BasicHttpResponse(HttpStatus.SC_SERVICE_UNAVAILABLE, "Service Unavailable");
70 assertTrue(impl.shouldBackoff(resp));
71 }
72
73 @Test
74 public void backsOffForTooManyRequests() {
75 final HttpResponse resp = new BasicHttpResponse(HttpStatus.SC_TOO_MANY_REQUESTS, "Too Many Requests");
76 assertTrue(impl.shouldBackoff(resp));
77 }
78
79 @Test
80 public void doesNotBackOffForNon429And503StatusCodes() {
81 for(int i = 100; i <= 599; i++) {
82 if (i== HttpStatus.SC_TOO_MANY_REQUESTS || i == HttpStatus.SC_SERVICE_UNAVAILABLE) {
83 continue;
84 }
85 final HttpResponse resp = new BasicHttpResponse(i, "Foo");
86 assertFalse(impl.shouldBackoff(resp));
87 }
88 }
89 }