diff --git a/src/main/java/com/microsoft/graph/core/tasks/LargeFileUploadTask.java b/src/main/java/com/microsoft/graph/core/tasks/LargeFileUploadTask.java index f8a45a65..907a0e3a 100644 --- a/src/main/java/com/microsoft/graph/core/tasks/LargeFileUploadTask.java +++ b/src/main/java/com/microsoft/graph/core/tasks/LargeFileUploadTask.java @@ -231,7 +231,7 @@ protected List> getUploadSliceRequests() { for (Map.Entry entry: rangesRemaining) { long currentRangeBegin = entry.getKey(); long currentEnd = entry.getValue(); - while(currentRangeBegin < currentEnd) { + while(currentRangeBegin <= currentEnd) { long nextSliceSize = nextSliceSize(currentRangeBegin, currentEnd); UploadSliceRequestBuilder sliceRequestBuilder = new UploadSliceRequestBuilder<>(this.uploadSession.getUploadUrl(), this.requestAdapter, diff --git a/src/test/java/com/microsoft/graph/core/tasks/LargeFileUploadTest.java b/src/test/java/com/microsoft/graph/core/tasks/LargeFileUploadTest.java index 26eacec5..fe2e1282 100644 --- a/src/test/java/com/microsoft/graph/core/tasks/LargeFileUploadTest.java +++ b/src/test/java/com/microsoft/graph/core/tasks/LargeFileUploadTest.java @@ -21,6 +21,7 @@ import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import org.mockito.internal.matchers.Any; @@ -115,6 +116,27 @@ void BreakStreamIntoCorrectRanges() throws IOException, NoSuchFieldException, Il assertEquals(size%maxSliceSize, lastSlice.getRangeLength()); assertEquals(size-1, lastSlice.getRangeEnd()); } + @Test + void includesOneByteFinalSlice() throws IOException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { + UploadSession session = new UploadSession(); + session.setNextExpectedRanges(Arrays.asList("0-")); + session.setUploadUrl("http://localhost"); + session.setExpirationDateTime(OffsetDateTime.parse("2019-11-07T06:39:31.499Z")); + + int sliceSize = 320 * 1024; + byte[] data = new byte[sliceSize + 1]; + LargeFileUploadTask task = new LargeFileUploadTask<>(adapter, session, + new ByteArrayInputStream(data), data.length, sliceSize, TestDriveItem::createFromDiscriminatorValue); + + List> builders = task.getUploadSliceRequests(); + + assertEquals(2, builders.size()); + UploadSliceRequestBuilder finalSlice = builders.get(1); + assertEquals(sliceSize, finalSlice.getRangeBegin()); + assertEquals(sliceSize, finalSlice.getRangeEnd()); + assertEquals(1, finalSlice.getRangeLength()); + } + // Test for chunkInputStream method with a 5MB file @Test void uploads5MBFileSuccessfully() throws Exception {