Skip to content

Commit

Permalink
test: use helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
Kikobeats committed Jan 30, 2022
1 parent 9eb0573 commit b3ac5d1
Show file tree
Hide file tree
Showing 13 changed files with 83 additions and 97 deletions.
8 changes: 2 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -205,13 +205,9 @@ This method is am implementation detail, normally you don't need to call it.
It will close the singleton browser associated with your browserless factory.

```js
const onExit = require('signal-exit')
const exitHook = require('exit-hook')

onExit(async (code, signal) => {
console.log('shutting down all the things')
await browserlessFactory.close()
console.log(`exit with code ${code} (${signal})`)
})
exitHook(browserlessFactory.close())
```

It should be used to gracefully shutdown your resources.
Expand Down
3 changes: 0 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,19 +77,16 @@
"concurrently": "latest",
"finepack": "latest",
"git-authors-cli": "latest",
"glob": "latest",
"gulp": "latest",
"gulp-autoprefixer": "latest",
"gulp-concat": "latest",
"gulp-cssnano": "latest",
"gulp-strip-css-comments": "latest",
"gulp-uglify": "latest",
"lerna": "latest",
"make-dir": "latest",
"nano-staged": "latest",
"npm-check-updates": "latest",
"prettier-standard": "latest",
"rimraf": "latest",
"simple-git-hooks": "latest",
"standard": "latest"
},
Expand Down
1 change: 0 additions & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
"ora": "~5.4.1",
"pretty-bytes": "~5.6.0",
"process-stats": "~3.5.6",
"signal-exit": "~3.0.6",
"term-img": "~5.0.0",
"unique-random-array": "~2.0.0"
},
Expand Down
4 changes: 2 additions & 2 deletions packages/function/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,10 @@
"vm2": "~3.9.5"
},
"devDependencies": {
"@browserless/test": "latest",
"ava": "3",
"browserless": "latest",
"puppeteer": "latest",
"@browserless/test": "latest"
"puppeteer": "latest"
},
"engines": {
"node": ">= 12"
Expand Down
3 changes: 2 additions & 1 deletion packages/goto/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,11 @@
"unique-random-array": "~2.0.0"
},
"devDependencies": {
"@browserless/test": "latest",
"ava": "3",
"browserless": "latest",
"puppeteer": "latest",
"signal-exit": "latest"
"exit-hook": "2"
},
"engines": {
"node": ">= 12"
Expand Down
4 changes: 2 additions & 2 deletions packages/goto/test/e2e/evasions.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
const test = require('ava')

const browserlessFactory = require('browserless')()
const onExit = require('signal-exit')
const exitHook = require('exit-hook')

onExit(browserlessFactory.close)
exitHook(browserlessFactory.close)

test.skip('arh.antoinevastel.com/bots/areyouheadless', async t => {
const browserless = await browserlessFactory.createContext()
Expand Down
103 changes: 45 additions & 58 deletions packages/goto/test/unit/evasions/index.js
Original file line number Diff line number Diff line change
@@ -1,50 +1,51 @@
'use strict'

const { initBrowserless } = require('@browserless/test/util')
const test = require('ava')

const browserlessFactory = require('browserless')({ evasions: false })
const onExit = require('signal-exit')
const path = require('path')

const evasions = require('../../../src/evasions')

const fileUrl = `file://${path.join(__dirname, '../../fixtures/dummy.html')}`

onExit(browserlessFactory.close)
const browserlessFactory = initBrowserless({ evasions: false })

test('randomize `user-agent`', async t => {
const browserless = await browserlessFactory.createContext()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()

const userAgent = () => page.evaluate(() => window.navigator.userAgent)

t.true(/HeadlessChrome/.test(await userAgent()))

await evasions.randomizeUserAgent(page)

t.false(/HeadlessChrome/.test(await userAgent()))

await page.close()
await browserless.destroyContext()
})

test('hide `navigator.webdriver`', async t => {
const browserless = await browserlessFactory.createContext()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()
const webdriver = () => page.evaluate(() => window.navigator.webdriver)
const javaEnabled = () => page.evaluate(() => navigator.javaEnabled())

await page.goto(fileUrl)
t.is(await webdriver(), false)
t.is(await javaEnabled(), false)

await page.close()
await browserless.destroyContext()
})

test('ensure `navigator.hardwareConcurrency` is present', async t => {
const browserless = await browserlessFactory.createContext()
const page = await browserless.page()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()
const hardwareConcurrency = () => page.evaluate(() => window.navigator.hardwareConcurrency)

await page.goto(fileUrl)
Expand All @@ -53,31 +54,29 @@ test('ensure `navigator.hardwareConcurrency` is present', async t => {

t.true(typeof n === 'number')
t.true(n !== 0)

await page.close()
await browserless.destroyContext()
})

test('inject chrome runtime', async t => {
const browserless = await browserlessFactory.createContext()
const page = await browserless.page()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()
const chrome = () => page.evaluate(() => window.chrome)
t.is(await chrome(), undefined)

await evasions.chromeRuntime(page)
await page.goto(fileUrl)

t.true((await chrome()) instanceof Object)

await page.close()
await browserless.destroyContext()
})

test('override `navigator.permissions`', async t => {
const browserless = await browserlessFactory.createContext()
const page = await browserless.page()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()
const permissionStatusState = () =>
page.evaluate(async () => {
const permissionStatus = await navigator.permissions.query({
Expand All @@ -92,15 +91,14 @@ test('override `navigator.permissions`', async t => {
await page.goto(fileUrl)

t.is(await permissionStatusState(), 'denied')

await page.close()
await browserless.destroyContext()
})

test('mock `navigator.plugins`', async t => {
const browserless = await browserlessFactory.createContext()
const page = await browserless.page()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()
const plugins = () => page.evaluate(() => window.navigator.plugins.length)
const mimeTypes = () => page.evaluate(() => window.navigator.mimeTypes.length)

Expand All @@ -112,26 +110,24 @@ test('mock `navigator.plugins`', async t => {

t.is(await plugins(), 3)
t.is(await mimeTypes(), 4)

await page.close()
await browserless.destroyContext()
})

test('ensure `navigator.languages` is present', async t => {
const browserless = await browserlessFactory.createContext()
const page = await browserless.page()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()
const languages = () => page.evaluate(() => window.navigator.languages)
t.deepEqual(await languages(), ['en-US'])

await page.close()
await browserless.destroyContext()
})

test('ensure media codecs are present', async t => {
const browserless = await browserlessFactory.createContext()
const page = await browserless.page()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()
await page.goto(fileUrl, { waitUntil: 'networkidle0' })

const videoCodecs = () =>
Expand Down Expand Up @@ -182,37 +178,34 @@ test('ensure media codecs are present', async t => {
m4a: 'maybe',
aac: 'probably'
})

await page.close()
await browserless.destroyContext()
})

test('ensure `console.debug` is defined', async t => {
const browserless = await browserlessFactory.createContext()
const page = await browserless.page()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()
const consoleDebug = () => page.evaluate(() => !!console.debug)
t.is(await consoleDebug(), true)

await page.close()
await browserless.destroyContext()
})

test('ensure `navigator.vendor` is defined', async t => {
const browserless = await browserlessFactory.createContext()
const page = await browserless.page()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()
const vendor = () => page.evaluate(() => window.navigator.vendor)
t.is(await vendor(), 'Google Inc.')

await page.close()
await browserless.destroyContext()
})

test('hide webgl vendor', async t => {
const browserless = await browserlessFactory.createContext()
const page = await browserless.page()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()
const webgl = () =>
page.evaluate(() => {
const canvas = document.createElement('canvas')
Expand All @@ -239,15 +232,14 @@ test('hide webgl vendor', async t => {
vendor: 'Intel Inc.',
renderer: 'Intel(R) Iris(TM) Plus Graphics 640'
})

await page.close()
await browserless.destroyContext()
})

test('hide `webgl2` vendor', async t => {
const browserless = await browserlessFactory.createContext()
const page = await browserless.page()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()
const webgl2 = () =>
page.evaluate(() => {
const canvas = document.createElement('canvas')
Expand All @@ -271,15 +263,14 @@ test('hide `webgl2` vendor', async t => {
vendor: 'Intel Inc.',
renderer: 'Intel(R) Iris(TM) Plus Graphics 640'
})

await page.close()
await browserless.destroyContext()
})

test('ensure broken images have dimensions', async t => {
const browserless = await browserlessFactory.createContext()
const page = await browserless.page()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()
const brokenImage = () =>
page.evaluate(() => {
const body = document.body
Expand All @@ -291,15 +282,14 @@ test('ensure broken images have dimensions', async t => {
})

t.true((await brokenImage()) !== '0x0')

await page.close()
await browserless.destroyContext()
})

test('sanetize stack traces', async t => {
const browserless = await browserlessFactory.createContext()
const page = await browserless.page()

t.teardown(() => browserless.destroyContext())

const page = await browserless.page()
const errorStackTrace = () =>
page.evaluate(() => {
const error = new Error('oh no!')
Expand All @@ -312,7 +302,4 @@ test('sanetize stack traces', async t => {
await page.goto(fileUrl)

t.false((await errorStackTrace()).includes('puppeteer_evaluation_script'))

await page.close()
await browserless.destroyContext()
})
Loading

0 comments on commit b3ac5d1

Please sign in to comment.