build,test: add tests for binary linked with shared libnode · nodejs/node@e83648e · GitHub
Skip to content

Commit e83648e

Browse files
joyeecheungaduh95
authored andcommitted
build,test: add tests for binary linked with shared libnode
This adds tests to ensure the V8 parts (v8, libplatform, cppgc) in shared libnode works correctly. PR-URL: #61463 Backport-PR-URL: #65219 Refs: #61144 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
1 parent b12bcc9 commit e83648e

5 files changed

Lines changed: 150 additions & 9 deletions

File tree

node.gyp

Lines changed: 55 additions & 0 deletions

test/common/index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ if (isMainThread)
5151

5252
const noop = () => {};
5353

54+
// Whether the executable is linked against the shared library i.e. libnode.
55+
const usesSharedLibrary = process.config.variables.node_shared;
5456
const hasCrypto = Boolean(process.versions.openssl) &&
5557
!process.env.NODE_SKIP_CRYPTO;
5658

@@ -945,6 +947,13 @@ function sleepSync(ms) {
945947
Atomics.wait(i32, 0, 0, ms);
946948
}
947949

950+
function resolveBuiltBinary(binary) {
951+
if (isWindows) {
952+
binary += '.exe';
953+
}
954+
return path.join(path.dirname(process.execPath), binary);
955+
}
956+
948957
const common = {
949958
allowGlobals,
950959
buildType,
@@ -990,6 +999,7 @@ const common = {
990999
printSkipMessage,
9911000
pwdCommand,
9921001
requireNoPackageJSONAbove,
1002+
resolveBuiltBinary,
9931003
runWithInvalidFD,
9941004
skip,
9951005
skipIf32Bits,
@@ -998,6 +1008,7 @@ const common = {
9981008
skipIfSQLiteMissing,
9991009
spawnPromisified,
10001010
sleepSync,
1011+
usesSharedLibrary,
10011012

10021013
get enoughTestMem() {
10031014
return require('os').totalmem() > 0x70000000; /* 1.75 Gb */

test/embedding/shared_embedtest.cc

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#include <libplatform/libplatform.h>
2+
#include <v8-cppgc.h>
3+
#include <v8.h>
4+
5+
#include <cppgc/allocation.h>
6+
#include <cppgc/default-platform.h>
7+
#include <cppgc/garbage-collected.h>
8+
#include <cppgc/heap.h>
9+
#include <cppgc/member.h>
10+
#include <cppgc/platform.h>
11+
#include <cppgc/visitor.h>
12+
13+
class Wrappable final : public cppgc::GarbageCollected<Wrappable> {
14+
public:
15+
void Trace(cppgc::Visitor* visitor) const {}
16+
};
17+
18+
int main(int argc, char* argv[]) {
19+
std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform();
20+
v8::V8::InitializePlatform(platform.get());
21+
cppgc::InitializeProcess(platform->GetPageAllocator());
22+
v8::V8::Initialize();
23+
24+
auto heap = v8::CppHeap::Create(platform.get(), v8::CppHeapCreateParams{{}});
25+
v8::Isolate::CreateParams create_params;
26+
create_params.array_buffer_allocator =
27+
v8::ArrayBuffer::Allocator::NewDefaultAllocator();
28+
create_params.cpp_heap = heap.release();
29+
30+
v8::Isolate* isolate = v8::Isolate::New(create_params);
31+
{
32+
v8::Isolate::Scope isolate_scope(isolate);
33+
v8::HandleScope handle_scope(isolate);
34+
v8::Local<v8::Context> context = v8::Context::New(isolate);
35+
v8::Context::Scope context_scope(context);
36+
37+
v8::Local<v8::Object> obj = v8::Object::New(isolate);
38+
Wrappable* wrappable = cppgc::MakeGarbageCollected<Wrappable>(
39+
isolate->GetCppHeap()->GetAllocationHandle());
40+
v8::Object::Wrap<v8::CppHeapPointerTag::kDefaultTag>(
41+
isolate, obj, wrappable);
42+
v8::Local<v8::String> source =
43+
v8::String::NewFromUtf8Literal(isolate, "'Hello' + ', World!'");
44+
v8::Local<v8::Script> script =
45+
v8::Script::Compile(context, source).ToLocalChecked();
46+
v8::Local<v8::Value> result = script->Run(context).ToLocalChecked();
47+
v8::String::Utf8Value utf8(isolate, result);
48+
printf("%s\n", *utf8);
49+
}
50+
51+
isolate->Dispose();
52+
cppgc::ShutdownProcess();
53+
v8::V8::Dispose();
54+
v8::V8::DisposePlatform();
55+
delete create_params.array_buffer_allocator;
56+
57+
return 0;
58+
}

test/embedding/test-embedding.js

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,14 @@ const {
88
spawnSyncAndExit,
99
spawnSyncAndExitWithoutError,
1010
} = require('../common/child_process');
11-
const path = require('path');
1211
const fs = require('fs');
1312
const os = require('os');
1413

1514
tmpdir.refresh();
1615
common.allowGlobals(global.require);
1716
common.allowGlobals(global.embedVars);
1817

19-
function resolveBuiltBinary(binary) {
20-
if (common.isWindows) {
21-
binary += '.exe';
22-
}
23-
return path.join(path.dirname(process.execPath), binary);
24-
}
25-
26-
const binary = resolveBuiltBinary('embedtest');
18+
const binary = common.resolveBuiltBinary('embedtest');
2719

2820
spawnSyncAndAssert(
2921
binary,
Lines changed: 25 additions & 0 deletions

0 commit comments

Comments
 (0)