runtime-rs:refactor network model with netlink

add unit test for tcfilter

Fixes: #4289
Signed-off-by: Zhongtao Hu <zhongtaohu.tim@linux.alibaba.com>
This commit is contained in:
Zhongtao Hu 2022-06-28 15:41:57 +08:00
parent 9c526292e7
commit 07231b2f3f
4 changed files with 42 additions and 3 deletions

View File

@ -29,5 +29,5 @@ kata-types = { path = "../../../libs/kata-types" }
kata-sys-util = { path = "../../../libs/kata-sys-util" } kata-sys-util = { path = "../../../libs/kata-sys-util" }
logging = { path = "../../../libs/logging" } logging = { path = "../../../libs/logging" }
oci = { path = "../../../libs/oci" } oci = { path = "../../../libs/oci" }
actix-rt = "2.7.0"
[features] [features]

View File

@ -7,7 +7,7 @@
pub mod none_model; pub mod none_model;
pub mod route_model; pub mod route_model;
pub mod tc_filter_model; pub mod tc_filter_model;
pub mod test_network_model;
use std::sync::Arc; use std::sync::Arc;
use anyhow::{Context, Result}; use anyhow::{Context, Result};

View File

@ -91,7 +91,7 @@ impl NetworkModel for TcFilterModel {
} }
} }
async fn fetch_index(handle: &Handle, name: &str) -> Result<u32> { pub async fn fetch_index(handle: &Handle, name: &str) -> Result<u32> {
let link = crate::network::network_pair::get_link_by_name(handle, name) let link = crate::network::network_pair::get_link_by_name(handle, name)
.await .await
.context("get link by name")?; .context("get link by name")?;

View File

@ -0,0 +1,39 @@
// Copyright (c) 2019-2022 Alibaba Cloud
// Copyright (c) 2019-2022 Ant Group
//
// SPDX-License-Identifier: Apache-2.0
//
#[cfg(test)]
mod tests {
use crate::network::{
network_model::{tc_filter_model::fetch_index, TC_FILTER_NET_MODEL_STR},
network_pair::NetworkPair,
};
use anyhow::Context;
use scopeguard::defer;
#[actix_rt::test]
async fn test_tc_redirect_network() {
if let Ok((connection, handle, _)) = rtnetlink::new_connection().context("new connection") {
let thread_handler = tokio::spawn(connection);
defer!({
thread_handler.abort();
});
handle
.link()
.add()
.veth("foo".to_string(), "bar".to_string());
if let Ok(net_pair) =
NetworkPair::new(&handle, 1, "bar", TC_FILTER_NET_MODEL_STR, 2).await
{
if let Ok(index) = fetch_index(&handle, "bar").await {
assert!(net_pair.add_network_model().await.is_ok());
assert!(net_pair.del_network_model().await.is_ok());
assert!(handle.link().del(index).execute().await.is_ok());
}
}
}
}
}