tzulitai commented on a change in pull request #7580: [FLINK-11436] Fix Java
deserialization failure of the AvroSerializer
URL: https://github.com/apache/flink/pull/7580#discussion_r251268519
##########
File path:
flink-formats/flink-avro/src/test/java/org/apache/flink/formats/avro/typeutils/AvroSerializerMigrationTest.java
##########
@@ -68,4 +87,124 @@ public
AvroSerializerMigrationTest(TestSpecification<Address> testSpec) {
return testSpecifications.get();
}
+ //
---------------------------------------------------------------------------------------------------------------
+ // The following batch of tests are making sure that AvroSerializer
class is able to be Java-Deserialized.
+ // see [FLINK-11436] for more information.
+ // Once we drop support for versions that carried snapshots with
Java-Deserialized serializers we can drop this
+ // batch of tests.
+ //
---------------------------------------------------------------------------------------------------------------
+
+ @Test
+ public void javaDeserializeFromFlink_1_6() throws IOException {
+ final String avroSerializer =
"AAAAAQAAAUis7QAFc3IANm9yZy5hcGFjaGUuZmxpbmsuZm9ybWF0cy5hdnJvLnR5cGV1dGlscy5BdnJv\n"
+
+
"U2VyaWFsaXplcgAAAAAAAAABAgACTAAMc2NoZW1hU3RyaW5ndAASTGphdmEvbGFuZy9TdHJpbmc7TAAE\n"
+
+
"dHlwZXQAEUxqYXZhL2xhbmcvQ2xhc3M7eHIANG9yZy5hcGFjaGUuZmxpbmsuYXBpLmNvbW1vbi50eXBl\n"
+
+
"dXRpbHMuVHlwZVNlcmlhbGl6ZXIAAAAAAAAAAQIAAHhwcHZyAC9vcmcuYXBhY2hlLmZsaW5rLmZvcm1h\n"
+
+
"dHMuYXZyby5nZW5lcmF0ZWQuQWRkcmVzc+z2o/io4ENqDAAAeHIAK29yZy5hcGFjaGUuYXZyby5zcGVj\n"
+
+ "aWZpYy5TcGVjaWZpY1JlY29yZEJhc2UCovmsxrc0HQwAAHhw";
+
+ TypeSerializer<?> avro = javaDeserialize(avroSerializer);
+
+ assertThat(avro, instanceOf(AvroSerializer.class));
+ }
+
+ @Test
+ public void javaDeserializeFromFlink_1_6_GenericRecord() throws
IOException {
+ String avroSerializerBase64 =
"AAAAAQAAAges7QAFc3IANm9yZy5hcGFjaGUuZmxpbmsuZm9ybWF0cy5hdnJvLnR5cGV1dGlscy5BdnJv\n"
+
+
"U2VyaWFsaXplcgAAAAAAAAABAgACTAAMc2NoZW1hU3RyaW5ndAASTGphdmEvbGFuZy9TdHJpbmc7TAAE\n"
+
+
"dHlwZXQAEUxqYXZhL2xhbmcvQ2xhc3M7eHIANG9yZy5hcGFjaGUuZmxpbmsuYXBpLmNvbW1vbi50eXBl\n"
+
+
"dXRpbHMuVHlwZVNlcmlhbGl6ZXIAAAAAAAAAAQIAAHhwdAEBeyJ0eXBlIjoicmVjb3JkIiwibmFtZSI6\n"
+
+
"IkFkZHJlc3MiLCJuYW1lc3BhY2UiOiJvcmcuYXBhY2hlLmZsaW5rLmZvcm1hdHMuYXZyby5nZW5lcmF0\n"
+
+
"ZWQiLCJmaWVsZHMiOlt7Im5hbWUiOiJudW0iLCJ0eXBlIjoiaW50In0seyJuYW1lIjoic3RyZWV0Iiwi\n"
+
+
"dHlwZSI6InN0cmluZyJ9LHsibmFtZSI6ImNpdHkiLCJ0eXBlIjoic3RyaW5nIn0seyJuYW1lIjoic3Rh\n"
+
+
"dGUiLCJ0eXBlIjoic3RyaW5nIn0seyJuYW1lIjoiemlwIiwidHlwZSI6InN0cmluZyJ9XX12cgAlb3Jn\n"
+
+
"LmFwYWNoZS5hdnJvLmdlbmVyaWMuR2VuZXJpY1JlY29yZAAAAAAAAAAAAAAAeHA=";
+
+ TypeSerializer<?> serializer =
javaDeserialize(avroSerializerBase64);
+
+ AvroSerializer<?> avroSerializer = (AvroSerializer<?>)
serializer;
+ assertSame(avroSerializer.getType(), GenericRecord.class);
+ assertThat(avroSerializer.getAvroSchema(), notNullValue());
+ }
+
+ @Test
+ public void javaDeserializeFromFlink_1_7() throws IOException {
+ String avroSerializerBase64 =
"AAAAAQAAAeKs7QAFc3IANm9yZy5hcGFjaGUuZmxpbmsuZm9ybWF0cy5hdnJvLnR5cGV1dGlscy5BdnJv\n"
+
+
"U2VyaWFsaXplcgAAAAAAAAACAgADTAAOcHJldmlvdXNTY2hlbWF0AEBMb3JnL2FwYWNoZS9mbGluay9m\n"
+
+
"b3JtYXRzL2F2cm8vdHlwZXV0aWxzL1NlcmlhbGl6YWJsZUF2cm9TY2hlbWE7TAAGc2NoZW1hcQB+AAFM\n"
+
+
"AAR0eXBldAARTGphdmEvbGFuZy9DbGFzczt4cgA0b3JnLmFwYWNoZS5mbGluay5hcGkuY29tbW9uLnR5\n"
+
+
"cGV1dGlscy5UeXBlU2VyaWFsaXplcgAAAAAAAAABAgAAeHBzcgA+b3JnLmFwYWNoZS5mbGluay5mb3Jt\n"
+
+
"YXRzLmF2cm8udHlwZXV0aWxzLlNlcmlhbGl6YWJsZUF2cm9TY2hlbWEAAAAAAAAAAQMAAHhwdwEAeHNx\n"
+
+
"AH4ABXcBAHh2cgAvb3JnLmFwYWNoZS5mbGluay5mb3JtYXRzLmF2cm8uZ2VuZXJhdGVkLkFkZHJlc3Ps\n"
+
+
"9qP4qOBDagwAAHhyACtvcmcuYXBhY2hlLmF2cm8uc3BlY2lmaWMuU3BlY2lmaWNSZWNvcmRCYXNlAqL5\n"
+
+ "rMa3NB0MAAB4cA==";
+
+ AvroSerializer<?> avroSerializer = (AvroSerializer<?>)
javaDeserialize(avroSerializerBase64);
+ assertSame(avroSerializer.getType(), Address.class);
+ assertThat(avroSerializer.getAvroSchema(), is(Address.SCHEMA$));
+ }
+
+ @Test
+ public void javaDeserializeFromFlink_1_7_afterInitialization() throws
IOException {
+ String avroSerializerBase64 =
"AAAAAQAAAeKs7QAFc3IANm9yZy5hcGFjaGUuZmxpbmsuZm9ybWF0cy5hdnJvLnR5cGV1dGlscy5BdnJv\n"
+
+
"U2VyaWFsaXplcgAAAAAAAAACAgADTAAOcHJldmlvdXNTY2hlbWF0AEBMb3JnL2FwYWNoZS9mbGluay9m\n"
+
+
"b3JtYXRzL2F2cm8vdHlwZXV0aWxzL1NlcmlhbGl6YWJsZUF2cm9TY2hlbWE7TAAGc2NoZW1hcQB+AAFM\n"
+
+
"AAR0eXBldAARTGphdmEvbGFuZy9DbGFzczt4cgA0b3JnLmFwYWNoZS5mbGluay5hcGkuY29tbW9uLnR5\n"
+
+
"cGV1dGlscy5UeXBlU2VyaWFsaXplcgAAAAAAAAABAgAAeHBzcgA+b3JnLmFwYWNoZS5mbGluay5mb3Jt\n"
+
+
"YXRzLmF2cm8udHlwZXV0aWxzLlNlcmlhbGl6YWJsZUF2cm9TY2hlbWEAAAAAAAAAAQMAAHhwdwEAeHNx\n"
+
+
"AH4ABXcBAHh2cgAvb3JnLmFwYWNoZS5mbGluay5mb3JtYXRzLmF2cm8uZ2VuZXJhdGVkLkFkZHJlc3Ps\n"
+
+
"9qP4qOBDagwAAHhyACtvcmcuYXBhY2hlLmF2cm8uc3BlY2lmaWMuU3BlY2lmaWNSZWNvcmRCYXNlAqL5\n"
+
+ "rMa3NB0MAAB4cA==";
+
+ AvroSerializer<?> avroSerializer = (AvroSerializer<?>)
javaDeserialize(avroSerializerBase64);
+ assertSame(avroSerializer.getType(), Address.class);
+ assertThat(avroSerializer.getAvroSchema(), is(Address.SCHEMA$));
+ }
+
+ @Test
+ public void compositeSerializerFromFlink_1_6_WithNestedAvroSerializer()
throws IOException {
+ String streamElementSerializerBase64 =
"AAAAAQAAAq2s7QAFc3IAR29yZy5hcGFjaGUuZmxpbmsuc3RyZWFtaW5nLnJ1bnRpbWUuc3RyZWFtcmVj\n"
+
+
"b3JkLlN0cmVhbUVsZW1lbnRTZXJpYWxpemVyAAAAAAAAAAECAAFMAA50eXBlU2VyaWFsaXplcnQANkxv\n"
+
+
"cmcvYXBhY2hlL2ZsaW5rL2FwaS9jb21tb24vdHlwZXV0aWxzL1R5cGVTZXJpYWxpemVyO3hyADRvcmcu\n"
+
+
"YXBhY2hlLmZsaW5rLmFwaS5jb21tb24udHlwZXV0aWxzLlR5cGVTZXJpYWxpemVyAAAAAAAAAAECAAB4\n"
+
+
"cHNyADZvcmcuYXBhY2hlLmZsaW5rLmZvcm1hdHMuYXZyby50eXBldXRpbHMuQXZyb1NlcmlhbGl6ZXIA\n"
+
+
"AAAAAAAAAQIAAkwADHNjaGVtYVN0cmluZ3QAEkxqYXZhL2xhbmcvU3RyaW5nO0wABHR5cGV0ABFMamF2\n"
+
+
"YS9sYW5nL0NsYXNzO3hxAH4AAnQBAXsidHlwZSI6InJlY29yZCIsIm5hbWUiOiJBZGRyZXNzIiwibmFt\n"
+
+
"ZXNwYWNlIjoib3JnLmFwYWNoZS5mbGluay5mb3JtYXRzLmF2cm8uZ2VuZXJhdGVkIiwiZmllbGRzIjpb\n"
+
+
"eyJuYW1lIjoibnVtIiwidHlwZSI6ImludCJ9LHsibmFtZSI6InN0cmVldCIsInR5cGUiOiJzdHJpbmci\n"
+
+
"fSx7Im5hbWUiOiJjaXR5IiwidHlwZSI6InN0cmluZyJ9LHsibmFtZSI6InN0YXRlIiwidHlwZSI6InN0\n"
+
+
"cmluZyJ9LHsibmFtZSI6InppcCIsInR5cGUiOiJzdHJpbmcifV19dnIAJW9yZy5hcGFjaGUuYXZyby5n\n"
+
+ "ZW5lcmljLkdlbmVyaWNSZWNvcmQAAAAAAAAAAAAAAHhw";
+
+ StreamElementSerializer<?> ser = (StreamElementSerializer<?>)
javaDeserialize(streamElementSerializerBase64);
+ TypeSerializer<?> containedTypeSerializer =
ser.getContainedTypeSerializer();
+
+ assertThat(containedTypeSerializer,
instanceOf(AvroSerializer.class));
+
+ AvroSerializer<?> avroSerializer = (AvroSerializer<?>)
containedTypeSerializer;
+ assertSame(avroSerializer.getType(), GenericRecord.class);
+ assertThat(avroSerializer.getAvroSchema(), is(Address.SCHEMA$));
+ }
+
+ @Test
+ public void makeSureThatFieldsWereNotChanged() {
Review comment:
Would it be even safer to also check that we don't attempt to uptick the
serial version uid here?
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services