rstyx 0.2.0 → 0.3.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.
data/tests/tc_message.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/ruby
2
2
  #
3
- # Copyright (C) 2005 Rafael Sevilla
3
+ # Copyright (C) 2005,2006 Rafael Sevilla
4
4
  # This file is part of RStyx
5
5
  #
6
6
  # RStyx is free software; you can redistribute it and/or modify
@@ -15,50 +15,18 @@
15
15
  #
16
16
  # You should have received a copy of the GNU Lesser General Public
17
17
  # License along with RStyx; if not, write to the Free Software
18
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19
- # 02111-1307 USA.
18
+ # Foundation, Inc., 51 Franklin St., Fifth Floor, Boston, MA
19
+ # 02110-1301 USA.
20
20
  #
21
21
  # Unit tests for Styx messages
22
22
  #
23
- # $Id: tc_message.rb,v 1.25 2005/11/01 11:44:06 dido Exp $
23
+ # $Id: tc_message.rb 177 2007-05-31 08:23:25Z dido $
24
24
  #
25
25
  require 'test/unit'
26
+ require 'rstyx/common'
26
27
  require 'rstyx/messages'
27
28
 
28
29
  class MessageTest < Test::Unit::TestCase
29
- ##
30
- # Test the utility functions provided
31
- #
32
- def test_utils
33
- # Basic test
34
- pstr = RStyx::Message::Util.strpack("foo")
35
- assert(pstr == "\003\000foo")
36
- # Add trailing garbage to the string
37
- pstr += "some trailing garbage"
38
- upstr = RStyx::Message::Util.strextract(pstr, 0)
39
- assert(upstr[0] == "foo")
40
- # Try packing several strings together
41
- packstr = RStyx::Message::Util.strpack("foo") +
42
- RStyx::Message::Util.strpack("bar") +
43
- RStyx::Message::Util.strpack("baz")
44
- str, offset = RStyx::Message::Util.strextract(packstr, 0)
45
- assert(str == "foo")
46
- str, offset = RStyx::Message::Util.strextract(packstr, offset)
47
- assert(str == "bar")
48
- str, offset = RStyx::Message::Util.strextract(packstr, offset)
49
- assert(str == "baz")
50
- # Try a long string
51
- longstr = "alpha bravo charlie delta echo foxtrot golf hotel india juliet kilo lima mama nancy oscar papa quebec romeo sierra tango uniform victor whiskey x-ray yankee zulu"
52
- pstr = RStyx::Message::Util.strpack(longstr)
53
- assert(RStyx::Message::Util.strextract(pstr, 0)[0] == longstr)
54
-
55
- # Test decoding of invalid strings
56
- invstr ="\003\000fo"
57
- assert_raise(RStyx::StyxException) { RStyx::Message::Util.strextract(invstr, 0) }
58
- invstr = "\003"
59
- assert_raise(RStyx::StyxException) { RStyx::Message::Util.strextract(invstr, 0) }
60
- end
61
-
62
30
  ##
63
31
  # Test the Qid class
64
32
  #
@@ -70,31 +38,40 @@ class MessageTest < Test::Unit::TestCase
70
38
  assert(bytes == "\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe")
71
39
 
72
40
  # Try to deserialize and check whether the output is as expected
73
- qqid = RStyx::Message::Qid.decode(bytes)
41
+ qqid = RStyx::Message::Qid.from_bytes(bytes)
74
42
  assert(qqid.qtype == 0x01)
75
43
  assert(qqid.version == 0xdeadbeef)
76
44
  assert(qqid.path == 0xfeedfacec0ffeeee)
77
45
 
78
46
  # Test decoding short values
79
- assert_raise(RStyx::StyxException) { RStyx::Message::Qid.decode("") }
80
- assert_raise(RStyx::StyxException) { RStyx::Message::Qid.decode(" ") }
47
+ assert_raise(RStyx::StyxException) { RStyx::Message::Qid.from_bytes("") }
48
+ assert_raise(RStyx::StyxException) { RStyx::Message::Qid.from_bytes(" ") }
81
49
 
82
50
  # Test decoding 13 bytes and with trailing garbage
83
- assert_nothing_raised { RStyx::Message::Qid.decode(" ") }
84
- assert_nothing_raised { qqid = RStyx::Message::Qid.decode("\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfesome trailing garbage") }
51
+ assert_nothing_raised { RStyx::Message::Qid.from_bytes(" ") }
52
+ assert_nothing_raised { qqid = RStyx::Message::Qid.from_bytes("\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfesome trailing garbage") }
85
53
 
86
54
  # test if the decoding still works even in the face of trailing garbage
87
- assert(qqid.qtype == 0x01)
88
- assert(qqid.version == 0xdeadbeef)
89
- assert(qqid.path == 0xfeedfacec0ffeeee)
55
+ assert_equal(0x01, qqid.qtype)
56
+ assert(0xdeadbeef, qqid.version)
57
+ assert(0xfeedfacec0ffeeee, qqid.path)
58
+
59
+ # test equality
60
+ qid = RStyx::Message::Qid.new(0x01,0xdeadbeef,0xfeedfacec0ffeeee)
61
+ qid2 = RStyx::Message::Qid.new(0x01,0xdeadbeef,0xfeedfacec0ffeeef)
62
+ assert_not_equal(qid, qid2)
63
+
64
+ qid2 = RStyx::Message::Qid.new(0x01,0xdeadbeef,0xfeedfacec0ffeeee)
65
+ assert_equal(qid, qid2)
66
+
90
67
  end
91
68
 
92
69
  ##
93
- # Test the DirEntry class
70
+ # Test the Stat class
94
71
  #
95
- def test_direntry
96
- # generate a dummy DirEntry for testing
97
- de = RStyx::Message::DirEntry.new
72
+ def test_stat
73
+ # generate a dummy Stat for testing
74
+ de = RStyx::Message::Stat.new
98
75
  de.dtype = 0x1234
99
76
  de.dev = 0x567890ab
100
77
  de.qid = RStyx::Message::Qid.new(0x01, 0xdeadbeef,0xfeedfacec0ffeeee)
@@ -111,7 +88,7 @@ class MessageTest < Test::Unit::TestCase
111
88
  assert(bytes == expect)
112
89
 
113
90
  # Generate a new direntry based on the above string
114
- de2 = RStyx::Message::DirEntry.decode(expect)
91
+ de2 = RStyx::Message::Stat.from_bytes(expect)
115
92
  assert(de2.dtype == 0x1234)
116
93
  assert(de2.dev == 0x567890ab)
117
94
  assert(de2.qid.qtype == 0x01)
@@ -127,14 +104,14 @@ class MessageTest < Test::Unit::TestCase
127
104
  assert(de2.muid == "quux")
128
105
 
129
106
  # Test decoding truncated strings
130
- assert_raise(RStyx::StyxException) { RStyx::Message::DirEntry.decode("") }
131
- assert_raise(RStyx::StyxException) { RStyx::Message::DirEntry.decode("\x3c\x00\x34\x12\xab\x90\x78\x56\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\xf0\xde\xbc\x9a\xef\xbe\xad\xde\xbe\xba\xfe\xca\x10\x32\x54\x76") }
132
- assert_raise(RStyx::StyxException) { RStyx::Message::DirEntry.decode("\x3c\x00\x34\x12\xab\x90\x78\x56\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\xf0\xde\xbc\x9a\xef\xbe\xad\xde\xbe\xba\xfe\xca\x10\x32\x54\x76\x98\xba\xdc\xfe\x03\x00foo\x03\x00bar\x03\x00baz\x04\x00qu") }
107
+ assert_raise(RStyx::StyxException) { RStyx::Message::Stat.from_bytes("") }
108
+ assert_raise(RStyx::StyxException) { RStyx::Message::Stat.from_bytes("\x3c\x00\x34\x12\xab\x90\x78\x56\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\xf0\xde\xbc\x9a\xef\xbe\xad\xde\xbe\xba\xfe\xca\x10\x32\x54\x76") }
109
+ assert_raise(RStyx::StyxException) { RStyx::Message::Stat.from_bytes("\x3c\x00\x34\x12\xab\x90\x78\x56\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\xf0\xde\xbc\x9a\xef\xbe\xad\xde\xbe\xba\xfe\xca\x10\x32\x54\x76\x98\xba\xdc\xfe\x03\x00foo\x03\x00bar\x03\x00baz\x04\x00qu") }
133
110
 
134
111
  # Test decoding strings with garbage at the end
135
112
  # Generate a new direntry based on the above string
136
113
  assert_nothing_raised do
137
- de2 = RStyx::Message::DirEntry.decode(expect + "trailing garbage")
114
+ de2 = RStyx::Message::Stat.from_bytes(expect + "trailing garbage")
138
115
  end
139
116
  assert(de2.dtype == 0x1234)
140
117
  assert(de2.dev == 0x567890ab)
@@ -156,28 +133,24 @@ class MessageTest < Test::Unit::TestCase
156
133
  # Test the Tversion class
157
134
  #
158
135
  def test_tversion
159
- tv = RStyx::Message::Tversion.new(0xdeadbeef, "9P2000")
160
- bytes = tv.to_bytes(0x1234)
136
+ tv = RStyx::Message::Tversion.new(:msize => 0xdeadbeef, :version => "9P2000", :tag => 0x1234)
137
+ bytes = tv.to_bytes
161
138
  expect = "\x13\x00\x00\x00\x64\x34\x12\xef\xbe\xad\xde\x06\x009P2000"
162
139
  assert(expect == bytes)
163
140
  # Try to decode the expect string
164
- tvm = RStyx::Message::StyxMessage.decode(expect)
141
+ tvm = RStyx::Message::StyxMessage.from_bytes(expect)
165
142
  assert(tvm.class == RStyx::Message::Tversion)
166
- assert(tvm.length == 0x13)
167
- assert(tvm.mtype == RStyx::Message::StyxMessage::TVERSION)
168
143
  assert(tvm.tag == 0x1234)
169
144
  assert(tvm.msize == 0xdeadbeef)
170
145
  assert(tvm.version == "9P2000")
171
146
 
172
147
  # Try to decode short strings
173
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode("\x13\x00\x00\x00\x64\x34\x12\xef\xbe\xad\xde\x06\x009P200") }
174
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode("\x13\x00\x00\x00\x64\x34\x12\xef\xbe\xad") }
148
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes("\x13\x00\x00\x00\x64\x34\x12\xef\xbe\xad\xde\x06\x009P200") }
149
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes("\x13\x00\x00\x00\x64\x34\x12\xef\xbe\xad") }
175
150
 
176
151
  # Try to decode the expect string with trailing garbage
177
- tvm = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
152
+ tvm = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
178
153
  assert(tvm.class == RStyx::Message::Tversion)
179
- assert(tvm.length == 0x13)
180
- assert(tvm.mtype == RStyx::Message::StyxMessage::TVERSION)
181
154
  assert(tvm.tag == 0x1234)
182
155
  assert(tvm.msize == 0xdeadbeef)
183
156
  assert(tvm.version == "9P2000")
@@ -188,30 +161,26 @@ class MessageTest < Test::Unit::TestCase
188
161
  # Test the Rversion class
189
162
  #
190
163
  def test_rversion
191
- rv = RStyx::Message::Rversion.new(0xdeadbeef, "9P2000")
192
- bytes = rv.to_bytes(0x1234)
164
+ rv = RStyx::Message::Rversion.new(:msize => 0xdeadbeef, :version => "9P2000", :tag => 0x1234)
165
+ bytes = rv.to_bytes
193
166
  expect = "\x13\x00\x00\x00\x65\x34\x12\xef\xbe\xad\xde\x06\x009P2000"
194
167
  assert(expect == bytes)
195
168
  # Try to decode the expect string
196
- rvm = RStyx::Message::StyxMessage.decode(expect)
169
+ rvm = RStyx::Message::StyxMessage.from_bytes(expect)
197
170
  assert(rvm.class == RStyx::Message::Rversion)
198
- assert(rvm.length == 0x13)
199
- assert(rvm.mtype == RStyx::Message::StyxMessage::RVERSION)
200
171
  assert(rvm.tag == 0x1234)
201
172
  assert(rvm.msize == 0xdeadbeef)
202
173
  assert(rvm.version == "9P2000")
203
174
 
204
175
  # Try to decode short strings
205
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode("\x13\x00\x00\x00\x65\x34\x12\xef\xbe\xad\xde\x06\x009P200") }
206
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode("\x13\x00\x00\x00\x65\x34\x12\xef\xbe") }
176
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes("\x13\x00\x00\x00\x65\x34\x12\xef\xbe\xad\xde\x06\x009P200") }
177
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes("\x13\x00\x00\x00\x65\x34\x12\xef\xbe") }
207
178
 
208
179
  # Try to decode with trailing garbage
209
180
  assert_nothing_raised do
210
- rvm = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
181
+ rvm = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
211
182
  end
212
183
  assert(rvm.class == RStyx::Message::Rversion)
213
- assert(rvm.length == 0x13)
214
- assert(rvm.mtype == RStyx::Message::StyxMessage::RVERSION)
215
184
  assert(rvm.tag == 0x1234)
216
185
  assert(rvm.msize == 0xdeadbeef)
217
186
  assert(rvm.version == "9P2000")
@@ -221,33 +190,30 @@ class MessageTest < Test::Unit::TestCase
221
190
  # Test the Tauth class.
222
191
  #
223
192
  def test_tauth
224
- ta = RStyx::Message::Tauth.new("foo", 0x9abcdef0, "bar")
225
- bytes = ta.to_bytes(0x1234)
193
+ ta = RStyx::Message::Tauth.new(:uname => "foo", :afid => 0x9abcdef0, :aname => "bar", :tag => 0x1234)
194
+ bytes = ta.to_bytes
226
195
  expect = "\x66\x34\x12\xf0\xde\xbc\x9a\x03\x00foo\x03\x00bar"
227
196
  len = expect.length + 4
228
197
  expect = [len].pack("V") + expect
229
198
  assert(bytes == expect)
230
- ta2 = RStyx::Message::StyxMessage.decode(expect)
199
+ ta2 = RStyx::Message::StyxMessage.from_bytes(expect)
231
200
  assert(ta2.class == RStyx::Message::Tauth)
232
- assert(ta2.length == len)
233
- assert(ta2.mtype == RStyx::Message::StyxMessage::TAUTH)
234
201
  assert(ta2.tag == 0x1234)
235
202
  assert(ta2.afid == 0x9abcdef0)
236
203
  assert(ta2.uname == "foo")
237
204
  assert(ta2.aname == "bar")
238
205
 
239
206
  # Try to decode short strings
240
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode("\x66\x34\x12\xf0\xde\xbc\x9a\x03\x00foo\x03\x00b") }
241
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode("\x66\x34\x12\xf0\xde\xbc") }
242
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode("\x66\x34") }
207
+ assert_raise(RStyx::StyxException) { RStyx::Message::Tauth.from_bytes("1234567890") }
208
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes("\x66\x34\x12\xf0\xde\xbc\x9a\x03\x00foo\x03\x00b") }
209
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes("\x66\x34\x12\xf0\xde\xbc") }
210
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes("\x66\x34") }
243
211
 
244
212
  # decode with trailing garbage
245
213
  assert_nothing_raised do
246
- ta2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
214
+ ta2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
247
215
  end
248
216
  assert(ta2.class == RStyx::Message::Tauth)
249
- assert(ta2.length == len)
250
- assert(ta2.mtype == RStyx::Message::StyxMessage::TAUTH)
251
217
  assert(ta2.tag == 0x1234)
252
218
  assert(ta2.afid == 0x9abcdef0)
253
219
  assert(ta2.uname == "foo")
@@ -258,30 +224,26 @@ class MessageTest < Test::Unit::TestCase
258
224
  # Test the Rauth class.
259
225
  #
260
226
  def test_rauth
261
- ra = RStyx::Message::Rauth.new(RStyx::Message::Qid.new(0x01, 0xdeadbeef, 0xfeedfacec0ffeeee))
262
- bytes = ra.to_bytes(0x1234)
227
+ ra = RStyx::Message::Rauth.new(:aqid => RStyx::Message::Qid.new(0x01, 0xdeadbeef, 0xfeedfacec0ffeeee), :tag => 0x1234)
228
+ bytes = ra.to_bytes
263
229
  expect = "\x67\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe"
264
230
  len = expect.length + 4
265
231
  expect = [len].pack("V") + expect
266
232
  assert(expect == bytes)
267
- ra2 = RStyx::Message::StyxMessage.decode(expect)
233
+ ra2 = RStyx::Message::StyxMessage.from_bytes(expect)
268
234
  assert(ra2.class == RStyx::Message::Rauth)
269
- assert(ra2.length == len)
270
- assert(ra2.mtype == RStyx::Message::StyxMessage::RAUTH)
271
235
  assert(ra2.tag == 0x1234)
272
236
  assert(ra2.aqid.qtype == 0x01)
273
237
  assert(ra2.aqid.version == 0xdeadbeef)
274
238
  assert(ra2.aqid.path == 0xfeedfacec0ffeeee)
275
239
  # Try to decode short strings
276
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode("\x67\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed") }
240
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes("\x67\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed") }
277
241
 
278
242
  # Decode with trailing garbage
279
243
  assert_nothing_raised do
280
- ra2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
244
+ ra2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
281
245
  end
282
246
  assert(ra2.class == RStyx::Message::Rauth)
283
- assert(ra2.length == len)
284
- assert(ra2.mtype == RStyx::Message::StyxMessage::RAUTH)
285
247
  assert(ra2.tag == 0x1234)
286
248
  assert(ra2.aqid.qtype == 0x01)
287
249
  assert(ra2.aqid.version == 0xdeadbeef)
@@ -292,45 +254,39 @@ class MessageTest < Test::Unit::TestCase
292
254
  # Test the Rerror class
293
255
  #
294
256
  def test_rerror
295
- rerr = RStyx::Message::Rerror.new("error")
296
- bytes = rerr.to_bytes(0x1234)
257
+ rerr = RStyx::Message::Rerror.new(:ename => "error", :tag => 0x1234)
258
+ bytes = rerr.to_bytes
297
259
  expect = "\x0e\x00\x00\x00\x6b\x34\x12\x05\x00error"
298
260
  assert(bytes == expect)
299
261
 
300
262
  # Try to decode the expect string
301
- emsg = RStyx::Message::StyxMessage.decode(expect)
263
+ emsg = RStyx::Message::StyxMessage.from_bytes(expect)
302
264
  assert(emsg.class == RStyx::Message::Rerror)
303
- assert(emsg.length == 0x0e)
304
- assert(emsg.mtype == RStyx::Message::StyxMessage::RERROR)
305
265
  assert(emsg.tag == 0x1234)
306
266
  assert(emsg.ename == "error")
307
- assert(emsg.messagebody == "\x05\x00error")
308
267
 
309
268
  # Try to decode short strings
310
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode("") }
311
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode("\x0e\x00\x00") }
312
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode("\x0e\x00\x00\x00\x6b\x34\x12\x05\x00erro") }
313
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode("\x0e\x00\x00\x00\x6b\x34\x12\x05\x00erro") }
314
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode("\x0e\x00\x00\x00\x6b\x34\x12") }
269
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes("") }
270
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes("\x0e\x00\x00") }
271
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes("\x0e\x00\x00\x00\x6b\x34\x12\x05\x00erro") }
272
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes("\x0e\x00\x00\x00\x6b\x34\x12\x05\x00erro") }
273
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes("\x0e\x00\x00\x00\x6b\x34\x12") }
315
274
 
316
275
  # Try to decode strings with trailing garbage
317
276
  assert_nothing_raised do
318
- emsg = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
277
+ emsg = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
319
278
  end
320
279
  assert(emsg.class == RStyx::Message::Rerror)
321
- assert(emsg.length == 0x0e)
322
- assert(emsg.mtype == RStyx::Message::StyxMessage::RERROR)
323
280
  assert(emsg.tag == 0x1234)
324
281
  assert(emsg.ename == "error")
325
- assert(emsg.messagebody == "\x05\x00error")
326
282
  end
327
283
 
328
284
  ##
329
285
  # Test the Tflush class.
330
286
  #
331
287
  def test_tflush
332
- tf = RStyx::Message::Tflush.new(0x5678)
333
- bytes = tf.to_bytes(0x1234)
288
+ tf = RStyx::Message::Tflush.new(:oldtag => 0x5678, :tag => 0x1234)
289
+ bytes = tf.to_bytes
334
290
  expect = "\x6c\x34\x12\x78\x56"
335
291
  len = expect.length + 4
336
292
  packlen = [len].pack("V")
@@ -338,25 +294,21 @@ class MessageTest < Test::Unit::TestCase
338
294
  assert(expect == bytes)
339
295
 
340
296
  # decode expect
341
- tf2 = RStyx::Message::StyxMessage.decode(expect)
297
+ tf2 = RStyx::Message::StyxMessage.from_bytes(expect)
342
298
  assert(tf2.class == RStyx::Message::Tflush)
343
- assert(tf2.length == len)
344
- assert(tf2.mtype == RStyx::Message::StyxMessage::TFLUSH)
345
299
  assert(tf2.tag == 0x1234)
346
300
  assert(tf2.oldtag == 0x5678)
347
301
 
348
302
  # try decoding short strings
349
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x6c\x34\x12\x78") }
350
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x6c\x34\x12") }
303
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x6c\x34\x12\x78") }
304
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x6c\x34\x12") }
351
305
 
352
306
  # decode with trailing garbage
353
307
  tf2 = nil
354
308
  assert_nothing_raised do
355
- tf2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
309
+ tf2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
356
310
  end
357
311
  assert(tf2.class == RStyx::Message::Tflush)
358
- assert(tf2.length == len)
359
- assert(tf2.mtype == RStyx::Message::StyxMessage::TFLUSH)
360
312
  assert(tf2.tag == 0x1234)
361
313
  assert(tf2.oldtag == 0x5678)
362
314
  end
@@ -365,8 +317,8 @@ class MessageTest < Test::Unit::TestCase
365
317
  # Test the Rflush class.
366
318
  #
367
319
  def test_rflush
368
- tf = RStyx::Message::Rflush.new
369
- bytes = tf.to_bytes(0x1234)
320
+ tf = RStyx::Message::Rflush.new(:tag => 0x1234)
321
+ bytes = tf.to_bytes
370
322
  expect = "\x6d\x34\x12"
371
323
  len = expect.length + 4
372
324
  packlen = [len].pack("V")
@@ -374,23 +326,19 @@ class MessageTest < Test::Unit::TestCase
374
326
  assert(expect == bytes)
375
327
 
376
328
  # decode expect
377
- rf2 = RStyx::Message::StyxMessage.decode(expect)
329
+ rf2 = RStyx::Message::StyxMessage.from_bytes(expect)
378
330
  assert(rf2.class == RStyx::Message::Rflush)
379
- assert(rf2.length == len)
380
- assert(rf2.mtype == RStyx::Message::StyxMessage::RFLUSH)
381
331
  assert(rf2.tag == 0x1234)
382
332
 
383
333
  # try decoding short strings
384
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x6d\x34") }
334
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x6d\x34") }
385
335
 
386
336
  # decode with trailing garbage
387
337
  rf2 = nil
388
338
  assert_nothing_raised do
389
- rf2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
339
+ rf2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
390
340
  end
391
341
  assert(rf2.class == RStyx::Message::Rflush)
392
- assert(rf2.length == len)
393
- assert(rf2.mtype == RStyx::Message::StyxMessage::RFLUSH)
394
342
  assert(rf2.tag == 0x1234)
395
343
 
396
344
  end
@@ -399,8 +347,8 @@ class MessageTest < Test::Unit::TestCase
399
347
  # Test the Tattach class.
400
348
  #
401
349
  def test_tattach
402
- ta = RStyx::Message::Tattach.new(0x12345678, "foo", 0x9abcdef0, "bar")
403
- bytes = ta.to_bytes(0x1234)
350
+ ta = RStyx::Message::Tattach.new(:fid=> 0x12345678, :uname => "foo", :afid => 0x9abcdef0, :aname => "bar", :tag => 0x1234)
351
+ bytes = ta.to_bytes
404
352
  expect = "\x68\x34\x12\x78\x56\x34\x12\xf0\xde\xbc\x9a\x03\x00foo\x03\x00bar"
405
353
  len = expect.length + 4
406
354
  packlen = [len].pack("V")
@@ -408,10 +356,8 @@ class MessageTest < Test::Unit::TestCase
408
356
  assert(expect == bytes)
409
357
 
410
358
  # Decode expect string
411
- ta2 = RStyx::Message::StyxMessage.decode(expect)
359
+ ta2 = RStyx::Message::StyxMessage.from_bytes(expect)
412
360
  assert(ta2.class == RStyx::Message::Tattach)
413
- assert(ta2.length == len)
414
- assert(ta2.mtype == RStyx::Message::StyxMessage::TATTACH)
415
361
  assert(ta2.tag == 0x1234)
416
362
  assert(ta2.fid == 0x12345678)
417
363
  assert(ta2.afid == 0x9abcdef0)
@@ -419,18 +365,16 @@ class MessageTest < Test::Unit::TestCase
419
365
  assert(ta2.aname == "bar")
420
366
 
421
367
  # Try to decode short strings
422
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x68\x34\x12\x78\x56\x34\x12\xf0\xde\xbc\x9a\x03\x00foo\x03\x00ba") }
423
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x68\x34\x12\x78\x56\x34\x12\xf0\xde\xbc\x9a\x03\x00fo") }
424
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x68\x34\x12\x78\x56\x34\x12\xf0\xde\xbc") }
425
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x68\x34\x12\x78\x56\x34\x12\xf0") }
368
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x68\x34\x12\x78\x56\x34\x12\xf0\xde\xbc\x9a\x03\x00foo\x03\x00ba") }
369
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x68\x34\x12\x78\x56\x34\x12\xf0\xde\xbc\x9a\x03\x00fo") }
370
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x68\x34\x12\x78\x56\x34\x12\xf0\xde\xbc") }
371
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x68\x34\x12\x78\x56\x34\x12\xf0") }
426
372
 
427
373
  # Decode expect string with trailing garbage
428
374
  assert_nothing_raised do
429
- ta2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
375
+ ta2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
430
376
  end
431
377
  assert(ta2.class == RStyx::Message::Tattach)
432
- assert(ta2.length == len)
433
- assert(ta2.mtype == RStyx::Message::StyxMessage::TATTACH)
434
378
  assert(ta2.tag == 0x1234)
435
379
  assert(ta2.fid == 0x12345678)
436
380
  assert(ta2.afid == 0x9abcdef0)
@@ -442,32 +386,29 @@ class MessageTest < Test::Unit::TestCase
442
386
  # Test the Rattach class.
443
387
  #
444
388
  def test_rattach
445
- ra = RStyx::Message::Rattach.new(RStyx::Message::Qid.new(0x01, 0xdeadbeef, 0xfeedfacec0ffeeee))
446
- bytes = ra.to_bytes(0x1234)
389
+ ra = RStyx::Message::Rattach.new(:qid => RStyx::Message::Qid.new(0x01, 0xdeadbeef, 0xfeedfacec0ffeeee), :tag => 0x1234)
390
+ bytes = ra.to_bytes
447
391
  expect = "\x69\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe"
448
392
  len = expect.length + 4
449
393
  packlen = [len].pack("V")
450
394
  expect = packlen + expect
451
395
  assert(expect == bytes)
452
- ra2 = RStyx::Message::StyxMessage.decode(expect)
396
+
397
+ ra2 = RStyx::Message::StyxMessage.from_bytes(expect)
453
398
  assert(ra2.class == RStyx::Message::Rattach)
454
- assert(ra2.length == len)
455
- assert(ra2.mtype == RStyx::Message::StyxMessage::RATTACH)
456
399
  assert(ra2.tag == 0x1234)
457
400
  assert(ra2.qid.qtype == 0x01)
458
401
  assert(ra2.qid.version == 0xdeadbeef)
459
402
  assert(ra2.qid.path == 0xfeedfacec0ffeeee)
460
403
 
461
404
  # Try to decode short strings
462
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x69\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed") }
405
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x69\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed") }
463
406
 
464
407
  # Decode with trailing garbage
465
408
  assert_nothing_raised do
466
- ra2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
409
+ ra2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
467
410
  end
468
411
  assert(ra2.class == RStyx::Message::Rattach)
469
- assert(ra2.length == len)
470
- assert(ra2.mtype == RStyx::Message::StyxMessage::RATTACH)
471
412
  assert(ra2.tag == 0x1234)
472
413
  assert(ra2.qid.qtype == 0x01)
473
414
  assert(ra2.qid.version == 0xdeadbeef)
@@ -478,48 +419,34 @@ class MessageTest < Test::Unit::TestCase
478
419
  # Test the Twalk class.
479
420
  #
480
421
  def test_twalk
481
- tw = RStyx::Message::Twalk.new(0x12345678, 0x9abcdef0,
482
- "foo/bar/baz/quux/blargle")
483
- bytes = tw.to_bytes(0x1234)
484
- expect = "\x6e\x34\x12\x78\x56\x34\x12\xf0\xde\xbc\x9a\x05\x00\03\x00foo\x03\x00bar\x03\x00baz\x04\x00quux\x07\x00blargle"
422
+ tw = RStyx::Message::Twalk.new(:fid => 0x12345678, :newfid => 0x9abcdef0,
423
+ :wnames => ["foo", "bar", "baz",
424
+ "quux", "blargle"],
425
+ :tag => 0x1234)
426
+ bytes = tw.to_bytes
427
+ expect = "\x6e\x34\x12\x78\x56\x34\x12\xf0\xde\xbc\x9a\x05\x00\x03\x00foo\x03\x00bar\x03\x00baz\x04\x00quux\x07\x00blargle"
485
428
  len = expect.length + 4
486
429
  packlen = [len].pack("V")
487
430
  expect = packlen + expect
488
431
  assert(expect == bytes)
489
- tw2 = RStyx::Message::StyxMessage.decode(expect)
432
+ tw2 = RStyx::Message::StyxMessage.from_bytes(expect)
490
433
  assert(tw2.class == RStyx::Message::Twalk)
491
- assert(tw2.length == len)
492
- assert(tw2.mtype == RStyx::Message::StyxMessage::TWALK)
493
434
  assert(tw2.tag == 0x1234)
494
435
  assert(tw2.fid == 0x12345678)
495
436
  assert(tw2.newfid == 0x9abcdef0)
496
437
  assert(tw2.path = "foo/bar/baz/quux/blargle")
497
438
 
498
- # Test a long path
499
- assert_raise(RStyx::StyxException) do
500
- RStyx::Message::Twalk.new(0x12345678, 0x9abcdef0,
501
- "1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17")
502
- end
503
-
504
- # Test a path not quite so long
505
- assert_nothing_raised(RStyx::StyxException) do
506
- RStyx::Message::Twalk.new(0x12345678, 0x9abcdef0,
507
- "1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16")
508
- end
509
-
510
439
  # Test short strings
511
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x6e\x34\x12\x78\x56\x34\x12\xf0\xde\xbc\x9a\x05\x00\03\x00foo\x03\x00bar\x03\x00baz\x04\x00quux") }
512
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x6e\x34\x12\x78\x56\x34\x12\xf0\xde\xbc\x9a") }
513
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x6e\x34\x12\x78\x56\x34\x12\xf0\xde") }
514
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x6e\x34\x12\x78\x56\x34\x12\xf0") }
440
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x6e\x34\x12\x78\x56\x34\x12\xf0\xde\xbc\x9a\x05\x00\03\x00foo\x03\x00bar\x03\x00baz\x04\x00quux") }
441
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x6e\x34\x12\x78\x56\x34\x12\xf0\xde\xbc\x9a") }
442
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x6e\x34\x12\x78\x56\x34\x12\xf0\xde") }
443
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x6e\x34\x12\x78\x56\x34\x12\xf0") }
515
444
 
516
445
  # trailing garbage test
517
446
  assert_nothing_raised do
518
- tw2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
447
+ tw2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
519
448
  end
520
449
  assert(tw2.class == RStyx::Message::Twalk)
521
- assert(tw2.length == len)
522
- assert(tw2.mtype == RStyx::Message::StyxMessage::TWALK)
523
450
  assert(tw2.tag == 0x1234)
524
451
  assert(tw2.fid == 0x12345678)
525
452
  assert(tw2.newfid == 0x9abcdef0)
@@ -535,17 +462,16 @@ class MessageTest < Test::Unit::TestCase
535
462
  RStyx::Message::Qid.new(0x02,0x12345678,0xfedcba9876543210),
536
463
  RStyx::Message::Qid.new(0x03,0x87654321,0x0123456789abcdef)
537
464
  ]
538
- rw = RStyx::Message::Rwalk.new(qidlist)
539
- bytes = rw.to_bytes(0x1234)
465
+ rw = RStyx::Message::Rwalk.new(:qids => qidlist, :tag => 0x1234)
466
+ bytes = rw.to_bytes
540
467
  expect = "\x6f\x34\x12\x03\x00\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\x02\x78\x56\x34\x12\x10\x32\x54\x76\x98\xba\xdc\xfe\x03\x21\x43\x65\x87\xef\xcd\xab\x89\x67\x45\x23\x01"
541
468
  len = expect.length + 4
542
469
  packlen = [len].pack("V")
543
470
  expect = packlen + expect
544
471
  assert(expect == bytes)
545
- rw2 = RStyx::Message::StyxMessage.decode(expect)
472
+
473
+ rw2 = RStyx::Message::StyxMessage.from_bytes(expect)
546
474
  assert(rw2.class == RStyx::Message::Rwalk)
547
- assert(rw2.length == len)
548
- assert(rw2.mtype == RStyx::Message::StyxMessage::RWALK)
549
475
  assert(rw2.tag == 0x1234)
550
476
  assert(rw2.qids.length == 3)
551
477
  qid = rw2.qids[0]
@@ -562,17 +488,15 @@ class MessageTest < Test::Unit::TestCase
562
488
  assert(qid.path == 0x0123456789abcdef)
563
489
 
564
490
  # Try decoding short strings
565
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x6f\x34\x12\x03\x00\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\x02\x78\x56\x34\x12\x10\x32\x54\x76\x98\xba\xdc\xfe\x03\x21\x43\x65\x87") }
566
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x6f\x34\x12\x03\x00") }
567
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x6f\x34\x12\x03") }
491
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x6f\x34\x12\x03\x00\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\x02\x78\x56\x34\x12\x10\x32\x54\x76\x98\xba\xdc\xfe\x03\x21\x43\x65\x87") }
492
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x6f\x34\x12\x03\x00") }
493
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x6f\x34\x12\x03") }
568
494
 
569
495
  # Trailing garbage
570
496
  assert_nothing_raised do
571
- rw2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
497
+ rw2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
572
498
  end
573
499
  assert(rw2.class == RStyx::Message::Rwalk)
574
- assert(rw2.length == len)
575
- assert(rw2.mtype == RStyx::Message::StyxMessage::RWALK)
576
500
  assert(rw2.tag == 0x1234)
577
501
  assert(rw2.qids.length == 3)
578
502
  qid = rw2.qids[0]
@@ -593,63 +517,31 @@ class MessageTest < Test::Unit::TestCase
593
517
  # Test the Topen class.
594
518
  #
595
519
  def test_topen
596
- # make sure OTRUNC can only be used with mode OWRITE or ORDWR
597
- assert_raise(RStyx::StyxException) do
598
- to = RStyx::Message::Topen.new(0x12345678,
599
- RStyx::Message::Topen::OREAD |
600
- RStyx::Message::Topen::OTRUNC)
601
- end
602
-
603
- assert_raise(RStyx::StyxException) do
604
- to = RStyx::Message::Topen.new(0x12345678,
605
- RStyx::Message::Topen::OEXEC |
606
- RStyx::Message::Topen::OTRUNC)
607
- end
608
-
609
- assert_raise(RStyx::StyxException) do
610
- to = RStyx::Message::Topen.new(0x12345678, 4)
611
- end
612
-
613
- assert_raise(RStyx::StyxException) do
614
- to = RStyx::Message::Topen.new(0x12345678, 0xff)
615
- end
616
-
617
- to = RStyx::Message::Topen.new(0x12345678,
618
- RStyx::Message::Topen::OWRITE |
619
- RStyx::Message::Topen::OTRUNC |
620
- RStyx::Message::Topen::ORCLOSE)
621
- bytes = to.to_bytes(0x1234)
520
+ to = RStyx::Message::Topen.new(:fid => 0x12345678,
521
+ :mode => RStyx::OWRITE | RStyx::OTRUNC | RStyx::ORCLOSE,
522
+ :tag => 0x1234)
523
+ bytes = to.to_bytes
622
524
  expect = "\x70\x34\x12\x78\x56\x34\x12\x51"
623
525
  len = expect.length + 4
624
526
  packlen = [len].pack("V")
625
527
  expect = packlen + expect
626
528
  assert(expect == bytes)
627
529
 
628
- to2 = RStyx::Message::StyxMessage.decode(expect)
530
+ to2 = RStyx::Message::StyxMessage.from_bytes(expect)
629
531
  assert(to2.class == RStyx::Message::Topen)
630
- assert(to2.length == len)
631
- assert(to2.mtype == RStyx::Message::StyxMessage::TOPEN)
632
532
  assert(to2.tag == 0x1234)
633
533
  assert(to2.mode == 0x51)
634
534
  assert(to2.fid == 0x12345678)
635
535
 
636
536
  # Try decoding short strings
637
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x70\x34\x12\x78\x56\x34\x12") }
638
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x70\x34\x12\x78\x56") }
639
-
640
- # Try decoding invalid values
641
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x70\x34\x12\x78\x56\x34\x12\x50") }
642
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x70\x34\x12\x78\x56\x34\x12\x53") }
643
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x70\x34\x12\x78\x56\x34\x12\xff") }
644
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x70\x34\x12\x78\x56\x34\x12\x04") }
537
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x70\x34\x12\x78\x56\x34\x12") }
538
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x70\x34\x12\x78\x56") }
645
539
 
646
540
  # Try decoding with trailing garbage
647
541
  assert_nothing_raised do
648
- to2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
542
+ to2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
649
543
  end
650
544
  assert(to2.class == RStyx::Message::Topen)
651
- assert(to2.length == len)
652
- assert(to2.mtype == RStyx::Message::StyxMessage::TOPEN)
653
545
  assert(to2.tag == 0x1234)
654
546
  assert(to2.mode == 0x51)
655
547
  assert(to2.fid == 0x12345678)
@@ -659,8 +551,8 @@ class MessageTest < Test::Unit::TestCase
659
551
  # Test the Ropen class.
660
552
  #
661
553
  def test_ropen
662
- ro = RStyx::Message::Ropen.new(RStyx::Message::Qid.new(0x01,0xdeadbeef,0xfeedfacec0ffeeee), 0xfedcba98)
663
- bytes = ro.to_bytes(0x1234)
554
+ ro = RStyx::Message::Ropen.new(:qid => RStyx::Message::Qid.new(0x01,0xdeadbeef,0xfeedfacec0ffeeee), :iounit => 0xfedcba98, :tag => 0x1234)
555
+ bytes = ro.to_bytes
664
556
  expect = "\x71\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\x98\xba\xdc\xfe"
665
557
  len = expect.length + 4
666
558
  packlen = [len].pack("V")
@@ -668,10 +560,8 @@ class MessageTest < Test::Unit::TestCase
668
560
  assert(expect == bytes)
669
561
 
670
562
  # Decode expect
671
- ro2 = RStyx::Message::StyxMessage.decode(expect)
563
+ ro2 = RStyx::Message::StyxMessage.from_bytes(expect)
672
564
  assert(ro2.class == RStyx::Message::Ropen)
673
- assert(ro2.length == len)
674
- assert(ro2.mtype == RStyx::Message::StyxMessage::ROPEN)
675
565
  assert(ro2.tag == 0x1234)
676
566
  assert(ro2.qid.qtype == 0x01)
677
567
  assert(ro2.qid.version == 0xdeadbeef)
@@ -679,16 +569,14 @@ class MessageTest < Test::Unit::TestCase
679
569
  assert(ro2.iounit == 0xfedcba98)
680
570
 
681
571
  # Try decoding short strings
682
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x71\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\x98\xba") }
683
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x71\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed") }
572
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x71\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\x98\xba") }
573
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x71\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed") }
684
574
 
685
575
  # Decode with trailing garbage
686
576
  assert_nothing_raised do
687
- ro2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
577
+ ro2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
688
578
  end
689
579
  assert(ro2.class == RStyx::Message::Ropen)
690
- assert(ro2.length == len)
691
- assert(ro2.mtype == RStyx::Message::StyxMessage::ROPEN)
692
580
  assert(ro2.tag == 0x1234)
693
581
  assert(ro2.qid.qtype == 0x01)
694
582
  assert(ro2.qid.version == 0xdeadbeef)
@@ -700,12 +588,12 @@ class MessageTest < Test::Unit::TestCase
700
588
  # Test the Tcreate class
701
589
  #
702
590
  def test_tcreate
703
- tc = RStyx::Message::Tcreate.new(0x12345678, "foo",
704
- RStyx::Message::Topen::OWRITE |
705
- RStyx::Message::Topen::OTRUNC |
706
- RStyx::Message::Topen::ORCLOSE,
707
- 0xfedcba98)
708
- bytes = tc.to_bytes(0x1234)
591
+ tc = RStyx::Message::Tcreate.new(:fid => 0x12345678, :name => "foo",
592
+ :mode => RStyx::OWRITE | RStyx::OTRUNC |
593
+ RStyx::ORCLOSE,
594
+ :perm => 0xfedcba98,
595
+ :tag => 0x1234)
596
+ bytes = tc.to_bytes
709
597
  expect = "\x72\x34\x12\x78\x56\x34\x12\x03\x00foo\x98\xba\xdc\xfe\x51"
710
598
  len = expect.length + 4
711
599
  packlen = [len].pack("V")
@@ -713,10 +601,8 @@ class MessageTest < Test::Unit::TestCase
713
601
  assert(expect == bytes)
714
602
 
715
603
  # Decode expect
716
- tc2 = RStyx::Message::StyxMessage.decode(expect)
604
+ tc2 = RStyx::Message::StyxMessage.from_bytes(expect)
717
605
  assert(tc2.class == RStyx::Message::Tcreate)
718
- assert(tc2.length == len)
719
- assert(tc2.mtype == RStyx::Message::StyxMessage::TCREATE)
720
606
  assert(tc2.tag == 0x1234)
721
607
  assert(tc2.fid == 0x12345678)
722
608
  assert(tc2.name == "foo")
@@ -724,18 +610,16 @@ class MessageTest < Test::Unit::TestCase
724
610
  assert(tc2.mode == 0x51)
725
611
 
726
612
  # Try decoding short strings
727
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x72\x34\x12\x78\x56\x34\x12\x03\x00foo\x98\xba\xdc\xfe") }
728
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x72\x34\x12\x78\x56\x34\x12\x03\x00foo\x98\xba") }
729
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x72\x34\x12\x78\x56\x34\x12\x03\x00f") }
730
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x72\x34\x12\x78\x56\x34") }
613
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x72\x34\x12\x78\x56\x34\x12\x03\x00foo\x98\xba\xdc\xfe") }
614
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x72\x34\x12\x78\x56\x34\x12\x03\x00foo\x98\xba") }
615
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x72\x34\x12\x78\x56\x34\x12\x03\x00f") }
616
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x72\x34\x12\x78\x56\x34") }
731
617
  # Decode with trailing garbage
732
618
  tc2 = nil
733
619
  assert_nothing_raised do
734
- tc2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
620
+ tc2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
735
621
  end
736
622
  assert(tc2.class == RStyx::Message::Tcreate)
737
- assert(tc2.length == len)
738
- assert(tc2.mtype == RStyx::Message::StyxMessage::TCREATE)
739
623
  assert(tc2.tag == 0x1234)
740
624
  assert(tc2.fid == 0x12345678)
741
625
  assert(tc2.name == "foo")
@@ -747,8 +631,8 @@ class MessageTest < Test::Unit::TestCase
747
631
  # Test the Rcreate class.
748
632
  #
749
633
  def test_rcreate
750
- rc = RStyx::Message::Rcreate.new(RStyx::Message::Qid.new(0x01,0xdeadbeef,0xfeedfacec0ffeeee), 0xfedcba98)
751
- bytes = rc.to_bytes(0x1234)
634
+ rc = RStyx::Message::Rcreate.new(:qid => RStyx::Message::Qid.new(0x01,0xdeadbeef,0xfeedfacec0ffeeee), :iounit => 0xfedcba98, :tag => 0x1234)
635
+ bytes = rc.to_bytes
752
636
  expect = "\x73\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\x98\xba\xdc\xfe"
753
637
  len = expect.length + 4
754
638
  packlen = [len].pack("V")
@@ -756,10 +640,8 @@ class MessageTest < Test::Unit::TestCase
756
640
  assert(expect == bytes)
757
641
 
758
642
  # Decode expect
759
- rc2 = RStyx::Message::StyxMessage.decode(expect)
643
+ rc2 = RStyx::Message::StyxMessage.from_bytes(expect)
760
644
  assert(rc2.class == RStyx::Message::Rcreate)
761
- assert(rc2.length == len)
762
- assert(rc2.mtype == RStyx::Message::StyxMessage::RCREATE)
763
645
  assert(rc2.tag == 0x1234)
764
646
  assert(rc2.qid.qtype == 0x01)
765
647
  assert(rc2.qid.version == 0xdeadbeef)
@@ -767,17 +649,15 @@ class MessageTest < Test::Unit::TestCase
767
649
  assert(rc2.iounit == 0xfedcba98)
768
650
 
769
651
  # Try decoding short strings
770
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x73\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\x98\xba") }
771
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x73\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed") }
652
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x73\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\x98\xba") }
653
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x73\x34\x12\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed") }
772
654
 
773
655
  # Decode with trailing garbage
774
656
  rc2 = nil
775
657
  assert_nothing_raised do
776
- rc2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
658
+ rc2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
777
659
  end
778
660
  assert(rc2.class == RStyx::Message::Rcreate)
779
- assert(rc2.length == len)
780
- assert(rc2.mtype == RStyx::Message::StyxMessage::RCREATE)
781
661
  assert(rc2.tag == 0x1234)
782
662
  assert(rc2.qid.qtype == 0x01)
783
663
  assert(rc2.qid.version == 0xdeadbeef)
@@ -789,8 +669,8 @@ class MessageTest < Test::Unit::TestCase
789
669
  # Test the Tread class.
790
670
  #
791
671
  def test_tread
792
- tr = RStyx::Message::Tread.new(0xdeadbeef, 0xfeedfacec0ffeeee, 0xcafebabe)
793
- bytes = tr.to_bytes(0x1234)
672
+ tr = RStyx::Message::Tread.new(:fid => 0xdeadbeef, :offset => 0xfeedfacec0ffeeee, :count => 0xcafebabe, :tag => 0x1234)
673
+ bytes = tr.to_bytes
794
674
  expect = "\x74\x34\x12\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\xbe\xba\xfe\xca"
795
675
  len = expect.length + 4
796
676
  packlen = [len].pack("V")
@@ -798,31 +678,27 @@ class MessageTest < Test::Unit::TestCase
798
678
  assert(expect == bytes)
799
679
 
800
680
  # Decode expect
801
- tr2 = RStyx::Message::StyxMessage.decode(expect)
681
+ tr2 = RStyx::Message::StyxMessage.from_bytes(expect)
802
682
  assert(tr2.class == RStyx::Message::Tread)
803
- assert(tr2.length == len)
804
- assert(tr2.mtype == RStyx::Message::StyxMessage::TREAD)
805
683
  assert(tr2.tag == 0x1234)
806
684
  assert(tr2.fid == 0xdeadbeef)
807
685
  assert(tr2.offset == 0xfeedfacec0ffeeee)
808
686
  assert(tr2.count == 0xcafebabe)
809
687
 
810
688
  # Try decoding short strings
811
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x74\x34\x12\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\xbe\xba\xfe") }
812
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x74\x34\x12\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed") }
813
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x74\x34\x12\xef\xbe\xad\xde\xee\xee\xff\xc0\xce") }
814
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x74\x34\x12\xef\xbe\xad\xde\xee") }
815
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x74\x34\x12\xef\xbe\xad\xde\xee") }
816
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x74\x34\x12\xef\xbe\xad") }
689
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x74\x34\x12\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\xbe\xba\xfe") }
690
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x74\x34\x12\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed") }
691
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x74\x34\x12\xef\xbe\xad\xde\xee\xee\xff\xc0\xce") }
692
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x74\x34\x12\xef\xbe\xad\xde\xee") }
693
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x74\x34\x12\xef\xbe\xad\xde\xee") }
694
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x74\x34\x12\xef\xbe\xad") }
817
695
 
818
696
  # Decode with trailing garbage
819
697
  tr2 = nil
820
698
  assert_nothing_raised do
821
- tr2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
699
+ tr2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
822
700
  end
823
701
  assert(tr2.class == RStyx::Message::Tread)
824
- assert(tr2.length == len)
825
- assert(tr2.mtype == RStyx::Message::StyxMessage::TREAD)
826
702
  assert(tr2.tag == 0x1234)
827
703
  assert(tr2.fid == 0xdeadbeef)
828
704
  assert(tr2.offset == 0xfeedfacec0ffeeee)
@@ -833,9 +709,9 @@ class MessageTest < Test::Unit::TestCase
833
709
  # test cases for Rread class
834
710
  #
835
711
  def test_rread
836
- data = "alpha bravo charlie delta echo foxtrot golf hotel india juliet kilo lima mama nancy oscar papa quebec romeo sierra tango uniform victor whiskey xray yankee zulu"
837
- rr = RStyx::Message::Rread.new(data)
838
- bytes = rr.to_bytes(0x1234)
712
+ data = "alpha bravo charlie delta echo foxtrot golf hotel india juliet kilo lima mama nancy oscar papa quebec romeo sierra tango uniform victor whiskey xray yankee \xff\xfe\xfd\xfc"
713
+ rr = RStyx::Message::Rread.new(:data => data, :tag => 0x1234)
714
+ bytes = rr.to_bytes
839
715
  expect = "\x75\x34\x12\xa0\x00\x00\x00" + data
840
716
  len = expect.length + 4
841
717
  packlen = [len].pack("V")
@@ -843,28 +719,24 @@ class MessageTest < Test::Unit::TestCase
843
719
  assert(expect == bytes)
844
720
 
845
721
  # Decode expect
846
- rr2 = RStyx::Message::StyxMessage.decode(expect)
722
+ rr2 = RStyx::Message::StyxMessage.from_bytes(expect)
847
723
  assert(rr2.class == RStyx::Message::Rread)
848
- assert(rr2.length == len)
849
- assert(rr2.mtype == RStyx::Message::StyxMessage::RREAD)
850
724
  assert(rr2.tag == 0x1234)
851
725
  assert(rr2.count == data.length)
852
726
  assert(rr2.data == data)
853
727
 
854
728
  # Try decoding short strings
855
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(expect.chop) }
856
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x75\x34\x12\xa0\x00\x00") }
729
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(expect.chop) }
730
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x75\x34\x12\xa0\x00\x00") }
857
731
  # Try decoding empty
858
- assert_nothing_raised { RStyx::Message::StyxMessage.decode("\x0b\x00\x00\x00\x75\x34\x12\x00\x00\x00\x00") }
732
+ assert_nothing_raised { RStyx::Message::StyxMessage.from_bytes("\x0b\x00\x00\x00\x75\x34\x12\x00\x00\x00\x00") }
859
733
 
860
734
  # Decode with trailing garbage
861
735
  rr2 = nil
862
736
  assert_nothing_raised do
863
- rr2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
737
+ rr2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
864
738
  end
865
739
  assert(rr2.class == RStyx::Message::Rread)
866
- assert(rr2.length == len)
867
- assert(rr2.mtype == RStyx::Message::StyxMessage::RREAD)
868
740
  assert(rr2.tag == 0x1234)
869
741
  assert(rr2.count == data.length)
870
742
  assert(rr2.data == data)
@@ -875,49 +747,45 @@ class MessageTest < Test::Unit::TestCase
875
747
  #
876
748
  def test_twrite
877
749
  data = "alpha bravo charlie delta echo foxtrot golf hotel india juliet kilo lima mama nancy oscar papa quebec romeo sierra tango uniform victor whiskey xray yankee zulu"
878
- tw = RStyx::Message::Twrite.new(0x12345678, 0xfeedfacec0ffeeee, data)
879
- bytes = tw.to_bytes(0x1234)
750
+ tw = RStyx::Message::Twrite.new(:fid => 0x12345678, :offset => 0xfeedfacec0ffeeee, :data => data, :tag => 0x1234)
880
751
  expect = "\x76\x34\x12\x78\x56\x34\x12\xee\xee\xff\xc0\xce\xfa\xed\xfe\xa0\x00\x00\x00" + data
881
752
  len = expect.length + 4
882
753
  packlen = [len].pack("V")
883
754
  expect = packlen + expect
755
+ bytes = tw.to_bytes
884
756
  assert(expect == bytes)
885
757
 
886
758
  # Decode expect
887
- tw2 = RStyx::Message::StyxMessage.decode(expect)
759
+ tw2 = RStyx::Message::StyxMessage.from_bytes(expect)
888
760
  assert(tw2.class == RStyx::Message::Twrite)
889
- assert(tw2.length == len)
890
- assert(tw2.mtype == RStyx::Message::StyxMessage::TWRITE)
891
761
  assert(tw2.tag == 0x1234)
892
762
  assert(tw2.fid == 0x12345678)
893
763
  assert(tw2.offset == 0xfeedfacec0ffeeee)
894
- assert(tw2.count == data.length)
895
764
  assert(tw2.data == data)
896
765
  # Try decoding short strings
897
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(expect.chop) }
766
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(expect.chop) }
898
767
 
899
768
  # Try decoding empty
900
- assert_nothing_raised { RStyx::Message::StyxMessage.decode("\x17\x00\x00\x00\x75\x34\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") }
769
+ assert_raise(RStyx::StyxException) { RStyx::Message::Twrite.from_bytes("1234567890123456789012") }
770
+
771
+ assert_nothing_raised { RStyx::Message::StyxMessage.from_bytes("\x17\x00\x00\x00\x75\x34\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00") }
901
772
  # Decode with trailing garbage
902
773
  tw2 = nil
903
774
  assert_nothing_raised do
904
- tw2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
775
+ tw2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
905
776
  end
906
777
  assert(tw2.class == RStyx::Message::Twrite)
907
- assert(tw2.length == len)
908
- assert(tw2.mtype == RStyx::Message::StyxMessage::TWRITE)
909
778
  assert(tw2.tag == 0x1234)
910
779
  assert(tw2.fid == 0x12345678)
911
780
  assert(tw2.offset == 0xfeedfacec0ffeeee)
912
- assert(tw2.count == data.length)
913
781
  assert(tw2.data == data)
914
782
  end
915
783
 
916
784
  ##
917
785
  # Tests for Rwrite class
918
786
  def test_rwrite
919
- rw = RStyx::Message::Rwrite.new(0x12345678)
920
- bytes = rw.to_bytes(0x1234)
787
+ rw = RStyx::Message::Rwrite.new(:count => 0x12345678, :tag => 0x1234)
788
+ bytes = rw.to_bytes
921
789
  expect = "\x77\x34\x12\x78\x56\x34\x12"
922
790
  len = expect.length + 4
923
791
  packlen = [len].pack("V")
@@ -925,23 +793,19 @@ class MessageTest < Test::Unit::TestCase
925
793
  assert(expect == bytes)
926
794
 
927
795
  # decode expect
928
- rw2 = RStyx::Message::StyxMessage.decode(expect)
796
+ rw2 = RStyx::Message::StyxMessage.from_bytes(expect)
929
797
  assert(rw2.class == RStyx::Message::Rwrite)
930
- assert(rw2.length == len)
931
- assert(rw2.mtype == RStyx::Message::StyxMessage::RWRITE)
932
798
  assert(rw2.tag == 0x1234)
933
799
  assert(rw2.count == 0x12345678)
934
800
 
935
801
  # Try decoding short strings
936
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(expect.chop) }
802
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(expect.chop) }
937
803
  # Decode with trailing garbage
938
804
  rw2 = nil
939
805
  assert_nothing_raised do
940
- rw2 = RStyx::Message::StyxMessage.decode(expect)
806
+ rw2 = RStyx::Message::StyxMessage.from_bytes(expect)
941
807
  end
942
808
  assert(rw2.class == RStyx::Message::Rwrite)
943
- assert(rw2.length == len)
944
- assert(rw2.mtype == RStyx::Message::StyxMessage::RWRITE)
945
809
  assert(rw2.tag == 0x1234)
946
810
  assert(rw2.count == 0x12345678)
947
811
  end
@@ -950,34 +814,29 @@ class MessageTest < Test::Unit::TestCase
950
814
  # Test the Tclunk class.
951
815
  #
952
816
  def test_tclunk
953
- tc = RStyx::Message::Tclunk.new(0xdeadbeef)
954
- bytes = tc.to_bytes(0x1234)
817
+ tc = RStyx::Message::Tclunk.new(:fid => 0xdeadbeef, :tag => 0x1234)
955
818
  expect = "\x78\x34\x12\xef\xbe\xad\xde"
956
819
  len = expect.length + 4
957
820
  packlen = [len].pack("V")
958
821
  expect = packlen + expect
959
- assert(expect == bytes)
822
+ assert(expect == tc.to_bytes)
960
823
 
961
824
  # decode expect
962
- tc2 = RStyx::Message::StyxMessage.decode(expect)
825
+ tc2 = RStyx::Message::StyxMessage.from_bytes(expect)
963
826
  assert(tc2.class == RStyx::Message::Tclunk)
964
- assert(tc2.length == len)
965
- assert(tc2.mtype == RStyx::Message::StyxMessage::TCLUNK)
966
827
  assert(tc2.tag == 0x1234)
967
828
  assert(tc2.fid == 0xdeadbeef)
968
829
 
969
830
  # try decoding short strings
970
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x78\x34\x12\xef\xbe\xad") }
971
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x78\x34\x12") }
831
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x78\x34\x12\xef\xbe\xad") }
832
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x78\x34\x12") }
972
833
 
973
834
  # decode with trailing garbage
974
835
  tc2 = nil
975
836
  assert_nothing_raised do
976
- tc2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
837
+ tc2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
977
838
  end
978
839
  assert(tc2.class == RStyx::Message::Tclunk)
979
- assert(tc2.length == len)
980
- assert(tc2.mtype == RStyx::Message::StyxMessage::TCLUNK)
981
840
  assert(tc2.tag == 0x1234)
982
841
  assert(tc2.fid == 0xdeadbeef)
983
842
  end
@@ -986,8 +845,8 @@ class MessageTest < Test::Unit::TestCase
986
845
  # Test the Rclunk class.
987
846
  #
988
847
  def test_rclunk
989
- rc = RStyx::Message::Rclunk.new
990
- bytes = rc.to_bytes(0x1234)
848
+ rc = RStyx::Message::Rclunk.new(:tag => 0x1234)
849
+ bytes = rc.to_bytes
991
850
  expect = "\x79\x34\x12"
992
851
  len = expect.length + 4
993
852
  packlen = [len].pack("V")
@@ -995,23 +854,19 @@ class MessageTest < Test::Unit::TestCase
995
854
  assert(expect == bytes)
996
855
 
997
856
  # decode expect
998
- rc2 = RStyx::Message::StyxMessage.decode(expect)
857
+ rc2 = RStyx::Message::StyxMessage.from_bytes(expect)
999
858
  assert(rc2.class == RStyx::Message::Rclunk)
1000
- assert(rc2.length == len)
1001
- assert(rc2.mtype == RStyx::Message::StyxMessage::RCLUNK)
1002
859
  assert(rc2.tag == 0x1234)
1003
860
 
1004
861
  # try decoding short strings
1005
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x79\x34") }
862
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x79\x34") }
1006
863
 
1007
864
  # decode with trailing garbage
1008
865
  rc2 = nil
1009
866
  assert_nothing_raised do
1010
- rc2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
867
+ rc2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
1011
868
  end
1012
869
  assert(rc2.class == RStyx::Message::Rclunk)
1013
- assert(rc2.length == len)
1014
- assert(rc2.mtype == RStyx::Message::StyxMessage::RCLUNK)
1015
870
  assert(rc2.tag == 0x1234)
1016
871
  end
1017
872
 
@@ -1019,8 +874,8 @@ class MessageTest < Test::Unit::TestCase
1019
874
  # Test the Tremove class.
1020
875
  #
1021
876
  def test_tremove
1022
- tr = RStyx::Message::Tremove.new(0xdeadbeef)
1023
- bytes = tr.to_bytes(0x1234)
877
+ tr = RStyx::Message::Tremove.new(:fid => 0xdeadbeef, :tag => 0x1234)
878
+ bytes = tr.to_bytes
1024
879
  expect = "\x7a\x34\x12\xef\xbe\xad\xde"
1025
880
  len = expect.length + 4
1026
881
  packlen = [len].pack("V")
@@ -1028,25 +883,21 @@ class MessageTest < Test::Unit::TestCase
1028
883
  assert(expect == bytes)
1029
884
 
1030
885
  # decode expect
1031
- tr2 = RStyx::Message::StyxMessage.decode(expect)
886
+ tr2 = RStyx::Message::StyxMessage.from_bytes(expect)
1032
887
  assert(tr2.class == RStyx::Message::Tremove)
1033
- assert(tr2.length == len)
1034
- assert(tr2.mtype == RStyx::Message::StyxMessage::TREMOVE)
1035
888
  assert(tr2.tag == 0x1234)
1036
889
  assert(tr2.fid == 0xdeadbeef)
1037
890
 
1038
891
  # try decoding short strings
1039
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x7a\x34\x12\xef\xbe\xad") }
1040
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x7a\x34\x12") }
892
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x7a\x34\x12\xef\xbe\xad") }
893
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x7a\x34\x12") }
1041
894
 
1042
895
  # decode with trailing garbage
1043
896
  tr2 = nil
1044
897
  assert_nothing_raised do
1045
- tr2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
898
+ tr2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
1046
899
  end
1047
900
  assert(tr2.class == RStyx::Message::Tremove)
1048
- assert(tr2.length == len)
1049
- assert(tr2.mtype == RStyx::Message::StyxMessage::TREMOVE)
1050
901
  assert(tr2.tag == 0x1234)
1051
902
  assert(tr2.fid == 0xdeadbeef)
1052
903
  end
@@ -1055,8 +906,8 @@ class MessageTest < Test::Unit::TestCase
1055
906
  # Test the Rremove class.
1056
907
  #
1057
908
  def test_rremove
1058
- rr = RStyx::Message::Rremove.new
1059
- bytes = rr.to_bytes(0x1234)
909
+ rr = RStyx::Message::Rremove.new(:tag => 0x1234)
910
+ bytes = rr.to_bytes
1060
911
  expect = "\x7b\x34\x12"
1061
912
  len = expect.length + 4
1062
913
  packlen = [len].pack("V")
@@ -1064,23 +915,19 @@ class MessageTest < Test::Unit::TestCase
1064
915
  assert(expect == bytes)
1065
916
 
1066
917
  # decode expect
1067
- rr2 = RStyx::Message::StyxMessage.decode(expect)
918
+ rr2 = RStyx::Message::StyxMessage.from_bytes(expect)
1068
919
  assert(rr2.class == RStyx::Message::Rremove)
1069
- assert(rr2.length == len)
1070
- assert(rr2.mtype == RStyx::Message::StyxMessage::RREMOVE)
1071
920
  assert(rr2.tag == 0x1234)
1072
921
 
1073
922
  # try decoding short strings
1074
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x7b\x34") }
923
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x7b\x34") }
1075
924
 
1076
925
  # decode with trailing garbage
1077
926
  rr2 = nil
1078
927
  assert_nothing_raised do
1079
- rr2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
928
+ rr2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
1080
929
  end
1081
930
  assert(rr2.class == RStyx::Message::Rremove)
1082
- assert(rr2.length == len)
1083
- assert(rr2.mtype == RStyx::Message::StyxMessage::RREMOVE)
1084
931
  assert(rr2.tag == 0x1234)
1085
932
  end
1086
933
 
@@ -1088,8 +935,8 @@ class MessageTest < Test::Unit::TestCase
1088
935
  # Test the Tstat class.
1089
936
  #
1090
937
  def test_tstat
1091
- ts = RStyx::Message::Tstat.new(0xdeadbeef)
1092
- bytes = ts.to_bytes(0x1234)
938
+ ts = RStyx::Message::Tstat.new(:fid => 0xdeadbeef, :tag => 0x1234)
939
+ bytes = ts.to_bytes
1093
940
  expect = "\x7c\x34\x12\xef\xbe\xad\xde"
1094
941
  len = expect.length + 4
1095
942
  packlen = [len].pack("V")
@@ -1097,25 +944,21 @@ class MessageTest < Test::Unit::TestCase
1097
944
  assert(expect == bytes)
1098
945
 
1099
946
  # decode expect
1100
- ts2 = RStyx::Message::StyxMessage.decode(expect)
947
+ ts2 = RStyx::Message::StyxMessage.from_bytes(expect)
1101
948
  assert(ts2.class == RStyx::Message::Tstat)
1102
- assert(ts2.length == len)
1103
- assert(ts2.mtype == RStyx::Message::StyxMessage::TSTAT)
1104
949
  assert(ts2.tag == 0x1234)
1105
950
  assert(ts2.fid == 0xdeadbeef)
1106
951
 
1107
952
  # try decoding short strings
1108
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x7c\x34\x12\xef\xbe\xad") }
1109
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(packlen + "\x7c\x34\x12") }
953
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x7c\x34\x12\xef\xbe\xad") }
954
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(packlen + "\x7c\x34\x12") }
1110
955
 
1111
956
  # decode with trailing garbage
1112
957
  ts2 = nil
1113
958
  assert_nothing_raised do
1114
- ts2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage")
959
+ ts2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage")
1115
960
  end
1116
961
  assert(ts2.class == RStyx::Message::Tstat)
1117
- assert(ts2.length == len)
1118
- assert(ts2.mtype == RStyx::Message::StyxMessage::TSTAT)
1119
962
  assert(ts2.tag == 0x1234)
1120
963
  assert(ts2.fid == 0xdeadbeef)
1121
964
  end
@@ -1124,7 +967,7 @@ class MessageTest < Test::Unit::TestCase
1124
967
  # Test the Rstat class.
1125
968
  #
1126
969
  def test_rstat
1127
- de = RStyx::Message::DirEntry.new
970
+ de = RStyx::Message::Stat.new
1128
971
  de.dtype = 0x1234
1129
972
  de.dev = 0x567890ab
1130
973
  de.qid = RStyx::Message::Qid.new(0x01, 0xdeadbeef,0xfeedfacec0ffeeee)
@@ -1136,20 +979,17 @@ class MessageTest < Test::Unit::TestCase
1136
979
  de.uid = "bar"
1137
980
  de.gid = "baz"
1138
981
  de.muid = "quux"
1139
- rs = RStyx::Message::Rstat.new(de)
1140
- bytes = rs.to_bytes(0x1234)
982
+ rs = RStyx::Message::Rstat.new(:stat => de, :tag => 0x1234)
983
+ bytes = rs.to_bytes
1141
984
  expect = "\x7d\x34\x12\x3e\x00\x3c\x00\x34\x12\xab\x90\x78\x56\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\xf0\xde\xbc\x9a\xef\xbe\xad\xde\xbe\xba\xfe\xca\x10\x32\x54\x76\x98\xba\xdc\xfe\x03\x00foo\x03\x00bar\x03\x00baz\x04\x00quux"
1142
985
  len = expect.length + 4
1143
986
  packlen = [len].pack("V")
1144
987
  expect = packlen + expect
1145
- puts ""
1146
988
  assert(expect == bytes)
1147
989
 
1148
990
  # decode expect
1149
- rs2 = RStyx::Message::StyxMessage.decode(expect)
991
+ rs2 = RStyx::Message::StyxMessage.from_bytes(expect)
1150
992
  assert(rs2.class == RStyx::Message::Rstat)
1151
- assert(rs2.length == len)
1152
- assert(rs2.mtype == RStyx::Message::StyxMessage::RSTAT)
1153
993
  assert(rs2.tag == 0x1234)
1154
994
  assert(rs2.stat.dtype == 0x1234)
1155
995
  assert(rs2.stat.dev == 0x567890ab)
@@ -1166,14 +1006,12 @@ class MessageTest < Test::Unit::TestCase
1166
1006
  assert(rs2.stat.muid == "quux")
1167
1007
 
1168
1008
  # try decoding short strings
1169
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(expect.chop) }
1009
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(expect.chop) }
1170
1010
 
1171
1011
  # Trailing garbage test
1172
1012
  rs2 = nil
1173
- assert_nothing_raised { rs2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage") }
1013
+ assert_nothing_raised { rs2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage") }
1174
1014
  assert(rs2.class == RStyx::Message::Rstat)
1175
- assert(rs2.length == len)
1176
- assert(rs2.mtype == RStyx::Message::StyxMessage::RSTAT)
1177
1015
  assert(rs2.tag == 0x1234)
1178
1016
  assert(rs2.stat.dtype == 0x1234)
1179
1017
  assert(rs2.stat.dev == 0x567890ab)
@@ -1194,7 +1032,7 @@ class MessageTest < Test::Unit::TestCase
1194
1032
  # Test the Twstat class.
1195
1033
  #
1196
1034
  def test_twstat
1197
- de = RStyx::Message::DirEntry.new
1035
+ de = RStyx::Message::Stat.new
1198
1036
  de.dtype = 0x1234
1199
1037
  de.dev = 0x567890ab
1200
1038
  de.qid = RStyx::Message::Qid.new(0x01, 0xdeadbeef,0xfeedfacec0ffeeee)
@@ -1206,8 +1044,8 @@ class MessageTest < Test::Unit::TestCase
1206
1044
  de.uid = "bar"
1207
1045
  de.gid = "baz"
1208
1046
  de.muid = "quux"
1209
- tw = RStyx::Message::Twstat.new(0x12345678, de)
1210
- bytes = tw.to_bytes(0x1234)
1047
+ tw = RStyx::Message::Twstat.new(:fid => 0x12345678, :stat => de, :tag => 0x1234)
1048
+ bytes = tw.to_bytes
1211
1049
  expect = "\x7e\x34\x12\x78\x56\x34\x12\x3e\x00\x3c\x00\x34\x12\xab\x90\x78\x56\x01\xef\xbe\xad\xde\xee\xee\xff\xc0\xce\xfa\xed\xfe\xf0\xde\xbc\x9a\xef\xbe\xad\xde\xbe\xba\xfe\xca\x10\x32\x54\x76\x98\xba\xdc\xfe\x03\x00foo\x03\x00bar\x03\x00baz\x04\x00quux"
1212
1050
  len = expect.length + 4
1213
1051
  packlen = [len].pack("V")
@@ -1215,10 +1053,8 @@ class MessageTest < Test::Unit::TestCase
1215
1053
  assert(expect == bytes)
1216
1054
 
1217
1055
  # decode expect
1218
- tw2 = RStyx::Message::StyxMessage.decode(expect)
1056
+ tw2 = RStyx::Message::StyxMessage.from_bytes(expect)
1219
1057
  assert(tw2.class == RStyx::Message::Twstat)
1220
- assert(tw2.length == len)
1221
- assert(tw2.mtype == RStyx::Message::StyxMessage::TWSTAT)
1222
1058
  assert(tw2.tag == 0x1234)
1223
1059
  assert(tw2.stat.dtype == 0x1234)
1224
1060
  assert(tw2.stat.dev == 0x567890ab)
@@ -1235,13 +1071,11 @@ class MessageTest < Test::Unit::TestCase
1235
1071
  assert(tw2.stat.muid == "quux")
1236
1072
 
1237
1073
  # try decoding short strings
1238
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(expect.chop) }
1074
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(expect.chop) }
1239
1075
  # Trailing garbage test
1240
1076
  tw2 = nil
1241
- assert_nothing_raised { tw2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage") }
1077
+ assert_nothing_raised { tw2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage") }
1242
1078
  assert(tw2.class == RStyx::Message::Twstat)
1243
- assert(tw2.length == len)
1244
- assert(tw2.mtype == RStyx::Message::StyxMessage::TWSTAT)
1245
1079
  assert(tw2.tag == 0x1234)
1246
1080
  assert(tw2.stat.dtype == 0x1234)
1247
1081
  assert(tw2.stat.dev == 0x567890ab)
@@ -1262,8 +1096,8 @@ class MessageTest < Test::Unit::TestCase
1262
1096
  # Test the Rwstat class.
1263
1097
  #
1264
1098
  def test_rwstat
1265
- rw = RStyx::Message::Rwstat.new
1266
- bytes = rw.to_bytes(0x1234)
1099
+ rw = RStyx::Message::Rwstat.new(:tag => 0x1234)
1100
+ bytes = rw.to_bytes
1267
1101
  expect = "\x7f\x34\x12"
1268
1102
  len = expect.length + 4
1269
1103
  packlen = [len].pack("V")
@@ -1271,19 +1105,42 @@ class MessageTest < Test::Unit::TestCase
1271
1105
  assert(expect == bytes)
1272
1106
 
1273
1107
  # decode expect
1274
- rw2 = RStyx::Message::StyxMessage.decode(expect)
1108
+ rw2 = RStyx::Message::StyxMessage.from_bytes(expect)
1275
1109
  assert(rw2.class == RStyx::Message::Rwstat)
1276
- assert(rw2.length == len)
1277
- assert(rw2.mtype == RStyx::Message::StyxMessage::RWSTAT)
1278
1110
  assert(rw2.tag == 0x1234)
1279
1111
  # try decoding short strings
1280
- assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.decode(expect.chop) }
1112
+ assert_raise(RStyx::StyxException) { RStyx::Message::StyxMessage.from_bytes(expect.chop) }
1281
1113
  # trailing garbage test
1282
- assert_nothing_raised { rw2 = RStyx::Message::StyxMessage.decode(expect + "trailing garbage") }
1114
+ assert_nothing_raised { rw2 = RStyx::Message::StyxMessage.from_bytes(expect + "trailing garbage") }
1283
1115
  assert(rw2.class == RStyx::Message::Rwstat)
1284
- assert(rw2.length == len)
1285
- assert(rw2.mtype == RStyx::Message::StyxMessage::RWSTAT)
1286
1116
  assert(rw2.tag == 0x1234)
1287
1117
  end
1288
1118
 
1119
+ # Decode live Styx messages received from actual Styx server
1120
+ # implementations.
1121
+ def test_decode
1122
+ # Rversion from Inferno
1123
+ str = "\023\000\000\000eA\271\030 \000\000\006\0009P2000"
1124
+ m = RStyx::Message::StyxMessage.from_bytes(str)
1125
+ assert_equal(RStyx::Message::Rversion, m.class)
1126
+ assert_equal(47425, m.tag)
1127
+ assert_equal(8216, m.msize)
1128
+ assert_equal("9P2000", m.version)
1129
+
1130
+ # Rattach from Inferno
1131
+ str = "\024\000\000\000i.w\200\240q^F\240\307\006\000\000\000\000\000"
1132
+ m = RStyx::Message::StyxMessage.from_bytes(str)
1133
+ assert_equal(RStyx::Message::Rattach, m.class)
1134
+ assert_equal(30510, m.tag)
1135
+ assert_equal(1180594592, m.qid.version)
1136
+ assert_equal(128, m.qid.qtype)
1137
+ assert_equal(444320, m.qid.path)
1138
+
1139
+ # Rclunk from Inferno
1140
+ str = "\a\000\000\000y7\372"
1141
+ m = RStyx::Message::StyxMessage.from_bytes(str)
1142
+ assert_equal(RStyx::Message::Rclunk, m.class)
1143
+ assert_equal(64055, m.tag)
1144
+ end
1145
+
1289
1146
  end