Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[tests] Reuse admin token in tests #836 #837

Merged
merged 1 commit into from
Dec 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions agdb_server/tests/admin_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use crate::framework::NO_TOKEN;

#[tokio::test]
async fn create_user() -> anyhow::Result<()> {
let server = TestServer::new().await?;
let mut server = TestServer::new().await?;
let admin = server.init_admin().await?;
let bad = Some("bad".to_string());
let user = User {
Expand Down Expand Up @@ -47,7 +47,7 @@ async fn create_user() -> anyhow::Result<()> {

#[tokio::test]
async fn change_password() -> anyhow::Result<()> {
let server = TestServer::new().await?;
let mut server = TestServer::new().await?;
let admin = server.init_admin().await?;
let bad = Some("bad".to_string());
let user = User {
Expand Down Expand Up @@ -107,7 +107,7 @@ async fn change_password() -> anyhow::Result<()> {

#[tokio::test]
async fn db_list() -> anyhow::Result<()> {
let server = TestServer::new().await?;
let mut server = TestServer::new().await?;
let token1 = server.init_user("alice", "password123").await?;
let token2 = server.init_user("bob", "password456").await?;
let admin = server.init_admin().await?;
Expand Down Expand Up @@ -140,7 +140,7 @@ async fn db_list() -> anyhow::Result<()> {

#[tokio::test]
async fn user_list() -> anyhow::Result<()> {
let server = TestServer::new().await?;
let mut server = TestServer::new().await?;
server.init_user("alice", "password123").await?;
server.init_user("bob", "password456").await?;
let admin = server.init_admin().await?;
Expand Down
10 changes: 5 additions & 5 deletions agdb_server/tests/db_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ struct AddUser<'a> {

#[tokio::test]
async fn add_database() -> anyhow::Result<()> {
let server = TestServer::new().await?;
let mut server = TestServer::new().await?;
let token = server.init_user("alice", "mypassword123").await?;
let bad_token = Some("bad".to_string());
let db1 = Db {
Expand Down Expand Up @@ -57,7 +57,7 @@ async fn add_database() -> anyhow::Result<()> {

#[tokio::test]
async fn add_user() -> anyhow::Result<()> {
let server = TestServer::new().await?;
let mut server = TestServer::new().await?;
let token = server.init_user("alice", "mypassword123").await?;
let token2: Option<String> = server.init_user("bob", "mypassword456").await?;
server.init_user("chad", "mypassword789").await?;
Expand Down Expand Up @@ -150,7 +150,7 @@ async fn add_user() -> anyhow::Result<()> {

#[tokio::test]
async fn delete() -> anyhow::Result<()> {
let server = TestServer::new().await?;
let mut server = TestServer::new().await?;
let token = server.init_user("alice", "mypassword123").await?;
let bad_token = Some("bad".to_string());
let db1 = Db {
Expand Down Expand Up @@ -198,7 +198,7 @@ async fn delete() -> anyhow::Result<()> {

#[tokio::test]
async fn list() -> anyhow::Result<()> {
let server = TestServer::new().await?;
let mut server = TestServer::new().await?;
let token = server.init_user("alice", "mypassword123").await?;
let bad = Some("bad".to_string());
let db1 = Db {
Expand Down Expand Up @@ -227,7 +227,7 @@ async fn list() -> anyhow::Result<()> {

#[tokio::test]
async fn remove() -> anyhow::Result<()> {
let server = TestServer::new().await?;
let mut server = TestServer::new().await?;
let token = server.init_user("alice", "mypassword123").await?;
let bad_token = Some("bad".to_string());
let db1 = Db {
Expand Down
36 changes: 26 additions & 10 deletions agdb_server/tests/framework/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ pub struct TestServer {
pub client: Client,
pub admin: String,
pub admin_password: String,
pub admin_token: Option<String>,
}

impl TestServer {
Expand Down Expand Up @@ -99,6 +100,7 @@ impl TestServer {
client,
admin: ADMIN.to_string(),
admin_password: ADMIN.to_string(),
admin_token: None,
};

let mut error = anyhow!("Failed to start server");
Expand Down Expand Up @@ -138,22 +140,31 @@ impl TestServer {
Ok((status, response.json().await.map_err(|e| anyhow!(e))))
}

pub async fn init_admin(&self) -> anyhow::Result<Option<String>> {
pub async fn init_admin(&mut self) -> anyhow::Result<Option<String>> {
let mut admin = HashMap::<&str, &str>::new();
admin.insert("name", &self.admin);
admin.insert("password", &self.admin_password);
let response = self.post(LOGIN_URI, &admin, &None).await?;
assert_eq!(response.0, 200);
Ok(Some(response.1))
self.admin_token = Some(response.1);
Ok(self.admin_token.clone())
}

pub async fn init_user(&self, name: &str, password: &str) -> anyhow::Result<Option<String>> {
pub async fn init_user(
&mut self,
name: &str,
password: &str,
) -> anyhow::Result<Option<String>> {
let mut user = HashMap::<&str, &str>::new();
user.insert("name", name);
user.insert("password", password);
let admin_token = self.init_admin().await?;
if self.admin_token.is_none() {
self.init_admin().await?;
}
assert_eq!(
self.post(CREATE_USER_URI, &user, &admin_token).await?.0,
self.post(CREATE_USER_URI, &user, &self.admin_token.clone())
.await?
.0,
201
);
let response = self.post(LOGIN_URI, &user, &None).await?;
Expand Down Expand Up @@ -192,13 +203,18 @@ impl TestServer {
let mut admin = HashMap::<&str, String>::new();
admin.insert("name", self.admin.clone());
admin.insert("password", self.admin_password.clone());
let token = self.admin_token.clone();

std::thread::spawn(move || -> anyhow::Result<()> {
let admin_token = reqwest::blocking::Client::new()
.post(format!("{}:{}/api/v1{LOGIN_URI}", Self::url_base(), port))
.json(&admin)
.send()?
.text()?;
let admin_token = if let Some(t) = token {
t
} else {
reqwest::blocking::Client::new()
.post(format!("{}:{}/api/v1{LOGIN_URI}", Self::url_base(), port))
.json(&admin)
.send()?
.text()?
};

assert_eq!(
reqwest::blocking::Client::new()
Expand Down
4 changes: 2 additions & 2 deletions agdb_server/tests/user_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use crate::framework::NO_TOKEN;

#[tokio::test]
async fn chnage_password() -> anyhow::Result<()> {
let server = TestServer::new().await?;
let mut server = TestServer::new().await?;
let admin = server.init_admin().await?;
let bad = Some("bad".to_string());
let user = User {
Expand Down Expand Up @@ -56,7 +56,7 @@ async fn chnage_password() -> anyhow::Result<()> {

#[tokio::test]
async fn login() -> anyhow::Result<()> {
let server = TestServer::new().await?;
let mut server = TestServer::new().await?;
let admin = server.init_admin().await?;
let user = User {
name: "alice",
Expand Down