fix27: исправлен парсер root-класса tc без ложных совпадений
This commit is contained in:
@@ -606,14 +606,17 @@ fn is_not_found_error(stderr_or_msg: &str) -> bool {
|
||||
fn parse_root_class_rate_ceil(raw: &str, class_id: &str) -> Option<ClassRateCeil> {
|
||||
for line in raw.lines() {
|
||||
let t = line.trim();
|
||||
if !t.contains("class htb")
|
||||
|| !t.contains(class_id)
|
||||
|| !t.contains(" rate ")
|
||||
|| !t.contains(" ceil ")
|
||||
{
|
||||
if !t.contains("class htb") || !t.contains(" rate ") || !t.contains(" ceil ") {
|
||||
continue;
|
||||
}
|
||||
let toks: Vec<&str> = t.split_whitespace().collect();
|
||||
let class = toks
|
||||
.iter()
|
||||
.position(|v| *v == "htb")
|
||||
.and_then(|i| toks.get(i + 1))?;
|
||||
if *class != class_id {
|
||||
continue;
|
||||
}
|
||||
let rate = toks
|
||||
.iter()
|
||||
.position(|v| *v == "rate")
|
||||
@@ -1125,10 +1128,16 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn parse_root_rate_ceil() {
|
||||
let raw = "class htb 1:1 root rate 1000Mbit ceil 1000Mbit";
|
||||
let raw = "class htb 1:10 parent 1:1 leaf 800f: prio 0 rate 50Mbit ceil 50Mbit burst 1600b cburst 1600b\nclass htb 1:1 root rate 500Mbit ceil 500Mbit burst 1600b cburst 1600b";
|
||||
let rc = parse_root_class_rate_ceil(raw, "1:1").expect("root class exists");
|
||||
assert_eq!(normalize_tc_rate(&rc.rate), "1000mbit");
|
||||
assert_eq!(normalize_tc_rate(&rc.ceil), "1000mbit");
|
||||
assert_eq!(normalize_tc_rate(&rc.rate), "500mbit");
|
||||
assert_eq!(normalize_tc_rate(&rc.ceil), "500mbit");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_root_rate_ceil_returns_none_when_only_parent_matches() {
|
||||
let raw = "class htb 1:10 parent 1:1 leaf 800f: prio 0 rate 50Mbit ceil 50Mbit burst 1600b cburst 1600b";
|
||||
assert!(parse_root_class_rate_ceil(raw, "1:1").is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user