private void encodeVolatile(Entry entry, DataConfig dataConfig) throws DirectoryException { // Encode the entry for later use. entry.encode(entryBuffer, dataConfig.getEntryEncodeConfig()); // First write the DB format version byte. encodedBuffer.appendByte(DnKeyFormat.FORMAT_VERSION); try { // Then start the ASN1 sequence. writer.writeStartSequence(TAG_TREE_ENTRY); if (dataConfig.isCompressed()) { OutputStream compressor = null; try { compressor = new DeflaterOutputStream(compressedEntryBuffer.asOutputStream()); entryBuffer.copyTo(compressor); } finally { closeSilently(compressor); } // Compression needed and successful. writer.writeInteger(entryBuffer.length()); writer.writeOctetString(compressedEntryBuffer); } else { writer.writeInteger(0); writer.writeOctetString(entryBuffer); } writer.writeEndSequence(); } catch (IOException ioe) { // TODO: This should never happen with byte buffer. logger.traceException(ioe); } }
/** * Tests the entry encoding and decoding process the version 1 encoding. * * @throws Exception If the test failed unexpectedly. */ @Test(dataProvider = "encodeConfigs") public void testEntryToAndFromDatabaseV3(EntryEncodeConfig config) throws Exception { ensureServerIsUpAndRunning(); // Convert the test LDIF string to a byte array byte[] originalLDIFBytes = StaticUtils.getBytes(ldifString); try (final LDIFReader reader = new LDIFReader(new LDIFImportConfig(new ByteArrayInputStream(originalLDIFBytes)))) { Entry entryBefore, entryAfterV3; while ((entryBefore = reader.readEntry(false)) != null) { ByteStringBuilder bsb = new ByteStringBuilder(); entryBefore.encode(bsb, config); entryAfterV3 = Entry.decode(bsb.asReader()); if (config.excludeDN()) { entryAfterV3.setDN(entryBefore.getName()); } assertEquals(entryBefore, entryAfterV3); } } }