feat: adding tests

This commit is contained in:
enzo
2022-01-18 17:34:26 +01:00
committed by Pierre Mavro
parent 81e3f67a4b
commit 7c7bd080cb
3 changed files with 115 additions and 10 deletions

View File

@@ -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,
)
}

View File

@@ -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};

View File

@@ -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),
}
}