Add new engine tests for forced state
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
33
central_backend/engine_test/test_turn_forced_off.yaml
Normal file
33
central_backend/engine_test/test_turn_forced_off.yaml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
devices:
|
||||||
|
- id: dev1
|
||||||
|
info:
|
||||||
|
reference: A
|
||||||
|
version: 0.0.1
|
||||||
|
max_relays: 1
|
||||||
|
time_create: 1
|
||||||
|
time_update: 1
|
||||||
|
name: Dev1
|
||||||
|
description: Day1
|
||||||
|
validated: true
|
||||||
|
enabled: true
|
||||||
|
relays:
|
||||||
|
- id: dcb3fd91-bf9b-4de3-99e5-92c1c7dd72e9
|
||||||
|
name: R1
|
||||||
|
enabled: true
|
||||||
|
priority: 1
|
||||||
|
consumption: 100
|
||||||
|
minimal_uptime: 10
|
||||||
|
minimal_downtime: 10
|
||||||
|
depends_on: []
|
||||||
|
conflicts_with: []
|
||||||
|
|
||||||
|
on: false
|
||||||
|
for: 5000
|
||||||
|
forced_state:
|
||||||
|
type: Off
|
||||||
|
for_secs: 500
|
||||||
|
should_be_on: false
|
||||||
|
|
||||||
|
online: true
|
||||||
|
|
||||||
|
curr_consumption: -10000
|
||||||
49
central_backend/engine_test/test_turn_forced_on.yaml
Normal file
49
central_backend/engine_test/test_turn_forced_on.yaml
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
devices:
|
||||||
|
- id: dev1
|
||||||
|
info:
|
||||||
|
reference: A
|
||||||
|
version: 0.0.1
|
||||||
|
max_relays: 1
|
||||||
|
time_create: 1
|
||||||
|
time_update: 1
|
||||||
|
name: Dev1
|
||||||
|
description: Day1
|
||||||
|
validated: true
|
||||||
|
enabled: true
|
||||||
|
relays:
|
||||||
|
- id: dcb3fd91-bf9b-4de3-99e5-92c1c7dd72e9
|
||||||
|
name: R1
|
||||||
|
enabled: true
|
||||||
|
priority: 1
|
||||||
|
consumption: 100
|
||||||
|
minimal_uptime: 10
|
||||||
|
minimal_downtime: 10
|
||||||
|
depends_on: []
|
||||||
|
conflicts_with: []
|
||||||
|
|
||||||
|
on: false
|
||||||
|
for: 500
|
||||||
|
forced_state:
|
||||||
|
type: On
|
||||||
|
for_secs: 500
|
||||||
|
should_be_on: true
|
||||||
|
|
||||||
|
- id: dcb3fd91-bf9b-4de3-99e5-92c1c7dd72f0
|
||||||
|
name: R2
|
||||||
|
enabled: true
|
||||||
|
priority: 1
|
||||||
|
consumption: 100
|
||||||
|
minimal_uptime: 10
|
||||||
|
minimal_downtime: 10
|
||||||
|
depends_on: [ ]
|
||||||
|
conflicts_with: [ ]
|
||||||
|
|
||||||
|
on: false
|
||||||
|
for: 500
|
||||||
|
forced_state:
|
||||||
|
type: None
|
||||||
|
should_be_on: false
|
||||||
|
|
||||||
|
online: true
|
||||||
|
|
||||||
|
curr_consumption: 10000
|
||||||
@@ -25,6 +25,33 @@ impl DeviceState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||||
|
#[serde(tag = "type")]
|
||||||
|
pub enum SetRelayForcedStateReq {
|
||||||
|
#[default]
|
||||||
|
None,
|
||||||
|
Off {
|
||||||
|
for_secs: u64,
|
||||||
|
},
|
||||||
|
On {
|
||||||
|
for_secs: u64,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SetRelayForcedStateReq {
|
||||||
|
pub fn to_forced_state(&self) -> RelayForcedState {
|
||||||
|
match &self {
|
||||||
|
SetRelayForcedStateReq::None => RelayForcedState::None,
|
||||||
|
SetRelayForcedStateReq::Off { for_secs } => RelayForcedState::Off {
|
||||||
|
until: time_secs() + for_secs,
|
||||||
|
},
|
||||||
|
SetRelayForcedStateReq::On { for_secs } => RelayForcedState::On {
|
||||||
|
until: time_secs() + for_secs,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
|
#[derive(Default, Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||||
#[serde(tag = "type")]
|
#[serde(tag = "type")]
|
||||||
pub enum RelayForcedState {
|
pub enum RelayForcedState {
|
||||||
@@ -440,7 +467,7 @@ impl EnergyEngine {
|
|||||||
mod test {
|
mod test {
|
||||||
use crate::devices::device::{Device, DeviceId, DeviceRelayID};
|
use crate::devices::device::{Device, DeviceId, DeviceRelayID};
|
||||||
use crate::energy::consumption::EnergyConsumption;
|
use crate::energy::consumption::EnergyConsumption;
|
||||||
use crate::energy::engine::EnergyEngine;
|
use crate::energy::engine::{EnergyEngine, SetRelayForcedStateReq};
|
||||||
use crate::utils::time_utils::time_secs;
|
use crate::utils::time_utils::time_secs;
|
||||||
use rust_embed::Embed;
|
use rust_embed::Embed;
|
||||||
|
|
||||||
@@ -449,6 +476,8 @@ mod test {
|
|||||||
id: DeviceRelayID,
|
id: DeviceRelayID,
|
||||||
on: bool,
|
on: bool,
|
||||||
r#for: usize,
|
r#for: usize,
|
||||||
|
#[serde(default)]
|
||||||
|
forced_state: SetRelayForcedStateReq,
|
||||||
should_be_on: bool,
|
should_be_on: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -496,6 +525,7 @@ mod test {
|
|||||||
let s = engine.relay_state(r.id);
|
let s = engine.relay_state(r.id);
|
||||||
s.on = r.on;
|
s.on = r.on;
|
||||||
s.since = time_secs() as usize - r.r#for;
|
s.since = time_secs() as usize - r.r#for;
|
||||||
|
s.forced_state = r.forced_state.to_forced_state()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
use crate::devices::device::{DeviceId, DeviceRelay, DeviceRelayID};
|
use crate::devices::device::{DeviceId, DeviceRelay, DeviceRelayID};
|
||||||
use crate::energy::energy_actor;
|
use crate::energy::energy_actor;
|
||||||
use crate::energy::engine::RelayForcedState;
|
use crate::energy::engine::SetRelayForcedStateReq;
|
||||||
use crate::server::WebEnergyActor;
|
use crate::server::WebEnergyActor;
|
||||||
use crate::server::custom_error::HttpResult;
|
use crate::server::custom_error::HttpResult;
|
||||||
use crate::utils::time_utils::time_secs;
|
|
||||||
use actix_web::{HttpResponse, web};
|
use actix_web::{HttpResponse, web};
|
||||||
|
|
||||||
/// Get the full list of relays
|
/// Get the full list of relays
|
||||||
@@ -87,19 +86,6 @@ pub async fn update(
|
|||||||
Ok(HttpResponse::Accepted().finish())
|
Ok(HttpResponse::Accepted().finish())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
|
|
||||||
#[serde(tag = "type")]
|
|
||||||
pub enum SetRelayForcedStateReq {
|
|
||||||
#[default]
|
|
||||||
None,
|
|
||||||
Off {
|
|
||||||
for_secs: u64,
|
|
||||||
},
|
|
||||||
On {
|
|
||||||
for_secs: u64,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Set relay forced status
|
/// Set relay forced status
|
||||||
pub async fn set_forced_state(
|
pub async fn set_forced_state(
|
||||||
actor: WebEnergyActor,
|
actor: WebEnergyActor,
|
||||||
@@ -116,15 +102,7 @@ pub async fn set_forced_state(
|
|||||||
actor
|
actor
|
||||||
.send(energy_actor::SetRelayForcedState(
|
.send(energy_actor::SetRelayForcedState(
|
||||||
path.id,
|
path.id,
|
||||||
match &req.0 {
|
req.to_forced_state(),
|
||||||
SetRelayForcedStateReq::None => RelayForcedState::None,
|
|
||||||
SetRelayForcedStateReq::Off { for_secs } => RelayForcedState::Off {
|
|
||||||
until: time_secs() + for_secs,
|
|
||||||
},
|
|
||||||
SetRelayForcedStateReq::On { for_secs } => RelayForcedState::On {
|
|
||||||
until: time_secs() + for_secs,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
))
|
))
|
||||||
.await??;
|
.await??;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user