2222import org .junit .Test ;
2323import org .junit .runner .RunWith ;
2424import org .junit .runners .JUnit4 ;
25+ import org .mockito .ArgumentCaptor ;
2526import org .slf4j .Logger ;
2627
2728import java .io .IOException ;
2829import java .net .HttpURLConnection ;
30+ import java .net .MalformedURLException ;
2931import java .net .URL ;
3032
33+ import static junit .framework .Assert .assertTrue ;
3134import static org .junit .Assert .assertEquals ;
3235import static org .junit .Assert .assertNull ;
3336import static org .mockito .Matchers .any ;
3437import static org .mockito .Matchers .contains ;
38+ import static org .mockito .Matchers .eq ;
3539import static org .mockito .Mockito .doThrow ;
3640import static org .mockito .Mockito .mock ;
3741import static org .mockito .Mockito .verify ;
@@ -63,12 +67,22 @@ public void request200() throws IOException {
6367 when (urlConnection .getResponseCode ()).thenReturn (200 );
6468 when (client .readStream (urlConnection )).thenReturn ("{}" );
6569
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 );
6881
6982 verify (logger ).info ("Requesting data file from {}" , url );
7083 verify (client ).saveLastModified (urlConnection );
7184 verify (client ).readStream (urlConnection );
85+ verify (urlConnection ).disconnect ();
7286 }
7387
7488 @ Test
@@ -78,12 +92,22 @@ public void request201() throws IOException {
7892 when (urlConnection .getResponseCode ()).thenReturn (201 );
7993 when (client .readStream (urlConnection )).thenReturn ("{}" );
8094
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 );
83106
84107 verify (logger ).info ("Requesting data file from {}" , url );
85108 verify (client ).saveLastModified (urlConnection );
86109 verify (client ).readStream (urlConnection );
110+ verify (urlConnection ).disconnect ();
87111 }
88112
89113 @ Test
@@ -93,12 +117,22 @@ public void request299() throws IOException {
93117 when (urlConnection .getResponseCode ()).thenReturn (299 );
94118 when (client .readStream (urlConnection )).thenReturn ("{}" );
95119
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 );
98131
99132 verify (logger ).info ("Requesting data file from {}" , url );
100133 verify (client ).saveLastModified (urlConnection );
101134 verify (client ).readStream (urlConnection );
135+ verify (urlConnection ).disconnect ();
102136 }
103137
104138 @ Test
@@ -107,10 +141,18 @@ public void request300() throws IOException {
107141 when (client .openConnection (url )).thenReturn (urlConnection );
108142 when (urlConnection .getResponseCode ()).thenReturn (300 );
109143
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 ();
111152 assertNull (response );
112153
113154 verify (logger ).error ("Unexpected response from data file cdn, status: {}" , 300 );
155+ verify (urlConnection ).disconnect ();
114156 }
115157
116158 @ Test
@@ -120,10 +162,32 @@ public void handlesIOException() throws IOException {
120162 when (urlConnection .getResponseCode ()).thenReturn (200 );
121163 doThrow (new IOException ()).when (client ).readStream (urlConnection );
122164
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 ();
124173 assertNull (response );
125174
126175 verify (logger ).error (contains ("Error making request" ), any (IOException .class ));
127176 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 ()));
128192 }
129193}
0 commit comments