Name: js-handler/node_modules/restify/node_modules/bunyan/test/dtrace.test.js 
1:
/*
2:
 * Copyright (c) 2012 Trent Mick. All rights reserved.
3:
 *
4:
 * If available, test dtrace support.
5:
 */
6:
 
7:
var spawn = require('child_process').spawn;
8:
var format = require('util').format;
9:
 
10:
var bunyan = require('../lib/bunyan');
11:
 
12:
// node-tap API
13:
if (require.cache[__dirname + '/tap4nodeunit.js'])
14:
        delete require.cache[__dirname + '/tap4nodeunit.js'];
15:
var tap4nodeunit = require('./tap4nodeunit.js');
16:
var after = tap4nodeunit.after;
17:
var before = tap4nodeunit.before;
18:
var test = tap4nodeunit.test;
19:
 
20:
 
21:
// Determine if we can run the dtrace tests.
22:
var dtracePlats = ['sunos', 'darwin', 'freebsd'];
23:
var runDtraceTests = true;
24:
try {
25:
    require('dtrace-provider')
26:
} catch (e) {
27:
    console.log('# skip dtrace tests: no dtrace-provider module');
28:
    runDtraceTests = false;
29:
}
30:
if (!runDtraceTests) {
31:
    /* pass through */
32:
} else if (dtracePlats.indexOf(process.platform) === -1) {
33:
    console.log('# skip dtrace tests: not on a platform with dtrace');
34:
    runDtraceTests = false;
35:
} else if (process.env.SKIP_DTRACE) {
36:
    console.log('# skip dtrace tests: SKIP_DTRACE envvar set');
37:
    runDtraceTests = false;
38:
} else if (process.getgid() !== 0) {
39:
    console.log('# skip dtrace tests: gid is not 0, run with `sudo`');
40:
    runDtraceTests = false;
41:
}
42:
if (runDtraceTests) {
43:
 
44:
 
45:
test('basic dtrace', function (t) {
46:
    var argv = ['dtrace', '-Z', '-x', 'strsize=4k', '-qn',
47:
        'bunyan$target:::log-*{printf("%s", copyinstr(arg0))}',
48:
        '-c', format('node %s/log-some.js', __dirname)];
49:
    var dtrace = spawn(argv[0], argv.slice(1));
50:
    //console.error('ARGV: %j', argv);
51:
 
52:
    var traces = [];
53:
    dtrace.stdout.on('data', function (data) {
54:
        //console.error('DTRACE STDOUT:', data.toString());
55:
        traces.push(data.toString());
56:
    });
57:
    dtrace.stderr.on('data', function (data) {
58:
        console.error('DTRACE STDERR:', data.toString());
59:
    });
60:
    dtrace.on('exit', function (code) {
61:
        t.notOk(code, 'dtrace exited cleanly');
62:
        traces = traces.join('').split('\n')
63:
            .filter(function (t) { return t.trim().length })
64:
            .map(function (t) { return JSON.parse(t) });
65:
        t.equal(traces.length, 2, 'got 2 log records');
66:
        if (traces.length) {
67:
            t.equal(traces[0].level, bunyan.DEBUG);
68:
            t.equal(traces[0].foo, 'bar');
69:
            t.equal(traces[1].level, bunyan.TRACE);
70:
            t.equal(traces[1].msg, 'hi at trace');
71:
        }
72:
        t.end();
73:
    });
74:
});
75:
 
76:
 
77:
} /* end of `if (runDtraceTests)` */