mirror of
https://github.com/telemt/telemt.git
synced 2026-06-19 02:00:08 +07:00
205fc88718
- Implemented a mechanism to log unknown datacenter indices with a distinct limit to avoid excessive logging. - Introduced tests to ensure that logging is deduplicated per datacenter index and respects the distinct limit. - Updated the fallback logic for datacenter resolution to prevent panics when only a single datacenter is available. feat(proxy): add authentication probe throttling - Added a pre-authentication probe throttling mechanism to limit the rate of invalid TLS and MTProto handshake attempts. - Introduced a backoff strategy for repeated failures and ensured that successful handshakes reset the failure count. - Implemented tests to validate the behavior of the authentication probe under various conditions. fix(proxy): ensure proper flushing of masked writes - Added a flush operation after writing initial data to the mask writer to ensure data integrity. refactor(proxy): optimize desynchronization deduplication - Replaced the Mutex-based deduplication structure with a DashMap for improved concurrency and performance. - Implemented a bounded cache for deduplication to limit memory usage and prevent stale entries from persisting. test(proxy): enhance security tests for middle relay and handshake - Added comprehensive tests for the middle relay and handshake processes, including scenarios for deduplication and authentication probe behavior. - Ensured that the tests cover edge cases and validate the expected behavior of the system under load.
52 lines
1.4 KiB
Rust
52 lines
1.4 KiB
Rust
use super::*;
|
|
|
|
#[test]
|
|
fn unknown_dc_log_is_deduplicated_per_dc_idx() {
|
|
let _guard = unknown_dc_test_lock()
|
|
.lock()
|
|
.expect("unknown dc test lock must be available");
|
|
clear_unknown_dc_log_cache_for_testing();
|
|
|
|
assert!(should_log_unknown_dc(777));
|
|
assert!(
|
|
!should_log_unknown_dc(777),
|
|
"same unknown dc_idx must not be logged repeatedly"
|
|
);
|
|
assert!(
|
|
should_log_unknown_dc(778),
|
|
"different unknown dc_idx must still be loggable"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn unknown_dc_log_respects_distinct_limit() {
|
|
let _guard = unknown_dc_test_lock()
|
|
.lock()
|
|
.expect("unknown dc test lock must be available");
|
|
clear_unknown_dc_log_cache_for_testing();
|
|
|
|
for dc in 1..=UNKNOWN_DC_LOG_DISTINCT_LIMIT {
|
|
assert!(
|
|
should_log_unknown_dc(dc as i16),
|
|
"expected first-time unknown dc_idx to be loggable"
|
|
);
|
|
}
|
|
|
|
assert!(
|
|
!should_log_unknown_dc(i16::MAX),
|
|
"distinct unknown dc_idx entries above limit must not be logged"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn fallback_dc_never_panics_with_single_dc_list() {
|
|
let mut cfg = ProxyConfig::default();
|
|
cfg.network.prefer = 6;
|
|
cfg.network.ipv6 = Some(true);
|
|
cfg.default_dc = Some(42);
|
|
|
|
let addr = get_dc_addr_static(999, &cfg).expect("fallback dc must resolve safely");
|
|
let expected = SocketAddr::new(TG_DATACENTERS_V6[0], TG_DATACENTER_PORT);
|
|
assert_eq!(addr, expected);
|
|
}
|