Skip to content

Commit 2988c50

Browse files
authored
Fix main branch tests (#297)
1 parent 2199122 commit 2988c50

File tree

9 files changed

+82
-48
lines changed

9 files changed

+82
-48
lines changed

packages/client-common/__tests__/integration/abort_request.test.ts

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,6 @@ describe('abort request', () => {
1313
})
1414

1515
describe('select', () => {
16-
it('cancels a select query before it is sent', async () => {
17-
const controller = new AbortController()
18-
const selectPromise = client.query({
19-
query: 'SELECT sleep(3)',
20-
format: 'CSV',
21-
abort_signal: controller.signal,
22-
})
23-
controller.abort()
24-
25-
await expectAsync(selectPromise).toBeRejectedWith(
26-
jasmine.objectContaining({
27-
message: jasmine.stringMatching('The user aborted a request'),
28-
}),
29-
)
30-
})
31-
3216
it('cancels a select query after it is sent', async () => {
3317
const controller = new AbortController()
3418
const selectPromise = client.query({
Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1-
export async function sleep(ms: number) {
2-
await new Promise((resolve) => setTimeout(resolve, ms))
1+
export async function sleep(ms: number): Promise<void> {
2+
await new Promise((resolve) =>
3+
setTimeout(() => {
4+
resolve(void 0)
5+
}, ms),
6+
)
37
}

packages/client-node/__tests__/integration/node_abort_request.test.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { createTestClient, guid } from '@test/utils'
55
import type Stream from 'stream'
66
import { makeObjectStream } from '../utils/stream'
77

8-
describe('[Node.js] abort request streaming', () => {
8+
describe('[Node.js] abort request', () => {
99
let client: ClickHouseClient<Stream.Readable>
1010

1111
beforeEach(() => {
@@ -16,6 +16,23 @@ describe('[Node.js] abort request streaming', () => {
1616
await client.close()
1717
})
1818

19+
it('cancels a select query before it is sent', async () => {
20+
const controller = new AbortController()
21+
const selectPromise = client.query({
22+
query: 'SELECT sleep(3)',
23+
format: 'CSV',
24+
abort_signal: controller.signal,
25+
})
26+
controller.abort()
27+
28+
await expectAsync(selectPromise).toBeRejectedWith(
29+
jasmine.objectContaining({
30+
// this happens even before we instantiate the request and its listeners, so that is just a plain AbortError
31+
name: 'AbortError',
32+
}),
33+
)
34+
})
35+
1936
it('cancels a select query while reading response', async () => {
2037
const controller = new AbortController()
2138
const selectPromise = client
@@ -136,7 +153,8 @@ describe('[Node.js] abort request streaming', () => {
136153

137154
await expectAsync(insertPromise).toBeRejectedWith(
138155
jasmine.objectContaining({
139-
message: jasmine.stringMatching('The user aborted a request'),
156+
// this happens even before we instantiate the request and its listeners, so that is just a plain AbortError
157+
name: 'AbortError',
140158
}),
141159
)
142160
})

packages/client-node/__tests__/integration/node_client.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ describe('[Node.js] Client', () => {
144144
const selectPromise = client.query({
145145
query: 'SELECT * FROM system.numbers LIMIT 5',
146146
})
147-
emitResponseBody(clientRequest, 'hi')
147+
await emitResponseBody(clientRequest, 'hi')
148148
await selectPromise
149149
}
150150

packages/client-node/__tests__/unit/node_client.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import * as c from '../../src/connection/create_connection'
99

1010
describe('[Node.js] createClient', () => {
1111
it('throws on incorrect "url" config value', () => {
12-
expect(() => createClient({ url: 'foo' })).toThrow(
12+
expect(() => createClient({ url: 'foobar' })).toThrow(
1313
jasmine.objectContaining({
1414
message: jasmine.stringContaining('ClickHouse URL is malformed.'),
1515
}),

packages/client-node/__tests__/unit/node_connection.test.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ describe('[Node.js] Connection', () => {
5252
query: 'SELECT * FROM system.numbers LIMIT 5',
5353
})
5454
const responseBody1 = 'foobar'
55-
emitResponseBody(request1, responseBody1)
55+
await emitResponseBody(request1, responseBody1)
5656
const queryResult1 = await selectPromise1
5757

5858
const request2 = stubClientRequest()
@@ -62,7 +62,7 @@ describe('[Node.js] Connection', () => {
6262
query: 'SELECT * FROM system.numbers LIMIT 5',
6363
})
6464
const responseBody2 = 'qaz'
65-
emitResponseBody(request2, responseBody2)
65+
await emitResponseBody(request2, responseBody2)
6666
const queryResult2 = await selectPromise2
6767

6868
await assertConnQueryResult(queryResult1, responseBody1)
@@ -93,7 +93,7 @@ describe('[Node.js] Connection', () => {
9393
query_id,
9494
})
9595
const responseBody = 'foobar'
96-
emitResponseBody(request, responseBody)
96+
await emitResponseBody(request, responseBody)
9797
const { stream } = await selectPromise
9898
expect(await getAsText(stream)).toBe(responseBody)
9999

@@ -119,7 +119,7 @@ describe('[Node.js] Connection', () => {
119119
query: 'SELECT * FROM system.numbers LIMIT 5',
120120
})
121121
const responseBody1 = 'foobar'
122-
emitResponseBody(request1, responseBody1)
122+
await emitResponseBody(request1, responseBody1)
123123
const queryResult1 = await execPromise1
124124

125125
const request2 = stubClientRequest()
@@ -129,7 +129,7 @@ describe('[Node.js] Connection', () => {
129129
query: 'SELECT * FROM system.numbers LIMIT 5',
130130
})
131131
const responseBody2 = 'qaz'
132-
emitResponseBody(request2, responseBody2)
132+
await emitResponseBody(request2, responseBody2)
133133
const queryResult2 = await execPromise2
134134

135135
await assertConnQueryResult(queryResult1, responseBody1)
@@ -162,7 +162,7 @@ describe('[Node.js] Connection', () => {
162162
query_id,
163163
})
164164
const responseBody = 'foobar'
165-
emitResponseBody(request, responseBody)
165+
await emitResponseBody(request, responseBody)
166166
const { stream } = await execPromise
167167
expect(await getAsText(stream)).toBe(responseBody)
168168

@@ -187,7 +187,7 @@ describe('[Node.js] Connection', () => {
187187
const cmdPromise = adapter.command({
188188
query: 'SELECT * FROM system.numbers LIMIT 5',
189189
})
190-
emitResponseBody(request1, 'Ok.')
190+
await emitResponseBody(request1, 'Ok.')
191191
const { query_id } = await cmdPromise
192192

193193
const request2 = stubClientRequest()
@@ -196,7 +196,7 @@ describe('[Node.js] Connection', () => {
196196
const cmdPromise2 = adapter.command({
197197
query: 'SELECT * FROM system.numbers LIMIT 5',
198198
})
199-
emitResponseBody(request2, 'Ok.')
199+
await emitResponseBody(request2, 'Ok.')
200200
const { query_id: query_id2 } = await cmdPromise2
201201

202202
expect(query_id).not.toEqual(query_id2)
@@ -223,7 +223,7 @@ describe('[Node.js] Connection', () => {
223223
query: 'SELECT * FROM system.numbers LIMIT 5',
224224
query_id,
225225
})
226-
emitResponseBody(request, 'Ok.')
226+
await emitResponseBody(request, 'Ok.')
227227
const { query_id: result_query_id } = await cmdPromise
228228

229229
expect(httpRequestStub).toHaveBeenCalledTimes(1)
@@ -250,7 +250,7 @@ describe('[Node.js] Connection', () => {
250250
values: 'foobar',
251251
})
252252
const responseBody1 = 'foobar'
253-
emitResponseBody(request1, responseBody1)
253+
await emitResponseBody(request1, responseBody1)
254254
const { query_id: queryId1 } = await insertPromise1
255255

256256
const request2 = stubClientRequest()
@@ -261,7 +261,7 @@ describe('[Node.js] Connection', () => {
261261
values: 'foobar',
262262
})
263263
const responseBody2 = 'qaz'
264-
emitResponseBody(request2, responseBody2)
264+
await emitResponseBody(request2, responseBody2)
265265
const { query_id: queryId2 } = await insertPromise2
266266

267267
assertQueryId(queryId1)
@@ -293,7 +293,7 @@ describe('[Node.js] Connection', () => {
293293
query_id,
294294
})
295295
const responseBody = 'foobar'
296-
emitResponseBody(request, responseBody)
296+
await emitResponseBody(request, responseBody)
297297
await insertPromise
298298

299299
const [url] = httpRequestStub.calls.mostRecent().args

packages/client-node/__tests__/unit/node_connection_compression.test.ts

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,15 @@ import {
1313
} from '../utils/http_stubs'
1414

1515
describe('Node.js Connection compression', () => {
16+
let httpRequestStub: jasmine.Spy<typeof Http.request>
17+
beforeEach(() => {
18+
httpRequestStub = spyOn(Http, 'request')
19+
})
20+
1621
describe('response decompression', () => {
1722
it('hints ClickHouse server to send a gzip compressed response if compress_request: true', async () => {
1823
const request = stubClientRequest()
19-
const httpRequestStub = spyOn(Http, 'request').and.returnValue(request)
24+
httpRequestStub.and.returnValue(request)
2025

2126
const adapter = buildHttpConnection({
2227
compression: {
@@ -41,7 +46,8 @@ describe('Node.js Connection compression', () => {
4146

4247
it('does not send a compression algorithm hint if compress_request: false', async () => {
4348
const request = stubClientRequest()
44-
const httpRequestStub = spyOn(Http, 'request').and.returnValue(request)
49+
httpRequestStub.and.returnValue(request)
50+
4551
const adapter = buildHttpConnection({
4652
compression: {
4753
decompress_response: false,
@@ -54,7 +60,7 @@ describe('Node.js Connection compression', () => {
5460
})
5561

5662
const responseBody = 'foobar'
57-
emitResponseBody(request, responseBody)
63+
await emitResponseBody(request, responseBody)
5864

5965
const queryResult = await selectPromise
6066
await assertConnQueryResult(queryResult, responseBody)
@@ -66,7 +72,8 @@ describe('Node.js Connection compression', () => {
6672

6773
it('uses request-specific settings over config settings', async () => {
6874
const request = stubClientRequest()
69-
const httpRequestStub = spyOn(Http, 'request').and.returnValue(request)
75+
httpRequestStub.and.returnValue(request)
76+
7077
const adapter = buildHttpConnection({
7178
compression: {
7279
decompress_response: false,
@@ -94,7 +101,8 @@ describe('Node.js Connection compression', () => {
94101

95102
it('decompresses a gzip response', async () => {
96103
const request = stubClientRequest()
97-
spyOn(Http, 'request').and.returnValue(request)
104+
httpRequestStub.and.returnValue(request)
105+
98106
const adapter = buildHttpConnection({
99107
compression: {
100108
decompress_response: true,
@@ -115,7 +123,7 @@ describe('Node.js Connection compression', () => {
115123

116124
it('throws on an unexpected encoding', async () => {
117125
const request = stubClientRequest()
118-
spyOn(Http, 'request').and.returnValue(request)
126+
httpRequestStub.and.returnValue(request)
119127
const adapter = buildHttpConnection({
120128
compression: {
121129
decompress_response: true,
@@ -138,7 +146,7 @@ describe('Node.js Connection compression', () => {
138146

139147
it('provides decompression error to a stream consumer', async () => {
140148
const request = stubClientRequest()
141-
spyOn(Http, 'request').and.returnValue(request)
149+
httpRequestStub.and.returnValue(request)
142150
const adapter = buildHttpConnection({
143151
compression: {
144152
decompress_response: true,
@@ -151,6 +159,7 @@ describe('Node.js Connection compression', () => {
151159
})
152160

153161
// No GZIP encoding for the body here
162+
await sleep(0)
154163
request.emit(
155164
'response',
156165
buildIncomingMessage({
@@ -196,23 +205,23 @@ describe('Node.js Connection compression', () => {
196205
next()
197206
},
198207
final() {
199-
Zlib.unzip(chunks, (err, result) => {
208+
Zlib.unzip(chunks, (_err, result) => {
200209
finalResult = result
201210
})
202211
},
203212
}) as ClientRequest
204-
205-
const httpRequestStub = spyOn(Http, 'request').and.returnValue(request)
213+
httpRequestStub.and.returnValue(request)
206214

207215
void adapter.insert({
208216
query: 'INSERT INTO insert_compression_table',
209217
values,
210218
})
211219

212220
// trigger stream pipeline
221+
await sleep(0)
213222
request.emit('socket', socketStub)
214-
215223
await sleep(100)
224+
216225
expect(finalResult!.toString('utf8')).toEqual(values)
217226
expect(httpRequestStub).toHaveBeenCalledTimes(1)
218227
const calledWith = httpRequestStub.calls.mostRecent().args[1]

packages/client-node/__tests__/utils/http_stubs.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { LogWriter } from '@clickhouse/client-common'
2-
import { TestLogger } from '@test/utils'
2+
import { sleep, TestLogger } from '@test/utils'
33
import { randomUUID } from '@test/utils/guid'
44
import type Http from 'http'
55
import type { ClientRequest } from 'http'
@@ -63,10 +63,11 @@ export function stubClientRequest(): ClientRequest {
6363
return request
6464
}
6565

66-
export function emitResponseBody(
66+
export async function emitResponseBody(
6767
request: Http.ClientRequest,
6868
body: string | Buffer | undefined,
6969
) {
70+
await sleep(0)
7071
request.emit(
7172
'response',
7273
buildIncomingMessage({
@@ -80,6 +81,7 @@ export async function emitCompressedBody(
8081
body: string | Buffer,
8182
encoding = 'gzip',
8283
) {
84+
await sleep(0)
8385
const compressedBody = await gzip(body)
8486
request.emit(
8587
'response',

packages/client-web/__tests__/integration/web_abort_request.test.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { ClickHouseClient, Row } from '@clickhouse/client-common'
22
import { createTestClient } from '@test/utils'
33

4-
describe('[Web] abort request streaming', () => {
4+
describe('[Web] abort request', () => {
55
let client: ClickHouseClient<ReadableStream>
66

77
beforeEach(() => {
@@ -12,6 +12,23 @@ describe('[Web] abort request streaming', () => {
1212
await client.close()
1313
})
1414

15+
// a slightly different assertion vs the same Node.js test
16+
it('cancels a select query before it is sent', async () => {
17+
const controller = new AbortController()
18+
const selectPromise = client.query({
19+
query: 'SELECT sleep(3)',
20+
format: 'CSV',
21+
abort_signal: controller.signal,
22+
})
23+
controller.abort()
24+
25+
await expectAsync(selectPromise).toBeRejectedWith(
26+
jasmine.objectContaining({
27+
message: jasmine.stringMatching('The user aborted a request'),
28+
}),
29+
)
30+
})
31+
1532
it('cancels a select query while reading response', async () => {
1633
const controller = new AbortController()
1734
const selectPromise = client

0 commit comments

Comments
 (0)