use smpp_codec::common::{Npi, Ton};
use smpp_codec::pdus::{Destination, SubmitMulti, SubmitMultiResp, UnsuccessfulDelivery};
#[test]
fn test_submit_multi_encoding_decoding() {
let dest_sme = Destination::SmeAddress {
ton: Ton::International,
npi: Npi::Isdn,
address: "1234567890".to_string(),
};
let dest_dl = Destination::DistributionList("MyGroup".to_string());
let req = SubmitMulti::new(
1001,
"Sender".to_string(),
vec![dest_sme.clone(), dest_dl.clone()],
b"Hello Multicast".to_vec(),
);
let mut buffer = Vec::new();
req.encode(&mut buffer).expect("Encode failed");
let decoded = SubmitMulti::decode(&buffer).expect("Decode failed");
assert_eq!(decoded.sequence_number, 1001);
assert_eq!(decoded.source_addr, "Sender");
assert_eq!(decoded.destinations.len(), 2);
assert_eq!(decoded.short_message, b"Hello Multicast");
match &decoded.destinations[0] {
Destination::SmeAddress { ton, npi, address } => {
assert_eq!(*ton, Ton::International);
assert_eq!(*npi, Npi::Isdn);
assert_eq!(address, "1234567890");
}
_ => panic!("Expected SME Address first"),
}
match &decoded.destinations[1] {
Destination::DistributionList(name) => {
assert_eq!(name, "MyGroup");
}
_ => panic!("Expected Distribution List second"),
}
}
#[test]
fn test_submit_multi_resp_success() {
let resp = SubmitMultiResp::new(1001, "ESME_ROK", "UUID-1001".to_string(), vec![]);
let mut buffer = Vec::new();
resp.encode(&mut buffer).expect("Encode failed");
let decoded = SubmitMultiResp::decode(&buffer).expect("Decode failed");
assert_eq!(decoded.sequence_number, 1001);
assert_eq!(decoded.command_status, 0); assert_eq!(decoded.message_id, "UUID-1001");
assert!(decoded.unsuccess_smes.is_empty());
}
#[test]
fn test_submit_multi_resp_partial_success() {
let unsuccess = UnsuccessfulDelivery {
ton: Ton::National,
npi: Npi::Isdn,
address: "9999".to_string(),
error_status: 0x0000000B, };
let resp = SubmitMultiResp::new(
1001,
"ESME_ROK",
"UUID-PARTIAL".to_string(),
vec![unsuccess],
);
let mut buffer = Vec::new();
resp.encode(&mut buffer).expect("Encode failed");
let decoded = SubmitMultiResp::decode(&buffer).expect("Decode failed");
assert_eq!(decoded.unsuccess_smes.len(), 1);
assert_eq!(decoded.unsuccess_smes[0].address, "9999");
assert_eq!(decoded.unsuccess_smes[0].error_status, 0x0000000B);
}
#[test]
fn test_submit_multi_resp_failure() {
let resp = SubmitMultiResp::new(
1001,
"ESME_RSYSERR", "".to_string(),
vec![],
);
let mut buffer = Vec::new();
resp.encode(&mut buffer).expect("Encode failed");
let decoded = SubmitMultiResp::decode(&buffer).expect("Decode failed");
assert_ne!(decoded.command_status, 0);
assert!(decoded.message_id.is_empty());
assert!(decoded.unsuccess_smes.is_empty());
}