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/tcp_client_server_test.rs - Tests for TCP clients+servers.
9
 */
10
#![cfg(feature = "tcp")]
11

            
12
use std::time::Duration;
13

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

            
21
mod common;
22

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

            
27
4
    let server_handle = common::spawn_test_server(move |mut context| {
28
4
        context.add_endpoint_tcp(server_address).unwrap();
29
4
        context
30
4
    });
31
4

            
32
4
    let mut context = CoapContext::new().unwrap();
33
4
    let session = CoapClientSession::connect_tcp(&mut context, server_address).unwrap();
34
4

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