main
 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
15import net from 'node:net'
16
17export 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 = d.toString('utf-8').split(/\r?\n/).join('\r\n')
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:${p}`
30    return new Promise((resolve) => server.listen(p, () => resolve(server)))
31  }
32
33  return server
34}