106 lines
2.8 KiB
Rust
106 lines
2.8 KiB
Rust
//! WP-12: /api/cluster
|
|
mod common;
|
|
|
|
use axum::http::StatusCode;
|
|
use common::{get, post, test_app_with_admin};
|
|
use serde_json::json;
|
|
|
|
const ADMIN: &str = "admin@example.com";
|
|
const PW: &str = "admin-password-123";
|
|
|
|
#[tokio::test]
|
|
async fn overview_and_admin_actions() {
|
|
let app = test_app_with_admin().await;
|
|
let token = common::login(&app, ADMIN, PW).await.access;
|
|
|
|
let res = get(&app, "/api/cluster/overview", Some(&token)).await;
|
|
assert_eq!(res.status, StatusCode::OK, "{}", res.json);
|
|
assert_eq!(res.json["nodes"][0]["version"], "v1.32.13");
|
|
let w = res.json["workloads"].as_array().unwrap();
|
|
assert!(w
|
|
.iter()
|
|
.any(|w| w["name"] == "gitea" && w["kind"] == "deployment"));
|
|
assert!(res.json["images"].as_array().unwrap().len() >= 2);
|
|
|
|
let base = "/api/cluster/workloads/gitea/deployment/gitea";
|
|
assert_eq!(
|
|
post(&app, &format!("{base}/restart"), json!({}), Some(&token))
|
|
.await
|
|
.status,
|
|
StatusCode::NO_CONTENT
|
|
);
|
|
assert_eq!(
|
|
post(
|
|
&app,
|
|
&format!("{base}/scale"),
|
|
json!({"replicas": 2}),
|
|
Some(&token)
|
|
)
|
|
.await
|
|
.status,
|
|
StatusCode::NO_CONTENT
|
|
);
|
|
assert_eq!(
|
|
post(
|
|
&app,
|
|
&format!("{base}/scale"),
|
|
json!({"replicas": 500}),
|
|
Some(&token)
|
|
)
|
|
.await
|
|
.status,
|
|
StatusCode::UNPROCESSABLE_ENTITY
|
|
);
|
|
assert_eq!(
|
|
post(
|
|
&app,
|
|
&format!("{base}/image"),
|
|
json!({"image": "gitea/gitea:1.23.0"}),
|
|
Some(&token)
|
|
)
|
|
.await
|
|
.status,
|
|
StatusCode::NO_CONTENT
|
|
);
|
|
assert_eq!(
|
|
post(
|
|
&app,
|
|
"/api/cluster/workloads/gitea/cronjob/x/restart",
|
|
json!({}),
|
|
Some(&token)
|
|
)
|
|
.await
|
|
.status,
|
|
StatusCode::NOT_FOUND
|
|
);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn actions_are_admin_only_and_overview_needs_auth() {
|
|
let app = test_app_with_admin().await;
|
|
let admin = common::login(&app, ADMIN, PW).await.access;
|
|
post(&app, "/api/users", json!({"email": "u@x.de", "display_name": "U", "password": "user-password-123", "role": "user"}), Some(&admin)).await;
|
|
let user = common::login(&app, "u@x.de", "user-password-123")
|
|
.await
|
|
.access;
|
|
assert_eq!(
|
|
get(&app, "/api/cluster/overview", Some(&user)).await.status,
|
|
StatusCode::OK
|
|
);
|
|
assert_eq!(
|
|
post(
|
|
&app,
|
|
"/api/cluster/workloads/gitea/deployment/gitea/restart",
|
|
json!({}),
|
|
Some(&user)
|
|
)
|
|
.await
|
|
.status,
|
|
StatusCode::FORBIDDEN
|
|
);
|
|
assert_eq!(
|
|
get(&app, "/api/cluster/overview", None).await.status,
|
|
StatusCode::UNAUTHORIZED
|
|
);
|
|
}
|