private boolean test(List<Chunk> existingChunks, List<Chunk> expectedMissingChunks, long chunkSize, long length) { ChunkedFileUploadRemoteOperation sut = new ChunkedFileUploadRemoteOperation(null, null, null, null, null, null, false); List<Chunk> missingChunks = sut.checkMissingChunks(existingChunks, length, chunkSize); assertEquals(expectedMissingChunks.size(), missingChunks.size()); for (Chunk expectedMissingChunk : expectedMissingChunks) { assertTrue(missingChunks.contains(expectedMissingChunk)); } return true; } }
List<Chunk> checkMissingChunks(List<Chunk> chunks, long length, long chunkSize) { List<Chunk> missingChunks = new ArrayList<>(); long start = 0; while (start <= length) { Chunk nextChunk = findNextFittingChunk(chunks, start, chunkSize); if (nextChunk == null) { // create new chunk long end; if (start + chunkSize <= length) { end = start + chunkSize - 1; } else { end = length; } missingChunks.add(new Chunk(start, end)); start = end + 1; } else if (nextChunk.start == start) { // go to next start = start + nextChunk.length(); } else { // fill the gap missingChunks.add(new Chunk(start, nextChunk.start - 1)); start = nextChunk.start; } } return missingChunks; }
List<Chunk> missingChunks = checkMissingChunks(chunksOnServer, file.length(), chunkSize); RemoteOperationResult chunkResult = uploadChunk(client, uploadFolderUri, missingChunk); int moveResult = client.executeMethod(moveMethod); result = new RemoteOperationResult(isSuccess(moveResult), moveMethod); } catch (Exception e) { if (putMethod != null && putMethod.isAborted()) {
putMethod = createPutMethod(chunkUri); result = new RemoteOperationResult(isSuccess(status), putMethod);