summaryrefslogtreecommitdiff
path: root/rust/tests/download_provider.rs
blob: f3b62263a38e596275e1560ec2f86a6f8918941a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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"));
}