/** * Gets the reconfigured serializer. This throws an exception if * {@link #isCompatibleWithReconfiguredSerializer()} is {@code false}. */ public TypeSerializer<T> getReconfiguredSerializer() { Preconditions.checkState( isCompatibleWithReconfiguredSerializer(), "It is only possible to get a reconfigured serializer if the compatibility type is %s, but the type is %s", Type.COMPATIBLE_WITH_RECONFIGURED_SERIALIZER, resultType); return reconfiguredNewSerializer; }
@Override protected boolean matchesSafely(TypeSerializerSchemaCompatibility<T> testResultCompatibility) { if (expectedCompatibilty.isCompatibleAsIs()) { return testResultCompatibility.isCompatibleAsIs(); } else if (expectedCompatibilty.isIncompatible()) { return testResultCompatibility.isCompatibleAfterMigration(); } else if (expectedCompatibilty.isIncompatible()) { return testResultCompatibility.isIncompatible(); } else if (expectedCompatibilty.isCompatibleWithReconfiguredSerializer()) { return testResultCompatibility.isCompatibleWithReconfiguredSerializer(); } return false; }
} else if (compatibility.isCompatibleWithReconfiguredSerializer()) { hasReconfiguredNestedSerializers = true; reconfiguredNestedSerializers[i] = compatibility.getReconfiguredSerializer();
@Test public void testCompatibleWithReconfiguredSerializerPrecedence() throws IOException { final String OUTER_CONFIG = "outer-config"; TypeSerializer<?>[] testNestedSerializers = { new NestedSerializer(TargetCompatibility.COMPATIBLE_AS_IS), new NestedSerializer(TargetCompatibility.COMPATIBLE_WITH_RECONFIGURED_SERIALIZER), new NestedSerializer(TargetCompatibility.COMPATIBLE_AS_IS), }; TypeSerializerSchemaCompatibility<String> compatibility = snapshotCompositeSerializerAndGetSchemaCompatibilityAfterRestore( testNestedSerializers, OUTER_CONFIG, OUTER_CONFIG); Assert.assertTrue(compatibility.isCompatibleWithReconfiguredSerializer()); TestCompositeTypeSerializer reconfiguredSerializer = (TestCompositeTypeSerializer) compatibility.getReconfiguredSerializer(); TypeSerializer<?>[] reconfiguredNestedSerializers = reconfiguredSerializer.getNestedSerializers(); // nested serializer at index 1 should strictly be a ReconfiguredNestedSerializer Assert.assertTrue(reconfiguredNestedSerializers[0].getClass() == NestedSerializer.class); Assert.assertTrue(reconfiguredNestedSerializers[1].getClass() == ReconfiguredNestedSerializer.class); Assert.assertTrue(reconfiguredNestedSerializers[2].getClass() == NestedSerializer.class); }