diff --git a/build.sbt b/build.sbt index f3c104c..ea73cb7 100644 --- a/build.sbt +++ b/build.sbt @@ -52,9 +52,9 @@ lazy val root = project }, cargoBuild := { println(Seq("sh", "-c", "cd glue; cargo rustc -- -Awarnings") !!) - //println( + // println( // Seq("sh", "-c", "cd glue; RUST_BACKTRACE=full cargo test --quiet --features e2e") !! - //) // very important: test suite validates interfaces + // ) // very important: test suite validates interfaces }, fullBuild := { cargoBuild.value diff --git a/glue/src/e2e.rs b/glue/src/e2e.rs index e24db31..3e05a0c 100644 --- a/glue/src/e2e.rs +++ b/glue/src/e2e.rs @@ -1,12 +1,14 @@ use std::sync::Once; use no_std_net::SocketAddr; +use toad::net::Addrd; use toad::platform::Platform; use toad_jni::java::{self, Object}; -use toad::net::Addrd; -use toad_msg::{Type, Id, Token, alloc::Message, Code}; +use toad_msg::alloc::Message; +use toad_msg::{Code, Id, Token, Type}; -use crate::{runtime::Runtime, runtime_config::RuntimeConfig}; +use crate::runtime::Runtime; +use crate::runtime_config::RuntimeConfig; pub fn runtime_init<'a>() -> (Runtime, java::Env<'a>) { let mut _env = crate::test::init(); @@ -22,7 +24,8 @@ fn runtime_poll_req(runtime: &Runtime, env: &mut java::Env) { let client = crate::Runtime::try_new("0.0.0.0:5684", Default::default()).unwrap(); let request = Message::new(Type::Con, Code::GET, Id(0), Token(Default::default())); - client.send_msg(Addrd(request, "0.0.0.0:5683".parse().unwrap())).unwrap(); + client.send_msg(Addrd(request, "0.0.0.0:5683".parse().unwrap())) + .unwrap(); assert!(runtime.poll_req(env).is_some()); } @@ -32,4 +35,3 @@ fn e2e_test_suite() { let (runtime, mut env) = runtime_init(); runtime_poll_req(&runtime, &mut env); } - diff --git a/glue/src/lib.rs b/glue/src/lib.rs index 185e067..379511b 100644 --- a/glue/src/lib.rs +++ b/glue/src/lib.rs @@ -34,7 +34,7 @@ pub extern "system" fn JNI_OnLoad(jvm: JavaVM, _: *const c_void) -> i32 { #[no_mangle] pub extern "system" fn JNI_OnUnload(_: JavaVM, _: *const c_void) { - unsafe {mem::Runtime::dealloc()} + unsafe { mem::Runtime::dealloc() } } #[cfg(all(test, feature = "e2e"))] @@ -53,7 +53,7 @@ pub mod test { use crate::runtime_config::RuntimeConfig; pub fn init<'a>() -> java::Env<'a> { - static INIT: Once = Once::new(); + static INIT: Once = Once::new(); INIT.call_once(|| { let jvm = JavaVM::new(InitArgsBuilder::new().option("-Djava.library.path=/home/orion/src/toad-lib/toad-java/target/glue/debug/") diff --git a/glue/src/runtime.rs b/glue/src/runtime.rs index 1cb7522..1437b48 100644 --- a/glue/src/runtime.rs +++ b/glue/src/runtime.rs @@ -12,12 +12,14 @@ pub struct Runtime(java::lang::Object); impl Runtime { pub fn get_or_init(e: &mut java::Env, cfg: RuntimeConfig) -> Self { - static GET_OR_INIT: java::StaticMethod Runtime> = java::StaticMethod::new("getOrInit"); + static GET_OR_INIT: java::StaticMethod Runtime> = + java::StaticMethod::new("getOrInit"); GET_OR_INIT.invoke(e, cfg) } pub fn poll_req(&self, e: &mut java::Env) -> Option { - static POLL_REQ: java::Method java::util::Optional> = java::Method::new("pollReq"); + static POLL_REQ: java::Method java::util::Optional> = + java::Method::new("pollReq"); POLL_REQ.invoke(e, self).to_option(e) } @@ -31,25 +33,24 @@ impl Runtime { } fn init_impl(e: &mut java::Env, cfg: RuntimeConfig) -> i64 { - let r = || - ToadRuntime::try_new(format!("0.0.0.0:{}", cfg.net(e).port(e)), cfg.to_toad(e)).unwrap(); + let r = + || ToadRuntime::try_new(format!("0.0.0.0:{}", cfg.net(e).port(e)), cfg.to_toad(e)).unwrap(); unsafe { crate::mem::Runtime::alloc(r).addr() as i64 } } fn poll_req_impl(&self, e: &mut java::Env) -> java::util::Optional { - match self.ref_(e).poll_req() { - | Ok(req) => { - let mr = MessageRef::new(e, req.data().msg()); - java::util::Optional::::of(e, mr) - }, - | Err(nb::Error::WouldBlock) => { - java::util::Optional::::empty(e) - }, - | Err(nb::Error::Other(err)) => { - e.throw(format!("{:?}", err)).unwrap(); - java::util::Optional::::empty(e) - }, - } } + match self.ref_(e).poll_req() { + | Ok(req) => { + let mr = MessageRef::new(e, req.data().msg()); + java::util::Optional::::of(e, mr) + }, + | Err(nb::Error::WouldBlock) => java::util::Optional::::empty(e), + | Err(nb::Error::Other(err)) => { + e.throw(format!("{:?}", err)).unwrap(); + java::util::Optional::::empty(e) + }, + } + } } java::object_newtype!(Runtime); @@ -74,10 +75,9 @@ pub extern "system" fn Java_dev_toad_Runtime_pollReq<'local>(mut e: java::Env<'l runtime: JObject<'local>) -> jobject { let e = &mut e; - java::lang::Object::from_local(e, runtime) - .upcast_to::(e) - .poll_req_impl(e) - .downcast(e) - .to_local(e) - .as_raw() + java::lang::Object::from_local(e, runtime).upcast_to::(e) + .poll_req_impl(e) + .downcast(e) + .to_local(e) + .as_raw() } diff --git a/src/main/java/dev.toad/Runtime.java b/src/main/java/dev.toad/Runtime.java index ecd3c5a..f043360 100644 --- a/src/main/java/dev.toad/Runtime.java +++ b/src/main/java/dev.toad/Runtime.java @@ -4,7 +4,6 @@ import dev.toad.msg.MessageRef; import java.util.Optional; public class Runtime { - static { System.loadLibrary("toad_java_glue"); } @@ -12,6 +11,7 @@ public class Runtime { private final long addr; private static native long init(RuntimeOptions o); + private native Optional pollReq(); public static Runtime getOrInit(RuntimeOptions o) {