use predicates::prelude::*;
use std::error::Error;
use crate::test_helpers::*;
#[test]
fn test_user_limits() -> Result<(), Box<dyn Error>> {
let limit_name = "max-connections";
let username = "user_limits_test1";
let password = "pa$$w0rd";
run_succeeds([
"declare",
"user",
"--name",
username,
"--password",
password,
]);
run_succeeds([
"user_limits",
"declare",
"--username",
username,
"--name",
limit_name,
"--value",
"1234",
]);
run_succeeds(["user_limits", "list"])
.stdout(output_includes(username).and(output_includes("1234")));
run_succeeds([
"user_limits",
"delete",
"--username",
username,
"--name",
limit_name,
]);
run_succeeds(["user_limits", "list"]).stdout(output_includes(username).not());
run_succeeds([
"user_limits",
"delete",
"--username",
username,
"--name",
limit_name,
]);
run_succeeds(["delete", "user", "--name", username]);
Ok(())
}
#[test]
fn test_user_limits_via_old_style_commands() -> Result<(), Box<dyn Error>> {
let limit_name = "max-connections";
let username = "user_limits_old_style";
let password = "pa$$w0rd";
run_succeeds([
"declare",
"user",
"--name",
username,
"--password",
password,
]);
run_succeeds([
"declare",
"user_limit",
"--username",
username,
"--name",
limit_name,
"--value",
"100",
]);
run_succeeds(["list", "user_limits", "--username", username])
.stdout(output_includes(limit_name).and(output_includes("100")));
run_succeeds([
"delete",
"user_limit",
"--username",
username,
"--name",
limit_name,
]);
run_succeeds(["list", "user_limits"]).stdout(output_includes(username).not());
run_succeeds(["delete", "user", "--name", username]);
Ok(())
}
#[test]
fn test_user_limits_with_deprecated_user_flag() -> Result<(), Box<dyn Error>> {
let limit_name = "max-connections";
let username = "user_limits_compat";
let password = "pa$$w0rd";
run_succeeds([
"declare",
"user",
"--name",
username,
"--password",
password,
]);
run_succeeds([
"user_limits",
"declare",
"--user",
username,
"--name",
limit_name,
"--value",
"5678",
]);
run_succeeds(["user_limits", "list"])
.stdout(output_includes(username).and(output_includes("5678")));
run_succeeds([
"user_limits",
"delete",
"--user",
username,
"--name",
limit_name,
]);
run_succeeds(["user_limits", "list"]).stdout(output_includes(username).not());
run_succeeds(["delete", "user", "--name", username]);
Ok(())
}
#[test]
fn test_user_limits_with_deprecated_user_flag_via_old_style_commands() -> Result<(), Box<dyn Error>>
{
let limit_name = "max-connections";
let username = "user_limits_old_compat";
let password = "pa$$w0rd";
run_succeeds([
"declare",
"user",
"--name",
username,
"--password",
password,
]);
run_succeeds([
"declare",
"user_limit",
"--user",
username,
"--name",
limit_name,
"--value",
"200",
]);
run_succeeds(["list", "user_limits", "--user", username])
.stdout(output_includes(limit_name).and(output_includes("200")));
run_succeeds([
"delete",
"user_limit",
"--user",
username,
"--name",
limit_name,
]);
run_succeeds(["list", "user_limits"]).stdout(output_includes(username).not());
run_succeeds(["delete", "user", "--name", username]);
Ok(())
}
#[test]
fn test_user_limits_via_users_command_group() -> Result<(), Box<dyn Error>> {
let limit_name = "max-connections";
let username = "user_limits_via_users";
let password = "pa$$w0rd";
run_succeeds([
"declare",
"user",
"--name",
username,
"--password",
password,
]);
run_succeeds([
"user_limits",
"declare",
"--username",
username,
"--name",
limit_name,
"--value",
"300",
]);
run_succeeds(["users", "limits", "--username", username])
.stdout(output_includes(limit_name).and(output_includes("300")));
run_succeeds([
"user_limits",
"delete",
"--username",
username,
"--name",
limit_name,
]);
run_succeeds(["users", "limits"]).stdout(output_includes(username).not());
run_succeeds(["delete", "user", "--name", username]);
Ok(())
}
#[test]
fn test_user_limits_list_filtering_by_username() -> Result<(), Box<dyn Error>> {
let username_a = "user_limits_filter_a";
let username_b = "user_limits_filter_b";
let password = "pa$$w0rd";
run_succeeds([
"declare",
"user",
"--name",
username_a,
"--password",
password,
]);
run_succeeds([
"declare",
"user",
"--name",
username_b,
"--password",
password,
]);
run_succeeds([
"user_limits",
"declare",
"--username",
username_a,
"--name",
"max-connections",
"--value",
"111",
]);
run_succeeds([
"user_limits",
"declare",
"--username",
username_b,
"--name",
"max-connections",
"--value",
"222",
]);
run_succeeds(["user_limits", "list"])
.stdout(output_includes(username_a).and(output_includes(username_b)));
run_succeeds(["user_limits", "list", "--username", username_a])
.stdout(output_includes("111").and(output_includes(username_b).not()));
run_succeeds([
"user_limits",
"delete",
"--username",
username_a,
"--name",
"max-connections",
]);
run_succeeds([
"user_limits",
"delete",
"--username",
username_b,
"--name",
"max-connections",
]);
run_succeeds(["delete", "user", "--name", username_a]);
run_succeeds(["delete", "user", "--name", username_b]);
Ok(())
}
#[test]
fn test_user_limits_via_users_command_group_with_deprecated_user_flag() -> Result<(), Box<dyn Error>>
{
let limit_name = "max-connections";
let username = "user_limits_users_compat";
let password = "pa$$w0rd";
run_succeeds([
"declare",
"user",
"--name",
username,
"--password",
password,
]);
run_succeeds([
"user_limits",
"declare",
"--username",
username,
"--name",
limit_name,
"--value",
"400",
]);
run_succeeds(["users", "limits", "--user", username])
.stdout(output_includes(limit_name).and(output_includes("400")));
run_succeeds([
"user_limits",
"delete",
"--username",
username,
"--name",
limit_name,
]);
run_succeeds(["delete", "user", "--name", username]);
Ok(())
}
#[test]
fn test_user_limits_with_separate_auth_and_target_usernames() -> Result<(), Box<dyn Error>> {
let target = "user_limits_separate_auth";
let password = "pa$$w0rd";
run_succeeds(["declare", "user", "--name", target, "--password", password]);
run_succeeds([
"--username",
"guest",
"--password",
"guest",
"user_limits",
"declare",
"--username",
target,
"--name",
"max-connections",
"--value",
"500",
]);
run_succeeds([
"--username",
"guest",
"--password",
"guest",
"user_limits",
"list",
"--username",
target,
])
.stdout(output_includes(target).and(output_includes("500")));
run_succeeds([
"--username",
"guest",
"--password",
"guest",
"user_limits",
"delete",
"--username",
target,
"--name",
"max-connections",
]);
run_succeeds(["user_limits", "list"]).stdout(output_includes(target).not());
run_succeeds(["delete", "user", "--name", target]);
Ok(())
}
#[test]
fn test_user_limits_with_invalid_value() {
run_fails([
"user_limits",
"declare",
"--username",
"guest",
"--name",
"max-connections",
"--value",
"not-a-number",
])
.stderr(output_includes("not a valid integer"));
}