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> {
|
fn parse_root_class_rate_ceil(raw: &str, class_id: &str) -> Option<ClassRateCeil> {
|
||||||
for line in raw.lines() {
|
for line in raw.lines() {
|
||||||
let t = line.trim();
|
let t = line.trim();
|
||||||
if !t.contains("class htb")
|
if !t.contains("class htb") || !t.contains(" rate ") || !t.contains(" ceil ") {
|
||||||
|| !t.contains(class_id)
|
|
||||||
|| !t.contains(" rate ")
|
|
||||||
|| !t.contains(" ceil ")
|
|
||||||
{
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let toks: Vec<&str> = t.split_whitespace().collect();
|
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
|
let rate = toks
|
||||||
.iter()
|
.iter()
|
||||||
.position(|v| *v == "rate")
|
.position(|v| *v == "rate")
|
||||||
@@ -1125,10 +1128,16 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_root_rate_ceil() {
|
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");
|
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.rate), "500mbit");
|
||||||
assert_eq!(normalize_tc_rate(&rc.ceil), "1000mbit");
|
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]
|
#[test]
|
||||||
|
|||||||
Reference in New Issue
Block a user