Skip to content

Commit b89eb0f

Browse files
committed
Write tests & unify treatment of no-verify
1 parent d8c7005 commit b89eb0f

File tree

2 files changed

+48
-25
lines changed

2 files changed

+48
-25
lines changed

packages/pg/lib/connection-parameters.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,15 @@ var val = function (key, config, envVar) {
2525
return config[key] || envVar || defaults[key]
2626
}
2727

28-
var useSsl = function () {
29-
switch (process.env.PGSSLMODE) {
28+
var useSsl = function (modeFromConfig) {
29+
// if the ssl parameter passed to config is not a string, just return it
30+
// directly (it will be passed directly to tls.connect)
31+
if (modeFromConfig !== undefined && typeof modeFromConfig !== 'string') {
32+
return modeFromConfig
33+
}
34+
const mode = modeFromConfig || process.env.PGSSLMODE
35+
36+
switch (mode) {
3037
case 'disable':
3138
return false
3239
case 'prefer':
@@ -70,7 +77,8 @@ var ConnectionParameters = function (config) {
7077
})
7178

7279
this.binary = val('binary', config)
73-
this.ssl = typeof config.ssl === 'undefined' ? useSsl() : config.ssl
80+
// this.ssl = typeof config.ssl === 'undefined' ? useSsl() : config.ssl
81+
this.ssl = useSsl(config.ssl)
7482
this.client_encoding = val('client_encoding', config)
7583
this.replication = val('replication', config)
7684
// a domain socket begins with '/'

packages/pg/test/unit/connection-parameters/environment-variable-tests.js

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
'use strict'
22
var helper = require(__dirname + '/../test-helper')
3+
const Suite = require('../../suite')
4+
35
var assert = require('assert')
46
var ConnectionParameters = require(__dirname + '/../../../lib/connection-parameters')
57
var defaults = require(__dirname + '/../../../lib').defaults
@@ -11,7 +13,17 @@ for (var key in process.env) {
1113
delete process.env[key]
1214
}
1315

14-
test('ConnectionParameters initialized from environment variables', function (t) {
16+
const suite = new Suite('ConnectionParameters')
17+
18+
const clearEnv = () => {
19+
// clear process.env
20+
for (var key in process.env) {
21+
delete process.env[key]
22+
}
23+
}
24+
25+
suite.test('ConnectionParameters initialized from environment variables', function () {
26+
clearEnv()
1527
process.env['PGHOST'] = 'local'
1628
process.env['PGUSER'] = 'bmc2'
1729
process.env['PGPORT'] = 7890
@@ -26,7 +38,13 @@ test('ConnectionParameters initialized from environment variables', function (t)
2638
assert.equal(subject.password, 'open', 'env password')
2739
})
2840

29-
test('ConnectionParameters initialized from mix', function (t) {
41+
suite.test('ConnectionParameters initialized from mix', function () {
42+
clearEnv()
43+
process.env['PGHOST'] = 'local'
44+
process.env['PGUSER'] = 'bmc2'
45+
process.env['PGPORT'] = 7890
46+
process.env['PGDATABASE'] = 'allyerbase'
47+
process.env['PGPASSWORD'] = 'open'
3048
delete process.env['PGPASSWORD']
3149
delete process.env['PGDATABASE']
3250
var subject = new ConnectionParameters({
@@ -40,12 +58,8 @@ test('ConnectionParameters initialized from mix', function (t) {
4058
assert.equal(subject.password, defaults.password, 'defaults password')
4159
})
4260

43-
// clear process.env
44-
for (var key in process.env) {
45-
delete process.env[key]
46-
}
47-
48-
test('connection string parsing', function (t) {
61+
suite.test('connection string parsing', function () {
62+
clearEnv()
4963
var string = 'postgres://brian:pw@boom:381/lala'
5064
var subject = new ConnectionParameters(string)
5165
assert.equal(subject.host, 'boom', 'string host')
@@ -55,7 +69,10 @@ test('connection string parsing', function (t) {
5569
assert.equal(subject.database, 'lala', 'string database')
5670
})
5771

58-
test('connection string parsing - ssl', function (t) {
72+
suite.test('connection string parsing - ssl', function () {
73+
// clear process.env
74+
clearEnv()
75+
5976
var string = 'postgres://brian:pw@boom:381/lala?ssl=true'
6077
var subject = new ConnectionParameters(string)
6178
assert.equal(subject.ssl, true, 'ssl')
@@ -75,27 +92,24 @@ test('connection string parsing - ssl', function (t) {
7592
string = 'postgres://brian:pw@boom:381/lala'
7693
subject = new ConnectionParameters(string)
7794
assert.equal(!!subject.ssl, false, 'ssl')
78-
})
7995

80-
// clear process.env
81-
for (var key in process.env) {
82-
delete process.env[key]
83-
}
96+
string = 'postgres://brian:pw@boom:381/lala?ssl=no-verify'
97+
subject = new ConnectionParameters(string)
98+
assert.deepStrictEqual(subject.ssl, { rejectUnauthorized: false }, 'ssl')
99+
})
84100

85-
test('ssl is false by default', function () {
101+
suite.test('ssl is false by default', function () {
102+
clearEnv()
86103
var subject = new ConnectionParameters()
87104
assert.equal(subject.ssl, false)
88105
})
89106

90107
var testVal = function (mode, expected) {
91-
// clear process.env
92-
for (var key in process.env) {
93-
delete process.env[key]
94-
}
95-
process.env.PGSSLMODE = mode
96-
test('ssl is ' + expected + ' when $PGSSLMODE=' + mode, function () {
108+
suite.test('ssl is ' + expected + ' when $PGSSLMODE=' + mode, function () {
109+
clearEnv()
110+
process.env.PGSSLMODE = mode
97111
var subject = new ConnectionParameters()
98-
assert.equal(subject.ssl, expected)
112+
assert.deepStrictEqual(subject.ssl, expected)
99113
})
100114
}
101115

@@ -106,6 +120,7 @@ testVal('prefer', true)
106120
testVal('require', true)
107121
testVal('verify-ca', true)
108122
testVal('verify-full', true)
123+
testVal('no-verify', { rejectUnauthorized: false })
109124

110125
// restore process.env
111126
for (var key in realEnv) {

0 commit comments

Comments
 (0)