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
35
36
37
38
39
40
41
42
43
44
45
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]

include!(concat!(env!("OUT_DIR"), "/bindings.rs"));

#[test]
fn test_connect_disconnect() {
    use std::ffi::{CStr, CString};

    unsafe {
        let url = CString::new("pulsar://localhost:6650").unwrap();
        let config = pulsar_client_configuration_create();
        let client = pulsar_client_create(url.as_ptr(), config);
        pulsar_client_configuration_free(config);

        let producer = Box::into_raw(Box::new(std::ptr::null_mut() as *mut pulsar_producer_t));
        let config = pulsar_producer_configuration_create();
        let topic = CString::new("persistent://public/default/my-topic").unwrap();
        let result = pulsar_client_create_producer(client, topic.as_ptr(), config, producer);

        assert_eq!(
            CStr::from_ptr(pulsar_result_str(result)).to_str().unwrap(),
            "Ok"
        );

        let result = pulsar_producer_close(*producer);
        pulsar_producer_free(*producer);
        drop(producer);

        assert_eq!(
            CStr::from_ptr(pulsar_result_str(result)).to_str().unwrap(),
            "Ok"
        );

        let result = pulsar_client_close(client);
        pulsar_client_free(client);
        drop(client);

        assert_eq!(
            CStr::from_ptr(pulsar_result_str(result)).to_str().unwrap(),
            "Ok"
        );
    }
}