Skip to content

Commit 7630201

Browse files
committed
[ISSUE #1479]♻️Refactor CheckTransactionStateRequestHeader with derive RequestHeaderCodec🔥
1 parent 7ebcf1b commit 7630201

1 file changed

Lines changed: 133 additions & 4 deletions

File tree

rocketmq-remoting/src/protocol/header/check_transaction_state_request_header.rs

Lines changed: 133 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,19 @@
1515
* limitations under the License.
1616
*/
1717
use cheetah_string::CheetahString;
18+
use rocketmq_macros::RequestHeaderCodec;
1819
use serde::Deserialize;
1920
use serde::Serialize;
2021

21-
use crate::protocol::command_custom_header::CommandCustomHeader;
22-
use crate::protocol::command_custom_header::FromMap;
2322
use crate::rpc::rpc_request_header::RpcRequestHeader;
2423

25-
#[derive(Serialize, Deserialize, Debug, Default)]
24+
#[derive(Serialize, Deserialize, Debug, Default, RequestHeaderCodec)]
2625
#[serde(rename_all = "camelCase")]
2726
pub struct CheckTransactionStateRequestHeader {
2827
pub topic: Option<CheetahString>,
28+
#[required]
2929
pub tran_state_table_offset: i64,
30+
#[required]
3031
pub commit_log_offset: i64,
3132
pub msg_id: Option<CheetahString>,
3233
pub transaction_id: Option<CheetahString>,
@@ -35,7 +36,7 @@ pub struct CheckTransactionStateRequestHeader {
3536
pub rpc_request_header: Option<RpcRequestHeader>,
3637
}
3738

38-
impl CheckTransactionStateRequestHeader {
39+
/*impl CheckTransactionStateRequestHeader {
3940
pub const TOPIC: &'static str = "topic";
4041
pub const TRAN_STATE_TABLE_OFFSET: &'static str = "tranStateTableOffset";
4142
pub const COMMIT_LOG_OFFSET: &'static str = "commitLogOffset";
@@ -118,3 +119,131 @@ impl FromMap for CheckTransactionStateRequestHeader {
118119
})
119120
}
120121
}
122+
*/
123+
124+
#[cfg(test)]
125+
mod tests {
126+
use std::collections::HashMap;
127+
128+
use cheetah_string::CheetahString;
129+
130+
use super::*;
131+
use crate::protocol::command_custom_header::CommandCustomHeader;
132+
use crate::protocol::command_custom_header::FromMap;
133+
134+
#[test]
135+
fn check_transaction_state_request_header_serializes_correctly() {
136+
let header = CheckTransactionStateRequestHeader {
137+
topic: Some(CheetahString::from_static_str("test_topic")),
138+
tran_state_table_offset: 123,
139+
commit_log_offset: 456,
140+
msg_id: Some(CheetahString::from_static_str("test_msg_id")),
141+
transaction_id: Some(CheetahString::from_static_str("test_transaction_id")),
142+
offset_msg_id: Some(CheetahString::from_static_str("test_offset_msg_id")),
143+
rpc_request_header: None,
144+
};
145+
let map = header.to_map().unwrap();
146+
assert_eq!(
147+
map.get(&CheetahString::from_static_str("topic")).unwrap(),
148+
"test_topic"
149+
);
150+
assert_eq!(
151+
map.get(&CheetahString::from_static_str("tranStateTableOffset"))
152+
.unwrap(),
153+
"123"
154+
);
155+
assert_eq!(
156+
map.get(&CheetahString::from_static_str("commitLogOffset"))
157+
.unwrap(),
158+
"456"
159+
);
160+
assert_eq!(
161+
map.get(&CheetahString::from_static_str("msgId")).unwrap(),
162+
"test_msg_id"
163+
);
164+
assert_eq!(
165+
map.get(&CheetahString::from_static_str("transactionId"))
166+
.unwrap(),
167+
"test_transaction_id"
168+
);
169+
assert_eq!(
170+
map.get(&CheetahString::from_static_str("offsetMsgId"))
171+
.unwrap(),
172+
"test_offset_msg_id"
173+
);
174+
}
175+
176+
#[test]
177+
fn check_transaction_state_request_header_deserializes_correctly() {
178+
let mut map = HashMap::new();
179+
map.insert(
180+
CheetahString::from_static_str("topic"),
181+
CheetahString::from_static_str("test_topic"),
182+
);
183+
map.insert(
184+
CheetahString::from_static_str("tranStateTableOffset"),
185+
CheetahString::from_static_str("123"),
186+
);
187+
map.insert(
188+
CheetahString::from_static_str("commitLogOffset"),
189+
CheetahString::from_static_str("456"),
190+
);
191+
map.insert(
192+
CheetahString::from_static_str("msgId"),
193+
CheetahString::from_static_str("test_msg_id"),
194+
);
195+
map.insert(
196+
CheetahString::from_static_str("transactionId"),
197+
CheetahString::from_static_str("test_transaction_id"),
198+
);
199+
map.insert(
200+
CheetahString::from_static_str("offsetMsgId"),
201+
CheetahString::from_static_str("test_offset_msg_id"),
202+
);
203+
204+
let header = <CheckTransactionStateRequestHeader as FromMap>::from(&map).unwrap();
205+
assert_eq!(header.topic.unwrap(), "test_topic");
206+
assert_eq!(header.tran_state_table_offset, 123);
207+
assert_eq!(header.commit_log_offset, 456);
208+
assert_eq!(header.msg_id.unwrap(), "test_msg_id");
209+
assert_eq!(header.transaction_id.unwrap(), "test_transaction_id");
210+
assert_eq!(header.offset_msg_id.unwrap(), "test_offset_msg_id");
211+
}
212+
213+
#[test]
214+
fn check_transaction_state_request_header_handles_missing_optional_fields() {
215+
let mut map = HashMap::new();
216+
map.insert(
217+
CheetahString::from_static_str("tranStateTableOffset"),
218+
CheetahString::from_static_str("123"),
219+
);
220+
map.insert(
221+
CheetahString::from_static_str("commitLogOffset"),
222+
CheetahString::from_static_str("456"),
223+
);
224+
225+
let header = <CheckTransactionStateRequestHeader as FromMap>::from(&map).unwrap();
226+
assert!(header.topic.is_none());
227+
assert_eq!(header.tran_state_table_offset, 123);
228+
assert_eq!(header.commit_log_offset, 456);
229+
assert!(header.msg_id.is_none());
230+
assert!(header.transaction_id.is_none());
231+
assert!(header.offset_msg_id.is_none());
232+
}
233+
234+
#[test]
235+
fn check_transaction_state_request_header_handles_invalid_data() {
236+
let mut map = HashMap::new();
237+
map.insert(
238+
CheetahString::from_static_str("tranStateTableOffset"),
239+
CheetahString::from_static_str("invalid"),
240+
);
241+
map.insert(
242+
CheetahString::from_static_str("commitLogOffset"),
243+
CheetahString::from_static_str("invalid"),
244+
);
245+
246+
let result = <CheckTransactionStateRequestHeader as FromMap>::from(&map);
247+
assert!(result.is_err());
248+
}
249+
}

0 commit comments

Comments
 (0)