test: add heap profiler add-on regression test
authorBen Noordhuis <info@bnoordhuis.nl>
Thu, 28 May 2015 19:46:54 +0000 (21:46 +0200)
committerBen Noordhuis <info@bnoordhuis.nl>
Thu, 28 May 2015 20:01:10 +0000 (22:01 +0200)
Add a regression test for https://github.com/nodejs/io.js/pull/1827.

PR-URL: https://github.com/nodejs/io.js/pull/1828
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
test/addons/heap-profiler/binding.cc [new file with mode: 0644]
test/addons/heap-profiler/binding.gyp [new file with mode: 0644]
test/addons/heap-profiler/test.js [new file with mode: 0644]

diff --git a/test/addons/heap-profiler/binding.cc b/test/addons/heap-profiler/binding.cc
new file mode 100644 (file)
index 0000000..846d53a
--- /dev/null
@@ -0,0 +1,27 @@
+#include "node.h"
+#include "v8.h"
+#include "v8-profiler.h"
+
+namespace {
+
+inline void Test(const v8::FunctionCallbackInfo<v8::Value>& args) {
+  v8::Isolate* const isolate = args.GetIsolate();
+  const v8::HeapSnapshot* const heap_snapshot =
+      isolate->GetHeapProfiler()->TakeHeapSnapshot(v8::String::Empty(isolate));
+  struct : public v8::OutputStream {
+    WriteResult WriteAsciiChunk(char*, int) override { return kContinue; }
+    void EndOfStream() override {}
+  } output_stream;
+  heap_snapshot->Serialize(&output_stream, v8::HeapSnapshot::kJSON);
+  const_cast<v8::HeapSnapshot*>(heap_snapshot)->Delete();
+}
+
+inline void Initialize(v8::Local<v8::Object> binding) {
+  v8::Isolate* const isolate = binding->GetIsolate();
+  binding->Set(v8::String::NewFromUtf8(isolate, "test"),
+               v8::FunctionTemplate::New(isolate, Test)->GetFunction());
+}
+
+NODE_MODULE(test, Initialize)
+
+}  // anonymous namespace
diff --git a/test/addons/heap-profiler/binding.gyp b/test/addons/heap-profiler/binding.gyp
new file mode 100644 (file)
index 0000000..3bfb844
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  'targets': [
+    {
+      'target_name': 'binding',
+      'sources': [ 'binding.cc' ]
+    }
+  ]
+}
diff --git a/test/addons/heap-profiler/test.js b/test/addons/heap-profiler/test.js
new file mode 100644 (file)
index 0000000..a4a316f
--- /dev/null
@@ -0,0 +1,12 @@
+'use strict';
+
+const binding = require('./build/Release/binding');
+
+// Create an AsyncWrap object.
+const timer = setTimeout(function() {}, 1);
+timer.unref();
+
+// Stress-test the heap profiler.
+binding.test();
+
+clearTimeout(timer);