Skip to main content

rocketmq_protocol/protocol/
header_facade.rs

1// Copyright 2023 The RocketMQ Rust Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8
9use std::time::SystemTime;
10use std::time::UNIX_EPOCH;
11
12use crate::protocol::header::controller::elect_master_request_header::ElectMasterRequestHeader;
13
14pub fn default_elect_master_request_header() -> ElectMasterRequestHeader {
15    ElectMasterRequestHeader::new("", "", 0, false, current_millis() as u64)
16}
17
18fn current_millis() -> i64 {
19    SystemTime::now()
20        .duration_since(UNIX_EPOCH)
21        .map(|duration| duration.as_millis() as i64)
22        .unwrap_or(0)
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28
29    fn now_millis() -> u64 {
30        SystemTime::now()
31            .duration_since(UNIX_EPOCH)
32            .expect("system time should be later than the unix epoch")
33            .as_millis() as u64
34    }
35
36    #[test]
37    fn default_elect_master_request_header_matches_production_defaults() {
38        let header = default_elect_master_request_header();
39
40        assert_eq!(header.cluster_name, "");
41        assert_eq!(header.broker_name, "");
42        assert_eq!(header.broker_id, 0);
43        assert!(!header.designate_elect);
44    }
45
46    #[test]
47    fn default_elect_master_request_header_uses_wall_clock_invoke_time() {
48        let before = now_millis();
49        let header = default_elect_master_request_header();
50
51        assert!(header.invoke_time > 0);
52        assert!(header.invoke_time >= before);
53    }
54}