Fix bad self-loop check
This commit is contained in:
parent
78663854cc
commit
583dd7c8f7
@ -165,7 +165,8 @@ impl DeviceRelay {
|
||||
}
|
||||
}
|
||||
|
||||
let relays_map = list.iter().map(|r| (r.id, r)).collect::<HashMap<_, _>>();
|
||||
let mut relays_map = list.iter().map(|r| (r.id, r)).collect::<HashMap<_, _>>();
|
||||
relays_map.insert(self.id, self);
|
||||
|
||||
if self.depends_on.iter().any(|d| !relays_map.contains_key(d)) {
|
||||
return Some("A specified dependent relay does not exists!");
|
||||
@ -362,5 +363,21 @@ mod tests {
|
||||
assert!(target_relay
|
||||
.error(&[other_dep.clone(), second_dep.clone(), target_relay.clone()])
|
||||
.is_none());
|
||||
|
||||
// self loop
|
||||
let mut self_loop = DeviceRelay {
|
||||
id: DeviceRelayID::default(),
|
||||
name: "self_loop".to_string(),
|
||||
..Default::default()
|
||||
};
|
||||
let self_loop_good = self_loop.clone();
|
||||
self_loop.depends_on = vec![self_loop.id];
|
||||
assert!(self_loop.error(&[]).is_some());
|
||||
assert!(self_loop.error(&[self_loop.clone()]).is_some());
|
||||
assert!(self_loop.error(&[self_loop_good.clone()]).is_some());
|
||||
self_loop.depends_on = vec![];
|
||||
assert!(self_loop_good.error(&[]).is_none());
|
||||
assert!(self_loop_good.error(&[self_loop_good.clone()]).is_none());
|
||||
assert!(self_loop_good.error(&[self_loop.clone()]).is_none());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user