Skip to content

Commit

Permalink
Merge pull request #119 from LRZ-BADW/flavor-group-modify-tests
Browse files Browse the repository at this point in the history
Flavor Group Modify Tests
  • Loading branch information
gierens authored Dec 16, 2024
2 parents 6b9c36f + 44da20f commit f8b3ff9
Show file tree
Hide file tree
Showing 8 changed files with 210 additions and 42 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

This file was deleted.

8 changes: 4 additions & 4 deletions api/src/database/resources/flavor_group.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,9 @@ pub async fn select_maybe_flavor_group_from_db(
) -> Result<Option<FlavorGroup>, UnexpectedOnlyError> {
#[derive(FromRow)]
pub struct FlavorGroupDb {
pub id: u32,
pub id: i32,
pub name: String,
pub project_id: u32,
pub project_id: i32,
}
let query1 = sqlx::query!(
r#"
Expand Down Expand Up @@ -117,9 +117,9 @@ pub async fn select_maybe_flavor_group_from_db(
.map(|row| row.id)
.collect::<Vec<_>>();
Ok(Some(FlavorGroup {
id: flavor_group.id,
id: flavor_group.id as u32,
name: flavor_group.name,
project: flavor_group.project_id,
project: flavor_group.project_id as u32,
flavors,
}))
}
Expand Down
5 changes: 4 additions & 1 deletion api/src/database/user/project.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,10 @@ pub async fn select_maybe_project_minimal_from_db(
) -> Result<Option<ProjectMinimal>, UnexpectedOnlyError> {
let query = sqlx::query!(
r#"
SELECT id, name
SELECT
id as project__id,
name as project__name,
user_class as project__user_class
FROM user_project AS project
WHERE project.id = ?
"#,
Expand Down
5 changes: 5 additions & 0 deletions lib/src/budgeting/budget_over_tree.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ impl BudgetOverTreeRequest {
params.push(("all", "1".to_string()));
} else if let Some(project) = self.project {
params.push(("project", project.to_string()));
} else if let Some(user) = self.user {
params.push(("user", user.to_string()));
}
if let Some(end) = self.end {
params.push(("end", end.to_string()));
}
params
}
Expand Down
7 changes: 4 additions & 3 deletions scripts/init_db.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ DB_PASSWORD="${MARIADB_PASSWORD:=password}"
DB_NAME="${MARIADB_DB:=lrzcc}"
DB_PORT="${MARIADB_PORT:=3306}"

if [[ -z "${SKIP_DOCKER}" ]]
then
if [[ -z "${SKIP_DOCKER}" ]]; then
docker stop lrzcc-db || true
docker rm lrzcc-db || true
docker run \
Expand All @@ -40,8 +39,10 @@ done

>&2 echo "MariaDB is up and running on ${DB_HOST} on port ${DB_PORT}!"

mariadb -h "${DB_HOST}" -P "${DB_PORT}" -u "${DB_USER}" -p"${DB_PASSWORD}" -D "" -e "SET GLOBAL max_connections := 1000"

export DATABASE_URL=mysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
sqlx database create
sqlx migrate run

>&2 echo "MariaDB has been migrated, ready to go!"
>&2 echo "MariaDB has been configured and migrated, ready to go!"
1 change: 1 addition & 0 deletions test/tests/resources/flavor_group/mod.rs
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
mod delete;
mod modify;
148 changes: 148 additions & 0 deletions test/tests/resources/flavor_group/modify.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
use lrzcc::{Api, Token};
use lrzcc_test::{random_alphanumeric_string, spawn_app};
use std::str::FromStr;
use tokio::task::spawn_blocking;

#[tokio::test]
async fn e2e_lib_flavor_group_modify_denies_access_to_normal_user() {
// arrange
let server = spawn_app().await;
let test_project = server
.setup_test_project(0, 0, 1)
.await
.expect("Failed to setup test project");
let user = test_project.normals[0].user.clone();
let token = test_project.normals[0].token.clone();
let project = test_project.project.clone();
server
.mock_keystone_auth(&token, &user.openstack_id, &user.name)
.mount(&server.keystone_server)
.await;
let flavor_group = server
.setup_test_flavor_group(project.id)
.await
.expect("Failed to setup test server state");

spawn_blocking(move || {
// arrange
let client = Api::new(
format!("{}/api", &server.address),
Token::from_str(&token).unwrap(),
None,
None,
)
.unwrap();

// act
let modify = client.flavor_group.modify(flavor_group.id).send();

// assert
assert!(modify.is_err());
assert_eq!(
modify.unwrap_err().to_string(),
format!("Admin privileges required")
);
})
.await
.unwrap();
}

#[tokio::test]
async fn e2e_lib_flavor_group_modify_denies_access_to_master_user() {
// arrange
let server = spawn_app().await;
let test_project = server
.setup_test_project(0, 1, 0)
.await
.expect("Failed to setup test project");
let user = test_project.masters[0].user.clone();
let token = test_project.masters[0].token.clone();
let project = test_project.project.clone();
server
.mock_keystone_auth(&token, &user.openstack_id, &user.name)
.mount(&server.keystone_server)
.await;
let flavor_group = server
.setup_test_flavor_group(project.id)
.await
.expect("Failed to setup test server state");

spawn_blocking(move || {
// arrange
let client = Api::new(
format!("{}/api", &server.address),
Token::from_str(&token).unwrap(),
None,
None,
)
.unwrap();

// act
let modify = client.flavor_group.modify(flavor_group.id).send();

// assert
assert!(modify.is_err());
assert_eq!(
modify.unwrap_err().to_string(),
format!("Admin privileges required")
);
})
.await
.unwrap();
}

#[tokio::test]
async fn e2e_lib_flavor_group_modify_and_get_works() {
// arrange
let server = spawn_app().await;
let (user, project, token) = server
.setup_test_user_and_project(true)
.await
.expect("Failed to setup test user and project.");
server
.mock_keystone_auth(&token, &user.openstack_id, &user.name)
.mount(&server.keystone_server)
.await;
let flavor_group = server
.setup_test_flavor_group(project.id)
.await
.expect("Failed to setup test server state");

spawn_blocking(move || {
// arrange
let client = Api::new(
format!("{}/api", &server.address),
Token::from_str(&token).unwrap(),
None,
None,
)
.unwrap();

// act and assert 1 - modify
let name = random_alphanumeric_string(10);
let modified = client
.flavor_group
.modify(flavor_group.id)
.name(name.clone())
// TODO: test changing the project
.send()
.unwrap();
assert_eq!(&name, &modified.name);

// act and assert 2 - get
let retrieved = client.flavor_group.get(modified.id).unwrap();
assert_eq!(modified.id, retrieved.id);
assert_eq!(modified.name, retrieved.name);
assert_eq!(modified.project, retrieved.project.id);
assert_eq!(
modified.flavors,
retrieved
.flavors
.into_iter()
.map(|f| f.id)
.collect::<Vec<u32>>()
);
})
.await
.unwrap();
}

0 comments on commit f8b3ff9

Please sign in to comment.