kojiromike commented on a change in pull request #979:
URL: https://github.com/apache/avro/pull/979#discussion_r526946672
##########
File path: lang/py/avro/test/test_compatibility.py
##########
@@ -0,0 +1,665 @@
+import json
+
+from avro.compatibility import ReaderWriterCompatibilityChecker,
SchemaCompatibilityType, SchemaType
+from avro.schema import ArraySchema, MapSchema, Names, PrimitiveSchema,
Schema, UnionSchema, parse
+
+#
================================================================================================
+# These tests are more or less directly lifted from the java avro
codebase
+# There's one test per Java file, so expect the first one to be a
mammoth
+#
================================================================================================
+BOOLEAN_SCHEMA = PrimitiveSchema(SchemaType.BOOLEAN)
+NULL_SCHEMA = PrimitiveSchema(SchemaType.NULL)
+INT_SCHEMA = PrimitiveSchema(SchemaType.INT)
+LONG_SCHEMA = PrimitiveSchema(SchemaType.LONG)
+STRING_SCHEMA = PrimitiveSchema(SchemaType.STRING)
+BYTES_SCHEMA = PrimitiveSchema(SchemaType.BYTES)
+FLOAT_SCHEMA = PrimitiveSchema(SchemaType.FLOAT)
+DOUBLE_SCHEMA = PrimitiveSchema(SchemaType.DOUBLE)
+INT_ARRAY_SCHEMA = ArraySchema(SchemaType.INT, names=Names())
+LONG_ARRAY_SCHEMA = ArraySchema(SchemaType.LONG, names=Names())
+STRING_ARRAY_SCHEMA = ArraySchema(SchemaType.STRING, names=Names())
+INT_MAP_SCHEMA = MapSchema(SchemaType.INT, names=Names())
+LONG_MAP_SCHEMA = MapSchema(SchemaType.LONG, names=Names())
+STRING_MAP_SCHEMA = MapSchema(SchemaType.STRING, names=Names())
+ENUM1_AB_SCHEMA = parse(json.dumps({"type": SchemaType.ENUM, "name": "Enum1",
"symbols": ["A", "B"]}))
+ENUM1_ABC_SCHEMA = parse(json.dumps({"type": SchemaType.ENUM, "name": "Enum1",
"symbols": ["A", "B", "C"]}))
+ENUM1_BC_SCHEMA = parse(json.dumps({"type": SchemaType.ENUM, "name": "Enum1",
"symbols": ["B", "C"]}))
+ENUM2_AB_SCHEMA = parse(json.dumps({"type": SchemaType.ENUM, "name": "Enum2",
"symbols": ["A", "B"]}))
+ENUM_ABC_ENUM_DEFAULT_A_SCHEMA = parse(
+ json.dumps({
+ "type": "enum",
+ "name": "Enum",
+ "symbols": ["A", "B", "C"],
+ "default": "A"
+ })
+)
+ENUM_AB_ENUM_DEFAULT_A_SCHEMA = parse(json.dumps({"type": SchemaType.ENUM,
"name": "Enum", "symbols": ["A", "B"], "default": "A"}))
+ENUM_ABC_ENUM_DEFAULT_A_RECORD = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record",
+ "fields": [{
+ "name": "Field",
+ "type": {
+ "type": SchemaType.ENUM,
+ "name": "Enum",
+ "symbols": ["A", "B", "C"],
+ "default": "A"
+ }
+ }]
+ })
+)
+ENUM_AB_ENUM_DEFAULT_A_RECORD = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record",
+ "fields": [{
+ "name": "Field",
+ "type": {
+ "type": SchemaType.ENUM,
+ "name": "Enum",
+ "symbols": ["A", "B"],
+ "default": "A"
+ }
+ }]
+ })
+)
+ENUM_ABC_FIELD_DEFAULT_B_ENUM_DEFAULT_A_RECORD = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record",
+ "fields": [{
+ "name": "Field",
+ "type": {
+ "type": SchemaType.ENUM,
+ "name": "Enum",
+ "symbols": ["A", "B", "C"],
+ "default": "A"
+ },
+ "default": "B"
+ }]
+ })
+)
+ENUM_AB_FIELD_DEFAULT_A_ENUM_DEFAULT_B_RECORD = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record",
+ "fields": [{
+ "name": "Field",
+ "type": {
+ "type": SchemaType.ENUM,
+ "name": "Enum",
+ "symbols": ["A", "B"],
+ "default": "B"
+ },
+ "default": "A"
+ }]
+ })
+)
+EMPTY_UNION_SCHEMA = UnionSchema([], names=Names())
+NULL_UNION_SCHEMA = UnionSchema([SchemaType.NULL], names=Names())
+INT_UNION_SCHEMA = UnionSchema([SchemaType.INT], names=Names())
+LONG_UNION_SCHEMA = UnionSchema([SchemaType.LONG], names=Names())
+FLOAT_UNION_SCHEMA = UnionSchema([SchemaType.FLOAT], names=Names())
+DOUBLE_UNION_SCHEMA = UnionSchema([SchemaType.DOUBLE], names=Names())
+STRING_UNION_SCHEMA = UnionSchema([SchemaType.STRING], names=Names())
+BYTES_UNION_SCHEMA = UnionSchema([SchemaType.BYTES], names=Names())
+INT_STRING_UNION_SCHEMA = UnionSchema([SchemaType.INT, SchemaType.STRING],
names=Names())
+STRING_INT_UNION_SCHEMA = UnionSchema([SchemaType.STRING, SchemaType.INT],
names=Names())
+INT_FLOAT_UNION_SCHEMA = UnionSchema([SchemaType.INT, SchemaType.FLOAT],
names=Names())
+INT_LONG_UNION_SCHEMA = UnionSchema([SchemaType.INT, SchemaType.LONG],
names=Names())
+INT_LONG_FLOAT_DOUBLE_UNION_SCHEMA = UnionSchema([SchemaType.INT,
SchemaType.LONG, SchemaType.FLOAT, SchemaType.DOUBLE], names=Names())
+NULL_INT_ARRAY_UNION_SCHEMA = UnionSchema([{"type": SchemaType.NULL}, {"type":
SchemaType.ARRAY, "items": SchemaType.INT}], names=Names())
+NULL_INT_MAP_UNION_SCHEMA = UnionSchema([{"type": SchemaType.NULL}, {"type":
SchemaType.MAP, "values": SchemaType.INT}], names=Names())
+EMPTY_RECORD1 = parse(json.dumps({"type": SchemaType.RECORD, "name":
"Record1", "fields": []}))
+EMPTY_RECORD2 = parse(json.dumps({"type": SchemaType.RECORD, "name":
"Record2", "fields": []}))
+A_INT_RECORD1 = parse(json.dumps({"type": SchemaType.RECORD, "name":
"Record1", "fields": [{"name": "a", "type": SchemaType.INT}]}))
+A_LONG_RECORD1 = parse(json.dumps({"type": SchemaType.RECORD, "name":
"Record1", "fields": [{"name": "a", "type": SchemaType.LONG}]}))
+A_INT_B_INT_RECORD1 = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record1",
+ "fields": [{
+ "name": "a",
+ "type": SchemaType.INT
+ }, {
+ "name": "b",
+ "type": SchemaType.INT
+ }]
+ })
+)
+A_DINT_RECORD1 = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record1",
+ "fields": [{
+ "name": "a",
+ "type": SchemaType.INT,
+ "default": 0
+ }]
+ })
+)
+A_INT_B_DINT_RECORD1 = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record1",
+ "fields": [{
+ "name": "a",
+ "type": SchemaType.INT
+ }, {
+ "name": "b",
+ "type": SchemaType.INT,
+ "default": 0
+ }]
+ })
+)
+A_DINT_B_DINT_RECORD1 = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record1",
+ "fields": [{
+ "name": "a",
+ "type": SchemaType.INT,
+ "default": 0
+ }, {
+ "name": "b",
+ "type": SchemaType.INT,
+ "default": 0
+ }]
+ })
+)
+A_DINT_B_DFIXED_4_BYTES_RECORD1 = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record1",
+ "fields": [{
+ "name": "a",
+ "type": SchemaType.INT,
+ "default": 0
+ }, {
+ "name": "b",
+ "type": {
+ "type": SchemaType.FIXED,
+ "name": "Fixed",
+ "size": 4
+ }
+ }]
+ })
+)
+A_DINT_B_DFIXED_8_BYTES_RECORD1 = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record1",
+ "fields": [{
+ "name": "a",
+ "type": SchemaType.INT,
+ "default": 0
+ }, {
+ "name": "b",
+ "type": {
+ "type": SchemaType.FIXED,
+ "name": "Fixed",
+ "size": 8
+ }
+ }]
+ })
+)
+A_DINT_B_DINT_STRING_UNION_RECORD1 = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record1",
+ "fields": [{
+ "name": "a",
+ "type": SchemaType.INT,
+ "default": 0
+ }, {
+ "name": "b",
+ "type": [SchemaType.INT, SchemaType.STRING],
+ "default": 0
+ }]
+ })
+)
+A_DINT_B_DINT_UNION_RECORD1 = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record1",
+ "fields": [{
+ "name": "a",
+ "type": SchemaType.INT,
+ "default": 0
+ }, {
+ "name": "b",
+ "type": [SchemaType.INT],
+ "default": 0
+ }]
+ })
+)
+A_DINT_B_DENUM_1_RECORD1 = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record1",
+ "fields": [{
+ "name": "a",
+ "type": SchemaType.INT,
+ "default": 0
+ }, {
+ "name": "b",
+ "type": {
+ "type": SchemaType.ENUM,
+ "name": "Enum1",
+ "symbols": ["A", "B"]
+ }
+ }]
+ })
+)
+A_DINT_B_DENUM_2_RECORD1 = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record1",
+ "fields": [{
+ "name": "a",
+ "type": SchemaType.INT,
+ "default": 0
+ }, {
+ "name": "b",
+ "type": {
+ "type": SchemaType.ENUM,
+ "name": "Enum2",
+ "symbols": ["A", "B"]
+ }
+ }]
+ })
+)
+FIXED_4_BYTES = parse(json.dumps({"type": SchemaType.FIXED, "name": "Fixed",
"size": 4}))
+FIXED_8_BYTES = parse(json.dumps({"type": SchemaType.FIXED, "name": "Fixed",
"size": 8}))
+NS_RECORD1 = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record1",
+ "fields": [{
+ "name": "f1",
+ "type": [
+ SchemaType.NULL, {
+ "type": SchemaType.ARRAY,
+ "items": {
+ "type": SchemaType.RECORD,
+ "name": "InnerRecord1",
+ "namespace": "ns1",
+ "fields": [{
+ "name": "a",
+ "type": SchemaType.INT
+ }]
+ }
+ }
+ ]
+ }]
+ })
+)
+NS_RECORD2 = parse(
+ json.dumps({
+ "type": SchemaType.RECORD,
+ "name": "Record1",
+ "fields": [{
+ "name": "f1",
+ "type": [
+ SchemaType.NULL, {
+ "type": SchemaType.ARRAY,
+ "items": {
+ "type": SchemaType.RECORD,
+ "name": "InnerRecord1",
+ "namespace": "ns2",
+ "fields": [{
+ "name": "a",
+ "type": SchemaType.INT
+ }]
+ }
+ }
+ ]
+ }]
+ })
+)
+
+UNION_INT_RECORD1 = UnionSchema([{"type": SchemaType.INT}, {"type":
SchemaType.RECORD, "name": "Record1", "fields": [{"name": "field1", "type":
SchemaType.INT}]}])
+UNION_INT_RECORD2 = UnionSchema([{"type": SchemaType.INT}, {"type": "record",
"name": "Record2", "fields": [{"name": "field1", "type": SchemaType.INT}]}])
+UNION_INT_ENUM1_AB = UnionSchema([{"type": SchemaType.INT},
ENUM1_AB_SCHEMA.to_json()])
+UNION_INT_FIXED_4_BYTES = UnionSchema([{"type": SchemaType.INT},
FIXED_4_BYTES.to_json()])
+UNION_INT_BOOLEAN = UnionSchema([{"type": SchemaType.INT}, {"type":
SchemaType.BOOLEAN}])
+UNION_INT_ARRAY_INT = UnionSchema([{"type": SchemaType.INT},
INT_ARRAY_SCHEMA.to_json()])
+UNION_INT_MAP_INT = UnionSchema([{"type": SchemaType.INT},
INT_MAP_SCHEMA.to_json()])
+UNION_INT_NULL = UnionSchema([{"type": SchemaType.INT}, {"type":
SchemaType.NULL}])
+FIXED_4_ANOTHER_NAME = parse(json.dumps({"type": SchemaType.FIXED, "name":
"AnotherName", "size": 4}))
Review comment:
These are beautifully easy-to-read tests!
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]