/** * Phase 1 of the algorithm. * ChunkSize does not grow from a {@code MultipartUploadStrategy.DEFAULT_PART_SIZE} * until we reach {@code MultipartUploadSlicingAlgorithm.MAGNITUDE_BASE} number of parts. */ @Test public void testWhenChunkSizeHasToStartGrowing() { MultipartUploadSlicingAlgorithm strategy = new MultipartUploadSlicingAlgorithm( MIN_PART_SIZE, MAX_PART_SIZE, MAX_NUMBER_OF_PARTS); // upper limit while we still have exactly defaultPartSize chunkSize long length = MultipartUploadSlicingAlgorithm.DEFAULT_PART_SIZE * MultipartUploadSlicingAlgorithm.DEFAULT_MAGNITUDE_BASE; long chunkSize = strategy.calculateChunkSize(length); assertEquals(chunkSize, MultipartUploadSlicingAlgorithm.DEFAULT_PART_SIZE); assertEquals(strategy.getParts(), MultipartUploadSlicingAlgorithm.DEFAULT_MAGNITUDE_BASE - 1); assertEquals(strategy.getRemaining(), MultipartUploadSlicingAlgorithm.DEFAULT_PART_SIZE); assertEquals(chunkSize * strategy.getParts() + strategy.getRemaining(), length); // then chunkSize is increasing length += 1; chunkSize = strategy.calculateChunkSize(length); assertEquals(chunkSize, MultipartUploadSlicingAlgorithm.DEFAULT_PART_SIZE * 2); assertEquals(strategy.getParts(), MultipartUploadSlicingAlgorithm.DEFAULT_MAGNITUDE_BASE / 2); assertEquals(strategy.getRemaining(), 1); assertEquals(chunkSize * strategy.getParts() + strategy.getRemaining(), length); }
/** * Phase 2 of the algorithm. * The number of parts does not grow from {@code MultipartUploadSlicingAlgorithm.MAGNITUDE_BASE} * until we reach the {@code MultipartUploadStrategy.MAX_PART_SIZE}. */ @Test public void testWhenPartsHasToStartGrowingFromMagnitudeBase() { MultipartUploadSlicingAlgorithm strategy = new MultipartUploadSlicingAlgorithm( MIN_PART_SIZE, MAX_PART_SIZE, MAX_NUMBER_OF_PARTS); // upper limit while we still have exactly MAGNITUDE_BASE parts (together with the remaining) long length = MAX_PART_SIZE * MultipartUploadSlicingAlgorithm.DEFAULT_MAGNITUDE_BASE; long chunkSize = strategy.calculateChunkSize(length); assertEquals(chunkSize, MAX_PART_SIZE); assertEquals(strategy.getParts(), MultipartUploadSlicingAlgorithm.DEFAULT_MAGNITUDE_BASE - 1); assertEquals(strategy.getRemaining(), MAX_PART_SIZE); assertEquals(chunkSize * strategy.getParts() + strategy.getRemaining(), length); // then the number of parts is increasing length += 1; chunkSize = strategy.calculateChunkSize(length); assertEquals(chunkSize, MAX_PART_SIZE); assertEquals(strategy.getParts(), MultipartUploadSlicingAlgorithm.DEFAULT_MAGNITUDE_BASE); assertEquals(strategy.getRemaining(), 1); assertEquals(chunkSize * strategy.getParts() + strategy.getRemaining(), length); }
/** * Phase 3 of the algorithm. * The number of parts are increasing until {@code MAX_NUMBER_OF_PARTS} * while its size does not exceeds the {@code MultipartUploadStrategy.MAX_PART_SIZE}. */ @Test public void testWhenPartsExceedsMaxNumberOfParts() { MultipartUploadSlicingAlgorithm strategy = new MultipartUploadSlicingAlgorithm( MIN_PART_SIZE, MAX_PART_SIZE, MAX_NUMBER_OF_PARTS); // upper limit while we still have exactly MAX_NUMBER_OF_PARTS parts (together with the remaining) long length = MAX_PART_SIZE * MAX_NUMBER_OF_PARTS; long chunkSize = strategy.calculateChunkSize(length); assertEquals(chunkSize, MAX_PART_SIZE); assertEquals(strategy.getParts(), MAX_NUMBER_OF_PARTS - 1); assertEquals(strategy.getRemaining(), MAX_PART_SIZE); assertEquals(chunkSize * strategy.getParts() + strategy.getRemaining(), length); // then the number of parts is increasing length += 1; chunkSize = strategy.calculateChunkSize(length); assertEquals(chunkSize, MAX_PART_SIZE); assertEquals(strategy.getParts(), MAX_NUMBER_OF_PARTS); assertEquals(strategy.getRemaining(), 1); assertEquals(chunkSize * strategy.getParts() + strategy.getRemaining(), length); } }
long chunkSize = strategy.calculateChunkSize(length); assertEquals(chunkSize, MultipartUploadSlicingAlgorithm.DEFAULT_PART_SIZE); assertEquals(strategy.getParts(), 0); assertEquals(strategy.getRemaining(), length); assertEquals(chunkSize * strategy.getParts() + strategy.getRemaining(), length); chunkSize = strategy.calculateChunkSize(length); assertEquals(chunkSize, MultipartUploadSlicingAlgorithm.DEFAULT_PART_SIZE); assertEquals(strategy.getParts(), 0); assertEquals(strategy.getRemaining(), length); assertEquals(chunkSize * strategy.getParts() + strategy.getRemaining(), length); chunkSize = strategy.calculateChunkSize(length); assertEquals(chunkSize, MultipartUploadSlicingAlgorithm.DEFAULT_PART_SIZE); assertEquals(strategy.getParts(), 1); assertEquals(strategy.getRemaining(), 1); assertEquals(chunkSize * strategy.getParts() + strategy.getRemaining(), length);
int partNumber = 1; while (partNumber <= algorithm.getParts()) { Payload payload = slicer.slice(blob.getPayload(), algorithm.getCopied(), partSize); BlobUploader b =
long partSize = algorithm.calculateChunkSize(contentLength); int partNumber = 1; while (partNumber <= algorithm.getParts()) { Payload slice = slicer.slice(payload, algorithm.getCopied(), partSize); BlobUploader b = new BlobUploader(mpu, partNumber++, slice);