mirror of
https://github.com/jlengrand/engine.git
synced 2026-03-10 08:11:21 +00:00
feat: adding tests
This commit is contained in:
@@ -10,7 +10,7 @@ use crate::cloud_provider::metrics::KubernetesApiMetrics;
|
||||
use crate::cmd::structs::{
|
||||
Configmap, Daemonset, Item, KubernetesEvent, KubernetesJob, KubernetesKind, KubernetesList, KubernetesNode,
|
||||
KubernetesPod, KubernetesPodStatusPhase, KubernetesPodStatusReason, KubernetesService, KubernetesVersion,
|
||||
LabelsContent, Namespace, Secrets, PDB, PVC, SVC,
|
||||
LabelsContent, Namespace, Secrets, HPA, PDB, PVC, SVC,
|
||||
};
|
||||
use crate::cmd::utilities::QoveryCommand;
|
||||
use crate::constants::KUBECONFIG;
|
||||
@@ -1239,3 +1239,14 @@ where
|
||||
envs,
|
||||
)
|
||||
}
|
||||
|
||||
pub fn kubernetes_get_all_hpas<P>(kubernetes_config: P, envs: Vec<(&str, &str)>) -> Result<HPA, SimpleError>
|
||||
where
|
||||
P: AsRef<Path>,
|
||||
{
|
||||
kubectl_exec::<P, HPA>(
|
||||
vec!["get", "hpa", "--all-namespaces", "-o", "json"],
|
||||
kubernetes_config,
|
||||
envs,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -495,6 +495,35 @@ pub struct PDBStatus {
|
||||
pub observed_generation: i16,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct HPA {
|
||||
pub api_version: String,
|
||||
pub items: Option<Vec<HPAItem>>,
|
||||
pub kind: String,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct HPAItem {
|
||||
pub api_version: String,
|
||||
pub kind: String,
|
||||
pub metadata: HPAMetadata,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct HPAMetadata {
|
||||
pub annotations: Option<HPAAnnotationCondition>,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct HPAAnnotationCondition {
|
||||
#[serde(rename = "autoscaling.alpha.kubernetes.io/conditions")]
|
||||
pub conditions: Option<String>,
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::cmd::structs::{KubernetesList, KubernetesPod, KubernetesPodStatusReason, PDB, PVC, SVC};
|
||||
|
||||
@@ -32,12 +32,15 @@ use qovery_engine::cloud_provider::scaleway::application::ScwZone;
|
||||
use qovery_engine::cloud_provider::scaleway::kubernetes::Kapsule;
|
||||
use qovery_engine::cloud_provider::scaleway::Scaleway;
|
||||
use qovery_engine::cloud_provider::{CloudProvider, Kind};
|
||||
use qovery_engine::cmd::structs::SVCItem;
|
||||
use qovery_engine::cmd::kubectl::kubernetes_get_all_hpas;
|
||||
use qovery_engine::cmd::structs::{SVCItem, HPA};
|
||||
use qovery_engine::engine::Engine;
|
||||
use qovery_engine::error::{SimpleError, SimpleErrorKind};
|
||||
use qovery_engine::logger::Logger;
|
||||
use qovery_engine::models::DatabaseMode::CONTAINER;
|
||||
use qovery_engine::transaction::DeploymentOption;
|
||||
use std::collections::BTreeMap;
|
||||
use std::path::Path;
|
||||
use std::str::FromStr;
|
||||
use tracing::{span, Level};
|
||||
|
||||
@@ -1390,14 +1393,14 @@ pub fn cluster_test(
|
||||
);
|
||||
|
||||
// Deploy
|
||||
if let Err(err) = deploy_tx.create_kubernetes(kubernetes.as_ref()) {
|
||||
panic!("{:?}", err)
|
||||
}
|
||||
let _ = match deploy_tx.commit() {
|
||||
TransactionResult::Ok => assert!(true),
|
||||
TransactionResult::Rollback(_) => assert!(false),
|
||||
TransactionResult::UnrecoverableError(_, _) => assert!(false),
|
||||
};
|
||||
// if let Err(err) = deploy_tx.create_kubernetes(kubernetes.as_ref()) {
|
||||
// panic!("{:?}", err)
|
||||
// }
|
||||
// let _ = match deploy_tx.commit() {
|
||||
// TransactionResult::Ok => assert!(true),
|
||||
// TransactionResult::Rollback(_) => assert!(false),
|
||||
// TransactionResult::UnrecoverableError(_, _) => assert!(false),
|
||||
// };
|
||||
|
||||
// Deploy env if any
|
||||
if let Some(env) = environment_to_deploy {
|
||||
@@ -1414,6 +1417,15 @@ pub fn cluster_test(
|
||||
};
|
||||
}
|
||||
|
||||
if let Err(err) = metrics_server_test(
|
||||
kubernetes
|
||||
.get_kubeconfig_file_path()
|
||||
.expect("Unable to get config file path"),
|
||||
kubernetes.cloud_provider().credentials_environment_variables(),
|
||||
) {
|
||||
panic!("{:?}", err)
|
||||
}
|
||||
|
||||
match test_type {
|
||||
ClusterTestType::Classic => {}
|
||||
ClusterTestType::WithPause => {
|
||||
@@ -1439,6 +1451,15 @@ pub fn cluster_test(
|
||||
TransactionResult::Rollback(_) => assert!(false),
|
||||
TransactionResult::UnrecoverableError(_, _) => assert!(false),
|
||||
};
|
||||
|
||||
if let Err(err) = metrics_server_test(
|
||||
kubernetes
|
||||
.get_kubeconfig_file_path()
|
||||
.expect("Unable to get config file path"),
|
||||
kubernetes.cloud_provider().credentials_environment_variables(),
|
||||
) {
|
||||
panic!("{:?}", err)
|
||||
}
|
||||
}
|
||||
ClusterTestType::WithUpgrade => {
|
||||
let upgrade_to_version = format!("{}.{}", major_boot_version, minor_boot_version.clone() + 1);
|
||||
@@ -1469,6 +1490,19 @@ pub fn cluster_test(
|
||||
TransactionResult::UnrecoverableError(_, _) => assert!(false),
|
||||
};
|
||||
|
||||
if let Err(err) = metrics_server_test(
|
||||
upgraded_kubernetes
|
||||
.as_ref()
|
||||
.get_kubeconfig_file_path()
|
||||
.expect("Unable to get config file path"),
|
||||
upgraded_kubernetes
|
||||
.as_ref()
|
||||
.cloud_provider()
|
||||
.credentials_environment_variables(),
|
||||
) {
|
||||
panic!("{:?}", err)
|
||||
}
|
||||
|
||||
// Delete
|
||||
if let Err(err) = delete_tx.delete_kubernetes(upgraded_kubernetes.as_ref()) {
|
||||
panic!("{:?}", err)
|
||||
@@ -1510,3 +1544,34 @@ pub fn cluster_test(
|
||||
|
||||
test_name.to_string()
|
||||
}
|
||||
|
||||
pub fn metrics_server_test<P>(kubernetes_config: P, envs: Vec<(&str, &str)>) -> Result<(), SimpleError>
|
||||
where
|
||||
P: AsRef<Path>,
|
||||
{
|
||||
let result = kubernetes_get_all_hpas(kubernetes_config, envs);
|
||||
|
||||
match result {
|
||||
Ok(hpas) => {
|
||||
for hpa in hpas.items.expect("No hpa item").into_iter() {
|
||||
if hpa.metadata.annotations.is_some() {
|
||||
if hpa
|
||||
.metadata
|
||||
.annotations
|
||||
.unwrap()
|
||||
.conditions
|
||||
.expect("No hpa condition")
|
||||
.contains("FailedGetResourceMetric")
|
||||
{
|
||||
return Err(SimpleError {
|
||||
kind: SimpleErrorKind::Other,
|
||||
message: Some("Metrics server doesn't work".to_string()),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
Err(e) => Err(e),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user