123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- const { remote } = require('electron')
- const chai = require('chai')
- const dirtyChai = require('dirty-chai')
- const fs = require('fs')
- const path = require('path')
- const { expect } = chai
- const { app, contentTracing } = remote
- chai.use(dirtyChai)
- const timeout = async (milliseconds) => {
- return new Promise((resolve) => {
- setTimeout(resolve, milliseconds)
- })
- }
- const getPathInATempFolder = (filename) => {
- return path.join(app.getPath('temp'), filename)
- }
- describe('contentTracing', () => {
- beforeEach(function () {
- // FIXME: The tests are skipped on arm/arm64.
- if (process.platform === 'linux' &&
- ['arm', 'arm64'].includes(process.arch)) {
- this.skip()
- }
- })
- const record = async (options, outputFilePath, recordTimeInMilliseconds = 1e3) => {
- await app.whenReady()
- await contentTracing.startRecording(options)
- await timeout(recordTimeInMilliseconds)
- const resultFilePath = await contentTracing.stopRecording(outputFilePath)
- return resultFilePath
- }
- // TODO(codebytere): remove when promisification is complete
- const recordCallback = async (options, outputFilePath, recordTimeInMilliseconds = 1e3) => {
- await app.whenReady()
- await startRecording(options)
- await timeout(recordTimeInMilliseconds)
- const resultFilePath = await stopRecording(outputFilePath)
- return resultFilePath
- }
- // TODO(codebytere): remove when promisification is complete
- const startRecording = async (options) => {
- return new Promise((resolve) => {
- contentTracing.startRecording(options, () => {
- resolve()
- })
- })
- }
- // TODO(codebytere): remove when promisification is complete
- const stopRecording = async (filePath) => {
- return new Promise((resolve) => {
- contentTracing.stopRecording(filePath, (resultFilePath) => {
- resolve(resultFilePath)
- })
- })
- }
- const outputFilePath = getPathInATempFolder('trace.json')
- beforeEach(() => {
- if (fs.existsSync(outputFilePath)) {
- fs.unlinkSync(outputFilePath)
- }
- })
- describe('startRecording', function () {
- this.timeout(5e3)
- const getFileSizeInKiloBytes = (filePath) => {
- const stats = fs.statSync(filePath)
- const fileSizeInBytes = stats.size
- const fileSizeInKiloBytes = fileSizeInBytes / 1024
- return fileSizeInKiloBytes
- }
- it('accepts an empty config', async () => {
- const config = {}
- await record(config, outputFilePath)
- expect(fs.existsSync(outputFilePath)).to.be.true()
- const fileSizeInKiloBytes = getFileSizeInKiloBytes(outputFilePath)
- expect(fileSizeInKiloBytes).to.be.above(0,
- `the trace output file is empty, check "${outputFilePath}"`)
- })
- // TODO(codebytere): remove when promisification is complete
- it('accepts an empty config (callback)', async () => {
- const config = {}
- await recordCallback(config, outputFilePath)
- expect(fs.existsSync(outputFilePath)).to.be.true()
- const fileSizeInKiloBytes = getFileSizeInKiloBytes(outputFilePath)
- expect(fileSizeInKiloBytes).to.be.above(0,
- `the trace output file is empty, check "${outputFilePath}"`)
- })
- it('accepts a trace config', async () => {
- // (alexeykuzmin): All categories are excluded on purpose,
- // so only metadata gets into the output file.
- const config = {
- excluded_categories: ['*']
- }
- await record(config, outputFilePath)
- expect(fs.existsSync(outputFilePath)).to.be.true()
- // If the `excluded_categories` param above is not respected
- // the file size will be above 50KB.
- const fileSizeInKiloBytes = getFileSizeInKiloBytes(outputFilePath)
- const expectedMaximumFileSize = 10 // Depends on a platform.
- expect(fileSizeInKiloBytes).to.be.above(0,
- `the trace output file is empty, check "${outputFilePath}"`)
- expect(fileSizeInKiloBytes).to.be.below(expectedMaximumFileSize,
- `the trace output file is suspiciously large (${fileSizeInKiloBytes}KB),
- check "${outputFilePath}"`)
- })
- // TODO(codebytere): remove when promisification is complete
- it('accepts a trace config (callback)', async () => {
- // (alexeykuzmin): All categories are excluded on purpose,
- // so only metadata gets into the output file.
- const config = {
- excluded_categories: ['*']
- }
- await recordCallback(config, outputFilePath)
- expect(fs.existsSync(outputFilePath)).to.be.true()
- // If the `excluded_categories` param above is not respected
- // the file size will be above 50KB.
- const fileSizeInKiloBytes = getFileSizeInKiloBytes(outputFilePath)
- const expectedMaximumFileSize = 10 // Depends on a platform.
- expect(fileSizeInKiloBytes).to.be.above(0,
- `the trace output file is empty, check "${outputFilePath}"`)
- expect(fileSizeInKiloBytes).to.be.below(expectedMaximumFileSize,
- `the trace output file is suspiciously large (${fileSizeInKiloBytes}KB),
- check "${outputFilePath}"`)
- })
- it('accepts "categoryFilter" and "traceOptions" as a config', async () => {
- // (alexeykuzmin): All categories are excluded on purpose,
- // so only metadata gets into the output file.
- const config = {
- categoryFilter: '__ThisIsANonexistentCategory__',
- traceOptions: ''
- }
- await record(config, outputFilePath)
- expect(fs.existsSync(outputFilePath)).to.be.true()
- // If the `categoryFilter` param above is not respected
- // the file size will be above 50KB.
- const fileSizeInKiloBytes = getFileSizeInKiloBytes(outputFilePath)
- const expectedMaximumFileSize = 10 // Depends on a platform.
- expect(fileSizeInKiloBytes).to.be.above(0,
- `the trace output file is empty, check "${outputFilePath}"`)
- expect(fileSizeInKiloBytes).to.be.below(expectedMaximumFileSize,
- `the trace output file is suspiciously large (${fileSizeInKiloBytes}KB),
- check "${outputFilePath}"`)
- })
- // TODO(codebytere): remove when promisification is complete
- it('accepts "categoryFilter" and "traceOptions" as a config (callback)', async () => {
- // (alexeykuzmin): All categories are excluded on purpose,
- // so only metadata gets into the output file.
- const config = {
- categoryFilter: '__ThisIsANonexistentCategory__',
- traceOptions: ''
- }
- await recordCallback(config, outputFilePath)
- expect(fs.existsSync(outputFilePath)).to.be.true()
- // If the `categoryFilter` param above is not respected
- // the file size will be above 50KB.
- const fileSizeInKiloBytes = getFileSizeInKiloBytes(outputFilePath)
- const expectedMaximumFileSize = 10 // Depends on a platform.
- expect(fileSizeInKiloBytes).to.be.above(0,
- `the trace output file is empty, check "${outputFilePath}"`)
- expect(fileSizeInKiloBytes).to.be.below(expectedMaximumFileSize,
- `the trace output file is suspiciously large (${fileSizeInKiloBytes}KB),
- check "${outputFilePath}"`)
- })
- })
- describe('stopRecording', function () {
- this.timeout(5e3)
- it('calls its callback with a result file path', async () => {
- const resultFilePath = await record(/* options */ {}, outputFilePath)
- expect(resultFilePath).to.be.a('string').and.be.equal(outputFilePath)
- })
- // TODO(codebytere): remove when promisification is complete
- it('calls its callback with a result file path (callback)', async () => {
- const resultFilePath = await recordCallback(/* options */ {}, outputFilePath)
- expect(resultFilePath).to.be.a('string').and.be.equal(outputFilePath)
- })
- it('creates a temporary file when an empty string is passed', async function () {
- const resultFilePath = await record(/* options */ {}, /* outputFilePath */ '')
- expect(resultFilePath).to.be.a('string').that.is.not.empty()
- })
- })
- })
|