avro 1.9.1 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +9 -13
- data/avro.gemspec +8 -8
- data/interop/test_interop.rb +12 -2
- data/lib/avro.rb +13 -1
- data/lib/avro/data_file.rb +23 -0
- data/lib/avro/io.rb +23 -21
- data/lib/avro/ipc.rb +2 -2
- data/lib/avro/schema.rb +170 -27
- data/lib/avro/schema_compatibility.rb +16 -11
- data/test/case_finder.rb +8 -3
- data/test/random_data.rb +3 -2
- data/test/sample_ipc_client.rb +0 -0
- data/test/sample_ipc_http_client.rb +0 -0
- data/test/sample_ipc_http_server.rb +0 -0
- data/test/sample_ipc_server.rb +0 -0
- data/test/test_datafile.rb +13 -0
- data/test/test_fingerprints.rb +19 -0
- data/test/test_io.rb +82 -1
- data/test/test_schema.rb +268 -0
- data/test/test_schema_compatibility.rb +68 -0
- data/test/test_schema_normalization.rb +1 -0
- data/test/test_schema_validator.rb +2 -2
- data/test/tool.rb +3 -3
- metadata +13 -13
@@ -39,7 +39,12 @@ class TestSchemaCompatibility < Test::Unit::TestCase
|
|
39
39
|
long_map_schema, int_map_schema,
|
40
40
|
|
41
41
|
enum1_ab_schema, enum1_ab_schema,
|
42
|
+
enum1_ab_aliased_schema, enum1_ab_schema,
|
42
43
|
enum1_abc_schema, enum1_ab_schema,
|
44
|
+
enum1_ab_default_schema, enum1_abc_schema,
|
45
|
+
|
46
|
+
fixed1_schema, fixed1_schema,
|
47
|
+
fixed1_aliased_schema, fixed1_schema,
|
43
48
|
|
44
49
|
string_schema, bytes_schema,
|
45
50
|
bytes_schema, string_schema,
|
@@ -55,6 +60,7 @@ class TestSchemaCompatibility < Test::Unit::TestCase
|
|
55
60
|
|
56
61
|
empty_record1_schema, empty_record1_schema,
|
57
62
|
empty_record1_schema, a_int_record1_schema,
|
63
|
+
empty_record1_aliased_schema, empty_record1_schema,
|
58
64
|
|
59
65
|
a_int_record1_schema, a_int_record1_schema,
|
60
66
|
a_dint_record1_schema, a_int_record1_schema,
|
@@ -117,16 +123,22 @@ class TestSchemaCompatibility < Test::Unit::TestCase
|
|
117
123
|
int_map_schema, long_map_schema,
|
118
124
|
|
119
125
|
enum1_ab_schema, enum1_abc_schema,
|
126
|
+
enum1_ab_schema, enum1_ab_aliased_schema,
|
120
127
|
enum1_bc_schema, enum1_abc_schema,
|
121
128
|
|
122
129
|
enum1_ab_schema, enum2_ab_schema,
|
123
130
|
int_schema, enum2_ab_schema,
|
124
131
|
enum2_ab_schema, int_schema,
|
125
132
|
|
133
|
+
fixed1_schema, fixed2_schema,
|
134
|
+
fixed1_schema, fixed1_size3_schema,
|
135
|
+
fixed1_schema, fixed1_aliased_schema,
|
136
|
+
|
126
137
|
int_union_schema, int_string_union_schema,
|
127
138
|
string_union_schema, int_string_union_schema,
|
128
139
|
|
129
140
|
empty_record2_schema, empty_record1_schema,
|
141
|
+
empty_record1_schema, empty_record1_aliased_schema,
|
130
142
|
a_int_record1_schema, empty_record1_schema,
|
131
143
|
a_int_b_dint_record1_schema, empty_record1_schema,
|
132
144
|
|
@@ -169,6 +181,17 @@ class TestSchemaCompatibility < Test::Unit::TestCase
|
|
169
181
|
assert_false(can_read?(reader_schema, writer_schema))
|
170
182
|
end
|
171
183
|
|
184
|
+
def test_aliased_field
|
185
|
+
reader_schema = Avro::Schema.parse(<<-SCHEMA)
|
186
|
+
{"type":"record", "name":"Record", "fields":[
|
187
|
+
{"name":"newname1", "aliases":["oldfield1"], "type":"int"},
|
188
|
+
{"name":"oldfield2", "type":"string"}
|
189
|
+
]}
|
190
|
+
SCHEMA
|
191
|
+
assert_true(can_read?(writer_schema, reader_schema))
|
192
|
+
assert_false(can_read?(reader_schema, writer_schema))
|
193
|
+
end
|
194
|
+
|
172
195
|
def test_all_fields
|
173
196
|
reader_schema = Avro::Schema.parse <<-SCHEMA
|
174
197
|
{"type":"record", "name":"Record", "fields":[
|
@@ -250,6 +273,23 @@ class TestSchemaCompatibility < Test::Unit::TestCase
|
|
250
273
|
assert_true(can_read?(enum_schema1, enum_schema2))
|
251
274
|
end
|
252
275
|
|
276
|
+
def test_crossed_aliases
|
277
|
+
writer_schema = Avro::Schema.parse(<<-SCHEMA)
|
278
|
+
{"type":"record", "name":"Record", "fields":[
|
279
|
+
{"name":"field1", "type": "int"},
|
280
|
+
{"name":"field2", "type": "string"}
|
281
|
+
]}
|
282
|
+
SCHEMA
|
283
|
+
reader_schema = Avro::Schema.parse(<<-SCHEMA)
|
284
|
+
{"type":"record", "name":"Record", "fields":[
|
285
|
+
{"name":"field1", "aliases":["field2"], "type":"string"},
|
286
|
+
{"name":"field2", "aliases":["field1"], "type":"int"}
|
287
|
+
]}
|
288
|
+
SCHEMA
|
289
|
+
# Not supported; alias is not used if there is a redirect match
|
290
|
+
assert_false(can_read?(writer_schema, reader_schema))
|
291
|
+
end
|
292
|
+
|
253
293
|
# Tests from lang/java/avro/src/test/java/org/apache/avro/io/parsing/TestResolvingGrammarGenerator2.java
|
254
294
|
|
255
295
|
def point_2d_schema
|
@@ -373,6 +413,14 @@ class TestSchemaCompatibility < Test::Unit::TestCase
|
|
373
413
|
Avro::Schema.parse('{"type":"enum", "name":"Enum1", "symbols":["A","B"]}')
|
374
414
|
end
|
375
415
|
|
416
|
+
def enum1_ab_default_schema
|
417
|
+
Avro::Schema.parse('{"type":"enum", "name":"Enum1", "symbols":["A","B"], "default":"A"}')
|
418
|
+
end
|
419
|
+
|
420
|
+
def enum1_ab_aliased_schema
|
421
|
+
Avro::Schema.parse('{"type":"enum", "name":"Enum2", "aliases":["Enum1"], "symbols":["A","B"]}')
|
422
|
+
end
|
423
|
+
|
376
424
|
def enum1_abc_schema
|
377
425
|
Avro::Schema.parse('{"type":"enum", "name":"Enum1", "symbols":["A","B","C"]}')
|
378
426
|
end
|
@@ -385,10 +433,30 @@ class TestSchemaCompatibility < Test::Unit::TestCase
|
|
385
433
|
Avro::Schema.parse('{"type":"enum", "name":"Enum2", "symbols":["A","B"]}')
|
386
434
|
end
|
387
435
|
|
436
|
+
def fixed1_schema
|
437
|
+
Avro::Schema.parse('{"type":"fixed", "name":"Fixed1", "size": 2}')
|
438
|
+
end
|
439
|
+
|
440
|
+
def fixed1_aliased_schema
|
441
|
+
Avro::Schema.parse('{"type":"fixed", "name":"Fixed2", "aliases":["Fixed1"], "size": 2}')
|
442
|
+
end
|
443
|
+
|
444
|
+
def fixed2_schema
|
445
|
+
Avro::Schema.parse('{"type":"fixed", "name":"Fixed2", "size": 2}')
|
446
|
+
end
|
447
|
+
|
448
|
+
def fixed1_size3_schema
|
449
|
+
Avro::Schema.parse('{"type":"fixed", "name":"Fixed1", "size": 3}')
|
450
|
+
end
|
451
|
+
|
388
452
|
def empty_record1_schema
|
389
453
|
Avro::Schema.parse('{"type":"record", "name":"Record1"}')
|
390
454
|
end
|
391
455
|
|
456
|
+
def empty_record1_aliased_schema
|
457
|
+
Avro::Schema.parse('{"type":"record", "name":"Record2", "aliases":["Record1"]}')
|
458
|
+
end
|
459
|
+
|
392
460
|
def empty_record2_schema
|
393
461
|
Avro::Schema.parse('{"type":"record", "name":"Record2"}')
|
394
462
|
end
|
@@ -166,6 +166,7 @@ class TestSchemaNormalization < Test::Unit::TestCase
|
|
166
166
|
CaseFinder.cases.each do |test_case|
|
167
167
|
schema = Avro::Schema.parse(test_case.input)
|
168
168
|
assert_equal test_case.canonical, Avro::SchemaNormalization.to_parsing_form(schema)
|
169
|
+
assert_equal test_case.fingerprint, schema.crc_64_avro_fingerprint
|
169
170
|
end
|
170
171
|
end
|
171
172
|
end
|
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
require 'test_help'
|
18
18
|
|
19
|
-
class
|
19
|
+
class TestSchemaValidator < Test::Unit::TestCase
|
20
20
|
def validate!(schema, value, options=nil)
|
21
21
|
Avro::SchemaValidator.validate!(schema, value, options)
|
22
22
|
end
|
@@ -277,7 +277,7 @@ class TestSchema < Test::Unit::TestCase
|
|
277
277
|
|
278
278
|
def test_validate_union_of_nil_and_record_inside_array
|
279
279
|
schema = hash_to_schema(
|
280
|
-
name: '
|
280
|
+
name: 'this_does_not_matter',
|
281
281
|
type: 'record',
|
282
282
|
fields: [
|
283
283
|
{
|
data/test/tool.rb
CHANGED
@@ -27,7 +27,7 @@ class GenericResponder < Avro::IPC::Responder
|
|
27
27
|
@datum = datum
|
28
28
|
end
|
29
29
|
|
30
|
-
def call(message,
|
30
|
+
def call(message, _request)
|
31
31
|
if message.name == @msg
|
32
32
|
STDERR.puts "Message: #{message.name} Datum: #{@datum.inspect}"
|
33
33
|
@datum
|
@@ -101,7 +101,7 @@ def main
|
|
101
101
|
case ARGV[4]
|
102
102
|
when "-file"
|
103
103
|
Avro::DataFile.open(ARGV[5]) {|f|
|
104
|
-
f.each{|
|
104
|
+
f.each{|e| datum = e; break }
|
105
105
|
}
|
106
106
|
when "-data"
|
107
107
|
puts "JSON Decoder not yet implemented."
|
@@ -124,7 +124,7 @@ def main
|
|
124
124
|
if ARGV.size > 4
|
125
125
|
case ARGV[4]
|
126
126
|
when "-file"
|
127
|
-
Avro::DataFile.open(ARGV[5]){|f| f.each{|
|
127
|
+
Avro::DataFile.open(ARGV[5]){|f| f.each{|e| datum = e; break } }
|
128
128
|
when "-data"
|
129
129
|
puts "JSON Decoder not yet implemented"
|
130
130
|
return 1
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Apache Software Foundation
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '1'
|
27
27
|
description: Avro is a data serialization and RPC format
|
28
28
|
email: dev@avro.apache.org
|
29
29
|
executables: []
|
@@ -79,7 +79,7 @@ files:
|
|
79
79
|
- test/tool.rb
|
80
80
|
homepage: https://avro.apache.org/
|
81
81
|
licenses:
|
82
|
-
- Apache
|
82
|
+
- Apache-2.0
|
83
83
|
metadata: {}
|
84
84
|
post_install_message:
|
85
85
|
rdoc_options:
|
@@ -105,14 +105,14 @@ signing_key:
|
|
105
105
|
specification_version: 4
|
106
106
|
summary: Apache Avro for Ruby
|
107
107
|
test_files:
|
108
|
-
- test/test_schema_validator.rb
|
109
108
|
- test/test_help.rb
|
110
|
-
- test/test_schema_normalization.rb
|
111
|
-
- test/test_datafile.rb
|
112
|
-
- test/test_schema.rb
|
113
109
|
- test/test_io.rb
|
114
110
|
- test/test_socket_transport.rb
|
115
|
-
- test/test_schema_compatibility.rb
|
116
|
-
- test/test_logical_types.rb
|
117
111
|
- test/test_fingerprints.rb
|
112
|
+
- test/test_schema.rb
|
113
|
+
- test/test_schema_compatibility.rb
|
114
|
+
- test/test_schema_validator.rb
|
115
|
+
- test/test_schema_normalization.rb
|
118
116
|
- test/test_protocol.rb
|
117
|
+
- test/test_datafile.rb
|
118
|
+
- test/test_logical_types.rb
|