Add tests for uploadToServer
option.
This commit is contained in:
parent
f0d447cd68
commit
460fb9cdb9
2 changed files with 97 additions and 4 deletions
|
@ -1,5 +1,6 @@
|
||||||
const assert = require('assert')
|
const assert = require('assert')
|
||||||
const childProcess = require('child_process')
|
const childProcess = require('child_process')
|
||||||
|
const fs = require('fs')
|
||||||
const http = require('http')
|
const http = require('http')
|
||||||
const multiparty = require('multiparty')
|
const multiparty = require('multiparty')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
@ -73,6 +74,93 @@ describe('crashReporter module', function () {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should not send minidump if uploadToServer is false', function (done) {
|
||||||
|
this.timeout(120000)
|
||||||
|
|
||||||
|
if (process.platform === 'darwin') {
|
||||||
|
crashReporter.setUploadToServer(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
let server
|
||||||
|
let dumpFile
|
||||||
|
let crashesDir
|
||||||
|
const testDone = (uploaded) => {
|
||||||
|
if (uploaded) {
|
||||||
|
return done(new Error('fail'))
|
||||||
|
}
|
||||||
|
server.close()
|
||||||
|
if (process.platform === 'darwin') {
|
||||||
|
crashReporter.setUploadToServer(true)
|
||||||
|
}
|
||||||
|
assert(fs.existsSync(dumpFile))
|
||||||
|
fs.unlinkSync(dumpFile)
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
|
||||||
|
let pollInterval
|
||||||
|
const pollDumpFile = () => {
|
||||||
|
fs.readdir(crashesDir, (err, files) => {
|
||||||
|
if (err) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let dumps = files.filter((f) => /\.dmp$/.test(f))
|
||||||
|
if (!dumps.length) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
assert.equal(1, dumps.length)
|
||||||
|
dumpFile = path.join(crashesDir, dumps[0])
|
||||||
|
clearInterval(pollInterval)
|
||||||
|
// dump file should not be deleted when not uploading, so we wait
|
||||||
|
// 500 ms and assert it still exists in `testDone`
|
||||||
|
setTimeout(testDone, 500)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
remote.ipcMain.once('set-crash-directory', (event, dir) => {
|
||||||
|
if (process.platform === 'linux') {
|
||||||
|
crashesDir = dir
|
||||||
|
} else {
|
||||||
|
crashesDir = crashReporter.getCrashesDirectory()
|
||||||
|
if (process.platform === 'darwin') {
|
||||||
|
// crashpad uses an extra subdirectory
|
||||||
|
crashesDir = path.join(crashesDir, 'completed')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Before starting, remove all dump files in the crash directory.
|
||||||
|
// This is required because:
|
||||||
|
// - mac crashpad not seem to allow changing the crash directory after
|
||||||
|
// the first "start" call.
|
||||||
|
// - Other tests in this suite may leave dumps there.
|
||||||
|
// - We want to verify in `testDone` that a dump file is created and
|
||||||
|
// not deleted.
|
||||||
|
fs.readdir(crashesDir, (err, files) => {
|
||||||
|
if (!err) {
|
||||||
|
for (let file of files) {
|
||||||
|
if (/\.dmp$/.test(file)) {
|
||||||
|
fs.unlinkSync(path.join(crashesDir, file))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
event.returnValue = null // allow the renderer to crash
|
||||||
|
pollInterval = setInterval(pollDumpFile, 100)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
server = startServer({
|
||||||
|
callback (port) {
|
||||||
|
const crashUrl = url.format({
|
||||||
|
protocol: 'file',
|
||||||
|
pathname: path.join(fixtures, 'api', 'crash.html'),
|
||||||
|
search: `?port=${port}&skipUpload=1`
|
||||||
|
})
|
||||||
|
w.loadURL(crashUrl)
|
||||||
|
},
|
||||||
|
processType: 'renderer',
|
||||||
|
done: testDone.bind(null, true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
it('should send minidump with updated extra parameters', function (done) {
|
it('should send minidump with updated extra parameters', function (done) {
|
||||||
if (process.env.APPVEYOR === 'True') return done()
|
if (process.env.APPVEYOR === 'True') return done()
|
||||||
if (process.env.TRAVIS === 'true') return done()
|
if (process.env.TRAVIS === 'true') return done()
|
||||||
|
@ -215,4 +303,5 @@ const startServer = ({callback, processType, done}) => {
|
||||||
}
|
}
|
||||||
callback(port)
|
callback(port)
|
||||||
})
|
})
|
||||||
|
return server
|
||||||
}
|
}
|
||||||
|
|
12
spec/fixtures/api/crash.html
vendored
12
spec/fixtures/api/crash.html
vendored
|
@ -1,20 +1,24 @@
|
||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
<script type="text/javascript" charset="utf-8">
|
<script type="text/javascript" charset="utf-8">
|
||||||
var port = require('url').parse(window.location.href, true).query.port;
|
var url = require('url').parse(window.location.href, true);
|
||||||
var crashReporter = require('electron').crashReporter;
|
var uploadToServer = !url.query.skipUpload;
|
||||||
|
var port = url.query.port;
|
||||||
|
var {crashReporter, ipcRenderer} = require('electron');
|
||||||
crashReporter.start({
|
crashReporter.start({
|
||||||
productName: 'Zombies',
|
productName: 'Zombies',
|
||||||
companyName: 'Umbrella Corporation',
|
companyName: 'Umbrella Corporation',
|
||||||
submitURL: 'http://127.0.0.1:' + port,
|
submitURL: 'http://127.0.0.1:' + port,
|
||||||
uploadToServer: true,
|
uploadToServer: uploadToServer,
|
||||||
ignoreSystemCrashHandler: true,
|
ignoreSystemCrashHandler: true,
|
||||||
extra: {
|
extra: {
|
||||||
'extra1': 'extra1',
|
'extra1': 'extra1',
|
||||||
'extra2': 'extra2',
|
'extra2': 'extra2',
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
if (!uploadToServer) {
|
||||||
|
ipcRenderer.sendSync('set-crash-directory', crashReporter.getCrashesDirectory())
|
||||||
|
}
|
||||||
setImmediate(function() { process.crash(); });
|
setImmediate(function() { process.crash(); });
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
Loading…
Reference in a new issue