|
@@ -35,7 +35,9 @@ import java.net.HttpURLConnection;
|
|
|
import java.net.URL;
|
|
|
|
|
|
import com.google.common.net.HttpHeaders;
|
|
|
+import org.apache.hadoop.hdfs.web.ByteRangeInputStream.InputStreamAndFileLength;
|
|
|
import org.junit.Test;
|
|
|
+import org.mockito.Mockito;
|
|
|
import org.mockito.internal.util.reflection.Whitebox;
|
|
|
|
|
|
public class TestByteRangeInputStream {
|
|
@@ -140,8 +142,9 @@ public class TestByteRangeInputStream {
|
|
|
public void testPropagatedClose() throws IOException {
|
|
|
ByteRangeInputStream bris =
|
|
|
mock(ByteRangeInputStream.class, CALLS_REAL_METHODS);
|
|
|
- InputStream mockStream = mock(InputStream.class);
|
|
|
- doReturn(mockStream).when(bris).openInputStream();
|
|
|
+ InputStreamAndFileLength mockStream = new InputStreamAndFileLength(1L,
|
|
|
+ mock(InputStream.class));
|
|
|
+ doReturn(mockStream).when(bris).openInputStream(Mockito.anyLong());
|
|
|
Whitebox.setInternalState(bris, "status",
|
|
|
ByteRangeInputStream.StreamStatus.SEEK);
|
|
|
|
|
@@ -151,46 +154,46 @@ public class TestByteRangeInputStream {
|
|
|
|
|
|
// first open, shouldn't close underlying stream
|
|
|
bris.getInputStream();
|
|
|
- verify(bris, times(++brisOpens)).openInputStream();
|
|
|
+ verify(bris, times(++brisOpens)).openInputStream(Mockito.anyLong());
|
|
|
verify(bris, times(brisCloses)).close();
|
|
|
- verify(mockStream, times(isCloses)).close();
|
|
|
+ verify(mockStream.in, times(isCloses)).close();
|
|
|
|
|
|
// stream is open, shouldn't close underlying stream
|
|
|
bris.getInputStream();
|
|
|
- verify(bris, times(brisOpens)).openInputStream();
|
|
|
+ verify(bris, times(brisOpens)).openInputStream(Mockito.anyLong());
|
|
|
verify(bris, times(brisCloses)).close();
|
|
|
- verify(mockStream, times(isCloses)).close();
|
|
|
+ verify(mockStream.in, times(isCloses)).close();
|
|
|
|
|
|
// seek forces a reopen, should close underlying stream
|
|
|
bris.seek(1);
|
|
|
bris.getInputStream();
|
|
|
- verify(bris, times(++brisOpens)).openInputStream();
|
|
|
+ verify(bris, times(++brisOpens)).openInputStream(Mockito.anyLong());
|
|
|
verify(bris, times(brisCloses)).close();
|
|
|
- verify(mockStream, times(++isCloses)).close();
|
|
|
+ verify(mockStream.in, times(++isCloses)).close();
|
|
|
|
|
|
// verify that the underlying stream isn't closed after a seek
|
|
|
// ie. the state was correctly updated
|
|
|
bris.getInputStream();
|
|
|
- verify(bris, times(brisOpens)).openInputStream();
|
|
|
+ verify(bris, times(brisOpens)).openInputStream(Mockito.anyLong());
|
|
|
verify(bris, times(brisCloses)).close();
|
|
|
- verify(mockStream, times(isCloses)).close();
|
|
|
+ verify(mockStream.in, times(isCloses)).close();
|
|
|
|
|
|
// seeking to same location should be a no-op
|
|
|
bris.seek(1);
|
|
|
bris.getInputStream();
|
|
|
- verify(bris, times(brisOpens)).openInputStream();
|
|
|
+ verify(bris, times(brisOpens)).openInputStream(Mockito.anyLong());
|
|
|
verify(bris, times(brisCloses)).close();
|
|
|
- verify(mockStream, times(isCloses)).close();
|
|
|
+ verify(mockStream.in, times(isCloses)).close();
|
|
|
|
|
|
// close should of course close
|
|
|
bris.close();
|
|
|
verify(bris, times(++brisCloses)).close();
|
|
|
- verify(mockStream, times(++isCloses)).close();
|
|
|
+ verify(mockStream.in, times(++isCloses)).close();
|
|
|
|
|
|
// it's already closed, underlying stream should not close
|
|
|
bris.close();
|
|
|
verify(bris, times(++brisCloses)).close();
|
|
|
- verify(mockStream, times(isCloses)).close();
|
|
|
+ verify(mockStream.in, times(isCloses)).close();
|
|
|
|
|
|
// it's closed, don't reopen it
|
|
|
boolean errored = false;
|
|
@@ -202,9 +205,9 @@ public class TestByteRangeInputStream {
|
|
|
} finally {
|
|
|
assertTrue("Read a closed steam", errored);
|
|
|
}
|
|
|
- verify(bris, times(brisOpens)).openInputStream();
|
|
|
+ verify(bris, times(brisOpens)).openInputStream(Mockito.anyLong());
|
|
|
verify(bris, times(brisCloses)).close();
|
|
|
|
|
|
- verify(mockStream, times(isCloses)).close();
|
|
|
+ verify(mockStream.in, times(isCloses)).close();
|
|
|
}
|
|
|
}
|