mirror of
https://github.com/hanzoai/node-dtrace-provider.git
synced 2026-09-23 23:48:45 +00:00
Make test/*.js into a proper testsuite.
This commit is contained in:
@@ -5,3 +5,4 @@
|
||||
*#
|
||||
build
|
||||
*.log
|
||||
node_modules
|
||||
|
||||
@@ -107,6 +107,11 @@ The source is available at:
|
||||
For issues, please use the Github issue tracker linked to the
|
||||
repository. Github pull requests are very welcome.
|
||||
|
||||
## RUNNING THE TESTS
|
||||
|
||||
$ npm install
|
||||
$ sudo ./node_modules/.bin/tap --tap test/*.test.js
|
||||
|
||||
## OTHER IMPLEMENTATIONS
|
||||
|
||||
This node extension is derived from the ruby-dtrace gem, via the Perl
|
||||
|
||||
+20
-9
@@ -1,11 +1,22 @@
|
||||
{
|
||||
"name" : "dtrace-provider",
|
||||
"version" : "0.2.4",
|
||||
"description" : "Native DTrace providers for node.js applications",
|
||||
"keywords" : ["dtrace"],
|
||||
"homepage" : "https://github.com/chrisa/node-dtrace-provider#readme",
|
||||
"author" : { "name" : "Chris Andrews", "email": "[email protected]" },
|
||||
"main" : "./dtrace-provider.js",
|
||||
"repository" : { "type" : "git", "url" : "http://github.com/chrisa/node-dtrace-provider.git" },
|
||||
"engines": { "node" : ">=0.6" }
|
||||
"name" : "dtrace-provider",
|
||||
"version" : "0.2.4",
|
||||
"description" : "Native DTrace providers for node.js applications",
|
||||
"keywords" : ["dtrace"],
|
||||
"homepage" : "https://github.com/chrisa/node-dtrace-provider#readme",
|
||||
"author" : {
|
||||
"name" : "Chris Andrews",
|
||||
"email": "chris@nodnol.org"
|
||||
},
|
||||
"repository" : {
|
||||
"type" : "git",
|
||||
"url" : "http://github.com/chrisa/node-dtrace-provider.git"
|
||||
},
|
||||
"engines" : {
|
||||
"node" : ">=0.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"tap": "0.2.0"
|
||||
},
|
||||
"main" : "./dtrace-provider.js"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
var test = require('tap').test;
|
||||
var format = require('util').format;
|
||||
var dtest = require('./dtrace-test').dtraceTest;
|
||||
|
||||
test(
|
||||
'32-arg probe',
|
||||
dtest(
|
||||
function() {
|
||||
var d = require('../dtrace-provider');
|
||||
// define this provider here, even though we won't fire it, so that we
|
||||
// can start dtrace with an otherwise unstable set of probes - -Z
|
||||
// won't work here.
|
||||
var provider = d.createDTraceProvider("testlibusdt");
|
||||
var p = provider.addProbe(
|
||||
"32probe",
|
||||
"char *", "char *", "char *", "char *", "char *", "char *", "char *", "char *",
|
||||
"char *", "char *", "char *", "char *", "char *", "char *", "char *", "char *",
|
||||
"char *", "char *", "char *", "char *", "char *", "char *", "char *", "char *",
|
||||
"char *", "char *", "char *", "char *", "char *", "char *", "char *", "char *");
|
||||
provider.enable();
|
||||
},
|
||||
['dtrace', '-qn',
|
||||
'testlibusdt*:::32probe{ printf("%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s\\n", copyinstr((user_addr_t)args[0]), copyinstr((user_addr_t)args[1]), copyinstr((user_addr_t)args[2]), copyinstr((user_addr_t)args[3]), copyinstr((user_addr_t)args[4]), copyinstr((user_addr_t)args[5]), copyinstr((user_addr_t)args[6]), copyinstr((user_addr_t)args[7]), copyinstr((user_addr_t)args[8]), copyinstr((user_addr_t)args[9]), copyinstr((user_addr_t)args[10]), copyinstr((user_addr_t)args[11]), copyinstr((user_addr_t)args[12]), copyinstr((user_addr_t)args[13]), copyinstr((user_addr_t)args[14]), copyinstr((user_addr_t)args[15]), copyinstr((user_addr_t)args[16]), copyinstr((user_addr_t)args[17]), copyinstr((user_addr_t)args[18]), copyinstr((user_addr_t)args[19]), copyinstr((user_addr_t)args[20]), copyinstr((user_addr_t)args[21]), copyinstr((user_addr_t)args[22]), copyinstr((user_addr_t)args[23]), copyinstr((user_addr_t)args[24]), copyinstr((user_addr_t)args[25]), copyinstr((user_addr_t)args[26]), copyinstr((user_addr_t)args[27]), copyinstr((user_addr_t)args[28]), copyinstr((user_addr_t)args[29]), copyinstr((user_addr_t)args[30]), copyinstr((user_addr_t)args[31])); }',
|
||||
'-c', format('node %s/32probe-char_fire.js', __dirname)
|
||||
],
|
||||
function(t, traces) {
|
||||
t.equal(traces.length, 1);
|
||||
|
||||
var letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
|
||||
'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
|
||||
'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
|
||||
'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F'];
|
||||
|
||||
var traced = traces[0].split(' ');
|
||||
for (var i = 0; i < 32; i++) {
|
||||
t.equal(traced[i], letters[i],
|
||||
format('arg%d of a 32-arg probe firing should be %s', i, letters[i]));
|
||||
}
|
||||
}
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,22 @@
|
||||
// see 32probe-char.test.js
|
||||
|
||||
var d = require('../dtrace-provider');
|
||||
|
||||
var provider = d.createDTraceProvider("testlibusdt");
|
||||
var probe = provider.addProbe(
|
||||
"32probe",
|
||||
"char *", "char *", "char *", "char *", "char *", "char *", "char *", "char *",
|
||||
"char *", "char *", "char *", "char *", "char *", "char *", "char *", "char *",
|
||||
"char *", "char *", "char *", "char *", "char *", "char *", "char *", "char *",
|
||||
"char *", "char *", "char *", "char *", "char *", "char *", "char *", "char *");
|
||||
provider.enable();
|
||||
|
||||
var letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
|
||||
'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
|
||||
'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
|
||||
'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F'];
|
||||
|
||||
probe.fire(function(p) {
|
||||
return letters;
|
||||
});
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
var test = require('tap').test;
|
||||
var format = require('util').format;
|
||||
var dtest = require('./dtrace-test').dtraceTest;
|
||||
|
||||
test(
|
||||
'32-arg probe',
|
||||
dtest(
|
||||
function() {
|
||||
var d = require('../dtrace-provider');
|
||||
// define this provider here, even though we won't fire it, so that we
|
||||
// can start dtrace with an otherwise unstable set of probes - -Z
|
||||
// won't work here.
|
||||
var provider = d.createDTraceProvider("testlibusdt");
|
||||
var probe = provider.addProbe("32probe",
|
||||
"int", "int", "int", "int", "int", "int", "int", "int",
|
||||
"int", "int", "int", "int", "int", "int", "int", "int",
|
||||
"int", "int", "int", "int", "int", "int", "int", "int",
|
||||
"int", "int", "int", "int", "int", "int", "int", "int");
|
||||
provider.enable();
|
||||
},
|
||||
['dtrace', '-qn',
|
||||
'testlibusdt*:::32probe{ printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\\n", args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13], args[14], args[15], args[16], args[17], args[18], args[19], args[20], args[21], args[22], args[23], args[24], args[25], args[26], args[27], args[28], args[29], args[30], args[31]) }',
|
||||
'-c', format('node %s/32probe_fire.js', __dirname)
|
||||
],
|
||||
function(t, traces) {
|
||||
t.equal(traces.length, 32, 'got 32 traces');
|
||||
|
||||
var args = [];
|
||||
for (var i = 1; i <= 32; i++) {
|
||||
args.push(i);
|
||||
var traced = traces[i - 1].split(' ');
|
||||
args.forEach(function(n) {
|
||||
t.equal(traced[n - 1], [n].toString(),
|
||||
format('arg%d of a %d-arg probe firing should be %d', n - 1, i, n));
|
||||
});
|
||||
}
|
||||
}
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,21 @@
|
||||
// see 32probe.test.js
|
||||
|
||||
var d = require('../dtrace-provider');
|
||||
|
||||
var provider = d.createDTraceProvider("testlibusdt");
|
||||
var probe = provider.addProbe(
|
||||
"32probe",
|
||||
"int", "int", "int", "int", "int", "int", "int", "int",
|
||||
"int", "int", "int", "int", "int", "int", "int", "int",
|
||||
"int", "int", "int", "int", "int", "int", "int", "int",
|
||||
"int", "int", "int", "int", "int", "int", "int", "int");
|
||||
|
||||
provider.enable();
|
||||
|
||||
var args = [];
|
||||
for (var n = 1; n <= 32; n++) {
|
||||
args.push(n);
|
||||
probe.fire(function(p) {
|
||||
return args;
|
||||
});
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
// expected output:
|
||||
//
|
||||
// $ NODE_PATH=. sudo -E dtrace -Zn 'test*:::{trace(probemod)}' -c 'node test/disambiguation.js'
|
||||
// dtrace: description 'test*:::' matched 0 probes
|
||||
// dtrace: pid 73913 has exited
|
||||
// CPU ID FUNCTION:NAME
|
||||
// 0 33495 probe1:probe1 mod-0x100a11440
|
||||
// 0 33498 probe1:probe1 mod-0x100e00160
|
||||
|
||||
var d = require('dtrace-provider');
|
||||
|
||||
var dtp = d.createDTraceProvider('test');
|
||||
var p1 = dtp.addProbe('probe1', 'int', 'int');
|
||||
var p2 = dtp.addProbe('probe2', 'int', 'int');
|
||||
dtp.enable();
|
||||
|
||||
var dtp2 = d.createDTraceProvider('test');
|
||||
var p1 = dtp2.addProbe('probe3', 'int', 'int');
|
||||
var p2 = dtp2.addProbe('probe1', 'int', 'int');
|
||||
dtp2.enable();
|
||||
|
||||
dtp.fire('probe1', function () {
|
||||
return ([12, 3]);
|
||||
});
|
||||
|
||||
dtp2.fire('probe1', function () {
|
||||
return ([12, 73]);
|
||||
});
|
||||
@@ -0,0 +1,22 @@
|
||||
var test = require('tap').test;
|
||||
var format = require('util').format;
|
||||
var dtest = require('./dtrace-test').dtraceTest;
|
||||
|
||||
test(
|
||||
'module name disambiguation',
|
||||
dtest(
|
||||
function() { },
|
||||
[
|
||||
'dtrace', '-Zqn',
|
||||
'test*:::{printf("%s\\n%s\\n", probename, probemod)}',
|
||||
'-c', format('node %s/disambiguation_fire.js', __dirname)
|
||||
],
|
||||
function(t, traces) {
|
||||
t.equal(traces.length, 8);
|
||||
t.equal(traces[0], traces[2]);
|
||||
t.notEqual(traces[1], traces[3]);
|
||||
t.equal(traces[4], traces[6]);
|
||||
t.notEqual(traces[5], traces[7]);
|
||||
}
|
||||
)
|
||||
);
|
||||
@@ -1,28 +0,0 @@
|
||||
// expected output:
|
||||
//
|
||||
// $ NODE_PATH=. sudo -E dtrace -Zn 'test*:::{trace(probemod)}' -c 'node test/disambiguation2.js'
|
||||
// dtrace: description 'test*:::' matched 0 probes
|
||||
// dtrace: pid 73913 has exited
|
||||
// CPU ID FUNCTION:NAME
|
||||
// 0 33495 probe1:probe1 mymod1
|
||||
// 0 33498 probe1:probe1 mymod2
|
||||
|
||||
var d = require('dtrace-provider');
|
||||
|
||||
var dtp = d.createDTraceProvider('test', 'mymod1');
|
||||
var p1 = dtp.addProbe('probe1', 'int', 'int');
|
||||
var p2 = dtp.addProbe('probe2', 'int', 'int');
|
||||
dtp.enable();
|
||||
|
||||
var dtp2 = d.createDTraceProvider('test', 'mymod2');
|
||||
var p1 = dtp2.addProbe('probe3', 'int', 'int');
|
||||
var p2 = dtp2.addProbe('probe1', 'int', 'int');
|
||||
dtp2.enable();
|
||||
|
||||
dtp.fire('probe1', function () {
|
||||
return ([12, 3]);
|
||||
});
|
||||
|
||||
dtp2.fire('probe1', function () {
|
||||
return ([12, 73]);
|
||||
});
|
||||
@@ -0,0 +1,37 @@
|
||||
var d = require('../dtrace-provider');
|
||||
|
||||
var dtp = d.createDTraceProvider('test');
|
||||
dtp.addProbe('probe1', 'int', 'int');
|
||||
dtp.addProbe('probe2', 'int', 'int');
|
||||
dtp.enable();
|
||||
|
||||
var dtp2 = d.createDTraceProvider('test');
|
||||
dtp2.addProbe('probe3', 'int', 'int');
|
||||
dtp2.addProbe('probe1', 'int', 'int');
|
||||
dtp2.enable();
|
||||
|
||||
var dtp3 = d.createDTraceProvider('test', 'mymod1');
|
||||
dtp3.addProbe('probe1', 'int', 'int');
|
||||
dtp3.addProbe('probe2', 'int', 'int');
|
||||
dtp3.enable();
|
||||
|
||||
var dtp4 = d.createDTraceProvider('test', 'mymod2');
|
||||
dtp4.addProbe('probe1', 'int', 'int');
|
||||
dtp4.addProbe('probe3', 'int', 'int');
|
||||
dtp4.enable();
|
||||
|
||||
dtp.fire('probe1', function () {
|
||||
return ([12, 3]);
|
||||
});
|
||||
|
||||
dtp2.fire('probe1', function () {
|
||||
return ([12, 73]);
|
||||
});
|
||||
|
||||
dtp3.fire('probe1', function () {
|
||||
return ([12, 3]);
|
||||
});
|
||||
|
||||
dtp4.fire('probe1', function () {
|
||||
return ([12, 73]);
|
||||
});
|
||||
-30
@@ -1,30 +0,0 @@
|
||||
var util = require('util');
|
||||
var d = require('../dtrace-provider');
|
||||
|
||||
var dtp = d.createDTraceProvider("testlibusdt");
|
||||
var p = dtp.addProbe("32probe", "int", "int", "int", "int", "int", "int", "int", "int",
|
||||
"int", "int", "int", "int", "int", "int", "int", "int",
|
||||
"int", "int", "int", "int", "int", "int", "int", "int",
|
||||
"int", "int", "int", "int", "int", "int", "int", "int");
|
||||
|
||||
dtp.enable();
|
||||
|
||||
util.debug("run: sudo dtrace -n 'testlibusdt*:::32probe{ printf(\"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\", args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9], args[10], args[11], args[12], args[13], args[14], args[15], args[16], args[17], args[18], args[19], args[20], args[21], args[22], args[23], args[24], args[25], args[26], args[27], args[28], args[29], args[30], args[31]) }'")
|
||||
|
||||
var numbers = [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];
|
||||
|
||||
setTimeout(function() {
|
||||
|
||||
var args = [];
|
||||
numbers.forEach(function(n) {
|
||||
args.push(n);
|
||||
dtp.fire("32probe", function(p) {
|
||||
return args;
|
||||
});
|
||||
p.fire(function(p) {
|
||||
return args;
|
||||
});
|
||||
});
|
||||
|
||||
}, 10000);
|
||||
@@ -1,31 +0,0 @@
|
||||
var util = require('util');
|
||||
var d = require('../dtrace-provider');
|
||||
|
||||
var dtp = d.createDTraceProvider("testlibusdt");
|
||||
var p = dtp.addProbe("32probe", "char *", "char *", "char *", "char *", "char *", "char *", "char *", "char *",
|
||||
"char *", "char *", "char *", "char *", "char *", "char *", "char *", "char *",
|
||||
"char *", "char *", "char *", "char *", "char *", "char *", "char *", "char *",
|
||||
"char *", "char *", "char *", "char *", "char *", "char *", "char *", "char *");
|
||||
dtp.enable();
|
||||
|
||||
util.debug("run: sudo dtrace -n 'testlibusdt*:::32probe{ printf(\"%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s\", copyinstr((user_addr_t)args[0]), copyinstr((user_addr_t)args[1]), copyinstr((user_addr_t)args[2]), copyinstr((user_addr_t)args[3]), copyinstr((user_addr_t)args[4]), copyinstr((user_addr_t)args[5]), copyinstr((user_addr_t)args[6]), copyinstr((user_addr_t)args[7]), copyinstr((user_addr_t)args[8]), copyinstr((user_addr_t)args[9]), copyinstr((user_addr_t)args[10]), copyinstr((user_addr_t)args[11]), copyinstr((user_addr_t)args[12]), copyinstr((user_addr_t)args[13]), copyinstr((user_addr_t)args[14]), copyinstr((user_addr_t)args[15]), copyinstr((user_addr_t)args[16]), copyinstr((user_addr_t)args[17]), copyinstr((user_addr_t)args[18]), copyinstr((user_addr_t)args[19]), copyinstr((user_addr_t)args[20]), copyinstr((user_addr_t)args[21]), copyinstr((user_addr_t)args[22]), copyinstr((user_addr_t)args[23]), copyinstr((user_addr_t)args[24]), copyinstr((user_addr_t)args[25]), copyinstr((user_addr_t)args[26]), copyinstr((user_addr_t)args[27]), copyinstr((user_addr_t)args[28]), copyinstr((user_addr_t)args[29]), copyinstr((user_addr_t)args[30]), copyinstr((user_addr_t)args[31])); }'")
|
||||
|
||||
|
||||
var letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
|
||||
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F'];
|
||||
|
||||
setTimeout(function() {
|
||||
|
||||
var args = [];
|
||||
letters.forEach(function(l) {
|
||||
args.push(l);
|
||||
dtp.fire("32probe", function(p) {
|
||||
return args;
|
||||
});
|
||||
p.fire(function(p) {
|
||||
return args;
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
}, 10000);
|
||||
@@ -0,0 +1,27 @@
|
||||
var spawn = require('child_process').spawn;
|
||||
|
||||
exports.dtraceTest = function(setup, dtargv, test) {
|
||||
return function(t) {
|
||||
setup();
|
||||
|
||||
var dtrace = spawn(dtargv[0], dtargv.slice(1));
|
||||
|
||||
var traces = [];
|
||||
dtrace.stdout.on('data', function (data) {
|
||||
//console.error("DTRACE STDOUT:", data.toString());
|
||||
traces.push(data.toString());
|
||||
});
|
||||
dtrace.stderr.on('data', function (data) {
|
||||
console.error("DTRACE STDERR:", data.toString());
|
||||
});
|
||||
dtrace.on('exit', function (code) {
|
||||
t.notOk(code, 'dtrace exited cleanly');
|
||||
traces = traces.join('').split('\n')
|
||||
.filter(function (t) { return t.trim().length });
|
||||
|
||||
test(t, traces);
|
||||
t.end();
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
// expected output:
|
||||
//
|
||||
// $ sudo dtrace -Zn 'nodeapp*:::{ trace(arg0); }' -c 'node test/enabled-again.js'
|
||||
// dtrace: description 'nodeapp*:::' matched 0 probes
|
||||
// CPU ID FUNCTION:NAME
|
||||
// 1 5456 func:probe1 1
|
||||
// 1 5456 func:probe1 2
|
||||
|
||||
var d = require('../dtrace-provider');
|
||||
var dtp = d.createDTraceProvider("nodeapp");
|
||||
dtp.addProbe("probe1", "int");
|
||||
dtp.enable();
|
||||
dtp.fire("probe1", function(p) { return [1]; });
|
||||
|
||||
for (var i = 0; i<100; i++) {
|
||||
dtp.enable();
|
||||
}
|
||||
dtp.fire("probe1", function(p) { return [2]; });
|
||||
setTimeout(function() { }, 1000);
|
||||
@@ -1,22 +0,0 @@
|
||||
// expected output:
|
||||
//
|
||||
// $ sudo dtrace -Zn 'nodeapp*:::{ trace(arg0); }' -c 'node test/enabled-again.js'
|
||||
// dtrace: description 'nodeapp*:::' matched 0 probes
|
||||
// CPU ID FUNCTION:NAME
|
||||
// 1 5456 func:probe1 1
|
||||
// 1 5456 func:probe1 2
|
||||
|
||||
var d = require('../dtrace-provider');
|
||||
var dtp = d.createDTraceProvider("nodeapp");
|
||||
dtp.addProbe("probe1", "int");
|
||||
dtp.enable();
|
||||
dtp.fire("probe1", function(p) { return [1]; });
|
||||
|
||||
for (var i = 0; i < 2500; i++) {
|
||||
dtp.enable();
|
||||
dtp.fire("probe1", function(p) { return [i]; });
|
||||
dtp.disable();
|
||||
//gc();
|
||||
}
|
||||
dtp.fire("probe1", function(p) { return [42]; });
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
var test = require('tap').test;
|
||||
var format = require('util').format;
|
||||
var dtest = require('./dtrace-test').dtraceTest;
|
||||
|
||||
test(
|
||||
'enabling and disabling a provider',
|
||||
dtest(
|
||||
function() { },
|
||||
[
|
||||
'dtrace', '-Zqn',
|
||||
'nodeapp*:::{ printf("%d\\n", arg0); }',
|
||||
'-c', format('node %s/enabled-disabled_fire.js', __dirname)
|
||||
],
|
||||
function(t, traces) {
|
||||
t.equal(traces.length, 12);
|
||||
for (var i = 0; i < 10; i++) {
|
||||
t.equal(traces[i], [i].toString());
|
||||
}
|
||||
t.equal(traces[11], '42');
|
||||
}
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,14 @@
|
||||
var d = require('../dtrace-provider');
|
||||
var dtp = d.createDTraceProvider("nodeapp");
|
||||
dtp.addProbe("probe1", "int");
|
||||
dtp.enable();
|
||||
dtp.fire("probe1", function(p) { return [0]; });
|
||||
|
||||
for (var i = 1; i <= 10; i++) {
|
||||
dtp.enable();
|
||||
dtp.fire("probe1", function(p) { return [i]; });
|
||||
dtp.disable();
|
||||
//gc();
|
||||
}
|
||||
dtp.fire("probe1", function(p) { return [42]; });
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
// expected output:
|
||||
//
|
||||
// $ sudo dtrace -Zn 'nodeapp*:::{ trace(arg0); }' -c 'node test/enabled_again.js'
|
||||
// dtrace: description 'nodeapp*:::' matched 0 probes
|
||||
// CPU ID FUNCTION:NAME
|
||||
// 1 5456 func:probe1 1
|
||||
// 1 5456 func:probe1 2
|
||||
|
||||
var d = require('../dtrace-provider');
|
||||
var dtp = d.createDTraceProvider("nodeapp");
|
||||
dtp.addProbe("probe1", "int");
|
||||
dtp.enable();
|
||||
dtp.fire("probe1", function(p) { return [1]; });
|
||||
|
||||
for (var i = 0; i<100; i++) {
|
||||
dtp.enable();
|
||||
}
|
||||
dtp.fire("probe1", function(p) { return [2]; });
|
||||
setTimeout(function() { }, 1000);
|
||||
@@ -0,0 +1,34 @@
|
||||
var test = require('tap').test;
|
||||
var format = require('util').format;
|
||||
var dtest = require('./dtrace-test').dtraceTest;
|
||||
|
||||
test(
|
||||
'provider enabled again',
|
||||
dtest(
|
||||
function() { },
|
||||
[
|
||||
'dtrace', '-Zqn',
|
||||
'nodeapp$target:::{ printf("%d %d\\n", epid, arg0); }',
|
||||
'-c', format('node %s/enabledagain_fire.js', __dirname)
|
||||
],
|
||||
function(t, traces) {
|
||||
t.equal(traces.length, 2, 'got 2 traces');
|
||||
|
||||
var i = 1;
|
||||
var epid;
|
||||
traces.forEach(function(trace) {
|
||||
cols = trace.split(' ');
|
||||
t.equal([i].toString(), cols[1], 'traced value correct');
|
||||
if (epid) {
|
||||
t.equal(epid, cols[0], 'same epid');
|
||||
}
|
||||
else {
|
||||
epid = cols[0];
|
||||
}
|
||||
i++;
|
||||
});
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
var d = require('../dtrace-provider');
|
||||
var dtp = d.createDTraceProvider("nodeapp");
|
||||
dtp.addProbe("probe1", "int");
|
||||
//dtp.enable();
|
||||
dtp.enable();
|
||||
dtp.fire("probe1", function(p) { return [1]; });
|
||||
|
||||
|
||||
dtp.enable();
|
||||
dtp.fire("probe1", function(p) { return [2]; });
|
||||
@@ -0,0 +1,18 @@
|
||||
var test = require('tap').test;
|
||||
var d = require('../dtrace-provider');
|
||||
|
||||
test(
|
||||
'firing probes when provider not enabled',
|
||||
function(t) {
|
||||
var dtp = d.createDTraceProvider("nodeapp");
|
||||
dtp.addProbe("probe1", "int");
|
||||
//dtp.enable();
|
||||
dtp.fire("probe1", function(p) {
|
||||
t.notOk();
|
||||
return [1];
|
||||
});
|
||||
t.ok(1, 'no problem');
|
||||
t.end();
|
||||
}
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user