|
2 | 2 |
|
3 | 3 | var connect = require('../lib/connect').connect;
|
4 | 4 | var credentialsFromUrl = require('../lib/connect').credentialsFromUrl;
|
| 5 | +var defs = require('../lib/defs'); |
5 | 6 | var assert = require('assert');
|
6 | 7 | var util = require('./util');
|
7 | 8 | var net = require('net');
|
8 |
| -var fail = util.fail, succeed = util.succeed, |
| 9 | +var fail = util.fail, succeed = util.succeed, latch = util.latch, |
9 | 10 | kCallback = util.kCallback,
|
10 | 11 | succeedIfAttributeEquals = util.succeedIfAttributeEquals;
|
11 | 12 | var format = require('util').format;
|
@@ -147,5 +148,50 @@ suite("Connect API", function() {
|
147 | 148 | else done();
|
148 | 149 | });
|
149 | 150 | });
|
| 151 | +}); |
150 | 152 |
|
| 153 | +suite('Errors on connect', function() { |
| 154 | + var server |
| 155 | + afterEach(function() { |
| 156 | + if (server) { |
| 157 | + server.close(); |
| 158 | + } |
| 159 | + }) |
| 160 | + |
| 161 | + test("closes underlying connection on authentication error", function(done) { |
| 162 | + var bothDone = latch(2, done); |
| 163 | + server = net.createServer(function(socket) { |
| 164 | + socket.once('data', function(protocolHeader) { |
| 165 | + assert.deepStrictEqual( |
| 166 | + protocolHeader, |
| 167 | + Buffer.from("AMQP" + String.fromCharCode(0,0,9,1)) |
| 168 | + ); |
| 169 | + util.runServer(socket, function(send, wait) { |
| 170 | + send(defs.ConnectionStart, |
| 171 | + {versionMajor: 0, |
| 172 | + versionMinor: 9, |
| 173 | + serverProperties: {}, |
| 174 | + mechanisms: Buffer.from('PLAIN'), |
| 175 | + locales: Buffer.from('en_US')}); |
| 176 | + wait(defs.ConnectionStartOk)().then(function() { |
| 177 | + send(defs.ConnectionClose, |
| 178 | + {replyCode: 403, |
| 179 | + replyText: 'ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN', |
| 180 | + classId: 0, |
| 181 | + methodId: 0}); |
| 182 | + }); |
| 183 | + }); |
| 184 | + }); |
| 185 | + |
| 186 | + // Wait for the connection to be closed after the authentication error |
| 187 | + socket.once('end', function() { |
| 188 | + bothDone(); |
| 189 | + }); |
| 190 | + }).listen(0); |
| 191 | + |
| 192 | + connect('amqp://localhost:' + server.address().port, {}, function(err) { |
| 193 | + if (!err) bothDone(new Error('Expected authentication error')); |
| 194 | + bothDone(); |
| 195 | + }); |
| 196 | + }); |
151 | 197 | });
|
0 commit comments