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_psk_client_server_test.rs - Tests for DTLS PSK clients+servers.
9
 */
10

            
11
#![cfg(feature = "dtls-psk")]
12
use std::time::Duration;
13

            
14
use libcoap_rs::{
15
    crypto::psk::{ClientPskContextBuilder, PskKey, ServerPskContextBuilder},
16
    message::CoapMessageCommon,
17
    protocol::{CoapMessageCode, CoapResponseCode},
18
    session::{CoapClientSession, CoapSessionCommon},
19
    CoapContext,
20
};
21

            
22
mod common;
23

            
24
#[test]
25
4
pub fn dtls_psk_client_server_request() {
26
4
    let server_address = common::get_unused_server_addr();
27
4
    let dummy_key = PskKey::new(Some("dtls_test_id"), "dtls_test_key___");
28
4
    let client_psk_context = ClientPskContextBuilder::new(dummy_key.clone()).build();
29
4

            
30
4
    let server_handle = common::spawn_test_server(move |mut context| {
31
4
        let server_psk_context = ServerPskContextBuilder::new(dummy_key.clone()).build();
32
4
        context.set_psk_context(server_psk_context).unwrap();
33
4
        context.add_endpoint_dtls(server_address).unwrap();
34
4
        context
35
4
    });
36
4

            
37
4
    let mut context = CoapContext::new().unwrap();
38
4
    let session = CoapClientSession::connect_dtls(&mut context, server_address, client_psk_context).unwrap();
39
4

            
40
4
    let request = common::gen_test_request();
41
4
    let req_handle = session.send_request(request).unwrap();
42
    loop {
43
22
        assert!(context.do_io(Some(Duration::from_secs(10))).expect("error during IO") <= Duration::from_secs(10));
44
22
        for response in session.poll_handle(&req_handle) {
45
4
            assert_eq!(response.code(), CoapMessageCode::Response(CoapResponseCode::Content));
46
4
            assert_eq!(response.data().unwrap().as_ref(), "Hello World!".as_bytes());
47
4
            server_handle.join().expect("Test server crashed with failure.");
48
4
            return;
49
4
        }
50
4
    }
51
4
}