diff options
Diffstat (limited to 'test_plugin')
-rw-r--r-- | test_plugin/Cargo.toml | 19 | ||||
-rw-r--r-- | test_plugin/README.md | 9 | ||||
-rw-r--r-- | test_plugin/src/lib.rs | 114 | ||||
-rw-r--r-- | test_plugin/tests/integration_tests.rs | 58 | ||||
-rw-r--r-- | test_plugin/tests/test.js | 135 |
5 files changed, 0 insertions, 335 deletions
diff --git a/test_plugin/Cargo.toml b/test_plugin/Cargo.toml deleted file mode 100644 index 53a94c473..000000000 --- a/test_plugin/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. - -[package] -name = "test_plugin" -version = "0.0.1" -authors = ["the deno authors"] -edition = "2018" -publish = false - -[lib] -crate-type = ["cdylib"] - -[dependencies] -deno_core = { path = "../core" } -futures = "0.3.15" -serde = "1" - -[dev-dependencies] -test_util = { path = "../test_util" } diff --git a/test_plugin/README.md b/test_plugin/README.md deleted file mode 100644 index b340389ce..000000000 --- a/test_plugin/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# `test_plugin` crate - -## To run this test manually - -``` -cd test_plugin - -../target/debug/deno run --unstable --allow-plugin tests/test.js debug -``` diff --git a/test_plugin/src/lib.rs b/test_plugin/src/lib.rs deleted file mode 100644 index 88761edcf..000000000 --- a/test_plugin/src/lib.rs +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. - -use std::borrow::Cow; -use std::cell::RefCell; -use std::rc::Rc; - -use deno_core::error::bad_resource_id; -use deno_core::error::AnyError; -use deno_core::op_async; -use deno_core::op_sync; -use deno_core::Extension; -use deno_core::OpState; -use deno_core::Resource; -use deno_core::ResourceId; -use deno_core::ZeroCopyBuf; -use serde::Deserialize; - -#[no_mangle] -pub fn init() -> Extension { - Extension::builder() - .ops(vec![ - ("op_test_sync", op_sync(op_test_sync)), - ("op_test_async", op_async(op_test_async)), - ( - "op_test_resource_table_add", - op_sync(op_test_resource_table_add), - ), - ( - "op_test_resource_table_get", - op_sync(op_test_resource_table_get), - ), - ]) - .build() -} - -#[derive(Debug, Deserialize)] -struct TestArgs { - val: String, -} - -fn op_test_sync( - _state: &mut OpState, - args: TestArgs, - zero_copy: Option<ZeroCopyBuf>, -) -> Result<String, AnyError> { - println!("Hello from sync plugin op."); - - println!("args: {:?}", args); - - if let Some(buf) = zero_copy { - let buf_str = std::str::from_utf8(&buf[..])?; - println!("zero_copy: {}", buf_str); - } - - Ok("test".to_string()) -} - -async fn op_test_async( - _state: Rc<RefCell<OpState>>, - args: TestArgs, - zero_copy: Option<ZeroCopyBuf>, -) -> Result<String, AnyError> { - println!("Hello from async plugin op."); - - println!("args: {:?}", args); - - if let Some(buf) = zero_copy { - let buf_str = std::str::from_utf8(&buf[..])?; - println!("zero_copy: {}", buf_str); - } - - let (tx, rx) = futures::channel::oneshot::channel::<Result<(), ()>>(); - std::thread::spawn(move || { - std::thread::sleep(std::time::Duration::from_secs(1)); - tx.send(Ok(())).unwrap(); - }); - assert!(rx.await.is_ok()); - - Ok("test".to_string()) -} - -struct TestResource(String); -impl Resource for TestResource { - fn name(&self) -> Cow<str> { - "TestResource".into() - } -} - -fn op_test_resource_table_add( - state: &mut OpState, - text: String, - _: (), -) -> Result<u32, AnyError> { - println!("Hello from resource_table.add plugin op."); - - Ok(state.resource_table.add(TestResource(text))) -} - -fn op_test_resource_table_get( - state: &mut OpState, - rid: ResourceId, - _: (), -) -> Result<String, AnyError> { - println!("Hello from resource_table.get plugin op."); - - Ok( - state - .resource_table - .get::<TestResource>(rid) - .ok_or_else(bad_resource_id)? - .0 - .clone(), - ) -} diff --git a/test_plugin/tests/integration_tests.rs b/test_plugin/tests/integration_tests.rs deleted file mode 100644 index e408f59db..000000000 --- a/test_plugin/tests/integration_tests.rs +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. - -use std::process::Command; -use test_util::deno_cmd; - -#[cfg(debug_assertions)] -const BUILD_VARIANT: &str = "debug"; - -#[cfg(not(debug_assertions))] -const BUILD_VARIANT: &str = "release"; - -#[test] -fn basic() { - let mut build_plugin_base = Command::new("cargo"); - let mut build_plugin = - build_plugin_base.arg("build").arg("-p").arg("test_plugin"); - if BUILD_VARIANT == "release" { - build_plugin = build_plugin.arg("--release"); - } - let build_plugin_output = build_plugin.output().unwrap(); - assert!(build_plugin_output.status.success()); - let output = deno_cmd() - .arg("run") - .arg("--allow-plugin") - .arg("--unstable") - .arg("tests/test.js") - .arg(BUILD_VARIANT) - .output() - .unwrap(); - let stdout = std::str::from_utf8(&output.stdout).unwrap(); - let stderr = std::str::from_utf8(&output.stderr).unwrap(); - if !output.status.success() { - println!("stdout {}", stdout); - println!("stderr {}", stderr); - } - println!("{:?}", output.status); - assert!(output.status.success()); - let expected = "\ - Plugin rid: 3\n\ - Hello from sync plugin op.\n\ - args: TestArgs { val: \"1\" }\n\ - zero_copy: test\n\ - op_test_sync returned: test\n\ - Hello from async plugin op.\n\ - args: TestArgs { val: \"1\" }\n\ - zero_copy: 123\n\ - op_test_async returned: test\n\ - Hello from resource_table.add plugin op.\n\ - TestResource rid: 4\n\ - Hello from resource_table.get plugin op.\n\ - TestResource get value: hello plugin!\n\ - Hello from sync plugin op.\n\ - args: TestArgs { val: \"1\" }\n\ - Ops completed count is correct!\n\ - Ops dispatched count is correct!\n"; - assert_eq!(stdout, expected); - assert_eq!(stderr, ""); -} diff --git a/test_plugin/tests/test.js b/test_plugin/tests/test.js deleted file mode 100644 index 2a2fa66b3..000000000 --- a/test_plugin/tests/test.js +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -// deno-lint-ignore-file - -const filenameBase = "test_plugin"; - -let filenameSuffix = ".so"; -let filenamePrefix = "lib"; - -if (Deno.build.os === "windows") { - filenameSuffix = ".dll"; - filenamePrefix = ""; -} else if (Deno.build.os === "darwin") { - filenameSuffix = ".dylib"; -} - -const filename = `../target/${ - Deno.args[0] -}/${filenamePrefix}${filenameBase}${filenameSuffix}`; - -const resourcesPre = Deno.resources(); - -const pluginRid = Deno.openPlugin(filename); -console.log(`Plugin rid: ${pluginRid}`); - -const { - op_test_sync, - op_test_async, - op_test_resource_table_add, - op_test_resource_table_get, -} = Deno.core.ops(); - -if ( - op_test_sync === null || - op_test_async === null || - op_test_resource_table_add === null || - op_test_resource_table_get === null -) { - throw new Error("Not all expected ops were registered"); -} - -function runTestSync() { - const result = Deno.core.opSync( - "op_test_sync", - { val: "1" }, - new Uint8Array([116, 101, 115, 116]), - ); - - console.log(`op_test_sync returned: ${result}`); - - if (result !== "test") { - throw new Error("op_test_sync returned an unexpected value!"); - } -} - -async function runTestAsync() { - const promise = Deno.core.opAsync( - "op_test_async", - { val: "1" }, - new Uint8Array([49, 50, 51]), - ); - - if (!(promise instanceof Promise)) { - throw new Error("Expected promise!"); - } - - const result = await promise; - console.log(`op_test_async returned: ${result}`); - - if (result !== "test") { - throw new Error("op_test_async promise resolved to an unexpected value!"); - } -} - -function runTestResourceTable() { - const expect = "hello plugin!"; - - const testRid = Deno.core.opSync("op_test_resource_table_add", expect); - console.log(`TestResource rid: ${testRid}`); - - if (testRid === null || Deno.resources()[testRid] !== "TestResource") { - throw new Error("TestResource was not found!"); - } - - const testValue = Deno.core.opSync("op_test_resource_table_get", testRid); - console.log(`TestResource get value: ${testValue}`); - - if (testValue !== expect) { - throw new Error("Did not get correct resource value!"); - } - - Deno.close(testRid); -} - -function runTestOpCount() { - const start = Deno.metrics(); - - Deno.core.opSync("op_test_sync", { val: "1" }); - - const end = Deno.metrics(); - - if (end.opsCompleted - start.opsCompleted !== 1) { - throw new Error("The opsCompleted metric is not correct!"); - } - console.log("Ops completed count is correct!"); - - if (end.opsDispatched - start.opsDispatched !== 1) { - throw new Error("The opsDispatched metric is not correct!"); - } - console.log("Ops dispatched count is correct!"); -} - -function runTestPluginClose() { - // Closing does not yet work - Deno.close(pluginRid); - - const resourcesPost = Deno.resources(); - - const preStr = JSON.stringify(resourcesPre, null, 2); - const postStr = JSON.stringify(resourcesPost, null, 2); - if (preStr !== postStr) { - throw new Error( - `Difference in open resources before openPlugin and after Plugin.close(): -Before: ${preStr} -After: ${postStr}`, - ); - } - console.log("Correct number of resources"); -} - -runTestSync(); -await runTestAsync(); -runTestResourceTable(); - -runTestOpCount(); -// runTestPluginClose(); |