22
22
import org .junit .Test ;
23
23
import org .junit .runner .RunWith ;
24
24
import org .junit .runners .JUnit4 ;
25
+ import org .mockito .ArgumentCaptor ;
25
26
import org .slf4j .Logger ;
26
27
27
28
import java .io .IOException ;
28
29
import java .net .HttpURLConnection ;
30
+ import java .net .MalformedURLException ;
29
31
import java .net .URL ;
30
32
33
+ import static junit .framework .Assert .assertTrue ;
31
34
import static org .junit .Assert .assertEquals ;
32
35
import static org .junit .Assert .assertNull ;
33
36
import static org .mockito .Matchers .any ;
34
37
import static org .mockito .Matchers .contains ;
38
+ import static org .mockito .Matchers .eq ;
35
39
import static org .mockito .Mockito .doThrow ;
36
40
import static org .mockito .Mockito .mock ;
37
41
import static org .mockito .Mockito .verify ;
@@ -63,12 +67,22 @@ public void request200() throws IOException {
63
67
when (urlConnection .getResponseCode ()).thenReturn (200 );
64
68
when (client .readStream (urlConnection )).thenReturn ("{}" );
65
69
66
- String response = dataFileClient .request (url .toString ());
67
- assertEquals (response , "{}" );
70
+ dataFileClient .request (url .toString ());
71
+
72
+ ArgumentCaptor <Client .Request > captor1 = ArgumentCaptor .forClass (Client .Request .class );
73
+ ArgumentCaptor <Integer > captor2 = ArgumentCaptor .forClass (Integer .class );
74
+ ArgumentCaptor <Integer > captor3 = ArgumentCaptor .forClass (Integer .class );
75
+ verify (client ).execute (captor1 .capture (), captor2 .capture (), captor3 .capture ());
76
+ assertEquals (Integer .valueOf (2 ), captor2 .getValue ());
77
+ assertEquals (Integer .valueOf (3 ), captor3 .getValue ());
78
+ Object response = captor1 .getValue ().execute ();
79
+ assertTrue (String .class .isInstance (response ));
80
+ assertEquals ("{}" , response );
68
81
69
82
verify (logger ).info ("Requesting data file from {}" , url );
70
83
verify (client ).saveLastModified (urlConnection );
71
84
verify (client ).readStream (urlConnection );
85
+ verify (urlConnection ).disconnect ();
72
86
}
73
87
74
88
@ Test
@@ -78,12 +92,22 @@ public void request201() throws IOException {
78
92
when (urlConnection .getResponseCode ()).thenReturn (201 );
79
93
when (client .readStream (urlConnection )).thenReturn ("{}" );
80
94
81
- String response = dataFileClient .request (url .toString ());
82
- assertEquals (response , "{}" );
95
+ dataFileClient .request (url .toString ());
96
+
97
+ ArgumentCaptor <Client .Request > captor1 = ArgumentCaptor .forClass (Client .Request .class );
98
+ ArgumentCaptor <Integer > captor2 = ArgumentCaptor .forClass (Integer .class );
99
+ ArgumentCaptor <Integer > captor3 = ArgumentCaptor .forClass (Integer .class );
100
+ verify (client ).execute (captor1 .capture (), captor2 .capture (), captor3 .capture ());
101
+ assertEquals (Integer .valueOf (2 ), captor2 .getValue ());
102
+ assertEquals (Integer .valueOf (3 ), captor3 .getValue ());
103
+ Object response = captor1 .getValue ().execute ();
104
+ assertTrue (String .class .isInstance (response ));
105
+ assertEquals ("{}" , response );
83
106
84
107
verify (logger ).info ("Requesting data file from {}" , url );
85
108
verify (client ).saveLastModified (urlConnection );
86
109
verify (client ).readStream (urlConnection );
110
+ verify (urlConnection ).disconnect ();
87
111
}
88
112
89
113
@ Test
@@ -93,12 +117,22 @@ public void request299() throws IOException {
93
117
when (urlConnection .getResponseCode ()).thenReturn (299 );
94
118
when (client .readStream (urlConnection )).thenReturn ("{}" );
95
119
96
- String response = dataFileClient .request (url .toString ());
97
- assertEquals (response , "{}" );
120
+ dataFileClient .request (url .toString ());
121
+
122
+ ArgumentCaptor <Client .Request > captor1 = ArgumentCaptor .forClass (Client .Request .class );
123
+ ArgumentCaptor <Integer > captor2 = ArgumentCaptor .forClass (Integer .class );
124
+ ArgumentCaptor <Integer > captor3 = ArgumentCaptor .forClass (Integer .class );
125
+ verify (client ).execute (captor1 .capture (), captor2 .capture (), captor3 .capture ());
126
+ assertEquals (Integer .valueOf (2 ), captor2 .getValue ());
127
+ assertEquals (Integer .valueOf (3 ), captor3 .getValue ());
128
+ Object response = captor1 .getValue ().execute ();
129
+ assertTrue (String .class .isInstance (response ));
130
+ assertEquals ("{}" , response );
98
131
99
132
verify (logger ).info ("Requesting data file from {}" , url );
100
133
verify (client ).saveLastModified (urlConnection );
101
134
verify (client ).readStream (urlConnection );
135
+ verify (urlConnection ).disconnect ();
102
136
}
103
137
104
138
@ Test
@@ -107,10 +141,18 @@ public void request300() throws IOException {
107
141
when (client .openConnection (url )).thenReturn (urlConnection );
108
142
when (urlConnection .getResponseCode ()).thenReturn (300 );
109
143
110
- String response = dataFileClient .request (url .toString ());
144
+ dataFileClient .request (url .toString ());
145
+ ArgumentCaptor <Client .Request > captor1 = ArgumentCaptor .forClass (Client .Request .class );
146
+ ArgumentCaptor <Integer > captor2 = ArgumentCaptor .forClass (Integer .class );
147
+ ArgumentCaptor <Integer > captor3 = ArgumentCaptor .forClass (Integer .class );
148
+ verify (client ).execute (captor1 .capture (), captor2 .capture (), captor3 .capture ());
149
+ assertEquals (Integer .valueOf (2 ), captor2 .getValue ());
150
+ assertEquals (Integer .valueOf (3 ), captor3 .getValue ());
151
+ Object response = captor1 .getValue ().execute ();
111
152
assertNull (response );
112
153
113
154
verify (logger ).error ("Unexpected response from data file cdn, status: {}" , 300 );
155
+ verify (urlConnection ).disconnect ();
114
156
}
115
157
116
158
@ Test
@@ -120,10 +162,32 @@ public void handlesIOException() throws IOException {
120
162
when (urlConnection .getResponseCode ()).thenReturn (200 );
121
163
doThrow (new IOException ()).when (client ).readStream (urlConnection );
122
164
123
- String response = dataFileClient .request (url .toString ());
165
+ dataFileClient .request (url .toString ());
166
+ ArgumentCaptor <Client .Request > captor1 = ArgumentCaptor .forClass (Client .Request .class );
167
+ ArgumentCaptor <Integer > captor2 = ArgumentCaptor .forClass (Integer .class );
168
+ ArgumentCaptor <Integer > captor3 = ArgumentCaptor .forClass (Integer .class );
169
+ verify (client ).execute (captor1 .capture (), captor2 .capture (), captor3 .capture ());
170
+ assertEquals (Integer .valueOf (2 ), captor2 .getValue ());
171
+ assertEquals (Integer .valueOf (3 ), captor3 .getValue ());
172
+ Object response = captor1 .getValue ().execute ();
124
173
assertNull (response );
125
174
126
175
verify (logger ).error (contains ("Error making request" ), any (IOException .class ));
127
176
verify (urlConnection ).disconnect ();
177
+ verify (urlConnection ).disconnect ();
178
+ }
179
+
180
+ @ Test
181
+ public void handlesNullResponse () throws MalformedURLException {
182
+ URL url = new URL (String .format (DataFileLoader .RequestDataFileFromClientTask .FORMAT_CDN_URL , "1" ));
183
+ when (client .execute (any (Client .Request .class ), eq (2 ), eq (3 ))).thenReturn (null );
184
+ assertNull (dataFileClient .request (url .toString ()));
185
+ }
186
+
187
+ @ Test
188
+ public void handlesEmptyStringResponse () throws MalformedURLException {
189
+ URL url = new URL (String .format (DataFileLoader .RequestDataFileFromClientTask .FORMAT_CDN_URL , "1" ));
190
+ when (client .execute (any (Client .Request .class ), eq (2 ), eq (3 ))).thenReturn ("" );
191
+ assertNull (dataFileClient .request (url .toString ()));
128
192
}
129
193
}
0 commit comments