mirror of
https://github.com/brianc/node-postgres.git
synced 2025-12-08 20:16:25 +00:00
* Added the missing connect_timeout and keepalives_idle config parameters * Implementation and tests for keepAliveInitialDelayMillis and connectionTimeoutMillis [squashed 4]
251 lines
6.7 KiB
JavaScript
251 lines
6.7 KiB
JavaScript
'use strict'
|
|
// make assert a global...
|
|
global.assert = require('assert')
|
|
var EventEmitter = require('events').EventEmitter
|
|
var sys = require('util')
|
|
|
|
var BufferList = require('./buffer-list')
|
|
const Suite = require('./suite')
|
|
const args = require('./cli')
|
|
|
|
var Connection = require('./../lib/connection')
|
|
|
|
global.Client = require('./../lib').Client
|
|
|
|
process.on('uncaughtException', function (d) {
|
|
if ('stack' in d && 'message' in d) {
|
|
console.log('Message: ' + d.message)
|
|
console.log(d.stack)
|
|
} else {
|
|
console.log(d)
|
|
}
|
|
process.exit(-1)
|
|
})
|
|
|
|
assert.same = function (actual, expected) {
|
|
for (var key in expected) {
|
|
assert.equal(actual[key], expected[key])
|
|
}
|
|
}
|
|
|
|
assert.emits = function (item, eventName, callback, message) {
|
|
var called = false
|
|
var id = setTimeout(function () {
|
|
test("Should have called '" + eventName + "' event", function () {
|
|
assert.ok(called, message || "Expected '" + eventName + "' to be called.")
|
|
})
|
|
}, 5000)
|
|
|
|
item.once(eventName, function () {
|
|
if (eventName === 'error') {
|
|
// belt and braces test to ensure all error events return an error
|
|
assert.ok(arguments[0] instanceof Error,
|
|
'Expected error events to throw instances of Error but found: ' + sys.inspect(arguments[0]))
|
|
}
|
|
called = true
|
|
clearTimeout(id)
|
|
assert.ok(true)
|
|
if (callback) {
|
|
callback.apply(item, arguments)
|
|
}
|
|
})
|
|
}
|
|
|
|
assert.UTCDate = function (actual, year, month, day, hours, min, sec, milisecond) {
|
|
var actualYear = actual.getUTCFullYear()
|
|
assert.equal(actualYear, year, 'expected year ' + year + ' but got ' + actualYear)
|
|
|
|
var actualMonth = actual.getUTCMonth()
|
|
assert.equal(actualMonth, month, 'expected month ' + month + ' but got ' + actualMonth)
|
|
|
|
var actualDate = actual.getUTCDate()
|
|
assert.equal(actualDate, day, 'expected day ' + day + ' but got ' + actualDate)
|
|
|
|
var actualHours = actual.getUTCHours()
|
|
assert.equal(actualHours, hours, 'expected hours ' + hours + ' but got ' + actualHours)
|
|
|
|
var actualMin = actual.getUTCMinutes()
|
|
assert.equal(actualMin, min, 'expected min ' + min + ' but got ' + actualMin)
|
|
|
|
var actualSec = actual.getUTCSeconds()
|
|
assert.equal(actualSec, sec, 'expected sec ' + sec + ' but got ' + actualSec)
|
|
|
|
var actualMili = actual.getUTCMilliseconds()
|
|
assert.equal(actualMili, milisecond, 'expected milisecond ' + milisecond + ' but got ' + actualMili)
|
|
}
|
|
|
|
assert.equalBuffers = function (actual, expected) {
|
|
if (actual.length != expected.length) {
|
|
spit(actual, expected)
|
|
assert.equal(actual.length, expected.length)
|
|
}
|
|
for (var i = 0; i < actual.length; i++) {
|
|
if (actual[i] != expected[i]) {
|
|
spit(actual, expected)
|
|
}
|
|
assert.equal(actual[i], expected[i])
|
|
}
|
|
}
|
|
|
|
assert.empty = function (actual) {
|
|
assert.lengthIs(actual, 0)
|
|
}
|
|
|
|
assert.success = function (callback) {
|
|
if (callback.length === 1 || callback.length === 0) {
|
|
return assert.calls(function (err, arg) {
|
|
if (err) {
|
|
console.log(err)
|
|
}
|
|
assert(!err)
|
|
callback(arg)
|
|
})
|
|
} else if (callback.length === 2) {
|
|
return assert.calls(function (err, arg1, arg2) {
|
|
if (err) {
|
|
console.log(err)
|
|
}
|
|
assert(!err)
|
|
callback(arg1, arg2)
|
|
})
|
|
} else {
|
|
throw new Error('need to preserve arrity of wrapped function')
|
|
}
|
|
}
|
|
|
|
assert.throws = function (offender) {
|
|
try {
|
|
offender()
|
|
} catch (e) {
|
|
assert.ok(e instanceof Error, 'Expected ' + offender + ' to throw instances of Error')
|
|
return
|
|
}
|
|
assert.ok(false, 'Expected ' + offender + ' to throw exception')
|
|
}
|
|
|
|
assert.lengthIs = function (actual, expectedLength) {
|
|
assert.equal(actual.length, expectedLength)
|
|
}
|
|
|
|
var expect = function (callback, timeout) {
|
|
var executed = false
|
|
timeout = timeout || parseInt(process.env.TEST_TIMEOUT) || 5000
|
|
var id = setTimeout(function () {
|
|
assert.ok(executed,
|
|
'Expected execution of function to be fired within ' + timeout +
|
|
' milliseconds ' +
|
|
' (hint: export TEST_TIMEOUT=<timeout in milliseconds>' +
|
|
' to change timeout globally)' +
|
|
callback.toString())
|
|
}, timeout)
|
|
|
|
if (callback.length < 3) {
|
|
return function (err, queryResult) {
|
|
clearTimeout(id)
|
|
if (err) {
|
|
assert.ok(err instanceof Error, 'Expected errors to be instances of Error: ' + sys.inspect(err))
|
|
}
|
|
callback.apply(this, arguments)
|
|
}
|
|
} else if (callback.length == 3) {
|
|
return function (err, arg1, arg2) {
|
|
clearTimeout(id)
|
|
if (err) {
|
|
assert.ok(err instanceof Error, 'Expected errors to be instances of Error: ' + sys.inspect(err))
|
|
}
|
|
callback.apply(this, arguments)
|
|
}
|
|
} else {
|
|
throw new Error('Unsupported arrity ' + callback.length)
|
|
}
|
|
}
|
|
assert.calls = expect
|
|
|
|
assert.isNull = function (item, message) {
|
|
message = message || 'expected ' + item + ' to be null'
|
|
assert.ok(item === null, message)
|
|
}
|
|
|
|
const getMode = () => {
|
|
if (args.native) return 'native'
|
|
if (args.binary) return 'binary'
|
|
return ''
|
|
}
|
|
|
|
global.test = function (name, action) {
|
|
test.testCount ++
|
|
test[name] = action
|
|
var result = test[name]()
|
|
if (result === false) {
|
|
process.stdout.write('?')
|
|
} else {
|
|
process.stdout.write('.')
|
|
}
|
|
}
|
|
|
|
// print out the filename
|
|
process.stdout.write(require('path').basename(process.argv[1]))
|
|
if (args.binary) process.stdout.write(' (binary)')
|
|
if (args.native) process.stdout.write(' (native)')
|
|
|
|
process.on('exit', function () {
|
|
console.log('')
|
|
})
|
|
|
|
process.on('uncaughtException', function (err) {
|
|
console.error('\n %s', err.stack || err.toString())
|
|
// causes xargs to abort right away
|
|
process.exit(255)
|
|
})
|
|
|
|
var count = 0
|
|
|
|
var Sink = function (expected, timeout, callback) {
|
|
var defaultTimeout = 5000
|
|
if (typeof timeout === 'function') {
|
|
callback = timeout
|
|
timeout = defaultTimeout
|
|
}
|
|
timeout = timeout || defaultTimeout
|
|
var internalCount = 0
|
|
var kill = function () {
|
|
assert.ok(false, 'Did not reach expected ' + expected + ' with an idle timeout of ' + timeout)
|
|
}
|
|
var killTimeout = setTimeout(kill, timeout)
|
|
return {
|
|
add: function (count) {
|
|
count = count || 1
|
|
internalCount += count
|
|
clearTimeout(killTimeout)
|
|
if (internalCount < expected) {
|
|
killTimeout = setTimeout(kill, timeout)
|
|
} else {
|
|
assert.equal(internalCount, expected)
|
|
callback()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var getTimezoneOffset = Date.prototype.getTimezoneOffset
|
|
|
|
var setTimezoneOffset = function (minutesOffset) {
|
|
Date.prototype.getTimezoneOffset = function () { return minutesOffset }
|
|
}
|
|
|
|
var resetTimezoneOffset = function () {
|
|
Date.prototype.getTimezoneOffset = getTimezoneOffset
|
|
}
|
|
|
|
module.exports = {
|
|
Sink: Sink,
|
|
Suite: Suite,
|
|
pg: require('./../lib/'),
|
|
args: args,
|
|
config: args,
|
|
sys: sys,
|
|
Client: Client,
|
|
setTimezoneOffset: setTimezoneOffset,
|
|
resetTimezoneOffset: resetTimezoneOffset
|
|
}
|