Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f78be28

Browse files
committed
chore: update tests
1 parent 6b802d5 commit f78be28

File tree

1 file changed

+124
-46
lines changed

1 file changed

+124
-46
lines changed
Lines changed: 124 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,138 @@
11
'use strict'
2-
var helper = require('./test-helper')
3-
var assert = require('assert')
2+
const helper = require('../test-helper')
3+
const pg = helper.pg
4+
const assert = require('assert')
45

5-
const pool = new helper.pg.Pool({
6-
maxResultSize: 100, // Very small size limit (100 bytes)
7-
// Keep other connection parameters from helper
8-
...helper.args,
6+
process.on('unhandledRejection', function (e) {
7+
console.error(e, e.stack)
8+
process.exit(1)
99
})
1010

11-
// Flag to track if we've seen the first type of error message
12-
let sizeExceededErrorSeen = false
13-
14-
pool.connect(
15-
assert.success(function (client) {
16-
// First create a temp table
17-
client.query(
18-
'CREATE TEMP TABLE large_result_test(id SERIAL, data TEXT)',
19-
assert.success(function () {
20-
// Insert data that will exceed the size limit when selected
21-
const insertPromises = []
22-
for (let i = 0; i < 20; i++) {
23-
// Each row will have 50 bytes of data
24-
const data = 'x'.repeat(50)
25-
insertPromises.push(client.query('INSERT INTO large_result_test(data) VALUES(1ドル)', [data]))
11+
const suite = new helper.Suite()
12+
13+
// Test that result size exceeding maxResultSize properly raises an error
14+
suite.test('maxResultSize limit triggers error', (cb) => {
15+
// Create a pool with a very small result size limit
16+
const pool = new pg.Pool({
17+
maxResultSize: 100, // Very small limit (100 bytes)
18+
...helper.args,
19+
})
20+
21+
// Track if we've seen the size exceeded error
22+
let sizeExceededErrorSeen = false
23+
24+
// Set up error handler on pool
25+
pool.on('error', (err) => {
26+
console.log('Pool error:', err.message, err.code)
27+
})
28+
29+
pool
30+
.connect()
31+
.then((client) => {
32+
// Set up client error listener for error events
33+
client.on('error', (err) => {
34+
console.log('Client error event:', err.message, err.code)
35+
36+
// If we get the expected error, mark it
37+
if (err.message === 'Query result size exceeded the configured limit') {
38+
assert.equal(err.code, 'RESULT_SIZE_EXCEEDED', 'Error should have RESULT_SIZE_EXCEEDED code')
39+
sizeExceededErrorSeen = true
2640
}
41+
})
2742

28-
// After inserting all rows, attempt to select them all
29-
Promise.all(insertPromises).then(function () {
30-
client.on('error', (err) => {
31-
// If we see the first error type, mark it
32-
if (err.message === 'Query result size exceeded the configured limit') {
33-
assert.equal(
34-
err.code,
35-
'RESULT_SIZE_EXCEEDED',
36-
'Size exceeded error should have RESULT_SIZE_EXCEEDED code'
37-
)
38-
sizeExceededErrorSeen = true
39-
}
40-
41-
// For the second error type, we just verify it happens after we've seen the first type
42-
if (err.message === 'Received unexpected commandComplete message from backend.') {
43-
assert(sizeExceededErrorSeen, 'Should have seen size exceeded error before commandComplete error')
44-
}
45-
})
43+
// Create a temp table
44+
return client
45+
.query('CREATE TEMP TABLE large_result_test(id SERIAL, data TEXT)')
46+
.then(() => {
47+
// Insert data that will exceed the size limit when selected
48+
const insertPromises = []
49+
for (let i = 0; i < 20; i++) {
50+
// Each row will have 50 bytes of data
51+
const data = 'x'.repeat(50)
52+
insertPromises.push(client.query('INSERT INTO large_result_test(data) VALUES(1ドル)', [data]))
53+
}
54+
return Promise.all(insertPromises)
55+
})
56+
.then(() => {
57+
console.log('Running query that should exceed size limit...')
4658

4759
// This query should fail due to exceeding size limit
48-
client
60+
returnclient
4961
.query('SELECT * FROM large_result_test')
50-
.then(function(_result) {
62+
.then(()=> {
5163
throw new Error('Query should have failed due to size limit')
5264
})
53-
.catch(function (err) {
54-
assert.equal(err.code, 'RESULT_SIZE_EXCEEDED', 'Query error should have RESULT_SIZE_EXCEEDED code')
65+
.catch((err) => {
66+
console.log('Query error caught:', err.message, err.code)
67+
68+
// The error should have the correct code
69+
assert.equal(err.code, 'RESULT_SIZE_EXCEEDED', 'Error should have RESULT_SIZE_EXCEEDED code')
70+
71+
// Give a little time for error events to be processed
72+
return new Promise((resolve) => setTimeout(resolve, 100)).then(() => {
73+
// Verify we saw the expected error event
74+
assert(sizeExceededErrorSeen, 'Should have seen the size exceeded error event')
75+
76+
// Attempt cleanup but don't fail if it errors
77+
return client.query('DROP TABLE IF EXISTS large_result_test').catch(() => {
78+
/* ignore cleanup errors */
79+
})
80+
})
5581
})
5682
})
57-
})
58-
)
83+
.then(() => {
84+
client.release()
85+
pool.end(cb)
86+
})
87+
.catch((err) => {
88+
client.release()
89+
pool.end(() => cb(err))
90+
})
91+
})
92+
.catch((err) => {
93+
pool.end(() => cb(err))
94+
})
95+
})
96+
97+
// Test that results under the maxResultSize limit work normally
98+
suite.test('results under maxResultSize limit work correctly', (cb) => {
99+
// Create a pool with a reasonably large limit
100+
const pool = new pg.Pool({
101+
maxResultSize: 10 * 1024, // 10KB is plenty for small results
102+
...helper.args,
59103
})
60-
)
104+
105+
pool
106+
.connect()
107+
.then((client) => {
108+
// Create a temp table
109+
return client
110+
.query('CREATE TEMP TABLE small_result_test(id SERIAL, data TEXT)')
111+
.then(() => {
112+
// Insert a small amount of data
113+
return client.query('INSERT INTO small_result_test(data) VALUES(1ドル)', ['small_data'])
114+
})
115+
.then(() => {
116+
// This query should succeed
117+
return client.query('SELECT * FROM small_result_test').then((result) => {
118+
// Verify the result
119+
assert.equal(result.rows.length, 1, 'Should get 1 row')
120+
assert.equal(result.rows[0].data, 'small_data', 'Data should match')
121+
122+
// Clean up
123+
return client.query('DROP TABLE small_result_test')
124+
})
125+
})
126+
.then(() => {
127+
client.release()
128+
pool.end(cb)
129+
})
130+
.catch((err) => {
131+
client.release()
132+
pool.end(() => cb(err))
133+
})
134+
})
135+
.catch((err) => {
136+
pool.end(() => cb(err))
137+
})
138+
})

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /