From 40c98a977b2d4912e9f167257553063d6dd21272 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Wed, 21 Dec 2011 13:55:05 -0800 Subject: [PATCH] Add shared-buffer isolate addon test --- test/addons/shared-buffer/binding.cc | 55 +++++++++++++++++++++++++++ test/addons/shared-buffer/binding.gyp | 8 ++++ test/addons/shared-buffer/test.js | 18 +++++++++ 3 files changed, 81 insertions(+) create mode 100644 test/addons/shared-buffer/binding.cc create mode 100644 test/addons/shared-buffer/binding.gyp create mode 100644 test/addons/shared-buffer/test.js diff --git a/test/addons/shared-buffer/binding.cc b/test/addons/shared-buffer/binding.cc new file mode 100644 index 0000000000..d81f1d4f22 --- /dev/null +++ b/test/addons/shared-buffer/binding.cc @@ -0,0 +1,55 @@ +#include +#include +#include + +using namespace v8; + +extern "C" { + void init(Handle target); +} + + +#define BUFSIZE 1024 +static uint8_t buf[BUFSIZE]; +static uv_mutex_t lock; + + +Handle Get(const Arguments& args) { + HandleScope scope; + + int index = args[0]->Uint32Value(); + + if (index < 0 || BUFSIZE <= index) { + return ThrowException(Exception::Error(String::New("out of bounds"))); + } + + return scope.Close(Integer::New(buf[index])); +} + + +Handle Set(const Arguments& args) { + uv_mutex_lock(&lock); + HandleScope scope; + + int index = args[0]->Uint32Value(); + + if (index < 0 || BUFSIZE <= index) { + return ThrowException(Exception::Error(String::New("out of bounds"))); + } + + buf[index] = args[1]->Uint32Value(); + + Local val = Integer::New(buf[index]); + + uv_mutex_unlock(&lock); + + return scope.Close(val); +} + + +void init(Handle target) { + NODE_SET_METHOD(target, "get", Get); + NODE_SET_METHOD(target, "set", Set); + target->Set(String::New("length"), Integer::New(BUFSIZE)); + uv_mutex_init(&lock); +} diff --git a/test/addons/shared-buffer/binding.gyp b/test/addons/shared-buffer/binding.gyp new file mode 100644 index 0000000000..3bfb84493f --- /dev/null +++ b/test/addons/shared-buffer/binding.gyp @@ -0,0 +1,8 @@ +{ + 'targets': [ + { + 'target_name': 'binding', + 'sources': [ 'binding.cc' ] + } + ] +} diff --git a/test/addons/shared-buffer/test.js b/test/addons/shared-buffer/test.js new file mode 100644 index 0000000000..ab7da43bd6 --- /dev/null +++ b/test/addons/shared-buffer/test.js @@ -0,0 +1,18 @@ +var assert = require('assert'); +var binding = require('./out/Release/binding'); + +console.log("binding.length =", binding.length); + +if (process.tid === 1) { + var isolate = process._newIsolate(process.argv); + for (var i = 0; i < binding.length; i++) { + console.log('parent', + 'binding.set(' + i + ', ' + i + ')', + binding.set(i, i)); + } +} else { + for (var i = 0; i < binding.length; i++) { + console.log('child', 'binding.get(' + i + ')', binding.get(i)); + } +} +