Skip to content

Commit 860b7e3

Browse files
committed
test: reuse fake http server
1 parent 31d9874 commit 860b7e3

File tree

4 files changed

+56
-21
lines changed

4 files changed

+56
-21
lines changed

test/cli.test.js

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,12 @@ import net from 'node:net'
1919
import getPort from 'get-port'
2020
import { $, path, tmpfile, tmpdir, fs } from '../build/index.js'
2121
import { isMain, normalizeExt } from '../build/cli.js'
22+
import { fakeServer } from './fixtures/server.mjs'
2223

2324
const __filename = fileURLToPath(import.meta.url)
2425
const spawn = $.spawn
2526
const nodeMajor = +process.versions?.node?.split('.')[0]
2627
const test22 = nodeMajor >= 22 ? test : test.skip
27-
const getServer = (resp = [], log = console.log) => {
28-
const server = net.createServer()
29-
server.on('connection', (conn) => {
30-
conn.on('data', (d) => {
31-
conn.write(resp.shift() || 'pong')
32-
})
33-
})
34-
server.stop = () => new Promise((resolve) => server.close(() => resolve()))
35-
server.start = (port) =>
36-
new Promise((resolve) => server.listen(port, () => resolve(server)))
37-
return server
38-
}
3928

4029
describe('cli', () => {
4130
// Helps to detect unresolved ProcessPromise.
@@ -213,7 +202,7 @@ console.log(a);
213202
test('scripts from https 200', async () => {
214203
const resp = await fs.readFile(path.resolve('test/fixtures/echo.http'))
215204
const port = await getPort()
216-
const server = await getServer([resp]).start(port)
205+
const server = await fakeServer([resp]).start(port)
217206
const out =
218207
await $`node build/cli.js --verbose http://127.0.0.1:${port}/script.mjs`
219208
assert.match(out.stderr, /test/)
@@ -222,7 +211,7 @@ console.log(a);
222211

223212
test('scripts from https 500', async () => {
224213
const port = await getPort()
225-
const server = await getServer(['HTTP/1.1 500\n\n']).listen(port)
214+
const server = await fakeServer(['HTTP/1.1 500\n\n']).listen(port)
226215
const out = await $`node build/cli.js http://127.0.0.1:${port}`.nothrow()
227216
assert.match(out.stderr, /Error: Can't get/)
228217
await server.stop()
@@ -231,7 +220,7 @@ console.log(a);
231220
test('scripts (md) from https', async () => {
232221
const resp = await fs.readFile(path.resolve('test/fixtures/md.http'))
233222
const port = await getPort()
234-
const server = await getServer([resp]).start(port)
223+
const server = await fakeServer([resp]).start(port)
235224
const out =
236225
await $`node build/cli.js --verbose http://127.0.0.1:${port}/script.md`
237226
assert.match(out.stderr, /md/)

test/fixtures/server.mjs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Copyright 2025 Google LLC
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// https://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
import net from 'node:net'
16+
17+
export const fakeServer = (data = []) => {
18+
const server = net.createServer()
19+
server.on('connection', (conn) => {
20+
conn.on('data', () => {
21+
const d = data.shift() || 'pong'
22+
const _d = typeof d === 'string' ? d.replaceAll('\n', '\r\n') : d
23+
conn.write(_d)
24+
})
25+
})
26+
server.stop = () => new Promise((resolve) => server.close(() => resolve()))
27+
server.start = async (port) => {
28+
const p = port || (await (await import('get-port')).getPort())
29+
server.url = `http://127.0.0.1:${port}`
30+
return new Promise((resolve) => server.listen(port, () => resolve(server)))
31+
}
32+
33+
return server
34+
}

test/smoke/node.test.cjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@ require('zx/globals')
2626
const p = await $({ nothrow: true })`echo foo; exit 3`
2727
assert.match(p.message, /exit code: 3/)
2828
}
29-
})()
3029

31-
console.log('smoke cjs: ok')
30+
console.log('smoke cjs: ok')
31+
})()

test/smoke/node.test.mjs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,24 @@ import 'zx/globals'
9393

9494
// fetch()
9595
{
96-
const url = 'https://httpbin.org/get'
96+
const server = (await import('../fixtures/server.mjs')).fakeServer([
97+
`HTTP/1.1 200 OK
98+
Content-Type: application/json
99+
Content-Length: 13
100+
Server: netcat!
101+
102+
{"foo":"bar"}
103+
`,
104+
])
105+
106+
const { url } = await server.start(8081)
97107
const res = await fetch(url)
98108
const json = await res.json()
99109
assert.equal(res.status, 200)
100-
assert.equal(json.url, url)
110+
assert.equal(json.foo, 'bar')
111+
112+
await server.stop()
101113
}
102-
})()
103114

104-
console.log('smoke mjs: ok')
115+
console.log('smoke mjs: ok')
116+
})()

0 commit comments

Comments
 (0)