fix: nwaku does not return an envelope hash on publish

This commit is contained in:
Richard Ramos 2024-02-26 15:55:53 -04:00
parent e4fe4dfa63
commit 8eb026d495
No known key found for this signature in database
GPG Key ID: 1CE87DB518195760
2 changed files with 23 additions and 32 deletions

View File

@ -6,9 +6,9 @@ use std::time::Duration;
// crates // crates
use libc::*; use libc::*;
// internal // internal
use crate::general::{Encoding, MessageId, Result, WakuContentTopic, WakuMessage}; use crate::general::{Encoding, Result, WakuContentTopic, WakuMessage};
use crate::node::context::WakuNodeContext; use crate::node::context::WakuNodeContext;
use crate::utils::{get_trampoline, handle_no_response, handle_response}; use crate::utils::{get_trampoline, handle_no_response, handle_response, LibwakuResponse};
/// Create a content topic according to [RFC 23](https://rfc.vac.dev/spec/23/) /// Create a content topic according to [RFC 23](https://rfc.vac.dev/spec/23/)
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_content_topicchar-applicationname-unsigned-int-applicationversion-char-contenttopicname-char-encoding) /// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_content_topicchar-applicationname-unsigned-int-applicationversion-char-contenttopicname-char-encoding)
@ -30,8 +30,8 @@ pub fn waku_create_content_topic(
.expect("Encoding should always transform to CString") .expect("Encoding should always transform to CString")
.into_raw(); .into_raw();
let mut result: String = Default::default(); let mut result: LibwakuResponse = Default::default();
let result_cb = |v: &str| result = v.to_string(); let result_cb = |r: LibwakuResponse| result = r;
let code = unsafe { let code = unsafe {
let mut closure = result_cb; let mut closure = result_cb;
let cb = get_trampoline(&closure); let cb = get_trampoline(&closure);
@ -52,8 +52,7 @@ pub fn waku_create_content_topic(
out out
}; };
handle_response::<WakuContentTopic>(code, &result) handle_response(code, result).expect("&str from result should always be extracted")
.expect("&str from result should always be extracted")
} }
/// Publish a message using Waku Relay /// Publish a message using Waku Relay
@ -63,7 +62,7 @@ pub fn waku_relay_publish_message(
message: &WakuMessage, message: &WakuMessage,
pubsub_topic: &String, pubsub_topic: &String,
timeout: Option<Duration>, timeout: Option<Duration>,
) -> Result<MessageId> { ) -> Result<()> {
let pubsub_topic = pubsub_topic.to_string(); let pubsub_topic = pubsub_topic.to_string();
let message_ptr = CString::new( let message_ptr = CString::new(
@ -76,8 +75,8 @@ pub fn waku_relay_publish_message(
.expect("CString should build properly from pubsub topic") .expect("CString should build properly from pubsub topic")
.into_raw(); .into_raw();
let mut result: String = Default::default(); let mut result: LibwakuResponse = Default::default();
let result_cb = |v: &str| result = v.to_string(); let result_cb = |r: LibwakuResponse| result = r;
let code = unsafe { let code = unsafe {
let mut closure = result_cb; let mut closure = result_cb;
let cb = get_trampoline(&closure); let cb = get_trampoline(&closure);
@ -103,7 +102,7 @@ pub fn waku_relay_publish_message(
out out
}; };
handle_response(code, &result) handle_no_response(code, result)
} }
pub fn waku_relay_subscribe(ctx: &WakuNodeContext, pubsub_topic: &String) -> Result<()> { pub fn waku_relay_subscribe(ctx: &WakuNodeContext, pubsub_topic: &String) -> Result<()> {
@ -112,10 +111,10 @@ pub fn waku_relay_subscribe(ctx: &WakuNodeContext, pubsub_topic: &String) -> Res
.expect("CString should build properly from pubsub topic") .expect("CString should build properly from pubsub topic")
.into_raw(); .into_raw();
let mut error: String = Default::default(); let mut result: LibwakuResponse = Default::default();
let error_cb = |v: &str| error = v.to_string(); let result_cb = |r: LibwakuResponse| result = r;
let code = unsafe { let code = unsafe {
let mut closure = error_cb; let mut closure = result_cb;
let cb = get_trampoline(&closure); let cb = get_trampoline(&closure);
let out = waku_sys::waku_relay_subscribe( let out = waku_sys::waku_relay_subscribe(
ctx.obj_ptr, ctx.obj_ptr,
@ -129,7 +128,7 @@ pub fn waku_relay_subscribe(ctx: &WakuNodeContext, pubsub_topic: &String) -> Res
out out
}; };
handle_no_response(code, &error) handle_no_response(code, result)
} }
pub fn waku_relay_unsubscribe(ctx: &WakuNodeContext, pubsub_topic: &String) -> Result<()> { pub fn waku_relay_unsubscribe(ctx: &WakuNodeContext, pubsub_topic: &String) -> Result<()> {
@ -138,10 +137,10 @@ pub fn waku_relay_unsubscribe(ctx: &WakuNodeContext, pubsub_topic: &String) -> R
.expect("CString should build properly from pubsub topic") .expect("CString should build properly from pubsub topic")
.into_raw(); .into_raw();
let mut error: String = Default::default(); let mut result: LibwakuResponse = Default::default();
let error_cb = |v: &str| error = v.to_string(); let result_cb = |r: LibwakuResponse| result = r;
let code = unsafe { let code = unsafe {
let mut closure = error_cb; let mut closure = result_cb;
let cb = get_trampoline(&closure); let cb = get_trampoline(&closure);
let out = waku_sys::waku_relay_subscribe( let out = waku_sys::waku_relay_subscribe(
ctx.obj_ptr, ctx.obj_ptr,
@ -155,5 +154,5 @@ pub fn waku_relay_unsubscribe(ctx: &WakuNodeContext, pubsub_topic: &String) -> R
out out
}; };
handle_no_response(code, &error) handle_no_response(code, result)
} }

View File

@ -2,7 +2,7 @@ use secp256k1::SecretKey;
use serial_test::serial; use serial_test::serial;
use std::str::FromStr; use std::str::FromStr;
use std::time::{Duration, SystemTime}; use std::time::{Duration, SystemTime};
use std::{collections::HashSet, str::from_utf8}; use std::{str::from_utf8};
use tokio::sync::broadcast::{self, Sender}; use tokio::sync::broadcast::{self, Sender};
use tokio::time; use tokio::time;
use tokio::time::sleep; use tokio::time::sleep;
@ -17,11 +17,9 @@ const TEST_PUBSUBTOPIC: &str = "test";
fn try_publish_relay_messages( fn try_publish_relay_messages(
node: &WakuNodeHandle, node: &WakuNodeHandle,
msg: &WakuMessage, msg: &WakuMessage,
) -> Result<HashSet<MessageId>, String> { ) -> Result<(), String> {
let topic = TEST_PUBSUBTOPIC.to_string(); let topic = TEST_PUBSUBTOPIC.to_string();
Ok(HashSet::from([ Ok(node.relay_publish_message(msg, &topic, None)?)
node.relay_publish_message(msg, &topic, None)?
]))
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@ -71,17 +69,11 @@ async fn test_echo_messages(
let (tx, mut rx) = broadcast::channel(1); let (tx, mut rx) = broadcast::channel(1);
set_callback(node2, tx); set_callback(node2, tx);
let mut ids = try_publish_relay_messages(node1, &message).expect("send relay messages"); try_publish_relay_messages(node1, &message).expect("send relay messages");
while let Ok(res) = rx.recv().await { while let Ok(res) = rx.recv().await {
if ids.take(&res.id).is_some() { assert!(!res.id.is_empty());
let msg = from_utf8(&res.payload).expect("should be valid message"); from_utf8(&res.payload).expect("should be valid message");
assert_eq!(content, msg);
}
if ids.is_empty() {
break;
}
} }
} }