test-packet-parser.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. var PacketParser = require('../../lib/packet_parser.js');
  2. var Packet = require('../../lib/packets/packet.js');
  3. var assert = require('assert');
  4. var pp;
  5. var packets = [];
  6. function reset() {
  7. pp = new PacketParser(handler);
  8. packets = [];
  9. }
  10. var handler = function(p) {
  11. packets.push(p);
  12. }
  13. function execute(str, verify) {
  14. reset();
  15. var buffers = str.split('|').map(function(sb) { return sb.split(',').map(Number) });
  16. for(var i=0; i < buffers.length; ++i)
  17. pp.execute(new Buffer(buffers[i]));
  18. verify();
  19. }
  20. function p123() {
  21. assert(packets.length === 1);
  22. assert(packets[0].length() === 10);
  23. assert(packets[0].sequenceId === 123);
  24. }
  25. function p120_121() {
  26. packets.forEach(function(p) { p.dump });
  27. assert(packets.length === 2);
  28. assert(packets[0].length() === 0);
  29. assert(packets[0].sequenceId === 120);
  30. assert(packets[1].length() === 0);
  31. assert(packets[1].sequenceId === 121);
  32. }
  33. execute("10,0,0,123,1,2,3,4,5,6,7,8,9,0", p123);
  34. execute("10,0,0,123|1,2,3,4,5,6,7,8,9,0", p123);
  35. execute("10,0,0|123,1,2,3,4,5,6,7,8,9,0", p123);
  36. execute("10|0,0|123,1,2,3,4,5,6,7,8,9,0", p123);
  37. execute("10,0,0,123,1|2,3,4,5,6|7,8,9,0", p123);
  38. execute("10,0,0,123,1,2|,3,4,5,6|7,8,9,0", p123);
  39. function p42() {
  40. assert(packets.length === 1);
  41. assert(packets[0].length() === 0);
  42. assert(packets[0].sequenceId === 42);
  43. }
  44. execute("0,0,0,42", p42);
  45. execute("0|0,0,42", p42);
  46. execute("0,0|0,42", p42);
  47. execute("0,0|0|42", p42);
  48. execute("0,0,0|42", p42);
  49. execute("0|0|0|42", p42);
  50. execute("0|0,0|42", p42);
  51. // two zero length packets
  52. execute("0,0,0,120,0,0,0,121", p120_121);
  53. execute("0,0,0|120|0|0|0|121", p120_121);
  54. var p122_123 = function() {
  55. assert(packets.length === 2);
  56. assert(packets[0].length() === 5);
  57. assert(packets[0].sequenceId === 122);
  58. assert(packets[1].length() === 6);
  59. assert(packets[1].sequenceId === 123);
  60. }
  61. // two non-zero length packets
  62. execute("5,0,0,122,1,2,3,4,5,6,0,0,123,1,2,3,4,5,6", p122_123);
  63. execute("5,0,0,122,1,2,3,4,5|6,0,0,123,1,2,3,4,5,6", p122_123);
  64. execute("5,0,0,122,1,2,3,4|5|6|0,0,123,1,2,3,4,5,6", p122_123);
  65. execute("5,0,0,122,1,2,3,4,5,6|0,0,123,1,2,3,4,5,6", p122_123);
  66. execute("5,0,0,122,1,2,3,4,5,6,0|0,123,1,2,3,4,5,6", p122_123);
  67. execute("5,0,0,122,1,2,3,4,5,6,0,0|123,1,2,3,4,5,6", p122_123);
  68. execute("5,0,0,122,1,2,3,4,5,6,0,0,123|1,2,3,4,5,6", p122_123);
  69. execute("5,0,0,122,1,2,3,4,5,6,0,0,123,1|2,3,4,5,6", p122_123);
  70. execute("5,0,0,122,1,2,3,4,5,6,0,0,123,1|2,3|4,5,6", p122_123);
  71. // test packet > 65536 lengt
  72. // TODO combine with "execute" function
  73. var length = 123000
  74. var pbuff = new Buffer(length+4);
  75. pbuff[4] = 123;
  76. pbuff[5] = 124;
  77. pbuff[6] = 125;
  78. var p = new Packet(144, pbuff, 4, pbuff.length - 4);
  79. p.writeHeader(42);
  80. function testBigPackets(chunks, cb) {
  81. var packets = [];
  82. var pp = new PacketParser(function(p) {
  83. packets.push(p);
  84. });
  85. chunks.forEach(function(ch) {
  86. pp.execute(ch);
  87. });
  88. cb(packets);
  89. }
  90. function assert2FullPackets(packets) {
  91. function assertPacket(p) {
  92. assert.equal(p.length(), length);
  93. assert.equal(p.sequenceId, 42);
  94. assert.equal(p.readInt8(), 123);
  95. assert.equal(p.readInt8(), 124);
  96. assert.equal(p.readInt8(), 125);
  97. }
  98. //assert.equal(packets[0].buffer.slice(0, 8).toString('hex'), expectation);
  99. //assert.equal(packets[1].buffer.slice(0, 8).toString('hex'), expectation);
  100. assert.equal(packets.length, 2);
  101. assertPacket(packets[0]);
  102. assertPacket(packets[1]);
  103. }
  104. // 2 full packets in 2 chunks
  105. testBigPackets( [ pbuff, pbuff ], assert2FullPackets);
  106. testBigPackets( [ pbuff.slice(0, 120000), pbuff.slice(120000, 123004), pbuff ], assert2FullPackets);
  107. var frameEnd = 120000
  108. testBigPackets( [ pbuff.slice(0, frameEnd), Buffer.concat([pbuff.slice(frameEnd, 123004), pbuff]) ], assert2FullPackets);
  109. for(var frameStart=1; frameStart < 100; frameStart++) {
  110. testBigPackets([ Buffer.concat([pbuff, pbuff.slice(0, frameStart)]), pbuff.slice(frameStart, 123004) ], assert2FullPackets);
  111. }