use serde::{Deserialize, Serialize};
use crate::abi::{CapabilityMask, InstanceId};
use crate::state::quota::QuotaReductionPolicy;
#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct InstanceConfig {
pub default_caps: CapabilityMask,
pub max_entities: u32,
pub max_scheduled: u32,
pub memory_budget_bytes: u64,
pub parent: Option<InstanceId>,
pub quota_reduction: QuotaReductionPolicy,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn config_default_is_zero_quota_reject_policy() {
let c = InstanceConfig::default();
assert_eq!(c.max_entities, 0);
assert_eq!(c.max_scheduled, 0);
assert_eq!(c.memory_budget_bytes, 0);
assert!(c.parent.is_none());
assert_eq!(c.quota_reduction, QuotaReductionPolicy::Reject);
assert!(c.default_caps.is_empty());
}
#[test]
fn config_clone_eq() {
let c1 = InstanceConfig {
default_caps: CapabilityMask::SYSTEM,
max_entities: 10,
max_scheduled: 100,
memory_budget_bytes: 1024,
parent: InstanceId::new(7),
quota_reduction: QuotaReductionPolicy::ThrottleProportional,
};
let c2 = c1.clone();
assert_eq!(c1, c2);
}
#[test]
fn config_field_assignment() {
let c = InstanceConfig {
max_entities: 42,
parent: InstanceId::new(3),
quota_reduction: QuotaReductionPolicy::GrandfatherExisting,
..Default::default()
};
assert_eq!(c.max_entities, 42);
assert_eq!(c.parent, InstanceId::new(3));
assert_eq!(c.quota_reduction, QuotaReductionPolicy::GrandfatherExisting);
}
}