Skip to main content

rocketmq_remoting/protocol/body/
queue_time_span.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//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use rocketmq_common::common::message::message_queue::MessageQueue;
16use rocketmq_common::UtilAll::time_millis_to_human_string2;
17use serde::Deserialize;
18use serde::Serialize;
19
20#[derive(Debug, Clone, Serialize, Deserialize, Default)]
21pub struct QueueTimeSpan {
22    pub message_queue: Option<MessageQueue>,
23    pub min_time_stamp: i64,
24    pub max_time_stamp: i64,
25    pub consume_time_stamp: i64,
26    pub delay_time: i64,
27}
28
29impl QueueTimeSpan {
30    pub fn get_message_queue(&self) -> Option<MessageQueue> {
31        self.message_queue.clone()
32    }
33
34    pub fn set_message_queue(&mut self, message_queue: MessageQueue) {
35        self.message_queue = Some(message_queue);
36    }
37
38    pub fn get_min_time_stamp(&self) -> i64 {
39        self.min_time_stamp
40    }
41
42    pub fn set_min_time_stamp(&mut self, min_time_stamp: i64) {
43        self.min_time_stamp = min_time_stamp;
44    }
45
46    pub fn get_max_time_stamp(&self) -> i64 {
47        self.max_time_stamp
48    }
49
50    pub fn set_max_time_stamp(&mut self, max_time_stamp: i64) {
51        self.max_time_stamp = max_time_stamp;
52    }
53
54    pub fn get_consume_time_stamp(&self) -> i64 {
55        self.consume_time_stamp
56    }
57
58    pub fn set_consume_time_stamp(&mut self, consume_time_stamp: i64) {
59        self.consume_time_stamp = consume_time_stamp;
60    }
61
62    pub fn get_delay_time(&self) -> i64 {
63        self.delay_time
64    }
65
66    pub fn set_delay_time(&mut self, delay_time: i64) {
67        self.delay_time = delay_time;
68    }
69
70    pub fn get_min_time_stamp_str(&self) -> String {
71        time_millis_to_human_string2(self.min_time_stamp)
72    }
73
74    pub fn get_max_time_stamp_str(&self) -> String {
75        time_millis_to_human_string2(self.max_time_stamp)
76    }
77
78    pub fn get_consume_time_stamp_str(&self) -> String {
79        time_millis_to_human_string2(self.consume_time_stamp)
80    }
81}
82
83#[cfg(test)]
84mod tests {
85
86    use super::*;
87
88    #[test]
89    fn queue_span_init() {
90        let body: QueueTimeSpan = Default::default();
91        assert_eq!(body.consume_time_stamp, 0);
92        assert_eq!(body.delay_time, 0);
93        assert_eq!(body.max_time_stamp, 0);
94        assert_eq!(body.min_time_stamp, 0);
95        assert_eq!(body.message_queue, None);
96    }
97    #[test]
98    fn queue_span_clone() {
99        let body: QueueTimeSpan = QueueTimeSpan {
100            message_queue: Some(MessageQueue::new()),
101            min_time_stamp: 1,
102            max_time_stamp: 2,
103            consume_time_stamp: 3,
104            delay_time: 4,
105        };
106        let body_clone = body.clone();
107        assert_eq!(body_clone.consume_time_stamp, 3);
108        assert_eq!(body_clone.delay_time, 4);
109        assert_eq!(body_clone.max_time_stamp, 2);
110        assert_eq!(body_clone.min_time_stamp, 1);
111        assert_eq!(body_clone.message_queue, Some(MessageQueue::new()),);
112    }
113    #[test]
114    fn queue_span_deserialise() {
115        let body: QueueTimeSpan = QueueTimeSpan {
116            message_queue: Some(MessageQueue::new()),
117            min_time_stamp: 1,
118            max_time_stamp: 2,
119            consume_time_stamp: 3,
120            delay_time: 4,
121        };
122
123        let json = serde_json::to_string(&body).unwrap();
124        let deserialized: QueueTimeSpan = serde_json::from_str(&json).unwrap();
125        assert_eq!(deserialized.consume_time_stamp, 3);
126        assert_eq!(deserialized.delay_time, 4);
127        assert_eq!(deserialized.max_time_stamp, 2);
128        assert_eq!(deserialized.min_time_stamp, 1);
129        assert_eq!(deserialized.message_queue, Some(MessageQueue::new()),);
130    }
131    #[test]
132    fn queue_span_serialise() {
133        let body: QueueTimeSpan = QueueTimeSpan {
134            message_queue: Some(MessageQueue::new()),
135            min_time_stamp: 1,
136            max_time_stamp: 2,
137            consume_time_stamp: 3,
138            delay_time: 4,
139        };
140
141        let json = serde_json::to_string(&body).unwrap();
142        assert_eq!(
143            json,
144            "{\"message_queue\":{\"topic\":\"\",\"brokerName\":\"\",\"queueId\":0},\"min_time_stamp\":1,\"\
145             max_time_stamp\":2,\"consume_time_stamp\":3,\"delay_time\":4}"
146        );
147    }
148    #[test]
149    fn queue_span_setters() {
150        let mut body: QueueTimeSpan = Default::default();
151        body.set_message_queue(MessageQueue::new());
152        body.set_min_time_stamp(1);
153        body.set_max_time_stamp(2);
154        body.set_consume_time_stamp(3);
155        body.set_delay_time(4);
156
157        assert_eq!(body.consume_time_stamp, 3);
158        assert_eq!(body.delay_time, 4);
159        assert_eq!(body.max_time_stamp, 2);
160        assert_eq!(body.min_time_stamp, 1);
161        assert_eq!(body.message_queue, Some(MessageQueue::new()),);
162    }
163    #[test]
164    fn queue_span_getters() {
165        let body: QueueTimeSpan = QueueTimeSpan {
166            message_queue: Some(MessageQueue::new()),
167            min_time_stamp: 1,
168            max_time_stamp: 2,
169            consume_time_stamp: 3,
170            delay_time: 4,
171        };
172
173        assert_eq!(body.get_consume_time_stamp(), 3);
174        assert_eq!(body.get_delay_time(), 4);
175        assert_eq!(body.get_max_time_stamp(), 2);
176        assert_eq!(body.get_min_time_stamp(), 1);
177        assert_eq!(body.get_message_queue(), Some(MessageQueue::new()),);
178    }
179
180    #[test]
181    fn queue_span_time_str() {
182        let body: QueueTimeSpan = QueueTimeSpan {
183            message_queue: Some(MessageQueue::new()),
184            min_time_stamp: 1,
185            max_time_stamp: 2,
186            consume_time_stamp: 3,
187            delay_time: 4,
188        };
189
190        let expected_min = time_millis_to_human_string2(body.get_min_time_stamp());
191        let expected_max = time_millis_to_human_string2(body.get_max_time_stamp());
192        let expected_consume = time_millis_to_human_string2(body.get_consume_time_stamp());
193
194        assert_eq!(body.get_min_time_stamp_str(), expected_min);
195        assert_eq!(body.get_max_time_stamp_str(), expected_max);
196        assert_eq!(body.get_consume_time_stamp_str(), expected_consume);
197    }
198}