outbound-serializer.test.js
1 "use strict"; 2 var __importDefault = (this && this.__importDefault) || function (mod) { 3 return (mod && mod.__esModule) ? mod : { "default": mod }; 4 }; 5 Object.defineProperty(exports, "__esModule", { value: true }); 6 const assert_1 = __importDefault(require("assert")); 7 const serializer_1 = require("./serializer"); 8 const buffer_list_1 = __importDefault(require("./testing/buffer-list")); 9 describe('serializer', () => { 10 it('builds startup message', function () { 11 const actual = serializer_1.serialize.startup({ 12 user: 'brian', 13 database: 'bang', 14 }); 15 assert_1.default.deepEqual(actual, new buffer_list_1.default() 16 .addInt16(3) 17 .addInt16(0) 18 .addCString('user') 19 .addCString('brian') 20 .addCString('database') 21 .addCString('bang') 22 .addCString('client_encoding') 23 .addCString('UTF8') 24 .addCString('') 25 .join(true)); 26 }); 27 it('builds password message', function () { 28 const actual = serializer_1.serialize.password('!'); 29 assert_1.default.deepEqual(actual, new buffer_list_1.default().addCString('!').join(true, 'p')); 30 }); 31 it('builds request ssl message', function () { 32 const actual = serializer_1.serialize.requestSsl(); 33 const expected = new buffer_list_1.default().addInt32(80877103).join(true); 34 assert_1.default.deepEqual(actual, expected); 35 }); 36 it('builds SASLInitialResponseMessage message', function () { 37 const actual = serializer_1.serialize.sendSASLInitialResponseMessage('mech', 'data'); 38 assert_1.default.deepEqual(actual, new buffer_list_1.default().addCString('mech').addInt32(4).addString('data').join(true, 'p')); 39 }); 40 it('builds SCRAMClientFinalMessage message', function () { 41 const actual = serializer_1.serialize.sendSCRAMClientFinalMessage('data'); 42 assert_1.default.deepEqual(actual, new buffer_list_1.default().addString('data').join(true, 'p')); 43 }); 44 it('builds query message', function () { 45 const txt = 'select * from boom'; 46 const actual = serializer_1.serialize.query(txt); 47 assert_1.default.deepEqual(actual, new buffer_list_1.default().addCString(txt).join(true, 'Q')); 48 }); 49 describe('parse message', () => { 50 it('builds parse message', function () { 51 const actual = serializer_1.serialize.parse({ text: '!' }); 52 const expected = new buffer_list_1.default().addCString('').addCString('!').addInt16(0).join(true, 'P'); 53 assert_1.default.deepEqual(actual, expected); 54 }); 55 it('builds parse message with named query', function () { 56 const actual = serializer_1.serialize.parse({ 57 name: 'boom', 58 text: 'select * from boom', 59 types: [], 60 }); 61 const expected = new buffer_list_1.default().addCString('boom').addCString('select * from boom').addInt16(0).join(true, 'P'); 62 assert_1.default.deepEqual(actual, expected); 63 }); 64 it('with multiple parameters', function () { 65 const actual = serializer_1.serialize.parse({ 66 name: 'force', 67 text: 'select * from bang where name = $1', 68 types: [1, 2, 3, 4], 69 }); 70 const expected = new buffer_list_1.default() 71 .addCString('force') 72 .addCString('select * from bang where name = $1') 73 .addInt16(4) 74 .addInt32(1) 75 .addInt32(2) 76 .addInt32(3) 77 .addInt32(4) 78 .join(true, 'P'); 79 assert_1.default.deepEqual(actual, expected); 80 }); 81 }); 82 describe('bind messages', function () { 83 it('with no values', function () { 84 const actual = serializer_1.serialize.bind(); 85 const expectedBuffer = new buffer_list_1.default() 86 .addCString('') 87 .addCString('') 88 .addInt16(0) 89 .addInt16(0) 90 .addInt16(1) 91 .addInt16(0) 92 .join(true, 'B'); 93 assert_1.default.deepEqual(actual, expectedBuffer); 94 }); 95 it('with named statement, portal, and values', function () { 96 const actual = serializer_1.serialize.bind({ 97 portal: 'bang', 98 statement: 'woo', 99 values: ['1', 'hi', null, 'zing'], 100 }); 101 const expectedBuffer = new buffer_list_1.default() 102 .addCString('bang') // portal name 103 .addCString('woo') // statement name 104 .addInt16(4) 105 .addInt16(0) 106 .addInt16(0) 107 .addInt16(0) 108 .addInt16(0) 109 .addInt16(4) 110 .addInt32(1) 111 .add(Buffer.from('1')) 112 .addInt32(2) 113 .add(Buffer.from('hi')) 114 .addInt32(-1) 115 .addInt32(4) 116 .add(Buffer.from('zing')) 117 .addInt16(1) 118 .addInt16(0) 119 .join(true, 'B'); 120 assert_1.default.deepEqual(actual, expectedBuffer); 121 }); 122 }); 123 it('with custom valueMapper', function () { 124 const actual = serializer_1.serialize.bind({ 125 portal: 'bang', 126 statement: 'woo', 127 values: ['1', 'hi', null, 'zing'], 128 valueMapper: () => null, 129 }); 130 const expectedBuffer = new buffer_list_1.default() 131 .addCString('bang') // portal name 132 .addCString('woo') // statement name 133 .addInt16(4) 134 .addInt16(0) 135 .addInt16(0) 136 .addInt16(0) 137 .addInt16(0) 138 .addInt16(4) 139 .addInt32(-1) 140 .addInt32(-1) 141 .addInt32(-1) 142 .addInt32(-1) 143 .addInt16(1) 144 .addInt16(0) 145 .join(true, 'B'); 146 assert_1.default.deepEqual(actual, expectedBuffer); 147 }); 148 it('with named statement, portal, and buffer value', function () { 149 const actual = serializer_1.serialize.bind({ 150 portal: 'bang', 151 statement: 'woo', 152 values: ['1', 'hi', null, Buffer.from('zing', 'utf8')], 153 }); 154 const expectedBuffer = new buffer_list_1.default() 155 .addCString('bang') // portal name 156 .addCString('woo') // statement name 157 .addInt16(4) // value count 158 .addInt16(0) // string 159 .addInt16(0) // string 160 .addInt16(0) // string 161 .addInt16(1) // binary 162 .addInt16(4) 163 .addInt32(1) 164 .add(Buffer.from('1')) 165 .addInt32(2) 166 .add(Buffer.from('hi')) 167 .addInt32(-1) 168 .addInt32(4) 169 .add(Buffer.from('zing', 'utf-8')) 170 .addInt16(1) 171 .addInt16(0) 172 .join(true, 'B'); 173 assert_1.default.deepEqual(actual, expectedBuffer); 174 }); 175 describe('builds execute message', function () { 176 it('for unamed portal with no row limit', function () { 177 const actual = serializer_1.serialize.execute(); 178 const expectedBuffer = new buffer_list_1.default().addCString('').addInt32(0).join(true, 'E'); 179 assert_1.default.deepEqual(actual, expectedBuffer); 180 }); 181 it('for named portal with row limit', function () { 182 const actual = serializer_1.serialize.execute({ 183 portal: 'my favorite portal', 184 rows: 100, 185 }); 186 const expectedBuffer = new buffer_list_1.default().addCString('my favorite portal').addInt32(100).join(true, 'E'); 187 assert_1.default.deepEqual(actual, expectedBuffer); 188 }); 189 }); 190 it('builds flush command', function () { 191 const actual = serializer_1.serialize.flush(); 192 const expected = new buffer_list_1.default().join(true, 'H'); 193 assert_1.default.deepEqual(actual, expected); 194 }); 195 it('builds sync command', function () { 196 const actual = serializer_1.serialize.sync(); 197 const expected = new buffer_list_1.default().join(true, 'S'); 198 assert_1.default.deepEqual(actual, expected); 199 }); 200 it('builds end command', function () { 201 const actual = serializer_1.serialize.end(); 202 const expected = Buffer.from([0x58, 0, 0, 0, 4]); 203 assert_1.default.deepEqual(actual, expected); 204 }); 205 describe('builds describe command', function () { 206 it('describe statement', function () { 207 const actual = serializer_1.serialize.describe({ type: 'S', name: 'bang' }); 208 const expected = new buffer_list_1.default().addChar('S').addCString('bang').join(true, 'D'); 209 assert_1.default.deepEqual(actual, expected); 210 }); 211 it('describe unnamed portal', function () { 212 const actual = serializer_1.serialize.describe({ type: 'P' }); 213 const expected = new buffer_list_1.default().addChar('P').addCString('').join(true, 'D'); 214 assert_1.default.deepEqual(actual, expected); 215 }); 216 }); 217 describe('builds close command', function () { 218 it('describe statement', function () { 219 const actual = serializer_1.serialize.close({ type: 'S', name: 'bang' }); 220 const expected = new buffer_list_1.default().addChar('S').addCString('bang').join(true, 'C'); 221 assert_1.default.deepEqual(actual, expected); 222 }); 223 it('describe unnamed portal', function () { 224 const actual = serializer_1.serialize.close({ type: 'P' }); 225 const expected = new buffer_list_1.default().addChar('P').addCString('').join(true, 'C'); 226 assert_1.default.deepEqual(actual, expected); 227 }); 228 }); 229 describe('copy messages', function () { 230 it('builds copyFromChunk', () => { 231 const actual = serializer_1.serialize.copyData(Buffer.from([1, 2, 3])); 232 const expected = new buffer_list_1.default().add(Buffer.from([1, 2, 3])).join(true, 'd'); 233 assert_1.default.deepEqual(actual, expected); 234 }); 235 it('builds copy fail', () => { 236 const actual = serializer_1.serialize.copyFail('err!'); 237 const expected = new buffer_list_1.default().addCString('err!').join(true, 'f'); 238 assert_1.default.deepEqual(actual, expected); 239 }); 240 it('builds copy done', () => { 241 const actual = serializer_1.serialize.copyDone(); 242 const expected = new buffer_list_1.default().join(true, 'c'); 243 assert_1.default.deepEqual(actual, expected); 244 }); 245 }); 246 it('builds cancel message', () => { 247 const actual = serializer_1.serialize.cancel(3, 4); 248 const expected = new buffer_list_1.default().addInt16(1234).addInt16(5678).addInt32(3).addInt32(4).join(true); 249 assert_1.default.deepEqual(actual, expected); 250 }); 251 }); 252 //# sourceMappingURL=outbound-serializer.test.js.map