logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

r10749 - in trunk/libraries/packetizer: . packetizer-test: msg#00052

Subject: r10749 - in trunk/libraries/packetizer: . packetizer-test
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
-- 
Gd-chatter mailing list
Gd-chatter@xxxxxxxxxxxxxxxx
https://www.gwydiondylan.org/mailman/listinfo/gd-chatter



<Prev in Thread] Current Thread [Next in Thread>