/**
* Tests the Binary.read() method.
*/
public void testRandomAccess() throws RepositoryException, IOException {
Value val = PropertyUtil.getValue(prop);
Binary bin = val.getBinary();
byte[] buf = new byte[0x1000];
//verify that reading behind EOF returns -1
assertEquals("reading behind EOF must return -1", -1, bin.read(buf, bin.getSize()));
//read content using Binary.read()
ByteArrayOutputStream out = new ByteArrayOutputStream();
for (int cnt, pos = 0; (cnt = bin.read(buf, pos)) > 0; pos += cnt) {
out.write(buf, 0, cnt);
}
byte[] content = out.toByteArray();
assertEquals("unexpected content length", bin.getSize(), content.length);
//verify against stream
InputStream in = val.getStream();
try {
int k = 0;
for (int b; (b = in.read()) != -1; k++) {
assertEquals("Value.getStream().read() and Value.getBinary().read() " +
"return different values.", (byte) b, content[k]);
}
assertEquals("unexpected content length", k, content.length);
} finally {
try {
in.close();
} catch (IOException ignore) {}
}
//verify random access
buf = new byte[1];
assertTrue("unexpected result of Value.getBinary.read()", -1 != bin.read(buf, 0));
assertEquals("unexpected result of Value.getBinary.read()", content[0], buf[0]);
if (content.length > 0) {
assertTrue("unexpected result of Value.getBinary.read()", -1 != bin.read(buf, content.length - 1));
assertEquals("unexpected result of Value.getBinary.read()", content[content.length - 1], buf[0]);
assertTrue("unexpected result of Value.getBinary.read()", -1 != bin.read(buf, 0));
assertEquals("unexpected result of Value.getBinary.read()", content[0], buf[0]);
}
}