use std::collections::HashMap;
use crate::{
nm::nm_gen_conf, Interface, MergedNetworkState, NetworkState,
NetworkStateMode, NmstateError,
};
impl NetworkState {
pub fn gen_conf(
&self,
) -> Result<HashMap<String, Vec<(String, String)>>, NmstateError> {
let mut ret = HashMap::new();
let mut cur_state = NetworkState::new();
cur_state
.interfaces
.push(Interface::Loopback(Default::default()));
let merged_state = MergedNetworkState::new(
self.clone(),
cur_state,
NetworkStateMode::GenerateConfig,
false, )?;
ret.insert("NetworkManager".to_string(), nm_gen_conf(&merged_state)?);
Ok(ret)
}
}
#[cfg(test)]
mod tests {
use crate::{Interface, InterfaceType, Interfaces};
#[test]
fn test_gen_conf_change_unknown_to_eth() {
let mut ifaces: Interfaces = serde_yaml::from_str(
r"---
- name: foo
state: up
ethernet:
speed: 1000
",
)
.unwrap();
ifaces.set_unknown_iface_to_eth().unwrap();
let ifaces = ifaces.to_vec();
assert_eq!(ifaces.len(), 1);
if let Interface::Ethernet(eth_iface) = ifaces[0] {
assert_eq!(eth_iface.base.iface_type, InterfaceType::Ethernet);
assert_eq!(eth_iface.ethernet.as_ref().unwrap().speed, Some(1000));
} else {
panic!("Expecting ethernet interface");
}
}
}