mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-09-02 17:15:43 +00:00
fix(cli): preserve proxy CIDRs in route output (#2503)
This commit is contained in:
@@ -537,6 +537,17 @@ type LocalBoxFuture<'a, T> = Pin<Box<dyn Future<Output = Result<T, Error>> + 'a>
|
|||||||
type ForeignNetworkMap = BTreeMap<String, ForeignNetworkEntryPb>;
|
type ForeignNetworkMap = BTreeMap<String, ForeignNetworkEntryPb>;
|
||||||
type GlobalForeignNetworkMap = BTreeMap<u32, list_global_foreign_network_response::ForeignNetworks>;
|
type GlobalForeignNetworkMap = BTreeMap<u32, list_global_foreign_network_response::ForeignNetworks>;
|
||||||
|
|
||||||
|
const ROUTE_OPTIONAL_COLUMNS: &[&str] = &["hostname"];
|
||||||
|
const ROUTE_DROP_COLUMNS: &[&str] = &[
|
||||||
|
"version",
|
||||||
|
"next_hop_hostname_lat_first",
|
||||||
|
"next_hop_ipv4_lat_first",
|
||||||
|
"path_len_lat_first",
|
||||||
|
"path_latency_lat_first",
|
||||||
|
"next_hop_hostname",
|
||||||
|
"next_hop_lat",
|
||||||
|
];
|
||||||
|
|
||||||
fn is_missing_web_client_service(error: &RpcError) -> bool {
|
fn is_missing_web_client_service(error: &RpcError) -> bool {
|
||||||
matches!(
|
matches!(
|
||||||
error,
|
error,
|
||||||
@@ -569,6 +580,60 @@ mod tests {
|
|||||||
|
|
||||||
assert!(!is_missing_web_client_service(&error));
|
assert!(!is_missing_web_client_service(&error));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn proxy_cidrs_are_displayed_one_per_line() {
|
||||||
|
assert_eq!(
|
||||||
|
format_proxy_cidrs("10.0.0.0/24, 192.168.0.0/16"),
|
||||||
|
"10.0.0.0/24\n192.168.0.0/16"
|
||||||
|
);
|
||||||
|
assert_eq!(format_proxy_cidrs("10.0.0.0/24"), "10.0.0.0/24");
|
||||||
|
assert_eq!(format_proxy_cidrs(""), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn route_column_priority_preserves_proxy_cidrs() {
|
||||||
|
let headers = [
|
||||||
|
"ipv4",
|
||||||
|
"hostname",
|
||||||
|
"proxy_cidrs",
|
||||||
|
"next_hop_ipv4",
|
||||||
|
"next_hop_hostname",
|
||||||
|
"next_hop_lat",
|
||||||
|
"path_len",
|
||||||
|
"path_latency",
|
||||||
|
"next_hop_ipv4_lat_first",
|
||||||
|
"next_hop_hostname_lat_first",
|
||||||
|
"path_len_lat_first",
|
||||||
|
"path_latency_lat_first",
|
||||||
|
"version",
|
||||||
|
]
|
||||||
|
.map(str::to_string);
|
||||||
|
let col_widths = headers
|
||||||
|
.iter()
|
||||||
|
.map(|header| text_width(header))
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
let drop_indices = header_indices(&headers, ROUTE_DROP_COLUMNS);
|
||||||
|
|
||||||
|
let (active, dropped, total_width) =
|
||||||
|
select_columns_to_drop(Some(79), &drop_indices, &col_widths);
|
||||||
|
|
||||||
|
let proxy_index = headers
|
||||||
|
.iter()
|
||||||
|
.position(|header| header == "proxy_cidrs")
|
||||||
|
.unwrap();
|
||||||
|
assert!(active[proxy_index]);
|
||||||
|
assert!(!dropped.contains(&proxy_index));
|
||||||
|
assert!(total_width <= 79);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn format_proxy_cidrs(value: &str) -> String {
|
||||||
|
value
|
||||||
|
.split(',')
|
||||||
|
.map(str::trim)
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.join("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(serde::Serialize)]
|
#[derive(serde::Serialize)]
|
||||||
@@ -1707,6 +1772,7 @@ impl<'a> CommandHandler<'a> {
|
|||||||
struct RouteTableItem {
|
struct RouteTableItem {
|
||||||
ipv4: String,
|
ipv4: String,
|
||||||
hostname: String,
|
hostname: String,
|
||||||
|
#[tabled(display_with = "format_proxy_cidrs")]
|
||||||
proxy_cidrs: String,
|
proxy_cidrs: String,
|
||||||
|
|
||||||
next_hop_ipv4: String,
|
next_hop_ipv4: String,
|
||||||
@@ -1833,8 +1899,8 @@ impl<'a> CommandHandler<'a> {
|
|||||||
print_output(
|
print_output(
|
||||||
&items,
|
&items,
|
||||||
self.output_format,
|
self.output_format,
|
||||||
&["proxy_cidrs", "version"],
|
ROUTE_OPTIONAL_COLUMNS,
|
||||||
&["proxy_cidrs", "version"],
|
ROUTE_DROP_COLUMNS,
|
||||||
self.no_trunc,
|
self.no_trunc,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user