1
// SPDX-License-Identifier: BSD-2-Clause
2
/*
3
 * Copyright © The libcoap-rs Contributors, all rights reserved.
4
 * This file is part of the libcoap-rs project, see the README file for
5
 * general information on this project and the NOTICE.md and LICENSE files
6
 * for information regarding copyright ownership and terms of use.
7
 *
8
 * tests/dtls_client_server_test.rs - Tests for UDP clients+servers.
9
 */
10

            
11
use std::time::Duration;
12

            
13
use libcoap_rs::{
14
    message::CoapMessageCommon,
15
    protocol::{CoapMessageCode, CoapResponseCode},
16
    session::{CoapClientSession, CoapSessionCommon},
17
    CoapContext,
18
};
19

            
20
mod common;
21

            
22
#[test]
23
3
pub fn basic_client_server_request() {
24
3
    let server_address = common::get_unused_server_addr();
25

            
26
3
    let server_handle = common::spawn_test_server(move |mut context| {
27
3
        context.add_endpoint_udp(server_address).unwrap();
28
3
        context
29
3
    });
30

            
31
3
    let mut context = CoapContext::new().unwrap();
32
3
    let session = CoapClientSession::connect_udp(&mut context, server_address).unwrap();
33

            
34
3
    let request = common::gen_test_request();
35
3
    let req_handle = session.send_request(request).unwrap();
36
    loop {
37
3
        assert!(context.do_io(Some(Duration::from_secs(10))).expect("error during IO") <= Duration::from_secs(10));
38
3
        for response in session.poll_handle(&req_handle) {
39
3
            assert_eq!(response.code(), CoapMessageCode::Response(CoapResponseCode::Content));
40
3
            assert_eq!(response.data().unwrap().as_ref(), "Hello World!".as_bytes());
41
3
            server_handle.join().unwrap();
42
3
            return;
43
        }
44
    }
45
3
}