diff --git a/main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/FileContentDecryptorImplTest.java b/main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/FileContentDecryptorImplTest.java index 78937bd93..d80e3ca46 100644 --- a/main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/FileContentDecryptorImplTest.java +++ b/main/filesystem-crypto/src/test/java/org/cryptomator/crypto/engine/impl/FileContentDecryptorImplTest.java @@ -70,6 +70,20 @@ public class FileContentDecryptorImplTest { ByteBuffer header = ByteBuffer.allocate(cryptor.getHeaderSize()); ByteBuffer ciphertext = ByteBuffer.allocate(131200); // 4 * (32k + 32) try (FileContentEncryptor encryptor = cryptor.createFileContentEncryptor(Optional.empty(), 0)) { + final Thread ciphertextWriter = new Thread(() -> { + ByteBuffer buf; + try { + while ((buf = encryptor.ciphertext()) != FileContentCryptor.EOF) { + ByteBuffers.copy(buf, ciphertext); + } + ciphertext.flip(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + }); + ciphertextWriter.start(); + + // write cleartext: ByteBuffer intBuf = ByteBuffer.allocate(32768); for (int i = 0; i < 4; i++) { intBuf.clear(); @@ -78,23 +92,29 @@ public class FileContentDecryptorImplTest { encryptor.append(intBuf); } encryptor.append(FileContentCryptor.EOF); - ByteBuffer buf; - while ((buf = encryptor.ciphertext()) != FileContentCryptor.EOF) { - ByteBuffers.copy(buf, ciphertext); - } - ByteBuffers.copy(encryptor.getHeader(), header); + ciphertextWriter.join(); + header = encryptor.getHeader(); } - header.flip(); - ciphertext.flip(); for (int i = 3; i >= 0; i--) { - int ciphertextPos = (int) cryptor.toCiphertextPos(i * 32768); + final int ciphertextPos = (int) cryptor.toCiphertextPos(i * 32768); try (FileContentDecryptor decryptor = cryptor.createFileContentDecryptor(header, ciphertextPos)) { - ciphertext.position(ciphertextPos); - decryptor.append(ciphertext); - decryptor.append(FileContentCryptor.EOF); + final Thread ciphertextReader = new Thread(() -> { + try { + ciphertext.position(ciphertextPos); + decryptor.append(ciphertext); + decryptor.append(FileContentCryptor.EOF); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + }); + ciphertextReader.start(); + + // read cleartext: ByteBuffer decrypted = decryptor.cleartext(); Assert.assertEquals(i, decrypted.getInt()); + + ciphertextReader.interrupt(); } }