@Override
    public CompletableFuture<Void> readAsync(String path, OutputStream outputStream) {
        try {
            @Cleanup
            InputStream is = new FileInputStream(getPath(path));

            @Cleanup
            BufferedInputStream bis = new BufferedInputStream(is);
            ByteStreams.copy(bis, outputStream);

            return CompletableFuture.completedFuture(null);
        } catch (IOException e) {
            CompletableFuture<Void> f = new CompletableFuture<>();
            f.completeExceptionally(e);
            return f;
        }
    }
@Test(timeOut = 60000)
    public void testReadNonExistentData() {
        String testPath = "non-existent-path";
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        try {
            storage.readAsync(testPath, outputStream).join();
        } catch (CompletionException e) {
            assertEquals(e.getCause().getClass(), FileNotFoundException.class);
        }
    }