diff --git a/test/parser-tests.js b/test/parser-tests.js index 27a7d6f..02e4a4c 100644 --- a/test/parser-tests.js +++ b/test/parser-tests.js @@ -1,55 +1,65 @@ require(__dirname+'/test-helper'); + + + test('Parser on single messages', function() { - var authOkData = [0x52, 00, 00, 00, 08, 00, 00, 00, 00]; - var authenticationOkBuffer = Buffer(authOkData); - var firstString = [0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0]; - var secondString = [0x55, 0x54, 0x46, 0x38, 0]; - var paramStatusData = [0x53, 0, 0, 0, 0x19].concat(firstString).concat(secondString); - var parameterStatusBuffer = Buffer(paramStatusData); + var authOkBuffer = new BufferList() + .addInt32(8) + .join(true, 'R'); - var backendKeyData = [0x4b, 0, 0, 0, 0x0c, 0, 0, 0, 1, 0, 0, 0, 2]; - var backendKeyDataBuffer = Buffer(backendKeyData); - var readyForQueryData = [0x5a, 0, 0, 0, 5, 'I'.charCodeAt(0)]; - var readyForQueryBuffer = Buffer(readyForQueryData) + var paramStatusBuffer = new BufferList() + .addCString("client_encoding") + .addCString("UTF8") + .join(true, 'S'); + var backendKeyDataBuffer = new BufferList() + .addInt32(1) + .addInt32(2) + .join(true,'K'); + + + + var readyForQueryBuffer = new BufferList() + .add(Buffer('I')) + .join(true,'Z'); var expectedAuthenticationOkayMessage = { name: 'AuthenticationOk', id: 'R', length: 8 }; - + var expectedParameterStatusMessage = { - name: 'ParameterStatus', - id: 'S', - length: 25, - parameterName: 'client_encoding', - parameterValue: 'UTF8' + name: 'ParameterStatus', + id: 'S', + length: 25, + parameterName: 'client_encoding', + parameterValue: 'UTF8' }; var expectedBackendKeyDataMessage = { - name: 'BackendKeyData', - id: 'K', - processID: 1, - secretKey: 2 + name: 'BackendKeyData', + id: 'K', + processID: 1, + secretKey: 2 }; var expectedReadyForQueryMessage = { - name: 'ReadyForQuery', - id: 'Z', - length: 5, - status: 'I' + name: 'ReadyForQuery', + id: 'Z', + length: 5, + status: 'I' }; test('parses AuthenticationOk message', function() { - var result = new Parser(authenticationOkBuffer).parse()[0]; + var result = new Parser(authOkBuffer).parse()[0]; assert.same(result, expectedAuthenticationOkayMessage); }); test('parses ParameterStatus message', function() { - var result = new Parser(parameterStatusBuffer).parse()[0]; + var result = new Parser(paramStatusBuffer).parse()[0]; assert.same(result, expectedParameterStatusMessage); }); @@ -63,29 +73,16 @@ test('Parser on single messages', function() { assert.same(result, expectedReadyForQueryMessage); }); - test('parses multiple messages', function() { - var message = authOkData - .concat(paramStatusData) - .concat(backendKeyData) - .concat(readyForQueryData); - var buffer = Buffer(message); - var result = new Parser(buffer).parse(); - assert.equal(result.length, 4); - assert.same(result[0], expectedAuthenticationOkayMessage); - assert.same(result[1], expectedParameterStatusMessage); - assert.same(result[2], expectedBackendKeyDataMessage); - assert.same(result[3], expectedReadyForQueryMessage); - }); test('parses normal CString', function() { var result = new Parser(Buffer([33,0])).parseCString(); assert.equal(result,"!"); }); - + var resultText = stringToHex("SELECT 3\0"); var length = resultText.length + 4; var commandCompleteData = [0x43, 0, 0, 0, length].concat(resultText); - + test('parses CommandComplete message', function() { var result = new Parser(Buffer(commandCompleteData)).parse()[0]; assert.same(result, { @@ -95,6 +92,30 @@ test('Parser on single messages', function() { }); }); + var packet = { + BYTE: 'T', + LENGTH: null, + INT16: 0 + }; + + var x = [0x54, 0, 0, 0, 26, 0, 1, 33, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 4, 0, 5, 0, 6, 0, 0]; + test('parses RowDescriptions', function() { + + test('parses empty row description', function() { + var buffer = Buffer([0x54, 0, 0, 0, 6, 0, 0]); + var result = new Parser(buffer).parse()[0]; + assert.same(result, { + name: 'RowDescription', + id: 'T', + length: 6, + rowCount: 0 + }); + assert.equal(result.rows.length, 0); + }); + + }); + + test('parses empty CString', function() { var result = new Parser(Buffer([0])).parseCString(); assert.equal(result, '');