Skip to content

Commit

Permalink
feat: changes based on review comments
Browse files Browse the repository at this point in the history
  • Loading branch information
MichaelSun90 committed Nov 17, 2022
1 parent 1b00bcc commit 423c0a6
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 16 deletions.
20 changes: 4 additions & 16 deletions test/unit/rerouting-test.js
Expand Up @@ -8,8 +8,6 @@ const Debug = require('../../src/debug');
const PreloginPayload = require('../../src/prelogin-payload');
const Message = require('../../src/message');
const WritableTrackingBuffer = require('../../src/tracking-buffer/writable-tracking-buffer');
const StreamParser = require('../../src/token/stream-parser');
const Login7TokenHandler = require('../../src/token/handler').Login7TokenHandler;

function buildRoutingEnvChangeToken(hostname, port) {
const valueBuffer = new WritableTrackingBuffer(0);
Expand Down Expand Up @@ -253,11 +251,12 @@ describe('Connecting to a server that sends a re-routing information', function(
const { value: message } = await messageIterator.next();
assert.strictEqual(message.type, 0x12);

let messageBuffer = Buffer.alloc(0);
const chunks = [];
for await (const data of message) {
messageBuffer = Buffer.concat([messageBuffer, data]);
chunks.push(data);
}
const preloginPayload = new PreloginPayload(messageBuffer);

const preloginPayload = new PreloginPayload(Buffer.concat(chunks));
assert.strictEqual(preloginPayload.instanceName, 'instanceNameA\u0000');

const responsePayload = new PreloginPayload({ encrypt: false, version: { major: 0, minor: 0, build: 0, subbuild: 0 } });
Expand Down Expand Up @@ -386,15 +385,4 @@ describe('Connecting to a server that sends a re-routing information', function(
connection.close();
}
});

it('Test if routing data capture the correct instance name value', async function() {
const responseMessage = new Message({ type: 0x04 });
responseMessage.end(buildRoutingEnvChangeToken(targetServer.address().address + '\\instanceNameA', targetServer.address().port));
const parser = StreamParser.parseTokens(responseMessage, {}, {});
const result = await parser.next();
const handler = new Login7TokenHandler(new Connection({ server: 'servername' }));
handler[result.value.handlerName](result.value);
assert.strictEqual(handler.routingData.instanceName, 'instanceNameA');
assert.isTrue((await parser.next()).done);
});
});
28 changes: 28 additions & 0 deletions test/unit/token/env-change-token-parser-test.js
@@ -1,5 +1,8 @@
const StreamParser = require('../../../src/token/stream-parser');
const WritableTrackingBuffer = require('../../../src/tracking-buffer/writable-tracking-buffer');
const { Connection } = require('../../../src/tedious');
const Message = require('../../../src/message');
const Login7TokenHandler = require('../../../src/token/handler').Login7TokenHandler;
const assert = require('chai').assert;

describe('Env Change Token Parser', () => {
Expand Down Expand Up @@ -66,4 +69,29 @@ describe('Env Change Token Parser', () => {
const result = await parser.next();
assert.isTrue(result.done);
});

it('Test if routing data capture the correct instance name value', async function() {
const valueBuffer = new WritableTrackingBuffer(0);
valueBuffer.writeUInt8(0); // Protocol
valueBuffer.writeUInt16LE(1433); // Port
valueBuffer.writeUsVarchar('127.0.0.1\\instanceNameA', 'ucs-2');

const envValueDataBuffer = new WritableTrackingBuffer(0);
envValueDataBuffer.writeUInt8(20); // Type
envValueDataBuffer.writeUsVarbyte(valueBuffer.data);
envValueDataBuffer.writeUsVarbyte(Buffer.alloc(0));

const envChangeBuffer = new WritableTrackingBuffer(0);
envChangeBuffer.writeUInt8(0xE3); // TokenType
envChangeBuffer.writeUsVarbyte(envValueDataBuffer.data); // Length + EnvValueData

const responseMessage = new Message({ type: 0x04 });
responseMessage.end(envChangeBuffer.data);
const parser = StreamParser.parseTokens(responseMessage, {}, {});
const result = await parser.next();
const handler = new Login7TokenHandler(new Connection({ server: 'servername' }));
handler[result.value.handlerName](result.value);
assert.strictEqual(handler.routingData.instanceName, 'instanceNameA');
assert.isTrue((await parser.next()).done);
});
});

0 comments on commit 423c0a6

Please sign in to comment.