summaryrefslogtreecommitdiff
path: root/rust/tests
diff options
context:
space:
mode:
authorMason Reed <mason@vector35.com>2025-08-03 16:59:02 -0400
committerMason Reed <mason@vector35.com>2025-08-06 21:04:39 -0400
commit534627a04c77aa6791be25ad04deefa9b37034f5 (patch)
tree00d8ec654e7bc1c584207aaa3c9de8b1e9f48710 /rust/tests
parentabfd08fe0d92120019c2db275537eb816dd5c3f7 (diff)
[Rust] Take download callbacks by reference to avoid boxing
Diffstat (limited to 'rust/tests')
-rw-r--r--rust/tests/download_provider.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/rust/tests/download_provider.rs b/rust/tests/download_provider.rs
new file mode 100644
index 00000000..f3b62263
--- /dev/null
+++ b/rust/tests/download_provider.rs
@@ -0,0 +1,34 @@
+use binaryninja::download_provider::{DownloadInstanceInputOutputCallbacks, DownloadProvider};
+use binaryninja::headless::Session;
+use std::sync::mpsc;
+
+#[test]
+fn test_download_provider() {
+ let _session = Session::new().expect("Failed to initialize session");
+ let provider = DownloadProvider::try_default().expect("Couldn't get default download provider");
+ let mut inst = provider
+ .create_instance()
+ .expect("Couldn't create download instance");
+ let (tx, rx) = mpsc::channel();
+ let write = move |data: &[u8]| -> usize {
+ tx.send(data.to_vec()).expect("Couldn't send data");
+ data.len()
+ };
+ let result = inst
+ .perform_custom_request(
+ "GET",
+ "http://httpbin.org/get",
+ vec![],
+ &DownloadInstanceInputOutputCallbacks {
+ read: None,
+ write: Some(Box::new(write)),
+ progress: None,
+ },
+ )
+ .expect("Couldn't perform custom request");
+ assert_eq!(result.status_code, 200);
+ let written = rx.recv().expect("Couldn't receive data");
+ let written_str = String::from_utf8(written).expect("Couldn't convert data to string");
+ println!("{}", written_str);
+ assert!(written_str.contains("httpbin.org/get"));
+}