-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Expand file tree
/
Copy pathadmit_http_route.rs
More file actions
117 lines (111 loc) · 3.49 KB
/
admit_http_route.rs
File metadata and controls
117 lines (111 loc) · 3.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
use linkerd_policy_controller_k8s_api::{self as api, policy::httproute::*};
use linkerd_policy_test::admission;
#[tokio::test(flavor = "current_thread")]
async fn accepts_valid() {
admission::accepts(|ns| HttpRoute {
metadata: api::ObjectMeta {
namespace: Some(ns.clone()),
name: Some("test".to_string()),
..Default::default()
},
spec: HttpRouteSpec {
inner: CommonRouteSpec {
parent_refs: Some(vec![server_parent_ref(ns)]),
},
hostnames: None,
rules: Some(rules()),
},
status: None,
})
.await;
}
#[tokio::test(flavor = "current_thread")]
async fn rejects_relative_path_match() {
admission::rejects(|ns| HttpRoute {
metadata: meta(&ns),
spec: HttpRouteSpec {
inner: CommonRouteSpec {
parent_refs: Some(vec![server_parent_ref(ns)]),
},
hostnames: None,
rules: Some(vec![HttpRouteRule {
matches: Some(vec![HttpRouteMatch {
path: Some(HttpPathMatch::Exact {
value: "foo/bar".to_string(),
}),
..HttpRouteMatch::default()
}]),
filters: None,
backend_refs: None,
timeouts: None,
}]),
},
status: None,
})
.await;
}
#[tokio::test(flavor = "current_thread")]
async fn rejects_relative_redirect_path() {
admission::rejects(|ns| HttpRoute {
metadata: meta(&ns),
spec: HttpRouteSpec {
inner: CommonRouteSpec {
parent_refs: Some(vec![server_parent_ref(ns)]),
},
hostnames: None,
rules: Some(vec![HttpRouteRule {
matches: Some(vec![HttpRouteMatch {
path: Some(HttpPathMatch::Exact {
value: "/foo".to_string(),
}),
..HttpRouteMatch::default()
}]),
filters: Some(vec![HttpRouteFilter::RequestRedirect {
request_redirect: HttpRequestRedirectFilter {
scheme: None,
hostname: None,
path: Some(HttpPathModifier::ReplaceFullPath {
replace_full_path: "foo/bar".to_string(),
}),
port: None,
status_code: None,
},
}]),
backend_refs: None,
timeouts: None,
}]),
},
status: None,
})
.await;
}
fn server_parent_ref(ns: impl ToString) -> ParentReference {
ParentReference {
group: Some("policy.linkerd.io".to_string()),
kind: Some("Server".to_string()),
namespace: Some(ns.to_string()),
name: "my-server".to_string(),
section_name: None,
port: None,
}
}
fn meta(ns: impl ToString) -> api::ObjectMeta {
api::ObjectMeta {
namespace: Some(ns.to_string()),
name: Some("test".to_string()),
..Default::default()
}
}
fn rules() -> Vec<HttpRouteRule> {
vec![HttpRouteRule {
matches: Some(vec![HttpRouteMatch {
path: Some(HttpPathMatch::Exact {
value: "/foo".to_string(),
}),
..HttpRouteMatch::default()
}]),
filters: None,
backend_refs: None,
timeouts: None,
}]
}