private void testEncodeAfterShutdownCrossSegment(long size) throws InsertException, IOException, MissingKeyException, StorageFormatException, ChecksumFailedException, ResumeFailedException, MetadataUnresolvedException {
Random r = new Random(12121);
LockableRandomAccessBuffer data = generateData(r, size);
HashResult[] hashes = getHashes(data);
MyCallback cb = new MyCallback();
MyKeysFetchingLocally keys = new MyKeysFetchingLocally();
SplitFileInserterStorage storage = new SplitFileInserterStorage(data, size, cb, null,
new ClientMetadata(), false, null, smallRAFFactory, true, baseContext.clone(),
cryptoAlgorithm, cryptoKey, null, hashes, smallBucketFactory, checker,
r, memoryLimitedJobRunner, jobRunner, ticker, keys, false, 0, 0, 0, 0);
executor.waitForIdle();
for(SplitFileInserterSegmentStorage segment : storage.segments)
assert(!segment.isFinishedEncoding());
SplitFileInserterStorage resumed = new SplitFileInserterStorage(storage.getRAF(), data, cb, r,
memoryLimitedJobRunner, jobRunner, ticker, keys, fg, persistentFileTracker, null);
resumed.start();
cb.waitForFinishedEncode();
cb.waitForHasKeys();
executor.waitForIdle();
resumed.encodeMetadata();
assertTrue(resumed.getStatus() == Status.ENCODED);
resumed.originalData.free();
resumed.getRAF().free();
}