summaryrefslogtreecommitdiff
path: root/test/addons/openssl-binding
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2016-04-18 16:10:20 +0200
committerBen Noordhuis <info@bnoordhuis.nl>2016-07-05 16:09:58 +0200
commitb4d4fd939c813177209fc6a2f32a3a125122de7c (patch)
tree3edba86358a151f285565ccdad1cb6683c4c55c5 /test/addons/openssl-binding
parentd80432db76b2e019a9403e5318bf6adc9a027ddb (diff)
downloadandroid-node-v8-b4d4fd939c813177209fc6a2f32a3a125122de7c.tar.gz
android-node-v8-b4d4fd939c813177209fc6a2f32a3a125122de7c.tar.bz2
android-node-v8-b4d4fd939c813177209fc6a2f32a3a125122de7c.zip
build: export openssl symbols on windows
Export symbols from the bundled openssl for add-ons to link against. Fixes: https://github.com/nodejs/node-v0.x-archive/issues/4051 PR-URL: https://github.com/nodejs/node/pull/6274 Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'test/addons/openssl-binding')
-rw-r--r--test/addons/openssl-binding/binding.cc35
-rw-r--r--test/addons/openssl-binding/binding.gyp9
-rw-r--r--test/addons/openssl-binding/test.js8
3 files changed, 52 insertions, 0 deletions
diff --git a/test/addons/openssl-binding/binding.cc b/test/addons/openssl-binding/binding.cc
new file mode 100644
index 0000000000..59819cd33d
--- /dev/null
+++ b/test/addons/openssl-binding/binding.cc
@@ -0,0 +1,35 @@
+#include "node.h"
+#include "../../../src/util.h"
+#include "../../../src/util-inl.h"
+
+#include <assert.h>
+#include <openssl/rand.h>
+
+namespace {
+
+inline void RandomBytes(const v8::FunctionCallbackInfo<v8::Value>& info) {
+ assert(info[0]->IsArrayBufferView());
+ auto view = info[0].As<v8::ArrayBufferView>();
+ auto byte_offset = view->ByteOffset();
+ auto byte_length = view->ByteLength();
+ assert(view->HasBuffer());
+ auto buffer = view->Buffer();
+ auto contents = buffer->GetContents();
+ auto data = static_cast<unsigned char*>(contents.Data()) + byte_offset;
+ assert(RAND_poll());
+ auto rval = RAND_bytes(data, static_cast<int>(byte_length));
+ info.GetReturnValue().Set(rval > 0);
+}
+
+inline void Initialize(v8::Local<v8::Object> exports,
+ v8::Local<v8::Value> module,
+ v8::Local<v8::Context> context) {
+ auto isolate = context->GetIsolate();
+ auto key = v8::String::NewFromUtf8(isolate, "randomBytes");
+ auto value = v8::FunctionTemplate::New(isolate, RandomBytes)->GetFunction();
+ assert(exports->Set(context, key, value).IsJust());
+}
+
+} // anonymous namespace
+
+NODE_MODULE_CONTEXT_AWARE(binding, Initialize)
diff --git a/test/addons/openssl-binding/binding.gyp b/test/addons/openssl-binding/binding.gyp
new file mode 100644
index 0000000000..672f84bb86
--- /dev/null
+++ b/test/addons/openssl-binding/binding.gyp
@@ -0,0 +1,9 @@
+{
+ 'targets': [
+ {
+ 'target_name': 'binding',
+ 'sources': ['binding.cc'],
+ 'include_dirs': ['../../../deps/openssl/openssl/include'],
+ },
+ ]
+}
diff --git a/test/addons/openssl-binding/test.js b/test/addons/openssl-binding/test.js
new file mode 100644
index 0000000000..aa515bac9a
--- /dev/null
+++ b/test/addons/openssl-binding/test.js
@@ -0,0 +1,8 @@
+'use strict';
+
+require('../../common');
+const assert = require('assert');
+const binding = require('./build/Release/binding');
+const bytes = new Uint8Array(1024);
+assert(binding.randomBytes(bytes));
+assert(bytes.reduce((v, a) => v + a) > 0);