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.http.impl.client;
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.http.HttpResponse;
36 import org.apache.http.HttpStatus;
37 import org.apache.http.HttpVersion;
38 import org.apache.http.client.ConnectionBackoffStrategy;
39 import org.apache.http.conn.ConnectionPoolTimeoutException;
40 import org.apache.http.message.BasicHttpResponse;
41 import org.junit.Before;
42 import org.junit.Test;
43
44
45 public class TestDefaultBackoffStrategy {
46
47 private DefaultBackoffStrategy impl;
48
49 @Before
50 public void setUp() {
51 impl = new DefaultBackoffStrategy();
52 }
53
54 @Test
55 public void isABackoffStrategy() {
56 assertTrue(impl instanceof ConnectionBackoffStrategy);
57 }
58
59 @Test
60 public void backsOffForSocketTimeouts() {
61 assertTrue(impl.shouldBackoff(new SocketTimeoutException()));
62 }
63
64 @Test
65 public void backsOffForConnectionTimeouts() {
66 assertTrue(impl.shouldBackoff(new ConnectException()));
67 }
68
69 @Test
70 public void doesNotBackOffForConnectionManagerTimeout() {
71 assertFalse(impl.shouldBackoff(new ConnectionPoolTimeoutException()));
72 }
73
74 @Test
75 public void backsOffForServiceUnavailable() {
76 final HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1,
77 HttpStatus.SC_SERVICE_UNAVAILABLE, "Service Unavailable");
78 assertTrue(impl.shouldBackoff(resp));
79 }
80
81 @Test
82 public void backsOffForTooManyRequests() {
83 final HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1,
84 429, "Too Many Requests");
85 assertTrue(impl.shouldBackoff(resp));
86 }
87
88 @Test
89 public void doesNotBackOffForNon429And503StatusCodes() {
90 for(int i = 100; i <= 599; i++) {
91 if (i== 429|| i == HttpStatus.SC_SERVICE_UNAVAILABLE) {
92 continue;
93 }
94 final HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1,
95 i, "Foo");
96 assertFalse(impl.shouldBackoff(resp));
97 }
98 }
99 }