@Test
public void testReadWrite() throws IOException, XpathException {
String docId = "/test/binary-sample.png";
String mimetype = "image/png";
BinaryDocumentManager docMgr = Common.client.newBinaryDocumentManager();
docMgr.setMetadataExtraction(MetadataExtraction.PROPERTIES);
docMgr.write(docId, new BytesHandle().with(BYTES_BINARY).withMimetype(mimetype));
DocumentDescriptor desc = docMgr.exists(docId);
assertTrue("Binary exists did not get number of bytes",
desc.getByteLength() != DocumentDescriptor.UNKNOWN_LENGTH);
assertEquals("Binary exists got wrong number of bytes", BYTES_BINARY.length, desc.getByteLength());
byte[] buf = docMgr.read(docId, new BytesHandle()).get();
assertEquals("Binary document read wrong number of bytes", BYTES_BINARY.length, buf.length);
buf = Common.streamToBytes(docMgr.read(docId, new InputStreamHandle()).get());
assertTrue("Binary document read binary empty input stream",buf.length > 0);
BytesHandle handle = new BytesHandle();
buf = docMgr.read(docId, handle, 9, 10).get();
assertEquals("Binary range read wrong number of bytes", 10, buf.length);
assertEquals("Binary range did not set length in handle", 10, handle.getByteLength());
docMgr.setMetadataCategories(Metadata.PROPERTIES);
Document metadataDocument = docMgr.readMetadata(docId, new DOMHandle()).get();
assertXpathEvaluatesTo("image/png","string(/*[local-name()='metadata']/*[local-name()='properties']/*[local-name()='content-type'])", metadataDocument);
assertXpathEvaluatesTo("text HD-HTML","string(/*[local-name()='metadata']/*[local-name()='properties']/*[local-name()='filter-capabilities'])", metadataDocument);
assertXpathEvaluatesTo("815","string(/*[local-name()='metadata']/*[local-name()='properties']/*[local-name()='size'])", metadataDocument);
}