mirror of
https://github.com/brianc/node-postgres.git
synced 2025-12-08 20:16:25 +00:00
91 lines
2.3 KiB
JavaScript
91 lines
2.3 KiB
JavaScript
'use strict'
|
|
var buffers = require('../../test-buffers')
|
|
var helper = require('./test-helper')
|
|
var suite = new helper.Suite()
|
|
|
|
var net = require('net')
|
|
|
|
var Server = function (response) {
|
|
this.server = undefined
|
|
this.socket = undefined
|
|
this.response = response
|
|
}
|
|
|
|
Server.prototype.start = function (cb) {
|
|
// this is our fake postgres server
|
|
// it responds with our specified response immediatley after receiving every buffer
|
|
// this is sufficient into convincing the client its connectet to a valid backend
|
|
// if we respond with a readyForQuery message
|
|
this.server = net.createServer(function (socket) {
|
|
this.socket = socket
|
|
if (this.response) {
|
|
this.socket.on('data', function (data) {
|
|
// deny request for SSL
|
|
if (data.length == 8) {
|
|
this.socket.write(Buffer.from('N', 'utf8'))
|
|
// consider all authentication requests as good
|
|
} else if (!data[0]) {
|
|
this.socket.write(buffers.authenticationOk())
|
|
// respond with our canned response
|
|
} else {
|
|
this.socket.write(this.response)
|
|
}
|
|
}.bind(this))
|
|
}
|
|
}.bind(this))
|
|
|
|
var port = 54321
|
|
|
|
var options = {
|
|
host: 'localhost',
|
|
port: port
|
|
}
|
|
this.server.listen(options.port, options.host, function () {
|
|
cb(options)
|
|
})
|
|
}
|
|
|
|
Server.prototype.drop = function () {
|
|
this.socket.destroy()
|
|
}
|
|
|
|
Server.prototype.close = function (cb) {
|
|
this.server.close(cb)
|
|
}
|
|
|
|
var testServer = function (server, cb) {
|
|
// wait for our server to start
|
|
server.start(function (options) {
|
|
// connect a client to it
|
|
var client = new helper.Client(options)
|
|
client.connect()
|
|
.catch((err) => {
|
|
assert(err instanceof Error)
|
|
clearTimeout(timeoutId)
|
|
server.close(cb)
|
|
})
|
|
|
|
server.server.on('connection', () => {
|
|
// after 50 milliseconds, drop the client
|
|
setTimeout(function () {
|
|
server.drop()
|
|
}, 50)
|
|
})
|
|
|
|
// blow up if we don't receive an error
|
|
var timeoutId = setTimeout(function () {
|
|
throw new Error('Client should have emitted an error but it did not.')
|
|
}, 5000)
|
|
})
|
|
}
|
|
|
|
suite.test('readyForQuery server', (done) => {
|
|
const respondingServer = new Server(buffers.readyForQuery())
|
|
testServer(respondingServer, done)
|
|
})
|
|
|
|
suite.test('silent server', (done) => {
|
|
const silentServer = new Server()
|
|
testServer(silentServer, done)
|
|
})
|