1
// SPDX-License-Identifier: BSD-2-Clause
2
/*
3
 * dtls_client_server_test.rs - Tests for UDP clients+servers.
4
 * This file is part of the libcoap-rs crate, see the README and LICENSE files for
5
 * more information and terms of use.
6
 * Copyright © 2021-2023 The NAMIB Project Developers, all rights reserved.
7
 * See the README as well as the LICENSE file for more information.
8
 */
9

            
10
use libcoap_rs::session::CoapClientSession;
11
use libcoap_rs::{
12
    message::CoapMessageCommon,
13
    protocol::{CoapMessageCode, CoapResponseCode},
14
    session::CoapSessionCommon,
15
    CoapContext,
16
};
17
use std::time::Duration;
18

            
19
mod common;
20

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

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

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

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