@Test public void testSchemaEvolution() throws Exception { List<ByteBuffer> buffers = Lists.newArrayList(); List<Record> records = Ordering.usingToString().sortedCopy( Iterables.concat(V1_RECORDS, V2_RECORDS)); MessageEncoder<Record> v1Encoder = new IcebergEncoder<>(SCHEMA_V1); MessageEncoder<Record> v2Encoder = new IcebergEncoder<>(SCHEMA_V2); for (Record record : records) { if (record.struct() == SCHEMA_V1.asStruct()) { buffers.add(v1Encoder.encode(record)); } else { buffers.add(v2Encoder.encode(record)); } } Set<Record> allAsV2 = Sets.newHashSet(V2_RECORDS); allAsV2.add(v2Record(1L, "m-1", null)); allAsV2.add(v2Record(2L, "m-2", null)); allAsV2.add(v2Record(4L, "m-4", null)); allAsV2.add(v2Record(6L, "m-6", null)); IcebergDecoder<Record> v2Decoder = new IcebergDecoder<>(SCHEMA_V2); v2Decoder.addSchema(SCHEMA_V1); Set<Record> decodedUsingV2 = Sets.newHashSet(); for (ByteBuffer buffer : buffers) { decodedUsingV2.add(v2Decoder.decode(buffer)); } Assert.assertEquals(allAsV2, decodedUsingV2); }