beefcake 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,44 @@
1
+ require 'beefcake/buffer'
2
+
3
+ class BufferTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @buf = Beefcake::Buffer.new
7
+ end
8
+
9
+ def test_simple
10
+ assert_equal "", @buf.to_s
11
+
12
+ @buf << "asdf"
13
+ assert_equal "asdf", @buf.to_s
14
+ assert_equal "asdf", @buf.to_str
15
+
16
+ @buf.buf = ""
17
+ assert_equal "", @buf.to_s
18
+ end
19
+
20
+ def test_wire_for
21
+ assert_equal 0, Beefcake::Buffer.wire_for(:int32)
22
+ assert_equal 0, Beefcake::Buffer.wire_for(:uint32)
23
+ assert_equal 0, Beefcake::Buffer.wire_for(:sint32)
24
+ assert_equal 0, Beefcake::Buffer.wire_for(:int64)
25
+ assert_equal 0, Beefcake::Buffer.wire_for(:uint64)
26
+ assert_equal 0, Beefcake::Buffer.wire_for(:sint64)
27
+
28
+ assert_equal 1, Beefcake::Buffer.wire_for(:fixed64)
29
+ assert_equal 1, Beefcake::Buffer.wire_for(:sfixed64)
30
+ assert_equal 1, Beefcake::Buffer.wire_for(:double)
31
+
32
+ assert_equal 2, Beefcake::Buffer.wire_for(:string)
33
+ assert_equal 2, Beefcake::Buffer.wire_for(:bytes)
34
+
35
+ assert_equal 5, Beefcake::Buffer.wire_for(:fixed32)
36
+ assert_equal 5, Beefcake::Buffer.wire_for(:sfixed32)
37
+ assert_equal 5, Beefcake::Buffer.wire_for(:float)
38
+
39
+ assert_raises Beefcake::Buffer::UnknownType do
40
+ Beefcake::Buffer.wire_for(:asdf)
41
+ end
42
+ end
43
+
44
+ end
@@ -0,0 +1,280 @@
1
+ require 'beefcake'
2
+
3
+ class NumericsMessage
4
+ include Beefcake::Message
5
+
6
+ required :int32, :int32, 1
7
+ required :uint32, :uint32, 2
8
+ required :sint32, :sint32, 3
9
+ required :fixed32, :fixed32, 4
10
+ required :sfixed32, :sfixed32, 5
11
+
12
+ required :int64, :int64, 6
13
+ required :uint64, :uint64, 7
14
+ required :sint64, :sint64, 8
15
+ required :fixed64, :fixed64, 9
16
+ required :sfixed64, :sfixed64, 10
17
+ end
18
+
19
+
20
+ class LendelsMessage
21
+ include Beefcake::Message
22
+
23
+ required :string, :string, 1
24
+ required :bytes, :bytes, 2
25
+ end
26
+
27
+
28
+ class SimpleMessage
29
+ include Beefcake::Message
30
+
31
+ optional :a, :int32, 1
32
+ end
33
+
34
+
35
+ class CompositeMessage
36
+ include Beefcake::Message
37
+
38
+ required :encodable, SimpleMessage, 1
39
+ end
40
+
41
+
42
+ class EnumsMessage
43
+ include Beefcake::Message
44
+
45
+ module X
46
+ A = 1
47
+ end
48
+
49
+ required :a, X, 1
50
+ end
51
+
52
+
53
+ class EnumsDefaultMessage
54
+ include Beefcake::Message
55
+
56
+ module X
57
+ A = 1
58
+ B = 2
59
+ end
60
+
61
+ optional :a, X, 1, :default => X::B
62
+ end
63
+
64
+
65
+ class RepeatedMessage
66
+ include Beefcake::Message
67
+
68
+ repeated :a, :int32, 1
69
+ end
70
+
71
+
72
+ class PackedRepeatedMessage
73
+ include Beefcake::Message
74
+
75
+ repeated :a, :int32, 1, :packed => true
76
+ end
77
+
78
+
79
+ class MessageTest < Test::Unit::TestCase
80
+ B = Beefcake::Buffer
81
+
82
+ ## Encoding
83
+ def test_encode_numerics
84
+ buf = Beefcake::Buffer.new
85
+
86
+ buf.append(:int32, B::MaxInt32, 1)
87
+ buf.append(:uint32, B::MaxUint32, 2)
88
+ buf.append(:sint32, B::MinInt32, 3)
89
+ buf.append(:fixed32, B::MaxInt32, 4)
90
+ buf.append(:sfixed32, B::MinInt32, 5)
91
+ buf.append(:int64, B::MaxInt64, 6)
92
+ buf.append(:uint64, B::MaxUint64, 7)
93
+ buf.append(:sint64, B::MinInt64, 8)
94
+ buf.append(:fixed64, B::MaxInt64, 9)
95
+ buf.append(:sfixed64, B::MinInt64, 10)
96
+
97
+ msg = NumericsMessage.new({
98
+ :int32 => B::MaxInt32,
99
+ :uint32 => B::MaxUint32,
100
+ :sint32 => B::MinInt32,
101
+ :fixed32 => B::MaxInt32,
102
+ :sfixed32 => B::MinInt32,
103
+
104
+ :int64 => B::MaxInt64,
105
+ :uint64 => B::MaxUint64,
106
+ :sint64 => B::MinInt64,
107
+ :fixed64 => B::MaxInt64,
108
+ :sfixed64 => B::MinInt64
109
+ })
110
+
111
+ assert_equal buf.to_s, msg.encode.to_s
112
+ end
113
+
114
+ def test_encode_strings
115
+ buf = Beefcake::Buffer.new
116
+
117
+ buf.append(:string, "testing", 1)
118
+ buf.append(:bytes, "unixisawesome", 2)
119
+
120
+ msg = LendelsMessage.new({
121
+ :string => "testing",
122
+ :bytes => "unixisawesome"
123
+ })
124
+
125
+ assert_equal buf.to_s, msg.encode.to_s
126
+ end
127
+
128
+ def test_encode_string_composite
129
+ buf1 = Beefcake::Buffer.new
130
+ buf1.append(:int32, 123, 1)
131
+
132
+ buf2 = Beefcake::Buffer.new
133
+ buf2.append(:string, buf1, 1)
134
+
135
+ msg = CompositeMessage.new(
136
+ :encodable => SimpleMessage.new(:a => 123)
137
+ )
138
+
139
+ assert_equal buf2.to_s, msg.encode.to_s
140
+ end
141
+
142
+ def test_encode_to_string
143
+ msg = SimpleMessage.new :a => 123
144
+ str = ""
145
+ msg.encode(str)
146
+ assert_equal "\b{", str
147
+ end
148
+
149
+ def test_encode_enum
150
+ buf = Beefcake::Buffer.new
151
+ buf.append(:int32, 2, 1)
152
+
153
+ msg = EnumsMessage.new :a => EnumsMessage::X::A
154
+ assert_equal "\b\001", msg.encode.to_s
155
+ end
156
+
157
+ def test_encode_invalid_enum_value
158
+ assert_raises Beefcake::Message::InvalidValueError do
159
+ EnumsMessage.new(:a => 99).encode
160
+ end
161
+ end
162
+
163
+ def test_encode_unset_required_field
164
+ assert_raises Beefcake::Message::RequiredFieldNotSetError do
165
+ NumericsMessage.new.encode
166
+ end
167
+ end
168
+
169
+ def test_encode_repeated_field
170
+ buf = Beefcake::Buffer.new
171
+
172
+ buf.append(:int32, 1, 1)
173
+ buf.append(:int32, 2, 1)
174
+ buf.append(:int32, 3, 1)
175
+ buf.append(:int32, 4, 1)
176
+ buf.append(:int32, 5, 1)
177
+
178
+ msg = RepeatedMessage.new :a => [1, 2, 3, 4, 5]
179
+
180
+ assert_equal buf.to_s, msg.encode.to_s
181
+ end
182
+
183
+ def test_encode_packed_repeated_field
184
+ buf = Beefcake::Buffer.new
185
+
186
+ # Varint
187
+ buf.append_info(1, 0)
188
+
189
+ # Give size in bytes
190
+ buf.append_uint64 5
191
+
192
+ # Values
193
+ buf.append_int32 1
194
+ buf.append_int32 2
195
+ buf.append_int32 3
196
+ buf.append_int32 4
197
+ buf.append_int32 5
198
+
199
+ msg = PackedRepeatedMessage.new :a => [1, 2, 3, 4, 5]
200
+
201
+ assert_equal buf.to_s, msg.encode.to_s
202
+ end
203
+
204
+ ## Decoding
205
+ def test_decode_numerics
206
+ msg = NumericsMessage.new({
207
+ :int32 => B::MaxInt32,
208
+ :uint32 => B::MaxUint32,
209
+ :sint32 => B::MinInt32,
210
+ :fixed32 => B::MaxInt32,
211
+ :sfixed32 => B::MinInt32,
212
+
213
+ :int64 => B::MaxInt64,
214
+ :uint64 => B::MaxUint64,
215
+ :sint64 => B::MinInt64,
216
+ :fixed64 => B::MaxInt64,
217
+ :sfixed64 => B::MinInt64
218
+ })
219
+
220
+ got = NumericsMessage.decode(msg.encode)
221
+
222
+ msg.fields.values.each do |fld|
223
+ assert_equal msg[fld.name], got[fld.name], fld.name
224
+ end
225
+ end
226
+
227
+ def test_wire_does_not_match_decoded_info
228
+ buf = Beefcake::Buffer.new
229
+ buf.append(:string, "testing", 1)
230
+
231
+ assert_raises Beefcake::Message::WrongTypeError do
232
+ SimpleMessage.decode(buf)
233
+ end
234
+ end
235
+
236
+ def test_decode_unknown_field_number
237
+ buf = Beefcake::Buffer.new
238
+ buf.append(:string, "testing", 2)
239
+
240
+ msg = SimpleMessage.decode(buf)
241
+
242
+ assert_equal nil, msg.a
243
+ end
244
+
245
+ def test_decode_repeated_field
246
+ msg = RepeatedMessage.new :a => [1, 2, 3, 4, 5]
247
+ got = RepeatedMessage.decode(msg.encode)
248
+
249
+ assert_equal msg.a, got.a
250
+ end
251
+
252
+ def test_decode_packed_repeated_field
253
+ msg = PackedRepeatedMessage.new :a => [1, 2, 3, 4, 5]
254
+ got = PackedRepeatedMessage.decode(msg.encode)
255
+
256
+ assert_equal msg.a, got.a
257
+ end
258
+
259
+ def test_decode_merge
260
+ a = SimpleMessage.new :a => 1
261
+ b = SimpleMessage.new :a => 2
262
+
263
+ x = SimpleMessage.decode(a.encode)
264
+ SimpleMessage.decode(b.encode, x)
265
+
266
+ assert_equal b.a, x.a
267
+ end
268
+
269
+ def test_decode_default
270
+ got = EnumsDefaultMessage.decode("")
271
+ assert_equal EnumsDefaultMessage.fields[1].opts[:default], got.a
272
+ end
273
+
274
+ def test_decode_unset_required_fields
275
+ assert_raises Beefcake::Message::RequiredFieldNotSetError do
276
+ NumericsMessage.decode("")
277
+ end
278
+ end
279
+
280
+ end
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: beefcake
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Blake Mizerany
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-01-21 00:00:00 -08:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: crack
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 1
30
+ - 4
31
+ version: 0.1.4
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: ruby-hmac
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 3
44
+ - 2
45
+ version: 0.3.2
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: contest
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ - 1
58
+ - 2
59
+ version: 0.1.2
60
+ type: :development
61
+ version_requirements: *id003
62
+ description: A sane protobuf library for Ruby
63
+ email:
64
+ executables: []
65
+
66
+ extensions: []
67
+
68
+ extra_rdoc_files:
69
+ - README.md
70
+ - LICENSE
71
+ files:
72
+ - LICENSE
73
+ - README.md
74
+ - lib/beefcake/buffer/base.rb
75
+ - lib/beefcake/buffer/decode.rb
76
+ - lib/beefcake/buffer/encode.rb
77
+ - lib/beefcake/buffer.rb
78
+ - lib/beefcake.rb
79
+ - test/buffer_decode_test.rb
80
+ - test/buffer_encode_test.rb
81
+ - test/buffer_test.rb
82
+ - test/message_test.rb
83
+ has_rdoc: true
84
+ homepage: http://github.com/bmizerany/beefcake
85
+ licenses: []
86
+
87
+ post_install_message:
88
+ rdoc_options:
89
+ - --line-numbers
90
+ - --inline-source
91
+ - --title
92
+ - Sinatra
93
+ - --main
94
+ - README.rdoc
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ segments:
102
+ - 0
103
+ version: "0"
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ segments:
109
+ - 0
110
+ version: "0"
111
+ requirements: []
112
+
113
+ rubyforge_project: beefcake
114
+ rubygems_version: 1.3.6
115
+ signing_key:
116
+ specification_version: 2
117
+ summary: A sane protobuf library for Ruby
118
+ test_files:
119
+ - test/buffer_decode_test.rb
120
+ - test/buffer_encode_test.rb
121
+ - test/buffer_test.rb
122
+ - test/message_test.rb