Skip to content

Commit 291d4af

Browse files
committed
Add CLI tests for new policy options
1 parent 909ef8c commit 291d4af

File tree

3 files changed

+78
-10
lines changed

3 files changed

+78
-10
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
3030
url = "2.5.2"
3131

3232
[dev-dependencies]
33+
assert_matches = "1.5.0"
3334
async-std = { version = "1.13.0", features = ["attributes"], default-features = false }
3435
httpmock = { version = "0.7.0", default-features = false }
3536
rstest = "0.23.0"

src/cli.rs

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ pub struct PolicyOptions {
7777
///
7878
/// eg. v1/data/diamond/policy/session/write_to_beamline_visit
7979
#[clap(long, required = false)]
80-
pub visit_query: String,
80+
pub access_query: String,
8181
/// The Rego rule used to generate admin access data
8282
///
8383
/// eg. v1/data/diamond/policy/admin/configure_beamline
@@ -154,6 +154,7 @@ impl TracingOptions {
154154
mod tests {
155155
use std::path::PathBuf;
156156

157+
use assert_matches::assert_matches;
157158
use clap::error::ErrorKind;
158159
use clap::Parser;
159160
use tracing::Level;
@@ -176,6 +177,8 @@ mod tests {
176177
};
177178
assert_eq!(cmd.addr(), ("0.0.0.0".parse().unwrap(), 8000));
178179
assert_eq!(cmd.root_directory(), None);
180+
181+
assert_matches!(cmd.policy, None);
179182
}
180183

181184
#[test]
@@ -196,6 +199,70 @@ mod tests {
196199
};
197200
assert_eq!(cmd.addr(), ("127.0.0.1".parse().unwrap(), 8765));
198201
assert_eq!(cmd.root_directory, Some("/tmp/trackers".into()));
202+
assert_matches!(cmd.policy, None);
203+
}
204+
205+
#[test]
206+
fn policy_arguments() {
207+
let cli = Cli::try_parse_from([
208+
APP,
209+
"serve",
210+
"--policy",
211+
"opa.example.com",
212+
"--admin-query",
213+
"demo/admin_check",
214+
"--access-query",
215+
"demo/access_check",
216+
])
217+
.unwrap();
218+
let cmd = assert_matches!(cli.command, Command::Serve(cmd) => cmd);
219+
let policy = assert_matches!(cmd.policy, Some(plc) => plc);
220+
221+
assert_eq!(policy.policy_host, "opa.example.com");
222+
assert_eq!(policy.admin_query, "demo/admin_check");
223+
assert_eq!(policy.access_query, "demo/access_check");
224+
}
225+
226+
#[test]
227+
fn missing_admin_query() {
228+
let err = Cli::try_parse_from([
229+
APP,
230+
"serve",
231+
"--policy",
232+
"opa.example.com",
233+
"--access-query",
234+
"demo/access-query",
235+
])
236+
.unwrap_err();
237+
assert_eq!(err.kind(), ErrorKind::MissingRequiredArgument);
238+
}
239+
240+
#[test]
241+
fn missing_access_query() {
242+
let err = Cli::try_parse_from([
243+
APP,
244+
"serve",
245+
"--policy",
246+
"opa.example.com",
247+
"--admin-query",
248+
"demo/admin-query",
249+
])
250+
.unwrap_err();
251+
assert_eq!(err.kind(), ErrorKind::MissingRequiredArgument);
252+
}
253+
254+
#[test]
255+
fn policy_queries_without_host() {
256+
let err = Cli::try_parse_from([
257+
APP,
258+
"serve",
259+
"--access-query",
260+
"demo/access-query",
261+
"--admin-query",
262+
"demo/admin-query",
263+
])
264+
.unwrap_err();
265+
assert_eq!(err.kind(), ErrorKind::MissingRequiredArgument);
199266
}
200267

201268
#[test]

src/graphql/auth.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,12 +105,12 @@ impl PolicyCheck {
105105
pub fn new(endpoint: PolicyOptions) -> Self {
106106
info!(
107107
"Checking authorization against {:?} using {:?} for admin and {:?} for access",
108-
endpoint.policy_host, endpoint.admin_query, endpoint.visit_query
108+
endpoint.policy_host, endpoint.admin_query, endpoint.access_query
109109
);
110110
Self {
111111
client: reqwest::Client::new(),
112112
admin: format!("{}/{}", endpoint.policy_host, endpoint.admin_query),
113-
access: format!("{}/{}", endpoint.policy_host, &endpoint.visit_query),
113+
access: format!("{}/{}", endpoint.policy_host, &endpoint.access_query),
114114
}
115115
}
116116
pub async fn check_access(
@@ -233,7 +233,7 @@ mod tests {
233233
.await;
234234
let check = PolicyCheck::new(PolicyOptions {
235235
policy_host: server.url(""),
236-
visit_query: "demo/access".into(),
236+
access_query: "demo/access".into(),
237237
admin_query: "demo/admin".into(),
238238
});
239239
check
@@ -260,7 +260,7 @@ mod tests {
260260
.await;
261261
let check = PolicyCheck::new(PolicyOptions {
262262
policy_host: server.url(""),
263-
visit_query: "demo/access".into(),
263+
access_query: "demo/access".into(),
264264
admin_query: "demo/admin".into(),
265265
});
266266
check
@@ -289,7 +289,7 @@ mod tests {
289289
.await;
290290
let check = PolicyCheck::new(PolicyOptions {
291291
policy_host: server.url(""),
292-
visit_query: "demo/access".into(),
292+
access_query: "demo/access".into(),
293293
admin_query: "demo/admin".into(),
294294
});
295295

@@ -319,7 +319,7 @@ mod tests {
319319
.await;
320320
let check = PolicyCheck::new(PolicyOptions {
321321
policy_host: server.url(""),
322-
visit_query: "demo/access".into(),
322+
access_query: "demo/access".into(),
323323
admin_query: "demo/admin".into(),
324324
});
325325
let result = check.check_admin(token("token").as_ref(), "i22").await;
@@ -339,7 +339,7 @@ mod tests {
339339
.await;
340340
let check = PolicyCheck::new(PolicyOptions {
341341
policy_host: server.url(""),
342-
visit_query: "demo/access".into(),
342+
access_query: "demo/access".into(),
343343
admin_query: "demo/admin".into(),
344344
});
345345
let result = check.check_access(None, "i22", "cm1234-4").await;
@@ -359,7 +359,7 @@ mod tests {
359359
.await;
360360
let check = PolicyCheck::new(PolicyOptions {
361361
policy_host: server.url(""),
362-
visit_query: "demo/access".into(),
362+
access_query: "demo/access".into(),
363363
admin_query: "demo/admin".into(),
364364
});
365365
let result = check.check_admin(None, "i22").await;
@@ -380,7 +380,7 @@ mod tests {
380380
.await;
381381
let check = PolicyCheck::new(PolicyOptions {
382382
policy_host: server.url(""),
383-
visit_query: "demo/access".into(),
383+
access_query: "demo/access".into(),
384384
admin_query: "demo/admin".into(),
385385
});
386386
let result = check.check_admin(token("token").as_ref(), "i22").await;

0 commit comments

Comments
 (0)