/ node_modules / pg-protocol / dist / outbound-serializer.test.js
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