[Gd-chatter] r10749 - in trunk/libraries/packetizer: . packetizer-test
hannes at gwydiondylan.org
hannes at gwydiondylan.org
Sun May 21 22:27:00 CEST 2006
Author: hannes
Date: Sun May 21 22:26:58 2006
New Revision: 10749
Modified:
trunk/libraries/packetizer/module.dylan
trunk/libraries/packetizer/packetizer-test/packetizer-test.dylan
trunk/libraries/packetizer/packetizer.dylan
Log:
Bug:7299
*implemented test for assembling packets
*export frame-size, byte-offset and bit-offset from packetizer
Modified: trunk/libraries/packetizer/module.dylan
==============================================================================
--- trunk/libraries/packetizer/module.dylan (original)
+++ trunk/libraries/packetizer/module.dylan Sun May 21 22:26:58 2006
@@ -88,6 +88,10 @@
<decoded-header-frame>,
payload;
+ export frame-size,
+ byte-offset,
+ bit-offset;
+
export protocol-definer;
//XXX: we shouldn't need to export those
export real-class-definer, cache-class-definer, decoded-class-definer, gen-classes,
Modified: trunk/libraries/packetizer/packetizer-test/packetizer-test.dylan
==============================================================================
--- trunk/libraries/packetizer/packetizer-test/packetizer-test.dylan (original)
+++ trunk/libraries/packetizer/packetizer-test/packetizer-test.dylan Sun May 21 22:26:58 2006
@@ -39,6 +39,11 @@
frame-field-checker(1, frame, 8, 8, 16);
end;
+define test packetizer-assemble ()
+ let frame = make(<test-protocol>, foo: #x23, bar: #x42);
+ let byte-vector = assemble-frame(frame);
+ check-equal("Assembled frame is correct", as(<byte-vector>, #(#x23, #x42)), byte-vector);
+end;
define protocol dynamic-test (header-frame)
field foobar :: <unsigned-byte>;
field payload :: <raw-frame>,
@@ -55,6 +60,15 @@
frame-field-checker(1, frame, 16, 32, 48);
end;
+define test packetizer-dynamic-assemble ()
+ let frame = make(<dynamic-test>,
+ foobar: #x3,
+ payload: parse-frame(<raw-frame>, as(<byte-vector>, #(#x23, #x42, #x23, #x42))));
+ let byte-vector = assemble-frame(frame);
+ check-equal("Assembling dynamic frame is correct (including padding)",
+ as(<byte-vector>, #(#x3, #x0, #x0, #x0, #x23, #x42, #x23, #x42)),
+ byte-vector);
+end;
define protocol static-start (container-frame)
field a :: <unsigned-byte>;
field b :: <raw-frame>, static-start: 24;
@@ -70,6 +84,13 @@
frame-field-checker(1, frame, 24, 8, 32);
end;
+define test static-start-assemble ()
+ let frame = make(<static-start>, a: #x23, b: parse-frame(<raw-frame>, as(<byte-vector>, #(#x2, #x3, #x4, #x5))));
+ let byte-vector = assemble-frame(frame);
+ check-equal("Assembling static start frame is correct (including padding)",
+ as(<byte-vector>, #(#x23, #x0, #x0, #x2, #x3, #x4, #x5)),
+ byte-vector);
+end;
define protocol repeated-test (container-frame)
field foo :: <unsigned-byte>;
repeated field bar :: <unsigned-byte>,
@@ -88,11 +109,22 @@
frame-field-checker(1, frame, 8, 40, 48);
frame-field-checker(2, frame, 48, 8, 56);
end;
-
+
+define test repeated-assemble ()
+ let frame = make(<repeated-test>,
+ foo: #x23,
+ bar: as(<stretchy-vector>, #(#x23, #x42, #x23, #x42, #x0)),
+ after: #x44);
+ let byte-vector = assemble-frame(frame);
+ check-equal("Assemble frame with repeated field",
+ as(<byte-vector>, #(#x23, #x23, #x42, #x23, #x42, #x0, #x44)),
+ byte-vector);
+end;
define protocol repeated-and-dynamic-test (header-frame)
- field header-length :: <unsigned-byte>;
- field type-code :: <unsigned-byte>;
+ field header-length :: <unsigned-byte>,
+ fixup: byte-offset(frame-size(frame.header-length) + frame-size(frame.type-code) + frame-size(frame.options));
+ field type-code :: <unsigned-byte> = #x23;
repeated field options :: <unsigned-byte>,
reached-end?: method(frame) frame = 0 end;
field payload :: <raw-frame>,
@@ -125,8 +157,19 @@
frame-field-checker(3, frame, 64, 24, 88);
end;
+define test repeated-and-dynamic-assemble ()
+ let frame = make(<repeated-and-dynamic-test>,
+ options: as(<stretchy-vector>, #(#x23, #x42, #x23, #x42, #x23, #x0)),
+ payload: parse-frame(<raw-frame>, as(<byte-vector>, #(#x0, #x1, #x2, #x3, #x4))));
+ let byte-vector = assemble-frame(frame);
+ check-equal("Repeated and dynamic assemble",
+ as(<byte-vector>, #(#x8, #x23, #x23, #x42, #x23, #x42, #x23, #x0, #x0, #x1, #x2, #x3, #x4)),
+ byte-vector);
+end;
+
define protocol count-repeated-test (container-frame)
- field foo :: <unsigned-byte>;
+ field foo :: <unsigned-byte>,
+ fixup: frame.fragments.size;
repeated field fragments :: <unsigned-byte>,
count: frame.foo;
field last-field :: <unsigned-byte>;
@@ -145,9 +188,20 @@
frame-field-checker(2, frame, 32, 8, 40);
end;
+define test count-repeated-assemble ()
+ let frame = make(<count-repeated-test>,
+ fragments: as(<stretchy-vector>, #(#x1, #x2, #x3, #x4, #x5, #x6, #x7)),
+ last-field: #x23);
+ let byte-vector = assemble-frame(frame);
+ check-equal("Count repeated assemble",
+ as(<byte-vector>, #(#x7, #x1, #x2, #x3, #x4, #x5, #x6, #x7, #x23)),
+ byte-vector);
+end;
+
define protocol frag (container-frame)
- field type-code :: <unsigned-byte>;
- field data-length :: <unsigned-byte>;
+ field type-code :: <unsigned-byte> = #x23;
+ field data-length :: <unsigned-byte>,
+ fixup: byte-offset(frame-size(frame.data));
field data :: <raw-frame>,
length: frame.data-length * 8;
end;
@@ -169,6 +223,18 @@
frame-field-checker(1, frame, 8, 80, 88);
frame-field-checker(2, frame, 88, 8, 96);
end;
+define test label-assemble ()
+ let frames = as(<stretchy-vector>,
+ list(make(<frag>, data: parse-frame(<raw-frame>, as(<byte-vector>, #(#x1, #x2, #x3)))),
+ make(<frag>, data: parse-frame(<raw-frame>, as(<byte-vector>, #(#x4, #x5, #x6)))),
+ make(<frag>, data: parse-frame(<raw-frame>, as(<byte-vector>, #(#x7, #x8, #x9, #x10))))));
+ let frame = make(<labe>, a: #x23, b: frames, c: #x42);
+ let byte-vector = assemble-frame(frame);
+ check-equal("label assemble",
+ as(<byte-vector>, #(#x23, #x23, #x3, #x1, #x2, #x3, #x23, #x3, #x4, #x5, #x6, #x23, #x4, #x7, #x8, #x9, #x10, #x42)),
+ byte-vector);
+end;
+
define protocol a-super (container-frame)
field type-code :: <unsigned-byte>;
end;
@@ -188,9 +254,16 @@
frame-field-checker(0, frame, 0, 8, 8);
frame-field-checker(1, frame, 8, 8, 16);
end;
-
+
+define test inheritance-assemble ()
+ let frame = make(<a-sub>, type-code: #x42, a: #x23);
+ let byte-vector = assemble-frame(frame);
+ check-equal("inheritance assemble", as(<byte-vector>, #(#x42, #x23)), byte-vector);
+end;
+
define protocol b-sub (a-super)
- field payload-length :: <unsigned-byte>;
+ field payload-length :: <unsigned-byte>,
+ fixup: byte-offset(frame-size(frame.data));
field data :: <raw-frame>,
length: frame.payload-length * 8;
end;
@@ -209,6 +282,13 @@
frame-field-checker(2, aframe, 16, 24, 40);
end;
+define test inheritance-dynamic-length-assemble ()
+ let frame = make(<b-sub>, type-code: #x42, data: parse-frame(<raw-frame>, as(<byte-vector>, #(#x23, #x42, #x23, #x42))));
+ let byte-vector = assemble-frame(frame);
+ check-equal("Inheritance dynamic length assemble",
+ as(<byte-vector>, #(#x42, #x4, #x23, #x42, #x23, #x42)),
+ byte-vector);
+end;
define suite packetizer-suite ()
test packetizer-parser;
test packetizer-dynamic-parser;
@@ -222,8 +302,21 @@
test inheritance-dynamic-length;
end;
+define suite packetizer-assemble-suite ()
+ test packetizer-assemble;
+ test packetizer-dynamic-assemble;
+ test static-start-assemble;
+ test repeated-assemble;
+ test repeated-and-dynamic-assemble;
+ test count-repeated-assemble;
+ test label-assemble;
+ test inheritance-assemble;
+ test inheritance-dynamic-length-assemble;
+end;
+
begin
run-test-application(packetizer-suite, arguments: #("-debug"));
+ run-test-application(packetizer-assemble-suite); //, arguments: #("-debug"));
while(#t)
end;
end;
Modified: trunk/libraries/packetizer/packetizer.dylan
==============================================================================
--- trunk/libraries/packetizer/packetizer.dylan (original)
+++ trunk/libraries/packetizer/packetizer.dylan Sun May 21 22:26:58 2006
@@ -407,7 +407,7 @@
start :: <integer>)
for (field in fields(frame),
offset = start then offset + get-field-size-aux(frame, field))
- if (field.getter(frame) = #f)
+ unless (field.getter(frame))
if (field.fixup-function)
field.setter(field.fixup-function(frame), frame);
else
More information about the chatter
mailing list