diff --git a/packages/browserless/test/index.js b/packages/browserless/test/index.js
index b4d064e7c..dd6fe0f71 100644
--- a/packages/browserless/test/index.js
+++ b/packages/browserless/test/index.js
@@ -41,16 +41,19 @@ test('pass specific options to a context', async t => {
})
})
- const targetUrl = await runServer(t, ({ res }) => res.end())
-
- const { host: proxyServer } = new URL(proxyUrl)
- const browserless = await getBrowserContext(t, { proxyServer })
- const page = await browserless.page()
- t.teardown(() => page.close())
+ const url = await runServer(t, ({ res }) => {
+ res.writeHead(200, { 'Content-Type': 'text/html' })
+ res.end('
origin server reached
')
+ })
- await browserless.goto(page, { url: targetUrl })
+ const browserless = await getBrowserContext(t, { proxyServer: proxyUrl.slice(0, -1) })
+ const text = await browserless.text(url)
- t.deepEqual(proxiedRequestUrls, [targetUrl, new URL('/favicon.ico', targetUrl).toString()])
+ t.is(text, 'origin server reached')
+ t.deepEqual(proxiedRequestUrls, [
+ new URL(url).toString(),
+ new URL('/favicon.ico', url).toString()
+ ])
})
test('ensure to destroy browser contexts', async t => {
diff --git a/packages/test/util/create.js b/packages/test/util/create.js
index f05e56fce..7f3db2ba1 100644
--- a/packages/test/util/create.js
+++ b/packages/test/util/create.js
@@ -1,11 +1,28 @@
'use strict'
const { default: listen } = require('async-listen')
-const { createServer } = require('http')
const { onExit } = require('signal-exit')
+const { createServer } = require('http')
+const os = require('os')
const closeServer = server => require('util').promisify(server.close.bind(server))()
+let HOSTNAME = os.hostname()
+
+// Hostname might not be always accessible in environments other than GitHub
+// Actions. Therefore, we try to find an external IPv4 address to be used as a
+// hostname in these tests.
+const networkInterfaces = os.networkInterfaces()
+for (const key of Object.keys(networkInterfaces)) {
+ const interfaces = networkInterfaces[key]
+ for (const net of interfaces || []) {
+ if (net.family === 'IPv4' && !net.internal) {
+ HOSTNAME = net.address
+ break
+ }
+ }
+}
+
const runServer = async (t, handler) => {
const server = createServer(async (req, res) => {
try {
@@ -16,7 +33,10 @@ const runServer = async (t, handler) => {
res.end()
}
})
+
const url = await listen(server)
+ url.hostname = HOSTNAME
+
t.teardown(() => closeServer(server))
return url.toString()
}