avro 1.7.4 → 1.7.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -27,52 +27,52 @@ class RandomData
27
27
  end
28
28
 
29
29
  def nextdata(schm, d=0)
30
- case schm.type
31
- when 'boolean'
30
+ case schm.type_sym
31
+ when :boolean
32
32
  rand > 0.5
33
- when 'string'
33
+ when :string
34
34
  randstr()
35
- when 'int'
35
+ when :int
36
36
  rand(Avro::Schema::INT_MAX_VALUE - Avro::Schema::INT_MIN_VALUE) + Avro::Schema::INT_MIN_VALUE
37
- when 'long'
37
+ when :long
38
38
  rand(Avro::Schema::LONG_MAX_VALUE - Avro::Schema::LONG_MIN_VALUE) + Avro::Schema::LONG_MIN_VALUE
39
- when 'float'
39
+ when :float
40
40
  (-1024 + 2048 * rand).round.to_f
41
- when 'double'
41
+ when :double
42
42
  Avro::Schema::LONG_MIN_VALUE + (Avro::Schema::LONG_MAX_VALUE - Avro::Schema::LONG_MIN_VALUE) * rand
43
- when 'bytes'
43
+ when :bytes
44
44
  randstr(BYTEPOOL)
45
- when 'null'
45
+ when :null
46
46
  nil
47
- when 'array'
47
+ when :array
48
48
  arr = []
49
49
  len = rand(5) + 2 - d
50
50
  len = 0 if len < 0
51
51
  len.times{ arr << nextdata(schm.items, d+1) }
52
52
  arr
53
- when 'map'
53
+ when :map
54
54
  map = {}
55
55
  len = rand(5) + 2 - d
56
56
  len = 0 if len < 0
57
57
  len.times do
58
- map[nextdata(Avro::Schema::PrimitiveSchema.new('string'))] = nextdata(schm.values, d+1)
58
+ map[nextdata(Avro::Schema::PrimitiveSchema.new(:string))] = nextdata(schm.values, d+1)
59
59
  end
60
60
  map
61
- when 'record', 'error'
61
+ when :record, :error
62
62
  m = {}
63
63
  schm.fields.each do |field|
64
64
  m[field.name] = nextdata(field.type, d+1)
65
65
  end
66
66
  m
67
- when 'union'
67
+ when :union
68
68
  types = schm.schemas
69
69
  nextdata(types[rand(types.size)], d)
70
- when 'enum'
70
+ when :enum
71
71
  symbols = schm.symbols
72
72
  len = symbols.size
73
73
  return nil if len == 0
74
74
  symbols[rand(len)]
75
- when 'fixed'
75
+ when :fixed
76
76
  f = ""
77
77
  schm.size.times { f << BYTEPOOL[rand(BYTEPOOL.size), 1] }
78
78
  f
@@ -154,4 +154,35 @@ JSON
154
154
  datafile.close
155
155
  end
156
156
 
157
+ def test_deflate
158
+ Avro::DataFile.open('data.avr', 'w', '"string"', :deflate) do |writer|
159
+ writer << 'a' * 10_000
160
+ end
161
+ assert(File.size('data.avr') < 500)
162
+
163
+ records = []
164
+ Avro::DataFile.open('data.avr') do |reader|
165
+ reader.each {|record| records << record }
166
+ end
167
+ assert_equal records, ['a' * 10_000]
168
+ end
169
+
170
+ def test_append_to_deflated_file
171
+ schema = Avro::Schema.parse('"string"')
172
+ writer = Avro::IO::DatumWriter.new(schema)
173
+ file = Avro::DataFile::Writer.new(File.open('data.avr', 'wb'), writer, schema, :deflate)
174
+ file << 'a' * 10_000
175
+ file.close
176
+
177
+ file = Avro::DataFile::Writer.new(File.open('data.avr', 'a+b'), writer)
178
+ file << 'b' * 10_000
179
+ file.close
180
+ assert(File.size('data.avr') < 1_000)
181
+
182
+ records = []
183
+ Avro::DataFile.open('data.avr') do |reader|
184
+ reader.each {|record| records << record }
185
+ end
186
+ assert_equal records, ['a' * 10_000, 'b' * 10_000]
187
+ end
157
188
  end
@@ -189,4 +189,11 @@ EOS
189
189
  assert_equal original, round_trip
190
190
  end
191
191
  end
192
+
193
+ def test_namespaces
194
+ protocol = Protocol.parse(EXAMPLES.first.protocol_string)
195
+ protocol.types.each do |type|
196
+ assert_equal type.namespace, 'com.acme'
197
+ end
198
+ end
192
199
  end
@@ -0,0 +1,134 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'test_help'
18
+
19
+ class TestSchema < Test::Unit::TestCase
20
+ def test_default_namespace
21
+ schema = Avro::Schema.parse <<-SCHEMA
22
+ {"type": "record", "name": "OuterRecord", "fields": [
23
+ {"name": "field1", "type": {
24
+ "type": "record", "name": "InnerRecord", "fields": []
25
+ }},
26
+ {"name": "field2", "type": "InnerRecord"}
27
+ ]}
28
+ SCHEMA
29
+
30
+ assert_equal schema.name, 'OuterRecord'
31
+ assert_equal schema.fullname, 'OuterRecord'
32
+ assert_nil schema.namespace
33
+
34
+ schema.fields.each do |field|
35
+ assert_equal field.type.name, 'InnerRecord'
36
+ assert_equal field.type.fullname, 'InnerRecord'
37
+ assert_nil field.type.namespace
38
+ end
39
+ end
40
+
41
+ def test_inherited_namespace
42
+ schema = Avro::Schema.parse <<-SCHEMA
43
+ {"type": "record", "name": "OuterRecord", "namespace": "my.name.space",
44
+ "fields": [
45
+ {"name": "definition", "type": {
46
+ "type": "record", "name": "InnerRecord", "fields": []
47
+ }},
48
+ {"name": "relativeReference", "type": "InnerRecord"},
49
+ {"name": "absoluteReference", "type": "my.name.space.InnerRecord"}
50
+ ]}
51
+ SCHEMA
52
+
53
+ assert_equal schema.name, 'OuterRecord'
54
+ assert_equal schema.fullname, 'my.name.space.OuterRecord'
55
+ assert_equal schema.namespace, 'my.name.space'
56
+ schema.fields.each do |field|
57
+ assert_equal field.type.name, 'InnerRecord'
58
+ assert_equal field.type.fullname, 'my.name.space.InnerRecord'
59
+ assert_equal field.type.namespace, 'my.name.space'
60
+ end
61
+ end
62
+
63
+ def test_inherited_namespace_from_dotted_name
64
+ schema = Avro::Schema.parse <<-SCHEMA
65
+ {"type": "record", "name": "my.name.space.OuterRecord", "fields": [
66
+ {"name": "definition", "type": {
67
+ "type": "enum", "name": "InnerEnum", "symbols": ["HELLO", "WORLD"]
68
+ }},
69
+ {"name": "relativeReference", "type": "InnerEnum"},
70
+ {"name": "absoluteReference", "type": "my.name.space.InnerEnum"}
71
+ ]}
72
+ SCHEMA
73
+
74
+ assert_equal schema.name, 'OuterRecord'
75
+ assert_equal schema.fullname, 'my.name.space.OuterRecord'
76
+ assert_equal schema.namespace, 'my.name.space'
77
+ schema.fields.each do |field|
78
+ assert_equal field.type.name, 'InnerEnum'
79
+ assert_equal field.type.fullname, 'my.name.space.InnerEnum'
80
+ assert_equal field.type.namespace, 'my.name.space'
81
+ end
82
+ end
83
+
84
+ def test_nested_namespaces
85
+ schema = Avro::Schema.parse <<-SCHEMA
86
+ {"type": "record", "name": "outer.OuterRecord", "fields": [
87
+ {"name": "middle", "type": {
88
+ "type": "record", "name": "middle.MiddleRecord", "fields": [
89
+ {"name": "inner", "type": {
90
+ "type": "record", "name": "InnerRecord", "fields": [
91
+ {"name": "recursive", "type": "MiddleRecord"}
92
+ ]
93
+ }}
94
+ ]
95
+ }}
96
+ ]}
97
+ SCHEMA
98
+
99
+ assert_equal schema.name, 'OuterRecord'
100
+ assert_equal schema.fullname, 'outer.OuterRecord'
101
+ assert_equal schema.namespace, 'outer'
102
+ middle = schema.fields.first.type
103
+ assert_equal middle.name, 'MiddleRecord'
104
+ assert_equal middle.fullname, 'middle.MiddleRecord'
105
+ assert_equal middle.namespace, 'middle'
106
+ inner = middle.fields.first.type
107
+ assert_equal inner.name, 'InnerRecord'
108
+ assert_equal inner.fullname, 'middle.InnerRecord'
109
+ assert_equal inner.namespace, 'middle'
110
+ assert_equal inner.fields.first.type, middle
111
+ end
112
+
113
+ def test_to_avro_includes_namespaces
114
+ schema = Avro::Schema.parse <<-SCHEMA
115
+ {"type": "record", "name": "my.name.space.OuterRecord", "fields": [
116
+ {"name": "definition", "type": {
117
+ "type": "fixed", "name": "InnerFixed", "size": 16
118
+ }},
119
+ {"name": "reference", "type": "InnerFixed"}
120
+ ]}
121
+ SCHEMA
122
+
123
+ assert_equal schema.to_avro, {
124
+ 'type' => 'record', 'name' => 'OuterRecord', 'namespace' => 'my.name.space',
125
+ 'fields' => [
126
+ {'name' => 'definition', 'type' => {
127
+ 'type' => 'fixed', 'name' => 'InnerFixed', 'namespace' => 'my.name.space',
128
+ 'size' => 16
129
+ }},
130
+ {'name' => 'reference', 'type' => 'my.name.space.InnerFixed'}
131
+ ]
132
+ }
133
+ end
134
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avro
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 1
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 7
9
- - 4
10
- version: 1.7.4
9
+ - 5
10
+ version: 1.7.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Apache Software Foundation
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-02-21 00:00:00 Z
18
+ date: 2013-08-19 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: yajl-ruby
@@ -70,6 +70,7 @@ files:
70
70
  - test/test_protocol.rb
71
71
  - test/test_socket_transport.rb
72
72
  - test/tool.rb
73
+ - test/test_schema.rb
73
74
  homepage: http://hadoop.apache.org/avro/
74
75
  licenses: []
75
76
 
@@ -112,4 +113,5 @@ test_files:
112
113
  - test/test_help.rb
113
114
  - test/test_protocol.rb
114
115
  - test/test_socket_transport.rb
116
+ - test/test_schema.rb
115
117
  - test/test_io.rb