summaryrefslogtreecommitdiff
path: root/test/parallel/test-async-wrap-post-did-throw.js
blob: 37f18b649da139dece102df52f6a5f3917565380 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
'use strict';

const common = require('../common');
if (!common.hasCrypto) {
  common.skip('missing crypto');
  return;
}

const assert = require('assert');
const async_wrap = process.binding('async_wrap');
var asyncThrows = 0;
var uncaughtExceptionCount = 0;

process.on('uncaughtException', (e) => {
  assert.equal(e.message, 'oh noes!', 'error messages do not match');
});

process.on('exit', () => {
  process.removeAllListeners('uncaughtException');
  assert.equal(uncaughtExceptionCount, 1);
  assert.equal(uncaughtExceptionCount, asyncThrows);
});

function init() { }
function post(id, threw) {
  if (threw)
    uncaughtExceptionCount++;
}

async_wrap.setupHooks({ init, post });
async_wrap.enable();

// Timers still aren't supported, so use crypto API.
// It's also important that the callback not happen in a nextTick, like many
// error events in core.
require('crypto').randomBytes(0, () => {
  asyncThrows++;
  throw new Error('oh noes!');
});