diff --git a/test/unit/rerouting-test.js b/test/unit/rerouting-test.js index b89fc0218..cb4865822 100644 --- a/test/unit/rerouting-test.js +++ b/test/unit/rerouting-test.js @@ -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); @@ -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 } }); @@ -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); - }); }); diff --git a/test/unit/token/env-change-token-parser-test.js b/test/unit/token/env-change-token-parser-test.js index 43919e727..e96a20b0c 100644 --- a/test/unit/token/env-change-token-parser-test.js +++ b/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', () => { @@ -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); + }); });