summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDavid Collard <davidcollardprofessional@gmail.com>2023-01-10 20:32:23 -0500
committerDavid Collard <davidcollardprofessional@gmail.com>2023-01-10 21:47:56 -0500
commit33643eff5a3b7c44c54330141d6ed71c8739fde4 (patch)
treefe8e5574a35ee42e7b6f3b63ec883f603715f63b /test
parentbbb97bf3f709f0c77ab7cc0bb205915797ea59d1 (diff)
downloadnix-33643eff5a3b7c44c54330141d6ed71c8739fde4.zip
Added `mq_timedreceive` to `::nix::mqueue`.
Diffstat (limited to 'test')
-rw-r--r--test/test_mq.rs37
1 files changed, 36 insertions, 1 deletions
diff --git a/test/test_mq.rs b/test/test_mq.rs
index 7b48e7ac..f232434e 100644
--- a/test/test_mq.rs
+++ b/test/test_mq.rs
@@ -3,9 +3,13 @@ use std::ffi::CString;
use std::str;
use nix::errno::Errno;
-use nix::mqueue::{mq_attr_member_t, mq_close, mq_open, mq_receive, mq_send};
+use nix::mqueue::{
+ mq_attr_member_t, mq_close, mq_open, mq_receive, mq_send, mq_timedreceive,
+};
use nix::mqueue::{MQ_OFlag, MqAttr};
use nix::sys::stat::Mode;
+use nix::sys::time::{TimeSpec, TimeValLike};
+use nix::time::{clock_gettime, ClockId};
// Defined as a macro such that the error source is reported as the caller's location.
macro_rules! assert_attr_eq {
@@ -56,6 +60,37 @@ fn test_mq_send_and_receive() {
}
#[test]
+fn test_mq_timedreceive() {
+ const MSG_SIZE: mq_attr_member_t = 32;
+ let attr = MqAttr::new(0, 10, MSG_SIZE, 0);
+ let mq_name = &CString::new(b"/a_nix_test_queue".as_ref()).unwrap();
+
+ let oflag0 = MQ_OFlag::O_CREAT | MQ_OFlag::O_WRONLY;
+ let mode = Mode::S_IWUSR | Mode::S_IRUSR | Mode::S_IRGRP | Mode::S_IROTH;
+ let r0 = mq_open(mq_name, oflag0, mode, Some(&attr));
+ if let Err(Errno::ENOSYS) = r0 {
+ println!("message queues not supported or module not loaded?");
+ return;
+ };
+ let mqd0 = r0.unwrap();
+ let msg_to_send = "msg_1";
+ mq_send(&mqd0, msg_to_send.as_bytes(), 1).unwrap();
+
+ let oflag1 = MQ_OFlag::O_CREAT | MQ_OFlag::O_RDONLY;
+ let mqd1 = mq_open(mq_name, oflag1, mode, Some(&attr)).unwrap();
+ let mut buf = [0u8; 32];
+ let mut prio = 0u32;
+ let abstime =
+ clock_gettime(ClockId::CLOCK_REALTIME).unwrap() + TimeSpec::seconds(1);
+ let len = mq_timedreceive(&mqd1, &mut buf, &mut prio, &abstime).unwrap();
+ assert_eq!(prio, 1);
+
+ mq_close(mqd1).unwrap();
+ mq_close(mqd0).unwrap();
+ assert_eq!(msg_to_send, str::from_utf8(&buf[0..len]).unwrap());
+}
+
+#[test]
fn test_mq_getattr() {
use nix::mqueue::mq_getattr;
const MSG_SIZE: mq_attr_member_t = 32;