IronRDP/crates/ironrdp-testsuite-core/src/mcs.rs
Benoît CORTIER 60bc72f873 test: organize integration tests into single crate
Put all integration tests in a single crate, and organized in modules.

This is similar to what was done in `cargo` repository:
https://github.com/rust-lang/cargo/pull/5022#issuecomment-364691154

```
$ rustup show
stable-x86_64-unknown-linux-gnu (default)
rustc 1.69.0 (84c898d65 2023-04-16)
```

Run on a recent high-end laptop:
12th Gen Intel(R) Core(TM) i9-12900HK

Original (multiple integration binaries):

- `cargo clean && cargo test --no-run`: 62.893s
- `cargo clean && cargo build --lib`: 54.959s
- `cargo clean && cargo build --bins`: 55.933s
- `cargo test --no-run` (after `cargo build`): 14.472s
- `cargo test` (after `cargo test --no-run`): 1.786s
- `du -hs target/`: 4.2G

After (ironrdp-testsuite):

- `cargo clean && cargo test --no-run`: 41.157s (crates with no tests are ignored)
- `cargo clean && cargo build --lib`: 53.983s
- `cargo clean && cargo build --bins`: 54.482s
- `cargo test --no-run` (after `cargo build`): 12.915s
- `cargo test` (after `cargo test --no-run`): 0.240s
- `du -hs target/`: 3.4G

Absolute diff:
- `cargo clean && cargo test --no-run`: -21.736s
- `cargo clean && cargo build --lib`: -0.976s
- `cargo clean && cargo build --bins`: -1.451s
- `cargo test --no-run` (after `cargo build`): -1.557s
- `cargo test` (after `cargo test --no-run`): -1.546s
- `du -hs target/`: -0.8G

Relative diff (%):
- `cargo clean && cargo test --no-run`: -34.5%
- `cargo clean && cargo build --lib`: -1.77%
- `cargo clean && cargo build --bins`: -2.59%
- `cargo test --no-run` (after `cargo build`): -10.7%
- `cargo test` (after `cargo test --no-run`): -86.5%
- `du -hs target/`: -19.0%
2023-05-11 19:41:11 -04:00

153 lines
5.6 KiB
Rust

use std::borrow::Cow;
use ironrdp_pdu::mcs::*;
use crate::conference_create::{
CONFERENCE_CREATE_REQUEST, CONFERENCE_CREATE_REQUEST_BUFFER, CONFERENCE_CREATE_RESPONSE,
CONFERENCE_CREATE_RESPONSE_BUFFER,
};
use crate::rdp::{CLIENT_INFO_PDU_BUFFER, SERVER_LICENSE_BUFFER};
pub const ERECT_DOMAIN_PDU_BUFFER: [u8; 5] = [0x04, 0x01, 0x00, 0x01, 0x00];
pub const ERECT_DOMAIN_PDU: ErectDomainPdu = ErectDomainPdu {
sub_height: 0,
sub_interval: 0,
};
pub const ATTACH_USER_REQUEST_PDU_BUFFER: [u8; 1] = [0x28];
pub const ATTACH_USER_REQUEST_PDU: AttachUserRequest = AttachUserRequest;
pub const ATTACH_USER_CONFIRM_PDU_BUFFER: [u8; 4] = [0x2e, 0x00, 0x00, 0x06];
pub const ATTACH_USER_CONFIRM_PDU: AttachUserConfirm = AttachUserConfirm {
result: 0,
initiator_id: 1007,
};
pub const CHANNEL_JOIN_REQUEST_PDU_BUFFER: [u8; 5] = [0x38, 0x00, 0x06, 0x03, 0xef];
pub const CHANNEL_JOIN_REQUEST_PDU: ChannelJoinRequest = ChannelJoinRequest {
initiator_id: 1007,
channel_id: 1007,
};
pub const CHANNEL_JOIN_CONFIRM_PDU_BUFFER: [u8; 8] = [0x3e, 0x00, 0x00, 0x06, 0x03, 0xef, 0x03, 0xef];
pub const CHANNEL_JOIN_CONFIRM_PDU: ChannelJoinConfirm = ChannelJoinConfirm {
result: 0,
initiator_id: 1007,
requested_channel_id: 1007,
channel_id: 1007,
};
pub const DISCONNECT_PROVIDER_ULTIMATUM_PDU_BUFFER: [u8; 2] = [0x21, 0x80];
pub const DISCONNECT_PROVIDER_ULTIMATUM_PDU: DisconnectProviderUltimatum = DisconnectProviderUltimatum {
reason: DisconnectReason::UserRequested,
};
pub const SEND_DATA_REQUEST_PDU_BUFFER_PREFIX: [u8; 8] = [0x64, 0x00, 0x06, 0x03, 0xeb, 0x70, 0x81, 0x92];
pub const SEND_DATA_REQUEST_PDU_BUFFER: [u8; concat_arrays_size!(
SEND_DATA_REQUEST_PDU_BUFFER_PREFIX,
CLIENT_INFO_PDU_BUFFER
)] = concat_arrays!(SEND_DATA_REQUEST_PDU_BUFFER_PREFIX, CLIENT_INFO_PDU_BUFFER);
pub const SEND_DATA_REQUEST_PDU: OwnedSendDataRequest = SendDataRequest {
initiator_id: 1007,
channel_id: 1003,
user_data: Cow::Borrowed(&CLIENT_INFO_PDU_BUFFER),
};
pub const SEND_DATA_INDICATION_PDU_BUFFER_PREFIX: [u8; 7] = [0x68, 0x00, 0x01, 0x03, 0xeb, 0x70, 0x14];
pub const SEND_DATA_INDICATION_PDU_BUFFER: [u8; concat_arrays_size!(
SEND_DATA_INDICATION_PDU_BUFFER_PREFIX,
SERVER_LICENSE_BUFFER
)] = concat_arrays!(SEND_DATA_INDICATION_PDU_BUFFER_PREFIX, SERVER_LICENSE_BUFFER);
pub const SEND_DATA_INDICATION_PDU: OwnedSendDataIndication = SendDataIndication {
initiator_id: 1002,
channel_id: 1003,
user_data: Cow::Borrowed(&SERVER_LICENSE_BUFFER),
};
pub const CONNECT_INITIAL_PREFIX_BUFFER: [u8; 107] = [
0x7f, 0x65, 0x82, 0x01, 0x99, 0x04, 0x01, 0x01, 0x04, 0x01, 0x01, 0x01, 0x01, 0xff, 0x30, 0x1a, 0x02, 0x01, 0x22,
0x02, 0x01, 0x02, 0x02, 0x01, 0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x00, 0x02, 0x01, 0x01, 0x02, 0x03, 0x00, 0xff,
0xff, 0x02, 0x01, 0x02, 0x30, 0x19, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02,
0x01, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x04, 0x20, 0x02, 0x01, 0x02, 0x30, 0x20, 0x02, 0x03, 0x00, 0xff, 0xff,
0x02, 0x03, 0x00, 0xfc, 0x17, 0x02, 0x03, 0x00, 0xff, 0xff, 0x02, 0x01, 0x01, 0x02, 0x01, 0x00, 0x02, 0x01, 0x01,
0x02, 0x03, 0x00, 0xff, 0xff, 0x02, 0x01, 0x02, 0x04, 0x82, 0x01, 0x33,
];
pub const CONNECT_RESPONSE_PREFIX_BUFFER: [u8; 43] = [
0x7f, 0x66, 0x82, 0x01, 0x46, 0x0a, 0x01, 0x00, 0x02, 0x01, 0x00, 0x30, 0x1a, 0x02, 0x01, 0x22, 0x02, 0x01, 0x03,
0x02, 0x01, 0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x00, 0x02, 0x01, 0x01, 0x02, 0x03, 0x00, 0xff, 0xf8, 0x02, 0x01,
0x02, 0x04, 0x82, 0x01, 0x20,
];
pub const CONNECT_INITIAL_BUFFER: [u8; concat_arrays_size!(
CONNECT_INITIAL_PREFIX_BUFFER,
CONFERENCE_CREATE_REQUEST_BUFFER
)] = concat_arrays!(CONNECT_INITIAL_PREFIX_BUFFER, CONFERENCE_CREATE_REQUEST_BUFFER);
pub const CONNECT_RESPONSE_BUFFER: [u8; concat_arrays_size!(
CONNECT_RESPONSE_PREFIX_BUFFER,
CONFERENCE_CREATE_RESPONSE_BUFFER
)] = concat_arrays!(CONNECT_RESPONSE_PREFIX_BUFFER, CONFERENCE_CREATE_RESPONSE_BUFFER);
lazy_static! {
pub static ref CONNECT_INITIAL: ConnectInitial = ConnectInitial {
calling_domain_selector: vec![0x01],
called_domain_selector: vec![0x01],
upward_flag: true,
target_parameters: DomainParameters {
max_channel_ids: 34,
max_user_ids: 2,
max_token_ids: 0,
num_priorities: 1,
min_throughput: 0,
max_height: 1,
max_mcs_pdu_size: 65535,
protocol_version: 2,
},
min_parameters: DomainParameters {
max_channel_ids: 1,
max_user_ids: 1,
max_token_ids: 1,
num_priorities: 1,
min_throughput: 0,
max_height: 1,
max_mcs_pdu_size: 1056,
protocol_version: 2,
},
max_parameters: DomainParameters {
max_channel_ids: 65535,
max_user_ids: 64535,
max_token_ids: 65535,
num_priorities: 1,
min_throughput: 0,
max_height: 1,
max_mcs_pdu_size: 65535,
protocol_version: 2,
},
conference_create_request: CONFERENCE_CREATE_REQUEST.clone(),
};
pub static ref CONNECT_RESPONSE: ConnectResponse = ConnectResponse {
called_connect_id: 0,
domain_parameters: DomainParameters {
max_channel_ids: 34,
max_user_ids: 3,
max_token_ids: 0,
num_priorities: 1,
min_throughput: 0,
max_height: 1,
max_mcs_pdu_size: 65528,
protocol_version: 2,
},
conference_create_response: CONFERENCE_CREATE_RESPONSE.clone(),
};
}