From 173106a536030be0285d2aeed466fd79ca7def4d Mon Sep 17 00:00:00 2001 From: Andrew Wason Date: Thu, 1 May 2025 10:03:45 -0400 Subject: [PATCH] Add IPC test and fix clippy failures. --- .github/workflows/rust.yml | 2 +- Cargo.toml | 4 ++++ examples/mutex.rs | 2 +- src/windows.rs | 2 +- tests/ipc.rs | 29 +++++++++++++++++++++++++++++ 5 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 tests/ipc.rs diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 56facc2..9c19897 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Checkout Sources - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Rust Toolchain uses: actions-rs/toolchain@v1.0.7 diff --git a/Cargo.toml b/Cargo.toml index b6dd3e4..514eb05 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,3 +41,7 @@ win-sys = "0.3" raw_sync = "0.1" clap = {version = "4", features = ["derive"]} env_logger = "0" + +[[test]] +name = "ipc" +harness = false diff --git a/examples/mutex.rs b/examples/mutex.rs index dbf60df..3ea2e5c 100644 --- a/examples/mutex.rs +++ b/examples/mutex.rs @@ -57,7 +57,7 @@ fn increment_value(shmem_flink: &str, thread_num: usize) { let is_init: &mut AtomicU8; unsafe { - is_init = &mut *(raw_ptr as *mut u8 as *mut AtomicU8); + is_init = &mut *(raw_ptr as *mut AtomicU8); raw_ptr = raw_ptr.add(8); }; diff --git a/src/windows.rs b/src/windows.rs index 96f4a59..31e6987 100644 --- a/src/windows.rs +++ b/src/windows.rs @@ -73,7 +73,7 @@ impl Drop for MapData { { Ok(_) => { // 2. Rename file to prevent further use - base_path.push(&format!( + base_path.push(format!( "{}_deleted", self.unique_id.trim_start_matches('/') )); diff --git a/tests/ipc.rs b/tests/ipc.rs new file mode 100644 index 0000000..2d6a444 --- /dev/null +++ b/tests/ipc.rs @@ -0,0 +1,29 @@ +use shared_memory::ShmemConf; +use std::{env, process::Command}; + +fn main() { + let args: Vec = env::args().collect(); + match args.len() { + 1 => { + let mut s = ShmemConf::new().size(1024).create().unwrap(); + let bytes = unsafe { s.as_slice_mut() }; + bytes[0..4].copy_from_slice(b"Ping"); + let mut child = Command::new(args[0].as_str()) + .arg(s.get_os_id()) + .spawn() + .unwrap(); + assert_eq!(child.wait().unwrap().code(), Some(0)); + let bytes = unsafe { s.as_slice() }; + assert_eq!(&bytes[0..4], b"PONG"); + } + 2 => { + let mut s = ShmemConf::new().os_id(args[1].as_str()).open().unwrap(); + let bytes = unsafe { s.as_slice_mut() }; + assert_eq!(&bytes[0..4], b"Ping"); + bytes[0..4].copy_from_slice(b"PONG"); + } + _ => { + panic!("Invalid arguments"); + } + } +}