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; }
@Test public void testUploadWithoutExistingChunksBig() { long length = 4 * chunkSize; List<Chunk> existingChunks = new ArrayList<>(); List<Chunk> expectedMissingChunks = new ArrayList<>(); expectedMissingChunks.add(new Chunk(0, 1023)); expectedMissingChunks.add(new Chunk(1024, 2047)); expectedMissingChunks.add(new Chunk(2048, 3071)); expectedMissingChunks.add(new Chunk(3072, 4095)); expectedMissingChunks.add(new Chunk(4096, 4096)); assertTrue(test(existingChunks, expectedMissingChunks, chunkSize, length)); }
@Test public void testChunksSmallSizeMissingChunks() { long chunkSize = 512; long length = 4 * chunkSize; List<Chunk> existingChunks = new ArrayList<>(); existingChunks.add(new Chunk(50, 89)); existingChunks.add(new Chunk(551, 580)); List<Chunk> expectedMissingChunks = new ArrayList<>(); expectedMissingChunks.add(new Chunk(0, 49)); expectedMissingChunks.add(new Chunk(90, 550)); expectedMissingChunks.add(new Chunk(581, 1092)); expectedMissingChunks.add(new Chunk(1093, 1604)); expectedMissingChunks.add(new Chunk(1605, 2048)); assertTrue(test(existingChunks, expectedMissingChunks, chunkSize, length)); }
@Test public void testUploadChunksMissingChunks2() { long length = 2 * chunkSize; List<Chunk> existingChunks = new ArrayList<>(); existingChunks.add(new Chunk(50, 1023)); existingChunks.add(new Chunk(1028, 1100)); List<Chunk> expectedMissingChunks = new ArrayList<>(); expectedMissingChunks.add(new Chunk(0, 49)); expectedMissingChunks.add(new Chunk(1024, 1027)); expectedMissingChunks.add(new Chunk(1101, 2048)); assertTrue(test(existingChunks, expectedMissingChunks, chunkSize, length)); }
@Test public void testUploadChunksMissingChunks() { long length = 2 * chunkSize; List<Chunk> existingChunks = new ArrayList<>(); existingChunks.add(new Chunk(0, 1023)); existingChunks.add(new Chunk(1028, 1100)); List<Chunk> expectedMissingChunks = new ArrayList<>(); expectedMissingChunks.add(new Chunk(1024, 1027)); expectedMissingChunks.add(new Chunk(1101, 2048)); assertTrue(test(existingChunks, expectedMissingChunks, chunkSize, length)); }
@Test public void testUploadWithoutExistingChunksSmallChunks() { long chunkSize = 512; long length = 4 * chunkSize; List<Chunk> existingChunks = new ArrayList<>(); List<Chunk> expectedMissingChunks = new ArrayList<>(); expectedMissingChunks.add(new Chunk(0, 511)); expectedMissingChunks.add(new Chunk(512, 1023)); expectedMissingChunks.add(new Chunk(1024, 1535)); expectedMissingChunks.add(new Chunk(1536, 2047)); expectedMissingChunks.add(new Chunk(2048, 2048)); assertTrue(test(existingChunks, expectedMissingChunks, chunkSize, length)); }
@Test public void testUploadWithoutExistingChunks() { long length = 2 * chunkSize; List<Chunk> existingChunks = new ArrayList<>(); List<Chunk> expectedMissingChunks = new ArrayList<>(); expectedMissingChunks.add(new Chunk(0, 1023)); expectedMissingChunks.add(new Chunk(1024, 2047)); expectedMissingChunks.add(new Chunk(2048, 2048)); assertTrue(test(existingChunks, expectedMissingChunks, chunkSize, length)); }
chunksOnServer.add(new Chunk(Long.valueOf(part[0]), Long.valueOf(part[1])));