diff --git a/README.md b/README.md
index 36fb630f..fb6cfd54 100644
--- a/README.md
+++ b/README.md
@@ -18,12 +18,11 @@
-**Qovery Engine** is an open-source abstraction layer library that turns easy apps deployment on **AWS**, **GCP**, **Azure**, and other Cloud providers in just a few minutes. The Qovery Engine is written in [Rust](https://www.rust-lang.org) and takes advantage of [Terraform](https://www.terraform.io), [Helm](https://helm.sh), [Kubectl](https://kubernetes.io/docs/reference/kubectl/overview), and [Docker](https://www.docker.com) to manage resources.
+**Qovery Engine** is an open-source abstraction layer library that turns easy application deployment on **AWS**, **GCP**, **Azure**, and other Cloud providers in just a few minutes. The Qovery Engine is written in [Rust](https://www.rust-lang.org) and takes advantage of [Terraform](https://www.terraform.io), [Helm](https://helm.sh), [Kubectl](https://kubernetes.io/docs/reference/kubectl/overview), and [Docker](https://www.docker.com) to manage resources.
- Website: https://www.qovery.com
-- Full doc: https://docs.qovery.com
-- Qovery Engine doc: *coming soon*
-- Community: [Join us](https://discord.qovery.com) on Discord and on our [Q&A forum](https://community.qovery.com)
+- Qovery documentation: https://hub.qovery.com/docs
+- Community: [Join us](https://discord.qovery.com) on Discord and on our [Q&A forum](https://discuss.qovery.com)
**Please note**: We take Qovery's security and our users' trust very seriously. If you believe you have found a security issue in Qovery, please responsibly disclose by contacting us at security@qovery.com.
@@ -42,9 +41,9 @@
Qovery engine supports a number of different plugins to compose your own deployment flow:
-- **Cloud providers:** [AWS](https://hub.qovery.com/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/), Digital Ocean ([in beta](https://hub.qovery.com/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/)), Azure ([vote](https://hub.qovery.com/docs/using-qovery/configuration/cloud-service-provider/azure/)), GCP ([vote](https://hub.qovery.com/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/)), Scaleway ([vote](https://hub.qovery.com/docs/using-qovery/configuration/cloud-service-provider/scaleway/))
-- **Build platforms:** [Qovery CI](https://hub.qovery.com/docs/using-qovery/addon/continuous-integration/qovery-ci/), Circle CI ([vote](https://hub.qovery.com/docs/using-qovery/addon/continuous-integration/circle-ci/)), Gitlab CI ([vote](https://hub.qovery.com/docs/using-qovery/addon/continuous-integration/gitlab-ci/)), Github Actions ([vote](https://hub.qovery.com/docs/using-qovery/addon/continuous-integration/github-actions/))
-- **Container registries:** [ECR](https://docs.qovery.com/docs/using-qovery/configuration/business/container-registry/elastic-container-registry/), [DockerHub](https://docs.qovery.com/docs/using-qovery/configuration/business/container-registry/docker-hub/), DOCR ([vote](https://docs.qovery.com/docs/using-qovery/configuration/business/container-registry/digital-ocean-container-registry/)), ACR ([vote](https://docs.qovery.com/docs/using-qovery/configuration/business/container-registry/azure-container-registry/)), SCR ([vote](https://docs.qovery.com/docs/using-qovery/configuration/business/container-registry/scaleway-container-registry/))
+- **Cloud providers:** [AWS](https://hub.qovery.com/docs/using-qovery/configuration/cloud-service-provider/amazon-web-services/), Digital Ocean ([in beta](https://hub.qovery.com/docs/using-qovery/configuration/cloud-service-provider/digital-ocean/)), Scaleway ([in beta](https://hub.qovery.com/docs/using-qovery/configuration/cloud-service-provider/scaleway/)), Azure ([vote](https://hub.qovery.com/docs/using-qovery/configuration/cloud-service-provider/azure/)), GCP ([vote](https://hub.qovery.com/docs/using-qovery/configuration/cloud-service-provider/google-cloud-platform/))
+- **Build platforms:** [Qovery CI](https://hub.qovery.com/docs/using-qovery/addon/continuous-integration/qovery-ci/), Circle CI ([vote](https://hub.qovery.com/docs/using-qovery/addon/continuous-integration/circle-ci/)), Gitlab CI ([vote](https://hub.qovery.com/docs/using-qovery/addon/continuous-integration/gitlab-ci/)), GitHub Actions ([vote](https://hub.qovery.com/docs/using-qovery/addon/continuous-integration/github-actions/))
+- **Container registries:** AWS ECR, DockerHub, Digital Ocean CR, ACR, Scaleway Container Registry
- **DNS providers:** Cloudflare
- **Monitoring services:** Datadog ([vote](https://hub.qovery.com/docs/using-qovery/addon/monitoring/datadog/)), Newrelic ([vote](https://hub.qovery.com/docs/using-qovery/addon/monitoring/new-relic/))
@@ -145,7 +144,7 @@ Full, comprehensive documentation is available on the Qovery website: https://do
Please read our [Contributing Guide](./CONTRIBUTING.md) before submitting a Pull Request to the project.
## Community support
-For general help using Qovery Engine, please refer to [the official Qovery Engine documentation](https://docs.qovery.com). For additional help, you can use one of these channels to ask a question:
+For general help to use Qovery Engine, please refer to [the official Qovery Engine documentation](https://hub.qovery.com/docs). For additional help, you can use one of these channels to ask a question:
- [Discord](https://discord.qovery.com) (For live discussion with the Community and Qovery team)
- [GitHub](https://github.com/qovery/engine) (Bug reports, Contributions)
@@ -174,7 +173,6 @@ The Qovery Engine is designed to operate as an administrator and takes decisions
See the [LICENSE](./LICENSE) file for licensing information.
-
## Qovery
Qovery is a [CNCF](https://landscape.cncf.io/format=members&selected=qovery-member) and [Linux Foundation](https://www.linuxfoundation.org/membership/members/) silver member.
diff --git a/lib/aws/bootstrap/helm-loki.j2.tf b/lib/aws/bootstrap/helm-loki.j2.tf
index bc5b5220..6fdd7daf 100644
--- a/lib/aws/bootstrap/helm-loki.j2.tf
+++ b/lib/aws/bootstrap/helm-loki.j2.tf
@@ -71,4 +71,6 @@ resource "aws_s3_bucket_public_access_block" "loki_access" {
ignore_public_acls = true
restrict_public_buckets = true
+ block_public_policy = true
+ block_public_acls = true
}
\ No newline at end of file
diff --git a/lib/aws/bootstrap/s3-qovery-buckets.tf b/lib/aws/bootstrap/s3-qovery-buckets.tf
index 2663c10c..34373142 100644
--- a/lib/aws/bootstrap/s3-qovery-buckets.tf
+++ b/lib/aws/bootstrap/s3-qovery-buckets.tf
@@ -13,6 +13,7 @@ resource "aws_s3_bucket" "kubeconfigs_bucket" {
"Name" = "Kubernetes kubeconfig"
}
)
+
server_side_encryption_configuration {
rule {
apply_server_side_encryption_by_default {
@@ -21,7 +22,6 @@ resource "aws_s3_bucket" "kubeconfigs_bucket" {
}
}
}
-
}
resource "aws_kms_key" "s3_kubeconfig_kms_encryption" {
@@ -39,4 +39,6 @@ resource "aws_s3_bucket_public_access_block" "kubeconfigs_access" {
ignore_public_acls = true
restrict_public_buckets = true
+ block_public_policy = true
+ block_public_acls = true
}
\ No newline at end of file
diff --git a/lib/scaleway/services/mysql/main.j2.tf b/lib/scaleway/services/mysql/main.j2.tf
index 5525d096..4e33f7f2 100644
--- a/lib/scaleway/services/mysql/main.j2.tf
+++ b/lib/scaleway/services/mysql/main.j2.tf
@@ -56,9 +56,6 @@ resource "scaleway_rdb_instance" "mysql_instance" {
tags = local.tags_mysql_list
- publicly_accessible = var.publicly_accessible
-
-
# TODO:(benjaminch): features to be added at some point but be discussed with Scaleway
# - port
# - instance create timeout
diff --git a/lib/scaleway/services/postgresql/main.j2.tf b/lib/scaleway/services/postgresql/main.j2.tf
index 08431e79..98d96053 100644
--- a/lib/scaleway/services/postgresql/main.j2.tf
+++ b/lib/scaleway/services/postgresql/main.j2.tf
@@ -56,9 +56,6 @@ resource "scaleway_rdb_instance" "postgresql_instance" {
tags = local.tags_postgresql_list
- publicly_accessible = var.publicly_accessible
-
-
# TODO:(benjaminch): features to be added at some point but be discussed with Scaleway
# - port
# - instance create timeout
diff --git a/src/build_platform/local_docker.rs b/src/build_platform/local_docker.rs
index 6c1aad5f..49dfb322 100644
--- a/src/build_platform/local_docker.rs
+++ b/src/build_platform/local_docker.rs
@@ -6,8 +6,8 @@ use git2::{Cred, CredentialType};
use sysinfo::{Disk, DiskExt, SystemExt};
use crate::build_platform::{docker, Build, BuildPlatform, BuildResult, CacheResult, Credentials, Image, Kind};
-use crate::cmd::utilities::QoveryCommand;
-use crate::error::{EngineError, EngineErrorCause, EngineErrorScope, SimpleError, SimpleErrorKind};
+use crate::cmd::command::{CommandError, QoveryCommand};
+use crate::error::{EngineError, EngineErrorCause, EngineErrorScope, SimpleError};
use crate::fs::workspace_directory;
use crate::git;
use crate::models::{
@@ -79,6 +79,7 @@ impl LocalDocker {
env_var_args: Vec,
use_build_cache: bool,
lh: &ListenersHelper,
+ is_task_canceled: &dyn Fn() -> bool,
) -> Result {
let mut docker_args = if !use_build_cache {
vec!["build", "--no-cache"]
@@ -126,7 +127,7 @@ impl LocalDocker {
// docker build
let mut cmd = QoveryCommand::new("docker", &docker_args, &self.get_docker_host_envs());
- let exit_status = cmd.exec_with_timeout(
+ let exit_status = cmd.exec_with_abort(
Duration::minutes(BUILD_DURATION_TIMEOUT_MIN),
|line| {
info!("{}", line);
@@ -152,10 +153,14 @@ impl LocalDocker {
self.context.execution_id(),
));
},
+ is_task_canceled,
);
match exit_status {
Ok(_) => Ok(BuildResult { build }),
+ Err(CommandError::Killed(msg)) => Err(
+ self.engine_error(EngineErrorCause::Canceled, msg)
+ ),
Err(err) => Err(self.engine_error(
EngineErrorCause::User(
"It looks like there is something wrong in your Dockerfile. Try building the application locally with `docker build --no-cache`.",
@@ -176,13 +181,13 @@ impl LocalDocker {
env_var_args: Vec,
use_build_cache: bool,
lh: &ListenersHelper,
+ is_task_canceled: &dyn Fn() -> bool,
) -> Result {
let name_with_tag = build.image.name_with_tag();
let args = self.context.docker_build_options();
- let mut exit_status: Result<(), SimpleError> =
- Err(SimpleError::new(SimpleErrorKind::Other, Some("no builder names")));
+ let mut exit_status: Result<(), CommandError> = Ok(());
for builder_name in BUILDPACKS_BUILDERS.iter() {
let mut buildpacks_args = if !use_build_cache {
@@ -268,35 +273,34 @@ impl LocalDocker {
// buildpacks build
let mut cmd = QoveryCommand::new("pack", &buildpacks_args, &self.get_docker_host_envs());
- exit_status = cmd
- .exec_with_timeout(
- Duration::minutes(BUILD_DURATION_TIMEOUT_MIN),
- |line| {
- info!("{}", line);
+ exit_status = cmd.exec_with_abort(
+ Duration::minutes(BUILD_DURATION_TIMEOUT_MIN),
+ |line| {
+ info!("{}", line);
- lh.deployment_in_progress(ProgressInfo::new(
- ProgressScope::Application {
- id: build.image.application_id.clone(),
- },
- ProgressLevel::Info,
- Some(line),
- self.context.execution_id(),
- ));
- },
- |line| {
- error!("{}", line);
+ lh.deployment_in_progress(ProgressInfo::new(
+ ProgressScope::Application {
+ id: build.image.application_id.clone(),
+ },
+ ProgressLevel::Info,
+ Some(line),
+ self.context.execution_id(),
+ ));
+ },
+ |line| {
+ error!("{}", line);
- lh.deployment_in_progress(ProgressInfo::new(
- ProgressScope::Application {
- id: build.image.application_id.clone(),
- },
- ProgressLevel::Warn,
- Some(line),
- self.context.execution_id(),
- ));
- },
- )
- .map_err(|err| SimpleError::new(SimpleErrorKind::Other, Some(format!("{:?}", err))));
+ lh.deployment_in_progress(ProgressInfo::new(
+ ProgressScope::Application {
+ id: build.image.application_id.clone(),
+ },
+ ProgressLevel::Warn,
+ Some(line),
+ self.context.execution_id(),
+ ));
+ },
+ is_task_canceled,
+ );
if exit_status.is_ok() {
// quit now if the builder successfully build the app
@@ -306,6 +310,7 @@ impl LocalDocker {
match exit_status {
Ok(_) => Ok(BuildResult { build }),
+ Err(CommandError::Killed(msg)) => Err(self.engine_error(EngineErrorCause::Canceled, msg)),
Err(err) => {
warn!("{:?}", err);
@@ -352,11 +357,11 @@ impl BuildPlatform for LocalDocker {
}
fn is_valid(&self) -> Result<(), EngineError> {
- if !crate::cmd::utilities::does_binary_exist("docker") {
+ if !crate::cmd::command::does_binary_exist("docker") {
return Err(self.engine_error(EngineErrorCause::Internal, String::from("docker binary not found")));
}
- if !crate::cmd::utilities::does_binary_exist("pack") {
+ if !crate::cmd::command::does_binary_exist("pack") {
return Err(self.engine_error(EngineErrorCause::Internal, String::from("pack binary not found")));
}
@@ -391,8 +396,19 @@ impl BuildPlatform for LocalDocker {
Ok(result)
}
- fn build(&self, build: Build, force_build: bool) -> Result {
+ fn build(
+ &self,
+ build: Build,
+ force_build: bool,
+ is_task_canceled: &dyn Fn() -> bool,
+ ) -> Result {
info!("LocalDocker.build() called for {}", self.name());
+ if is_task_canceled() {
+ return Err(self.engine_error(
+ EngineErrorCause::Canceled,
+ "Notified to cancel current task".to_string(),
+ ));
+ }
let listeners_helper = ListenersHelper::new(&self.listeners);
@@ -439,6 +455,12 @@ impl BuildPlatform for LocalDocker {
}
// git clone
+ if is_task_canceled() {
+ return Err(self.engine_error(
+ EngineErrorCause::Canceled,
+ "Notified to cancel current task".to_string(),
+ ));
+ }
if let Err(clone_error) = git::clone_at_commit(
&build.git_repository.url,
&build.git_repository.commit_id,
@@ -538,6 +560,7 @@ impl BuildPlatform for LocalDocker {
env_var_args,
!disable_build_cache,
&listeners_helper,
+ is_task_canceled,
)
} else {
// build container with Buildpacks
@@ -547,13 +570,28 @@ impl BuildPlatform for LocalDocker {
env_var_args,
!disable_build_cache,
&listeners_helper,
+ is_task_canceled,
)
};
+ let msg = match &result {
+ Ok(_) => format!("✅ Container {} is built", self.name_with_id()),
+ Err(engine_err) if engine_err.is_cancel() => {
+ format!("🚫 Container {} build has been canceled", self.name_with_id())
+ }
+ Err(engine_err) => {
+ format!(
+ "❌ Container {} failed to be build: {}",
+ self.name_with_id(),
+ engine_err.message.as_ref().map(|x| x.as_str()).unwrap_or_default()
+ )
+ }
+ };
+
listeners_helper.deployment_in_progress(ProgressInfo::new(
ProgressScope::Application { id: app_id },
ProgressLevel::Info,
- Some(format!("container {} is built ✔", self.name_with_id())),
+ Some(msg),
self.context.execution_id(),
));
diff --git a/src/build_platform/mod.rs b/src/build_platform/mod.rs
index 2b369928..4740b15a 100644
--- a/src/build_platform/mod.rs
+++ b/src/build_platform/mod.rs
@@ -22,7 +22,12 @@ pub trait BuildPlatform: Listen {
}
fn is_valid(&self) -> Result<(), EngineError>;
fn has_cache(&self, build: &Build) -> Result;
- fn build(&self, build: Build, force_build: bool) -> Result;
+ fn build(
+ &self,
+ build: Build,
+ force_build: bool,
+ is_task_canceled: &dyn Fn() -> bool,
+ ) -> Result;
fn build_error(&self, build: Build) -> Result;
fn engine_error_scope(&self) -> EngineErrorScope {
EngineErrorScope::BuildPlatform(self.id().to_string(), self.name().to_string())
diff --git a/src/cloud_provider/digitalocean/kubernetes/cidr.rs b/src/cloud_provider/digitalocean/kubernetes/cidr.rs
index 3665be25..c5a46fbc 100644
--- a/src/cloud_provider/digitalocean/kubernetes/cidr.rs
+++ b/src/cloud_provider/digitalocean/kubernetes/cidr.rs
@@ -1,7 +1,7 @@
use serde::{Deserialize, Serialize};
use std::borrow::Borrow;
-use crate::cmd::utilities::QoveryCommand;
+use crate::cmd::command::QoveryCommand;
#[derive(Serialize, Deserialize, Debug)]
pub struct DoVpc {
diff --git a/src/cloud_provider/service.rs b/src/cloud_provider/service.rs
index e0606f44..fad1e3b7 100644
--- a/src/cloud_provider/service.rs
+++ b/src/cloud_provider/service.rs
@@ -113,7 +113,7 @@ pub trait Service: ToTransmitter {
let binaries = ["kubectl", "helm", "terraform", "aws-iam-authenticator"];
for binary in binaries.iter() {
- if !crate::cmd::utilities::does_binary_exist(binary) {
+ if !crate::cmd::command::does_binary_exist(binary) {
return Err(NewEngineError::new_missing_required_binary(
self.get_event_details(Stage::General(GeneralStep::ValidateSystemRequirements)),
binary.to_string(),
diff --git a/src/cloud_provider/utilities.rs b/src/cloud_provider/utilities.rs
index c21bc489..1faef024 100644
--- a/src/cloud_provider/utilities.rs
+++ b/src/cloud_provider/utilities.rs
@@ -319,7 +319,7 @@ impl fmt::Display for VersionsNumber {
}
}
-fn google_dns_resolver() -> Resolver {
+fn dns_resolvers() -> Vec {
let mut resolver_options = ResolverOpts::default();
// We want to avoid cache and using host file of the host, as some provider force caching
@@ -335,7 +335,13 @@ fn google_dns_resolver() -> Resolver {
//);
//Resolver::new(resolver, resolver_options).unwrap()
- Resolver::new(ResolverConfig::google(), resolver_options).expect("Invalid google DNS resolver configuration")
+ vec![
+ Resolver::new(ResolverConfig::google(), resolver_options).expect("Invalid google DNS resolver configuration"),
+ Resolver::new(ResolverConfig::cloudflare(), resolver_options)
+ .expect("Invalid cloudflare DNS resolver configuration"),
+ Resolver::new(ResolverConfig::quad9(), resolver_options).expect("Invalid quad9 DNS resolver configuration"),
+ Resolver::from_system_conf().expect("Invalid system DNS resolver configuration"),
+ ]
}
fn get_cname_record_value(resolver: &Resolver, cname: &str) -> Option {
@@ -359,7 +365,7 @@ pub fn check_cname_for(
cname_to_check: &str,
execution_id: &str,
) -> Result {
- let resolver = google_dns_resolver();
+ let resolvers = dns_resolvers();
let listener_helper = ListenersHelper::new(listeners);
let send_deployment_progress = |msg: &str| {
@@ -389,9 +395,15 @@ pub fn check_cname_for(
);
// Trying for 5 min to resolve CNAME
+ let mut ix: usize = 0;
+ let mut next_resolver = || {
+ let resolver = &resolvers[ix % resolvers.len()];
+ ix += 1;
+ resolver
+ };
let fixed_iterable = Fixed::from_millis(Duration::seconds(5).num_milliseconds() as u64).take(6 * 5);
let check_result = retry::retry(fixed_iterable, || {
- match get_cname_record_value(&resolver, cname_to_check) {
+ match get_cname_record_value(next_resolver(), cname_to_check) {
Some(domain) => OperationResult::Ok(domain),
None => {
let msg = format!(
@@ -427,7 +439,7 @@ pub fn check_domain_for(
execution_id: &str,
context_id: &str,
) -> Result<(), EngineError> {
- let resolver = google_dns_resolver();
+ let resolvers = dns_resolvers();
for domain in domains_to_check {
listener_helper.deployment_in_progress(ProgressInfo::new(
@@ -442,8 +454,14 @@ pub fn check_domain_for(
execution_id,
));
+ let mut ix: usize = 0;
+ let mut next_resolver = || {
+ let resolver = &resolvers[ix % resolvers.len()];
+ ix += 1;
+ resolver
+ };
let fixed_iterable = Fixed::from_millis(3000).take(100);
- let check_result = retry::retry(fixed_iterable, || match resolver.lookup_ip(domain) {
+ let check_result = retry::retry(fixed_iterable, || match next_resolver().lookup_ip(domain) {
Ok(lookup_ip) => OperationResult::Ok(lookup_ip),
Err(err) => {
let x = format!("Domain resolution check for '{}' is still in progress...", domain);
@@ -585,8 +603,8 @@ pub fn print_action(cloud_provider_name: &str, struct_name: &str, fn_name: &str,
mod tests {
use crate::cloud_provider::models::CpuLimits;
use crate::cloud_provider::utilities::{
- convert_k8s_cpu_value_to_f32, get_cname_record_value, google_dns_resolver,
- validate_k8s_required_cpu_and_burstable, VersionsNumber,
+ convert_k8s_cpu_value_to_f32, dns_resolvers, get_cname_record_value, validate_k8s_required_cpu_and_burstable,
+ VersionsNumber,
};
use crate::error::StringError;
use crate::models::ListenersHelper;
@@ -633,8 +651,8 @@ mod tests {
#[test]
pub fn test_cname_resolution() {
- let resolver = google_dns_resolver();
- let cname = get_cname_record_value(&resolver, "ci-test-no-delete.qovery.io");
+ let resolvers = dns_resolvers();
+ let cname = get_cname_record_value(&resolvers[0], "ci-test-no-delete.qovery.io");
assert_eq!(cname, Some(String::from("qovery.io.")));
}
diff --git a/src/cmd/utilities.rs b/src/cmd/command.rs
similarity index 68%
rename from src/cmd/utilities.rs
rename to src/cmd/command.rs
index 8d8c8d7b..38508699 100644
--- a/src/cmd/utilities.rs
+++ b/src/cmd/command.rs
@@ -2,10 +2,10 @@ use std::ffi::OsStr;
use std::io::{BufRead, BufReader};
use std::io::{Error, ErrorKind};
use std::path::Path;
-use std::process::{Command, ExitStatus, Stdio};
+use std::process::{Child, Command, ExitStatus, Stdio};
-use crate::cmd::utilities::CommandError::{ExecutionError, ExitStatusError, TimeoutError};
-use crate::cmd::utilities::CommandOutputType::{STDERR, STDOUT};
+use crate::cmd::command::CommandError::{ExecutionError, ExitStatusError, Killed, TimeoutError};
+use crate::cmd::command::CommandOutputType::{STDERR, STDOUT};
use chrono::Duration;
use itertools::Itertools;
@@ -27,6 +27,9 @@ pub enum CommandError {
#[error("Command killed due to timeout: {0}")]
TimeoutError(String),
+
+ #[error("Command killed by user request: {0}")]
+ Killed(String),
}
pub struct QoveryCommand {
@@ -49,27 +52,20 @@ impl QoveryCommand {
self.command.current_dir(root_dir);
}
+ fn kill(cmd_handle: &mut Child) {
+ let _ = cmd_handle
+ .kill() //Fire
+ .map(|_| cmd_handle.wait())
+ .map_err(|err| error!("Cannot kill process {:?} {}", cmd_handle, err));
+ }
+
pub fn exec(&mut self) -> Result<(), CommandError> {
- info!("command: {:?}", self.command);
-
- let mut cmd_handle = self
- .command
- .stdout(Stdio::null())
- .stderr(Stdio::null())
- .spawn()
- .map_err(ExecutionError)?;
-
- let exit_status = cmd_handle.wait().map_err(ExecutionError)?;
-
- if !exit_status.success() {
- debug!(
- "command: {:?} terminated with error exist status {:?}",
- self.command, exit_status
- );
- return Err(ExitStatusError(exit_status));
- }
-
- Ok(())
+ self.exec_with_abort(
+ Duration::max_value(),
+ |line| info!("{}", line),
+ |line| warn!("{}", line),
+ || false,
+ )
}
pub fn exec_with_output(
@@ -81,18 +77,33 @@ impl QoveryCommand {
STDOUT: FnMut(String),
STDERR: FnMut(String),
{
- self.exec_with_timeout(Duration::max_value(), stdout_output, stderr_output)
+ self.exec_with_abort(Duration::max_value(), stdout_output, stderr_output, || false)
}
pub fn exec_with_timeout(
&mut self,
timeout: Duration,
- mut stdout_output: STDOUT,
- mut stderr_output: STDERR,
+ stdout_output: STDOUT,
+ stderr_output: STDERR,
) -> Result<(), CommandError>
where
STDOUT: FnMut(String),
STDERR: FnMut(String),
+ {
+ self.exec_with_abort(timeout, stdout_output, stderr_output, || false)
+ }
+
+ pub fn exec_with_abort(
+ &mut self,
+ timeout: Duration,
+ mut stdout_output: STDOUT,
+ mut stderr_output: STDERR,
+ should_be_killed: F,
+ ) -> Result<(), CommandError>
+ where
+ STDOUT: FnMut(String),
+ STDERR: FnMut(String),
+ F: Fn() -> bool,
{
assert!(timeout.num_seconds() > 0, "Timeout cannot be a 0 or negative duration");
@@ -136,6 +147,10 @@ impl QoveryCommand {
STDERR(Err(err)) => error!("Error on stderr of cmd {:?}: {:?}", self.command, err),
}
+ if should_be_killed() {
+ break;
+ }
+
if (process_start_time.elapsed().as_secs() as i64) >= timeout.num_seconds() {
break;
}
@@ -151,28 +166,31 @@ impl QoveryCommand {
break;
}
Ok(None) => {
- if (process_start_time.elapsed().as_secs() as i64) < timeout.num_seconds() {
- std::thread::sleep(std::time::Duration::from_secs(1));
- continue;
+ // Does the process should be killed ?
+ if should_be_killed() {
+ let msg = format!("Killing process {:?}", self.command);
+ warn!("{}", msg);
+ Self::kill(&mut cmd_handle);
+ return Err(Killed(msg));
}
- // Timeout !
- let msg = format!(
- "Killing process {:?} due to timeout {}m reached",
- self.command,
- timeout.num_minutes()
- );
- warn!("{}", msg);
-
- let _ = cmd_handle
- .kill() //Fire
- .map(|_| cmd_handle.wait())
- .map_err(|err| error!("Cannot kill process {:?} {}", cmd_handle, err));
-
- return Err(TimeoutError(msg));
+ // Does the timeout has been reached ?
+ if (process_start_time.elapsed().as_secs() as i64) >= timeout.num_seconds() {
+ let msg = format!(
+ "Killing process {:?} due to timeout {}m reached",
+ self.command,
+ timeout.num_minutes()
+ );
+ warn!("{}", msg);
+ Self::kill(&mut cmd_handle);
+ return Err(TimeoutError(msg));
+ }
}
Err(err) => return Err(ExecutionError(err)),
};
+
+ // Sleep a bit and retry to check
+ std::thread::sleep(std::time::Duration::from_secs(1));
}
if !exit_status.success() {
@@ -222,8 +240,11 @@ where
#[cfg(test)]
mod tests {
- use crate::cmd::utilities::{does_binary_exist, run_version_command_for, CommandError, QoveryCommand};
+ use crate::cmd::command::{does_binary_exist, run_version_command_for, CommandError, QoveryCommand};
use chrono::Duration;
+ use std::sync::atomic::{AtomicBool, Ordering};
+ use std::sync::{Arc, Barrier};
+ use std::{thread, time};
#[test]
fn test_binary_exist() {
@@ -262,4 +283,27 @@ mod tests {
let ret = cmd.exec_with_timeout(Duration::seconds(2), |_| {}, |_| {});
assert_eq!(ret.is_ok(), true);
}
+
+ #[test]
+ fn test_command_with_abort() {
+ let mut cmd = QoveryCommand::new("sleep", &vec!["120"], &vec![]);
+ let should_kill = Arc::new(AtomicBool::new(false));
+ let should_kill2 = should_kill.clone();
+ let barrier = Arc::new(Barrier::new(2));
+
+ let _ = thread::spawn({
+ let barrier = barrier.clone();
+ move || {
+ barrier.wait();
+ thread::sleep(time::Duration::from_secs(2));
+ should_kill.store(true, Ordering::Release);
+ }
+ });
+
+ let cmd_killer = move || should_kill2.load(Ordering::Acquire);
+ barrier.wait();
+ let ret = cmd.exec_with_abort(Duration::max_value(), |_| {}, |_| {}, cmd_killer);
+
+ assert!(matches!(ret, Err(CommandError::Killed(_))));
+ }
}
diff --git a/src/cmd/helm.rs b/src/cmd/helm.rs
index c118d829..664af83e 100644
--- a/src/cmd/helm.rs
+++ b/src/cmd/helm.rs
@@ -4,10 +4,10 @@ use std::path::{Path, PathBuf};
use tracing::{error, info};
use crate::cloud_provider::helm::ChartInfo;
+use crate::cmd::command::QoveryCommand;
use crate::cmd::helm::HelmCommand::{LIST, ROLLBACK, STATUS, UNINSTALL, UPGRADE};
use crate::cmd::helm::HelmError::{CannotRollback, CmdError, InvalidKubeConfig, ReleaseDoesNotExist};
use crate::cmd::structs::{HelmChart, HelmListItem};
-use crate::cmd::utilities::QoveryCommand;
use crate::errors::{CommandError, EngineError};
use crate::events::EventDetails;
use chrono::Duration;
@@ -561,8 +561,8 @@ pub fn to_engine_error(event_details: &EventDetails, error: HelmError) -> Engine
#[cfg(test)]
mod tests {
use crate::cloud_provider::helm::{ChartInfo, ChartSetValue};
+ use crate::cmd::command::QoveryCommand;
use crate::cmd::helm::{helm_exec_with_output, Helm, HelmError};
- use crate::cmd::utilities::QoveryCommand;
use std::sync::{Arc, Barrier};
use std::thread;
use std::time::Duration;
diff --git a/src/cmd/kubectl.rs b/src/cmd/kubectl.rs
index 4d20be25..9aaf9dff 100644
--- a/src/cmd/kubectl.rs
+++ b/src/cmd/kubectl.rs
@@ -7,12 +7,12 @@ use serde::de::DeserializeOwned;
use crate::cloud_provider::digitalocean::models::svc::DoLoadBalancer;
use crate::cloud_provider::metrics::KubernetesApiMetrics;
+use crate::cmd::command::QoveryCommand;
use crate::cmd::structs::{
Configmap, Daemonset, Item, KubernetesEvent, KubernetesJob, KubernetesKind, KubernetesList, KubernetesNode,
KubernetesPod, KubernetesPodStatusPhase, KubernetesPodStatusReason, KubernetesService, KubernetesVersion,
LabelsContent, Namespace, Secrets, HPA, PDB, PVC, SVC,
};
-use crate::cmd::utilities::QoveryCommand;
use crate::constants::KUBECONFIG;
use crate::error::{SimpleError, SimpleErrorKind};
use crate::errors::CommandError;
diff --git a/src/cmd/mod.rs b/src/cmd/mod.rs
index eabeb043..f486a56a 100644
--- a/src/cmd/mod.rs
+++ b/src/cmd/mod.rs
@@ -1,5 +1,5 @@
+pub mod command;
pub mod helm;
pub mod kubectl;
pub mod structs;
pub mod terraform;
-pub mod utilities;
diff --git a/src/cmd/terraform.rs b/src/cmd/terraform.rs
index d19daeea..d3cab515 100644
--- a/src/cmd/terraform.rs
+++ b/src/cmd/terraform.rs
@@ -2,7 +2,7 @@ use dirs::home_dir;
use retry::delay::Fixed;
use retry::OperationResult;
-use crate::cmd::utilities::QoveryCommand;
+use crate::cmd::command::QoveryCommand;
use crate::constants::TF_PLUGIN_CACHE_DIR;
use crate::errors::CommandError;
use rand::Rng;
diff --git a/src/container_registry/docker.rs b/src/container_registry/docker.rs
index c7ee1325..2d70ddb1 100644
--- a/src/container_registry/docker.rs
+++ b/src/container_registry/docker.rs
@@ -1,5 +1,5 @@
use crate::cmd;
-use crate::cmd::utilities::QoveryCommand;
+use crate::cmd::command::QoveryCommand;
use crate::container_registry::Kind;
use crate::error::{SimpleError, SimpleErrorKind};
use chrono::Duration;
@@ -78,7 +78,7 @@ pub fn docker_manifest_inspect(
image_with_tag,
registry_provider,
registry_url,
- cmd::utilities::command_to_string(binary, &args, &envs),
+ cmd::command::command_to_string(binary, &args, &envs),
e,
);
None
@@ -118,7 +118,7 @@ pub fn docker_login(
"error while trying to login to registry {} {}, command `{}`: {:?}",
registry_provider,
registry_url,
- cmd::utilities::command_to_string(binary, &args, &docker_envs),
+ cmd::command::command_to_string(binary, &args, &docker_envs),
e,
);
error!("{}", error_message);
diff --git a/src/container_registry/docker_hub.rs b/src/container_registry/docker_hub.rs
index f7d67c65..be984083 100644
--- a/src/container_registry/docker_hub.rs
+++ b/src/container_registry/docker_hub.rs
@@ -3,7 +3,7 @@ extern crate reqwest;
use reqwest::StatusCode;
use crate::build_platform::Image;
-use crate::cmd::utilities::QoveryCommand;
+use crate::cmd::command::QoveryCommand;
use crate::container_registry::docker::{docker_pull_image, docker_tag_and_push_image};
use crate::container_registry::{ContainerRegistry, EngineError, Kind, PullResult, PushResult};
use crate::error::EngineErrorCause;
diff --git a/src/container_registry/docr.rs b/src/container_registry/docr.rs
index 349bd8b1..e3121bd4 100644
--- a/src/container_registry/docr.rs
+++ b/src/container_registry/docr.rs
@@ -4,7 +4,7 @@ use reqwest::StatusCode;
use serde::{Deserialize, Serialize};
use crate::build_platform::Image;
-use crate::cmd::utilities::QoveryCommand;
+use crate::cmd::command::QoveryCommand;
use crate::container_registry::docker::{docker_pull_image, docker_tag_and_push_image};
use crate::container_registry::{ContainerRegistry, EngineError, Kind, PullResult, PushResult};
use crate::error::{cast_simple_error_to_engine_error, EngineErrorCause, SimpleError, SimpleErrorKind};
diff --git a/src/container_registry/ecr.rs b/src/container_registry/ecr.rs
index 04b48d1a..e33aa69e 100644
--- a/src/container_registry/ecr.rs
+++ b/src/container_registry/ecr.rs
@@ -9,7 +9,7 @@ use rusoto_ecr::{
use rusoto_sts::{GetCallerIdentityRequest, Sts, StsClient};
use crate::build_platform::Image;
-use crate::cmd::utilities::QoveryCommand;
+use crate::cmd::command::QoveryCommand;
use crate::container_registry::docker::{docker_pull_image, docker_tag_and_push_image};
use crate::container_registry::{ContainerRegistry, Kind, PullResult, PushResult};
use crate::error::{EngineError, EngineErrorCause};
diff --git a/src/engine.rs b/src/engine.rs
index 28e3c43d..26f10a05 100644
--- a/src/engine.rs
+++ b/src/engine.rs
@@ -16,6 +16,7 @@ pub struct Engine {
cloud_provider: Box,
dns_provider: Box,
logger: Box,
+ pub is_task_canceled: Box bool>,
}
impl Engine {
@@ -26,6 +27,7 @@ impl Engine {
cloud_provider: Box,
dns_provider: Box,
logger: Box,
+ is_task_canceled: Box bool>,
) -> Engine {
Engine {
context,
@@ -34,6 +36,7 @@ impl Engine {
cloud_provider,
dns_provider,
logger,
+ is_task_canceled,
}
}
}
diff --git a/src/error.rs b/src/error.rs
index f4814158..7af3c05c 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -26,6 +26,10 @@ impl EngineError {
message: message.map(|message| message.into()),
}
}
+
+ pub fn is_cancel(&self) -> bool {
+ self.cause == EngineErrorCause::Canceled
+ }
}
#[derive(Debug)]
@@ -60,9 +64,10 @@ impl From for EngineErrorScope {
}
}
-#[derive(Debug)]
+#[derive(Debug, PartialEq, Eq)]
pub enum EngineErrorCause {
Internal,
+ Canceled,
User(&'static str),
}
diff --git a/src/models.rs b/src/models.rs
index ce9c043c..b513be27 100644
--- a/src/models.rs
+++ b/src/models.rs
@@ -71,7 +71,6 @@ impl Display for QoveryIdentifier {
#[derive(Serialize, Deserialize, Clone, Eq, PartialEq, Hash)]
pub enum EnvironmentAction {
Environment(TargetEnvironment),
- EnvironmentWithFailover(TargetEnvironment, FailoverEnvironment),
}
pub type TargetEnvironment = Environment;
diff --git a/src/transaction.rs b/src/transaction.rs
index 29ae17a9..16831e4b 100644
--- a/src/transaction.rs
+++ b/src/transaction.rs
@@ -118,17 +118,6 @@ impl<'a> Transaction<'a> {
Ok(_) => {}
Err(err) => return Err(err),
},
- EnvironmentAction::EnvironmentWithFailover(te, fe) => {
- match te.is_valid() {
- Ok(_) => {}
- Err(err) => return Err(err),
- };
-
- match fe.is_valid() {
- Ok(_) => {}
- Err(err) => return Err(err),
- };
- }
};
Ok(())
@@ -201,7 +190,11 @@ impl<'a> Transaction<'a> {
let _ = self.load_build_app_cache(app);
// only if the build is forced OR if the image does not exist in the registry
- self.engine.build_platform().build(app.to_build(), option.force_build)
+ self.engine.build_platform().build(
+ app.to_build(),
+ option.force_build,
+ &self.engine.is_task_canceled,
+ )
} else {
// use the cache
Ok(BuildResult::new(app.to_build()))
@@ -348,34 +341,6 @@ impl<'a> Transaction<'a> {
};
match environment_action {
- EnvironmentAction::EnvironmentWithFailover(target_environment, failover_environment) => {
- // let's reverse changes and rollback on the provided failover version
- let target_qe_environment = qe_environment(target_environment);
- let failover_qe_environment = qe_environment(failover_environment);
-
- let action = match failover_environment.action {
- Action::Create => {
- let _ = kubernetes.deploy_environment_error(&target_qe_environment);
- kubernetes.deploy_environment(&failover_qe_environment)
- }
- Action::Pause => {
- let _ = kubernetes.pause_environment_error(&target_qe_environment);
- kubernetes.pause_environment(&failover_qe_environment)
- }
- Action::Delete => {
- let _ = kubernetes.delete_environment_error(&target_qe_environment);
- kubernetes.delete_environment(&failover_qe_environment)
- }
- Action::Nothing => Ok(()),
- };
-
- let _ = match action {
- Ok(_) => {}
- Err(err) => return Err(RollbackError::CommitError(err.to_legacy_engine_error())),
- };
-
- Ok(())
- }
EnvironmentAction::Environment(te) => {
// revert changes but there is no failover environment
let target_qe_environment = qe_environment(te);
@@ -451,56 +416,43 @@ impl<'a> Transaction<'a> {
// build applications
let target_environment = match environment_action {
EnvironmentAction::Environment(te) => te,
- EnvironmentAction::EnvironmentWithFailover(te, _) => te,
};
- let apps_result = match self.build_applications(target_environment, option) {
- Ok(applications) => match self.push_applications(applications, option) {
- Ok(results) => {
- let applications = results.into_iter().map(|(app, _)| app).collect::>();
-
- Ok(applications)
- }
- Err(err) => Err(err),
- },
- Err(err) => Err(err),
- };
-
- if apps_result.is_err() {
- let commit_error = apps_result.err().unwrap();
- warn!("ROLLBACK STARTED! an error occurred {:?}", commit_error);
-
- return match self.rollback() {
- Ok(_) => TransactionResult::Rollback(commit_error),
- Err(err) => {
- error!("ROLLBACK FAILED! fatal error: {:?}", err);
- return TransactionResult::UnrecoverableError(commit_error, err);
- }
- };
- }
-
- let applications = apps_result.ok().unwrap();
- applications_by_environment.insert(target_environment, applications);
-
- // build as well the failover environment, retention could remove the application image
- if let EnvironmentAction::EnvironmentWithFailover(_, fe) = environment_action {
- let apps_result = match self.build_applications(fe, option) {
- Ok(applications) => match self.push_applications(applications, option) {
- Ok(results) => {
- let applications = results.into_iter().map(|(app, _)| app).collect::>();
-
- Ok(applications)
- }
- Err(err) => Err(err),
- },
- Err(err) => Err(err),
- };
- if apps_result.is_err() {
- // should never be triggered because core always should ask for working failover environment
- let commit_error = apps_result.err().unwrap();
- error!("An error occurred on failover application {:?}", commit_error);
+ let applications_builds = match self.build_applications(target_environment, option) {
+ Ok(apps) => apps,
+ Err(engine_err) => {
+ warn!("ROLLBACK STARTED! an error occurred {:?}", engine_err);
+ return if engine_err.is_cancel() {
+ TransactionResult::Canceled
+ } else {
+ TransactionResult::Rollback(engine_err)
+ };
}
};
+
+ if (self.engine.is_task_canceled)() {
+ return TransactionResult::Canceled;
+ }
+
+ let applications = match self.push_applications(applications_builds, option) {
+ Ok(results) => {
+ let applications = results.into_iter().map(|(app, _)| app).collect::>();
+
+ applications
+ }
+ Err(engine_err) => {
+ warn!("ROLLBACK STARTED! an error occurred {:?}", engine_err);
+ return match self.rollback() {
+ Ok(_) => TransactionResult::Rollback(engine_err),
+ Err(err) => {
+ error!("ROLLBACK FAILED! fatal error: {:?}", err);
+ TransactionResult::UnrecoverableError(engine_err, err)
+ }
+ };
+ }
+ };
+
+ applications_by_environment.insert(target_environment, applications);
}
Step::DeployEnvironment(kubernetes, environment_action) => {
// deploy complete environment
@@ -645,7 +597,6 @@ impl<'a> Transaction<'a> {
{
let target_environment = match environment_action {
EnvironmentAction::Environment(te) => te,
- EnvironmentAction::EnvironmentWithFailover(te, _) => te,
};
let empty_vec = Vec::with_capacity(0);
@@ -787,6 +738,7 @@ pub enum RollbackError {
#[derive(Debug)]
pub enum TransactionResult {
Ok,
+ Canceled,
Rollback(EngineError),
UnrecoverableError(EngineError, RollbackError),
}
diff --git a/test_utilities/Cargo.lock b/test_utilities/Cargo.lock
index 555b69cb..f794d3af 100644
--- a/test_utilities/Cargo.lock
+++ b/test_utilities/Cargo.lock
@@ -889,7 +889,7 @@ dependencies = [
"cc",
"libc",
"log",
- "rustc_version",
+ "rustc_version 0.2.3",
"winapi 0.3.9",
]
@@ -1106,9 +1106,9 @@ checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35"
[[package]]
name = "hmac"
-version = "0.10.1"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15"
+checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
dependencies = [
"crypto-mac",
"digest 0.9.0",
@@ -1221,7 +1221,7 @@ dependencies = [
"itoa",
"log",
"net2",
- "rustc_version",
+ "rustc_version 0.2.3",
"time 0.1.44",
"tokio 0.1.22",
"tokio-buf",
@@ -1591,10 +1591,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
[[package]]
-name = "md5"
-version = "0.7.0"
+name = "md-5"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
+checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15"
+dependencies = [
+ "block-buffer 0.9.0",
+ "digest 0.9.0",
+ "opaque-debug 0.3.0",
+]
[[package]]
name = "memchr"
@@ -1855,7 +1860,7 @@ checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
dependencies = [
"lock_api 0.3.4",
"parking_lot_core 0.6.2",
- "rustc_version",
+ "rustc_version 0.2.3",
]
[[package]]
@@ -1879,7 +1884,7 @@ dependencies = [
"cloudabi",
"libc",
"redox_syscall 0.1.57",
- "rustc_version",
+ "rustc_version 0.2.3",
"smallvec 0.6.13",
"winapi 0.3.9",
]
@@ -2632,9 +2637,9 @@ dependencies = [
[[package]]
name = "rusoto_core"
-version = "0.46.0"
+version = "0.47.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02aff20978970d47630f08de5f0d04799497818d16cafee5aec90c4b4d0806cf"
+checksum = "5b4f000e8934c1b4f70adde180056812e7ea6b1a247952db8ee98c94cd3116cc"
dependencies = [
"async-trait",
"base64 0.13.0",
@@ -2648,7 +2653,7 @@ dependencies = [
"log",
"rusoto_credential",
"rusoto_signature",
- "rustc_version",
+ "rustc_version 0.4.0",
"serde",
"serde_json",
"tokio 1.10.0",
@@ -2657,9 +2662,9 @@ dependencies = [
[[package]]
name = "rusoto_credential"
-version = "0.46.0"
+version = "0.47.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e91e4c25ea8bfa6247684ff635299015845113baaa93ba8169b9e565701b58e"
+checksum = "6a46b67db7bb66f5541e44db22b0a02fed59c9603e146db3a9e633272d3bac2f"
dependencies = [
"async-trait",
"chrono",
@@ -2675,9 +2680,9 @@ dependencies = [
[[package]]
name = "rusoto_dynamodb"
-version = "0.46.0"
+version = "0.47.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f26af40f36409cb8fae3069690f78f638f747b55c7b90f338d5ed36016b0cda"
+checksum = "7935e1f9ca57c4ee92a4d823dcd698eb8c992f7e84ca21976ae72cd2b03016e7"
dependencies = [
"async-trait",
"bytes 1.0.1",
@@ -2689,9 +2694,9 @@ dependencies = [
[[package]]
name = "rusoto_ecr"
-version = "0.46.0"
+version = "0.47.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ab222491e156f033926d40c663d57a6b60a5c5ec94e696e66f52a0c64d20dbf"
+checksum = "93ec4a28e4fb276307c2129abb16cf7d5573da4ec24d9e3895cc5c8a8bc21a4d"
dependencies = [
"async-trait",
"bytes 1.0.1",
@@ -2703,9 +2708,9 @@ dependencies = [
[[package]]
name = "rusoto_eks"
-version = "0.46.0"
+version = "0.47.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91d7e1e577d4102a9d80d5eafc0547064d3e8817d094f00e95ae45d03ae3accb"
+checksum = "7bada849ce4a4836ae23920613144339b23dc0ebfc4d19fbc20f6b7b9d3cb6d9"
dependencies = [
"async-trait",
"bytes 1.0.1",
@@ -2718,23 +2723,23 @@ dependencies = [
[[package]]
name = "rusoto_iam"
-version = "0.46.0"
+version = "0.47.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0268b898abed79c59f8468c4991d0f97ed0925049db228cff623ecac44c5b3a6"
+checksum = "eeb3a551b0fea2882b7caafc7dcdc74c80e73f16c41bfb722f4ea88e3e21625d"
dependencies = [
"async-trait",
"bytes 1.0.1",
"futures 0.3.15",
"rusoto_core",
- "serde_urlencoded 0.6.1",
+ "serde_urlencoded 0.7.0",
"xml-rs",
]
[[package]]
name = "rusoto_s3"
-version = "0.46.0"
+version = "0.47.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abc3f56f14ccf91f880b9a9c2d0556d8523e8c155041c54db155b384a1dd1119"
+checksum = "048c2fe811a823ad5a9acc976e8bf4f1d910df719dcf44b15c3e96c5b7a51027"
dependencies = [
"async-trait",
"bytes 1.0.1",
@@ -2745,41 +2750,42 @@ dependencies = [
[[package]]
name = "rusoto_signature"
-version = "0.46.0"
+version = "0.47.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5486e6b1673ab3e0ba1ded284fb444845fe1b7f41d13989a54dd60f62a7b2baa"
+checksum = "6264e93384b90a747758bcc82079711eacf2e755c3a8b5091687b5349d870bcc"
dependencies = [
"base64 0.13.0",
"bytes 1.0.1",
+ "chrono",
+ "digest 0.9.0",
"futures 0.3.15",
"hex",
"hmac",
"http 0.2.1",
"hyper 0.14.7",
"log",
- "md5",
+ "md-5",
"percent-encoding 2.1.0",
"pin-project-lite 0.2.6",
"rusoto_credential",
- "rustc_version",
+ "rustc_version 0.4.0",
"serde",
"sha2",
- "time 0.2.24",
"tokio 1.10.0",
]
[[package]]
name = "rusoto_sts"
-version = "0.46.0"
+version = "0.47.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f93005e0c3b9e40a424b50ca71886d2445cc19bb6cdac3ac84c2daff482eb59"
+checksum = "4e7edd42473ac006fd54105f619e480b0a94136e7f53cf3fb73541363678fd92"
dependencies = [
"async-trait",
"bytes 1.0.1",
"chrono",
"futures 0.3.15",
"rusoto_core",
- "serde_urlencoded 0.6.1",
+ "serde_urlencoded 0.7.0",
"xml-rs",
]
@@ -2817,6 +2823,15 @@ dependencies = [
"semver 0.9.0",
]
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.4",
+]
+
[[package]]
name = "rustversion"
version = "1.0.6"
@@ -3027,9 +3042,9 @@ dependencies = [
[[package]]
name = "shlex"
-version = "0.1.1"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
[[package]]
name = "signal-hook-registry"
@@ -3107,7 +3122,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
dependencies = [
"discard",
- "rustc_version",
+ "rustc_version 0.2.3",
"stdweb-derive",
"stdweb-internal-macros",
"stdweb-internal-runtime",
diff --git a/test_utilities/src/aws.rs b/test_utilities/src/aws.rs
index f4f71593..10feaaef 100644
--- a/test_utilities/src/aws.rs
+++ b/test_utilities/src/aws.rs
@@ -80,6 +80,7 @@ impl Cluster for AWS {
cloud_provider,
dns_provider,
logger,
+ Box::new(|| false),
)
}
diff --git a/test_utilities/src/common.rs b/test_utilities/src/common.rs
index f78ed156..258e4630 100644
--- a/test_utilities/src/common.rs
+++ b/test_utilities/src/common.rs
@@ -991,7 +991,7 @@ pub fn test_db(
let app_id = generate_id();
let database_username = "superuser".to_string();
- let database_password = generate_id();
+ let database_password = generate_password(true);
let db_kind_str = db_kind.name().to_string();
let db_id = generate_id();
let database_host = format!("{}-{}", db_id, db_kind_str.clone());
@@ -1076,11 +1076,8 @@ pub fn test_db(
let ea = EnvironmentAction::Environment(environment.clone());
let ea_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(provider_kind.clone(), &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- }
+ let ret = environment.deploy_environment(provider_kind.clone(), &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
match database_mode.clone() {
DatabaseMode::CONTAINER => {
@@ -1142,11 +1139,8 @@ pub fn test_db(
}
}
- match environment_delete.delete_environment(provider_kind.clone(), &context_for_delete, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- }
+ let ret = environment_delete.delete_environment(provider_kind.clone(), &context_for_delete, &ea_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
}
@@ -1390,11 +1384,7 @@ pub fn cluster_test(
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),
- };
+ assert!(matches!(deploy_tx.commit(), TransactionResult::Ok));
// Deploy env if any
if let Some(env) = environment_to_deploy {
@@ -1404,11 +1394,8 @@ pub fn cluster_test(
if let Err(err) = deploy_env_tx.deploy_environment(kubernetes.as_ref(), env) {
panic!("{:?}", err)
}
- match deploy_env_tx.commit() {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+
+ assert!(matches!(deploy_env_tx.commit(), TransactionResult::Ok));
}
if let Err(err) = metrics_server_test(
@@ -1430,21 +1417,14 @@ pub fn cluster_test(
if let Err(err) = pause_tx.pause_kubernetes(kubernetes.as_ref()) {
panic!("{:?}", err)
}
- match pause_tx.commit() {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ assert!(matches!(pause_tx.commit(), TransactionResult::Ok));
// Resume
if let Err(err) = resume_tx.create_kubernetes(kubernetes.as_ref()) {
panic!("{:?}", err)
}
- let _ = match resume_tx.commit() {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+
+ assert!(matches!(resume_tx.commit(), TransactionResult::Ok));
if let Err(err) = metrics_server_test(
kubernetes
@@ -1478,11 +1458,7 @@ pub fn cluster_test(
if let Err(err) = upgrade_tx.create_kubernetes(upgraded_kubernetes.as_ref()) {
panic!("{:?}", err)
}
- let _ = match upgrade_tx.commit() {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ assert!(matches!(upgrade_tx.commit(), TransactionResult::Ok));
if let Err(err) = metrics_server_test(
upgraded_kubernetes
@@ -1501,11 +1477,7 @@ pub fn cluster_test(
if let Err(err) = delete_tx.delete_kubernetes(upgraded_kubernetes.as_ref()) {
panic!("{:?}", err)
}
- match delete_tx.commit() {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ assert!(matches!(delete_tx.commit(), TransactionResult::Ok));
return test_name.to_string();
}
@@ -1519,22 +1491,14 @@ pub fn cluster_test(
if let Err(err) = destroy_env_tx.delete_environment(kubernetes.as_ref(), env) {
panic!("{:?}", err)
}
- match destroy_env_tx.commit() {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ assert!(matches!(destroy_env_tx.commit(), TransactionResult::Ok));
}
// Delete
if let Err(err) = delete_tx.delete_kubernetes(kubernetes.as_ref()) {
panic!("{:?}", err)
}
- match delete_tx.commit() {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ assert!(matches!(delete_tx.commit(), TransactionResult::Ok));
test_name.to_string()
}
diff --git a/test_utilities/src/digitalocean.rs b/test_utilities/src/digitalocean.rs
index 33f0c115..5f8cce0a 100644
--- a/test_utilities/src/digitalocean.rs
+++ b/test_utilities/src/digitalocean.rs
@@ -56,6 +56,7 @@ impl Cluster for DO {
cloud_provider,
dns_provider,
logger,
+ Box::new(|| false),
)
}
diff --git a/test_utilities/src/scaleway.rs b/test_utilities/src/scaleway.rs
index 84cd49af..e96cc52e 100644
--- a/test_utilities/src/scaleway.rs
+++ b/test_utilities/src/scaleway.rs
@@ -77,6 +77,7 @@ impl Cluster for Scaleway {
cloud_provider,
dns_provider,
logger,
+ Box::new(|| false),
)
}
diff --git a/test_utilities/src/utilities.rs b/test_utilities/src/utilities.rs
index b9bc6abb..902adf47 100644
--- a/test_utilities/src/utilities.rs
+++ b/test_utilities/src/utilities.rs
@@ -45,9 +45,9 @@ use crate::digitalocean::{
DO_SELF_HOSTED_DATABASE_INSTANCE_TYPE,
};
use qovery_engine::cloud_provider::digitalocean::application::DoRegion;
+use qovery_engine::cmd::command::QoveryCommand;
use qovery_engine::cmd::kubectl::{kubectl_get_pvc, kubectl_get_svc};
use qovery_engine::cmd::structs::{KubernetesList, KubernetesPod, PVC, SVC};
-use qovery_engine::cmd::utilities::QoveryCommand;
use qovery_engine::errors::CommandError;
use qovery_engine::logger::{Logger, StdIoLogger};
use qovery_engine::models::DatabaseMode::MANAGED;
diff --git a/tests/aws/aws_databases.rs b/tests/aws/aws_databases.rs
index 2ddf45c3..4d4bd9a5 100644
--- a/tests/aws/aws_databases.rs
+++ b/tests/aws/aws_databases.rs
@@ -64,17 +64,11 @@ fn deploy_an_environment_with_3_databases_and_3_apps() {
let ea = EnvironmentAction::Environment(environment.clone());
let ea_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
- match environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
})
@@ -123,17 +117,11 @@ fn deploy_an_environment_with_db_and_pause_it() {
let ea = EnvironmentAction::Environment(environment.clone());
let ea_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
- match environment.pause_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.pause_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
// Check that we have actually 0 pods running for this db
let app_name = format!("postgresql{}-0", environment.databases[0].name);
@@ -147,11 +135,8 @@ fn deploy_an_environment_with_db_and_pause_it() {
assert_eq!(ret.is_ok(), true);
assert_eq!(ret.unwrap().items.is_empty(), true);
- match environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
})
@@ -210,11 +195,9 @@ fn postgresql_deploy_a_working_development_environment_with_all_options() {
let ea = EnvironmentAction::Environment(environment.clone());
let ea_for_deletion = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
+
// TODO: should be uncommented as soon as cert-manager is fixed
// for the moment this assert report a SSL issue on the second router, so it's works well
/* let connections = test_utilities::utilities::check_all_connections(&env_to_check);
@@ -222,11 +205,8 @@ fn postgresql_deploy_a_working_development_environment_with_all_options() {
assert_eq!(con, true);
}*/
- match environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_for_deletion, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_for_deletion, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
})
@@ -334,17 +314,13 @@ fn postgresql_deploy_a_working_environment_and_redeploy() {
let ea = EnvironmentAction::Environment(environment.clone());
let ea_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
- match environment_to_redeploy.deploy_environment(Kind::Aws, &context_for_redeploy, &ea_redeploy, logger.clone())
- {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
+
+ let ret =
+ environment_to_redeploy.deploy_environment(Kind::Aws, &context_for_redeploy, &ea_redeploy, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
+
// TO CHECK: DATABASE SHOULDN'T BE RESTARTED AFTER A REDEPLOY
let database_name = format!("postgresql{}-0", &environment_check.databases[0].name);
match is_pod_restarted_env(
@@ -358,11 +334,11 @@ fn postgresql_deploy_a_working_environment_and_redeploy() {
(false, _) => assert!(false),
}
- match environment_delete.delete_environment(Kind::Aws, &context_for_delete, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ let ret = environment_delete.delete_environment(Kind::Aws, &context_for_delete, &ea_delete, logger);
+ assert!(matches!(
+ ret,
+ TransactionResult::Ok | TransactionResult::UnrecoverableError(_, _)
+ ));
return test_name.to_string();
})
diff --git a/tests/aws/aws_environment.rs b/tests/aws/aws_environment.rs
index cc5f133d..5b45c545 100644
--- a/tests/aws/aws_environment.rs
+++ b/tests/aws/aws_environment.rs
@@ -62,17 +62,11 @@ fn deploy_a_working_environment_with_no_router_on_aws_eks() {
let ea = EnvironmentAction::Environment(environment.clone());
let ea_delete = EnvironmentAction::Environment(environment_for_delete.clone());
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
- match environment_for_delete.delete_environment(Kind::Aws, &context_for_delete, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment_for_delete.delete_environment(Kind::Aws, &context_for_delete, &ea_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
})
@@ -128,7 +122,8 @@ fn test_build_cache() {
PullResult::None => assert!(true),
};
- let build_result = local_docker.build(app.to_build(), false).unwrap();
+ let cancel_task = || false;
+ let build_result = local_docker.build(app.to_build(), false, &cancel_task).unwrap();
let _ = match ecr.push(&build_result.build.image, false) {
Ok(_) => assert!(true),
@@ -205,11 +200,8 @@ fn deploy_a_working_environment_and_pause_it_eks() {
let ea = EnvironmentAction::Environment(environment.clone());
let selector = format!("appId={}", environment.clone().applications[0].id);
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
let ret = get_pods(
context.clone(),
@@ -221,11 +213,8 @@ fn deploy_a_working_environment_and_pause_it_eks() {
assert_eq!(ret.is_ok(), true);
assert_eq!(ret.unwrap().items.is_empty(), false);
- match environment.pause_environment(Kind::Aws, &context_for_delete, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.pause_environment(Kind::Aws, &context_for_delete, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
// Check that we have actually 0 pods running for this app
let ret = get_pods(
@@ -275,11 +264,8 @@ fn deploy_a_working_environment_and_pause_it_eks() {
// Check we can resume the env
let ctx_resume = context.clone_not_same_execution_id();
- match environment.deploy_environment(Kind::Aws, &ctx_resume, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &ctx_resume, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
let ret = get_pods(
context.clone(),
@@ -331,11 +317,9 @@ fn deploy_a_working_environment_and_pause_it_eks() {
assert!(filtered_pdb);
// Cleanup
- match environment.delete_environment(Kind::Aws, &context_for_delete, &ea, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.delete_environment(Kind::Aws, &context_for_delete, &ea, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
+
return test_name.to_string();
})
}
@@ -381,17 +365,14 @@ fn deploy_a_not_working_environment_with_no_router_on_aws_eks() {
let ea = EnvironmentAction::Environment(environment.clone());
let ea_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::UnrecoverableError(_, _)));
- match environment_delete.delete_environment(Kind::Aws, &context_for_delete, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ let ret = environment_delete.delete_environment(Kind::Aws, &context_for_delete, &ea_delete, logger);
+ assert!(matches!(
+ ret,
+ TransactionResult::Ok | TransactionResult::UnrecoverableError(_, _)
+ ));
return test_name.to_string();
})
@@ -456,17 +437,11 @@ fn build_with_buildpacks_and_deploy_a_working_environment() {
let ea = EnvironmentAction::Environment(environment.clone());
let ea_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
- match environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
})
@@ -531,17 +506,11 @@ fn build_worker_with_buildpacks_and_deploy_a_working_environment() {
let ea = EnvironmentAction::Environment(environment.clone());
let ea_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
- match environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
})
@@ -587,17 +556,11 @@ fn deploy_a_working_environment_with_domain() {
let ea = EnvironmentAction::Environment(environment.clone());
let ea_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
- match environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
})
@@ -662,11 +625,8 @@ fn deploy_a_working_environment_with_storage_on_aws_eks() {
let ea = EnvironmentAction::Environment(environment.clone());
let ea_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
match get_pvc(context.clone(), Kind::Aws, environment.clone(), secrets.clone()) {
Ok(pvc) => assert_eq!(
@@ -676,11 +636,8 @@ fn deploy_a_working_environment_with_storage_on_aws_eks() {
Err(_) => assert!(false),
};
- match environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
})
@@ -750,11 +707,8 @@ fn redeploy_same_app_with_ebs() {
let ea2 = EnvironmentAction::Environment(environment_redeploy.clone());
let ea_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
match get_pvc(context.clone(), Kind::Aws, environment.clone(), secrets.clone()) {
Ok(pvc) => assert_eq!(
@@ -773,11 +727,8 @@ fn redeploy_same_app_with_ebs() {
secrets.clone(),
);
- match environment_redeploy.deploy_environment(Kind::Aws, &context_bis, &ea2, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment_redeploy.deploy_environment(Kind::Aws, &context_bis, &ea2, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
let (_, number2) = is_pod_restarted_env(
context.clone(),
@@ -788,11 +739,9 @@ fn redeploy_same_app_with_ebs() {
);
//nothing change in the app, so, it shouldn't be restarted
assert!(number.eq(&number2));
- match environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
+
return test_name.to_string();
})
}
@@ -854,26 +803,19 @@ fn deploy_a_not_working_environment_and_after_working_environment() {
let ea_not_working = EnvironmentAction::Environment(environment_for_not_working.clone());
let ea_delete = EnvironmentAction::Environment(environment_for_delete.clone());
- match environment_for_not_working.deploy_environment(
+ let ret = environment_for_not_working.deploy_environment(
Kind::Aws,
&context_for_not_working,
&ea_not_working,
logger.clone(),
- ) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
- match environment_for_delete.delete_environment(Kind::Aws, &context_for_delete, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ );
+ assert!(matches!(ret, TransactionResult::UnrecoverableError(_, _)));
+
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
+
+ let ret = environment_for_delete.delete_environment(Kind::Aws, &context_for_delete, &ea_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
})
@@ -946,48 +888,39 @@ fn deploy_ok_fail_fail_ok_environment() {
let ea_delete = EnvironmentAction::Environment(delete_env.clone());
// OK
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
// FAIL and rollback
- match not_working_env_1.deploy_environment(
+ let ret = not_working_env_1.deploy_environment(
Kind::Aws,
&context_for_not_working_1,
&ea_not_working_1,
logger.clone(),
- ) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(true),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ );
+ assert!(matches!(
+ ret,
+ TransactionResult::Rollback(_) | TransactionResult::UnrecoverableError(_, _)
+ ));
// FAIL and Rollback again
- match not_working_env_2.deploy_environment(
+ let ret = not_working_env_2.deploy_environment(
Kind::Aws,
&context_for_not_working_2,
&ea_not_working_2,
logger.clone(),
- ) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(true),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ );
+ assert!(matches!(
+ ret,
+ TransactionResult::Rollback(_) | TransactionResult::UnrecoverableError(_, _)
+ ));
// Should be working
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
- match delete_env.delete_environment(Kind::Aws, &context_for_delete, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = delete_env.delete_environment(Kind::Aws, &context_for_delete, &ea_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
})
@@ -1033,214 +966,11 @@ fn deploy_a_non_working_environment_with_no_failover_on_aws_eks() {
let ea = EnvironmentAction::Environment(environment.clone());
let ea_delete = EnvironmentAction::Environment(delete_env.clone());
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
- match delete_env.delete_environment(Kind::Aws, &context_for_delete, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone());
+ assert!(matches!(ret, TransactionResult::UnrecoverableError(_, _)));
- return test_name.to_string();
- })
-}
-
-#[cfg(feature = "test-aws-self-hosted")]
-#[named]
-#[test]
-fn deploy_a_non_working_environment_with_a_working_failover_on_aws_eks() {
- let test_name = function_name!();
- engine_run_test(|| {
- init();
-
- let span = span!(Level::INFO, "test", name = test_name);
- let _enter = span.enter();
-
- // context for non working environment
- let secrets = FuncTestsSecrets::new();
- let logger = logger();
- let context = context(
- secrets
- .AWS_TEST_ORGANIZATION_ID
- .as_ref()
- .expect("AWS_TEST_ORGANIZATION_ID is not set")
- .as_str(),
- secrets
- .AWS_TEST_CLUSTER_ID
- .as_ref()
- .expect("AWS_TEST_CLUSTER_ID is not set")
- .as_str(),
- );
- let test_domain = secrets
- .DEFAULT_TEST_DOMAIN
- .as_ref()
- .expect("DEFAULT_TEST_DOMAIN is not set in secrets");
-
- let environment = test_utilities::common::non_working_environment(&context, test_domain.as_str());
- let failover_environment = test_utilities::common::working_minimal_environment(&context, test_domain.as_str());
- // context for deletion
- let context_deletion = context.clone_not_same_execution_id();
- let mut delete_env =
- test_utilities::common::working_minimal_environment(&context_deletion, test_domain.as_str());
- delete_env.action = Action::Delete;
- let ea_delete = EnvironmentAction::Environment(delete_env.clone());
- let ea = EnvironmentAction::EnvironmentWithFailover(environment.clone(), failover_environment.clone());
-
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
- match delete_env.delete_environment(Kind::Aws, &context_deletion, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
-
- return test_name.to_string();
- })
-}
-
-#[cfg(feature = "test-aws-self-hosted")]
-#[named]
-#[test]
-#[ignore]
-fn deploy_2_non_working_environments_with_2_working_failovers_on_aws_eks() {
- init();
-
- let test_name = function_name!();
- let span = span!(Level::INFO, "test", name = test_name);
- let _enter = span.enter();
-
- let logger = logger();
- let secrets = FuncTestsSecrets::new();
-
- // context for non working environment
- let context_failover_1 = context(
- secrets
- .AWS_TEST_ORGANIZATION_ID
- .as_ref()
- .expect("AWS_TEST_ORGANIZATION_ID is not set")
- .as_str(),
- secrets
- .AWS_TEST_CLUSTER_ID
- .as_ref()
- .expect("AWS_TEST_CLUSTER_ID is not set")
- .as_str(),
- );
- let context_failover_2 = context_failover_1.clone_not_same_execution_id();
-
- let context_first_fail_deployment_1 = context_failover_1.clone_not_same_execution_id();
- let context_second_fail_deployment_2 = context_failover_1.clone_not_same_execution_id();
-
- let test_domain = secrets
- .DEFAULT_TEST_DOMAIN
- .as_ref()
- .expect("DEFAULT_TEST_DOMAIN is not set in secrets");
-
- let failover_environment_1 =
- test_utilities::common::echo_app_environment(&context_failover_1, test_domain.as_str());
- let fail_app_1 =
- test_utilities::common::non_working_environment(&context_first_fail_deployment_1, test_domain.as_str());
- let mut failover_environment_2 =
- test_utilities::common::echo_app_environment(&context_failover_2, test_domain.as_str());
- let fail_app_2 =
- test_utilities::common::non_working_environment(&context_second_fail_deployment_2, test_domain.as_str());
-
- failover_environment_2.applications = failover_environment_2
- .applications
- .into_iter()
- .map(|mut app| {
- app.environment_vars = btreemap! {
- "ECHO_TEXT".to_string() => base64::encode("Lilou".to_string())
- };
- app
- })
- .collect::>();
-
- // context for deletion
- let context_deletion = context_failover_1.clone_not_same_execution_id();
- let mut delete_env = test_utilities::common::echo_app_environment(&context_deletion, test_domain.as_str());
- delete_env.action = Action::Delete;
- let ea_delete = EnvironmentAction::Environment(delete_env.clone());
-
- // first deployment
- let ea1 = EnvironmentAction::EnvironmentWithFailover(fail_app_1, failover_environment_1.clone());
- let ea2 = EnvironmentAction::EnvironmentWithFailover(fail_app_2, failover_environment_2.clone());
-
- match failover_environment_1.deploy_environment(Kind::Aws, &context_failover_1, &ea1, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
-
- match failover_environment_2.deploy_environment(Kind::Aws, &context_failover_2, &ea2, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
-
- match delete_env.delete_environment(Kind::Aws, &context_deletion, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
-}
-
-#[cfg(feature = "test-aws-self-hosted")]
-#[named]
-#[test]
-fn deploy_a_non_working_environment_with_a_non_working_failover_on_aws_eks() {
- let test_name = function_name!();
- engine_run_test(|| {
- init();
-
- let span = span!(Level::INFO, "test", name = test_name);
- let _enter = span.enter();
-
- let secrets = FuncTestsSecrets::new();
- let logger = logger();
- let context = context(
- secrets
- .AWS_TEST_ORGANIZATION_ID
- .as_ref()
- .expect("AWS_TEST_ORGANIZATION_ID is not set")
- .as_str(),
- secrets
- .AWS_TEST_CLUSTER_ID
- .as_ref()
- .expect("AWS_TEST_CLUSTER_ID is not set")
- .as_str(),
- );
- let test_domain = secrets
- .DEFAULT_TEST_DOMAIN
- .as_ref()
- .expect("DEFAULT_TEST_DOMAIN is not set in secrets");
-
- let environment = test_utilities::common::non_working_environment(&context, test_domain.as_str());
- let failover_environment = test_utilities::common::non_working_environment(&context, test_domain.as_str());
-
- let context_for_deletion = context.clone_not_same_execution_id();
- let mut delete_env =
- test_utilities::common::non_working_environment(&context_for_deletion, test_domain.as_str());
- delete_env.action = Action::Delete;
- // environment action initialize
- let ea_delete = EnvironmentAction::Environment(delete_env.clone());
- let ea = EnvironmentAction::EnvironmentWithFailover(environment.clone(), failover_environment.clone());
-
- match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
- match delete_env.delete_environment(Kind::Aws, &context_for_deletion, &ea_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ let ret = delete_env.delete_environment(Kind::Aws, &context_for_delete, &ea_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
})
@@ -1287,21 +1017,15 @@ fn aws_eks_deploy_a_working_environment_with_sticky_session() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_for_delete = EnvironmentAction::Environment(environment_for_delete.clone());
- match environment.deploy_environment(Kind::Aws, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Aws, &context, &env_action, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
// checking if cookie is properly set on the app
assert!(routers_sessions_are_sticky(environment.routers.clone()));
- match environment_for_delete.delete_environment(Kind::Aws, &context_for_delete, &env_action_for_delete, logger)
- {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret =
+ environment_for_delete.delete_environment(Kind::Aws, &context_for_delete, &env_action_for_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
test_name.to_string()
})
diff --git a/tests/digitalocean/do_databases.rs b/tests/digitalocean/do_databases.rs
index 7ce4492a..9d5b89f3 100644
--- a/tests/digitalocean/do_databases.rs
+++ b/tests/digitalocean/do_databases.rs
@@ -65,17 +65,11 @@ fn deploy_an_environment_with_3_databases_and_3_apps() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
- match environment_delete.delete_environment(Kind::Do, &context_for_deletion, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment_delete.delete_environment(Kind::Do, &context_for_deletion, &env_action_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
// delete images created during test from registries
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
@@ -127,17 +121,11 @@ fn deploy_an_environment_with_db_and_pause_it() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Do, &context, &env_action.clone(), logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Do, &context, &env_action.clone(), logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
- match environment.pause_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.pause_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
// Check that we have actually 0 pods running for this db
let app_name = format!("postgresql{}-0", environment.databases[0].name);
@@ -151,11 +139,8 @@ fn deploy_an_environment_with_db_and_pause_it() {
assert_eq!(ret.is_ok(), true);
assert_eq!(ret.unwrap().items.is_empty(), true);
- match environment_delete.delete_environment(Kind::Do, &context_for_deletion, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment_delete.delete_environment(Kind::Do, &context_for_deletion, &env_action_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
// delete images created during test from registries
if let Err(e) = clean_environments(&context, vec![environment], secrets.clone(), DO_TEST_REGION) {
@@ -217,11 +202,9 @@ fn postgresql_deploy_a_working_development_environment_with_all_options() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_for_deletion = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
+
// TODO: should be uncommented as soon as cert-manager is fixed
// for the moment this assert report a SSL issue on the second router, so it's works well
/* let connections = test_utilities::utilities::check_all_connections(&env_to_check);
@@ -229,11 +212,9 @@ fn postgresql_deploy_a_working_development_environment_with_all_options() {
assert_eq!(con, true);
}*/
- match environment_delete.delete_environment(Kind::Do, &context_for_deletion, &env_action_for_deletion, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret =
+ environment_delete.delete_environment(Kind::Do, &context_for_deletion, &env_action_for_deletion, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
// delete images created during test from registries
if let Err(e) = clean_environments(
@@ -360,21 +341,17 @@ fn postgresql_deploy_a_working_environment_and_redeploy() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
- match environment_to_redeploy.deploy_environment(
+ let ret = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
+
+ let ret = environment_to_redeploy.deploy_environment(
Kind::Do,
&context_for_redeploy,
&env_action_redeploy,
logger.clone(),
- ) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ );
+ assert!(matches!(ret, TransactionResult::Ok));
+
// TO CHECK: DATABASE SHOULDN'T BE RESTARTED AFTER A REDEPLOY
let database_name = format!("postgresql-{}-0", &environment_check.databases[0].name);
match is_pod_restarted_env(
@@ -388,11 +365,11 @@ fn postgresql_deploy_a_working_environment_and_redeploy() {
(false, _) => assert!(false),
}
- match environment_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ let ret = environment_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_delete, logger);
+ assert!(matches!(
+ ret,
+ TransactionResult::Ok | TransactionResult::UnrecoverableError(_, _)
+ ));
// delete images created during test from registries
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
diff --git a/tests/digitalocean/do_environment.rs b/tests/digitalocean/do_environment.rs
index f18c9275..7b47e957 100644
--- a/tests/digitalocean/do_environment.rs
+++ b/tests/digitalocean/do_environment.rs
@@ -62,17 +62,12 @@ fn digitalocean_doks_deploy_a_working_environment_with_no_router() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_for_delete = EnvironmentAction::Environment(environment_for_delete.clone());
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
- match environment_for_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_for_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret =
+ environment_for_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_for_delete, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
@@ -130,7 +125,8 @@ fn test_build_cache() {
PullResult::None => assert!(true),
};
- let build_result = local_docker.build(app.to_build(), false).unwrap();
+ let cancel_task = || false;
+ let build_result = local_docker.build(app.to_build(), false, &cancel_task).unwrap();
let _ = match docr.push(&build_result.build.image, false) {
Ok(_) => assert!(true),
@@ -210,18 +206,12 @@ fn digitalocean_doks_deploy_a_not_working_environment_with_no_router() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_for_delete = EnvironmentAction::Environment(environment_for_delete.clone());
+ let ret = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(ret, TransactionResult::UnrecoverableError(_, _)));
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
-
- match environment_for_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_for_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ let ret =
+ environment_for_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_for_delete, logger);
+ assert!(matches!(ret, TransactionResult::UnrecoverableError(_, _)));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
@@ -267,11 +257,8 @@ fn digitalocean_doks_deploy_a_working_environment_and_pause() {
let env_action = EnvironmentAction::Environment(environment.clone());
let selector = format!("appId={}", environment.applications[0].id);
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
let ret = get_pods(
context.clone(),
@@ -283,11 +270,8 @@ fn digitalocean_doks_deploy_a_working_environment_and_pause() {
assert_eq!(ret.is_ok(), true);
assert_eq!(ret.unwrap().items.is_empty(), false);
- match environment.pause_environment(Kind::Do, &context_for_delete, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.pause_environment(Kind::Do, &context_for_delete, &env_action, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
// Check that we have actually 0 pods running for this app
let ret = get_pods(
@@ -302,11 +286,8 @@ fn digitalocean_doks_deploy_a_working_environment_and_pause() {
// Check we can resume the env
let ctx_resume = context.clone_not_same_execution_id();
- match environment.deploy_environment(Kind::Do, &ctx_resume, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.deploy_environment(Kind::Do, &ctx_resume, &env_action, logger.clone());
+ assert!(matches!(ret, TransactionResult::Ok));
let ret = get_pods(
context.clone(),
@@ -319,11 +300,8 @@ fn digitalocean_doks_deploy_a_working_environment_and_pause() {
assert_eq!(ret.unwrap().items.is_empty(), false);
// Cleanup
- match environment.delete_environment(Kind::Do, &context_for_delete, &env_action, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = environment.delete_environment(Kind::Do, &context_for_delete, &env_action, logger);
+ assert!(matches!(ret, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
@@ -391,17 +369,12 @@ fn digitalocean_doks_build_with_buildpacks_and_deploy_a_working_environment() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_for_delete = EnvironmentAction::Environment(environment_for_delete.clone());
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
- match environment_for_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_for_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_for_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_for_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
@@ -450,17 +423,12 @@ fn digitalocean_doks_deploy_a_working_environment_with_domain() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_for_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
- match environment_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_for_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_for_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
@@ -527,11 +495,8 @@ fn digitalocean_doks_deploy_a_working_environment_with_storage() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
match get_pvc(context.clone(), Kind::Do, environment.clone(), secrets.clone()) {
Ok(pvc) => assert_eq!(
@@ -541,11 +506,8 @@ fn digitalocean_doks_deploy_a_working_environment_with_storage() {
Err(_) => assert!(false),
};
- match environment_delete.delete_environment(Kind::Do, &context_for_deletion, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment_delete.delete_environment(Kind::Do, &context_for_deletion, &env_action_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
@@ -617,11 +579,8 @@ fn digitalocean_doks_redeploy_same_app() {
let env_action_redeploy = EnvironmentAction::Environment(environment_redeploy.clone());
let env_action_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
match get_pvc(context.clone(), Kind::Do, environment.clone(), secrets.clone()) {
Ok(pvc) => assert_eq!(
@@ -640,11 +599,9 @@ fn digitalocean_doks_redeploy_same_app() {
secrets.clone(),
);
- match environment_redeploy.deploy_environment(Kind::Do, &context_bis, &env_action_redeploy, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_redeploy.deploy_environment(Kind::Do, &context_bis, &env_action_redeploy, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
let (_, number2) = is_pod_restarted_env(
context.clone(),
@@ -657,11 +614,8 @@ fn digitalocean_doks_redeploy_same_app() {
// nothing changed in the app, so, it shouldn't be restarted
assert!(number.eq(&number2));
- match environment_delete.delete_environment(Kind::Do, &context_for_deletion, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment_delete.delete_environment(Kind::Do, &context_for_deletion, &env_action_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
@@ -728,26 +682,18 @@ fn digitalocean_doks_deploy_a_not_working_environment_and_then_working_environme
let env_action_not_working = EnvironmentAction::Environment(environment_for_not_working.clone());
let env_action_delete = EnvironmentAction::Environment(environment_for_delete.clone());
- match environment_for_not_working.deploy_environment(
+ let result = environment_for_not_working.deploy_environment(
Kind::Do,
&context_for_not_working,
&env_action_not_working,
logger.clone(),
- ) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
- match environment_for_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ );
+ assert!(matches!(result, TransactionResult::UnrecoverableError(_, _)));
+ let result = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
+ let result =
+ environment_for_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
@@ -822,48 +768,39 @@ fn digitalocean_doks_deploy_ok_fail_fail_ok_environment() {
let env_action_delete = EnvironmentAction::Environment(delete_env.clone());
// OK
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
// FAIL and rollback
- match not_working_env_1.deploy_environment(
+ let result = not_working_env_1.deploy_environment(
Kind::Do,
&context_for_not_working_1,
&env_action_not_working_1,
logger.clone(),
- ) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(true),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ );
+ assert!(matches!(
+ result,
+ TransactionResult::Rollback(_) | TransactionResult::UnrecoverableError(_, _)
+ ));
// FAIL and Rollback again
- match not_working_env_2.deploy_environment(
+ let result = not_working_env_2.deploy_environment(
Kind::Do,
&context_for_not_working_2,
&env_action_not_working_2,
logger.clone(),
- ) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(true),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ );
+ assert!(matches!(
+ result,
+ TransactionResult::Rollback(_) | TransactionResult::UnrecoverableError(_, _)
+ ));
// Should be working
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
- match delete_env.delete_environment(Kind::Do, &context_for_delete, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = delete_env.delete_environment(Kind::Do, &context_for_delete, &env_action_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
@@ -912,17 +849,11 @@ fn digitalocean_doks_deploy_a_non_working_environment_with_no_failover() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_delete = EnvironmentAction::Environment(delete_env.clone());
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ let result = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::UnrecoverableError(_, _)));
- match delete_env.delete_environment(Kind::Do, &context_for_delete, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = delete_env.delete_environment(Kind::Do, &context_for_delete, &env_action_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
@@ -932,138 +863,6 @@ fn digitalocean_doks_deploy_a_non_working_environment_with_no_failover() {
})
}
-#[cfg(feature = "test-do-self-hosted")]
-#[named]
-#[test]
-fn digitalocean_doks_deploy_a_non_working_environment_with_a_working_failover() {
- let test_name = function_name!();
- engine_run_test(|| {
- init();
-
- let span = span!(Level::INFO, "test", name = test_name,);
- let _enter = span.enter();
-
- let logger = logger();
-
- // context for non working environment
- let secrets = FuncTestsSecrets::new();
- let context = context(
- secrets
- .DIGITAL_OCEAN_TEST_ORGANIZATION_ID
- .as_ref()
- .expect("DIGITAL_OCEAN_TEST_ORGANIZATION_ID is not set"),
- secrets
- .DIGITAL_OCEAN_TEST_CLUSTER_ID
- .as_ref()
- .expect("DIGITAL_OCEAN_TEST_CLUSTER_ID is not set"),
- );
- let test_domain = secrets
- .DEFAULT_TEST_DOMAIN
- .as_ref()
- .expect("DEFAULT_TEST_DOMAIN is not set in secrets");
-
- let environment = test_utilities::common::non_working_environment(&context, test_domain.as_str());
- let failover_environment = test_utilities::common::working_minimal_environment(&context, test_domain.as_str());
-
- // context for deletion
- let context_deletion = context.clone_not_same_execution_id();
- let mut delete_env =
- test_utilities::common::working_minimal_environment(&context_deletion, test_domain.as_str());
- delete_env.action = Action::Delete;
-
- let env_action_delete = EnvironmentAction::Environment(delete_env.clone());
- let env_action = EnvironmentAction::EnvironmentWithFailover(environment.clone(), failover_environment.clone());
-
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
-
- match delete_env.delete_environment(Kind::Do, &context_deletion, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
-
- if let Err(e) = clean_environments(
- &context,
- vec![environment.clone(), failover_environment.clone()],
- secrets.clone(),
- DO_TEST_REGION,
- ) {
- warn!("cannot clean environments, error: {:?}", e);
- }
-
- test_name.to_string()
- })
-}
-
-#[cfg(feature = "test-do-self-hosted")]
-#[named]
-#[test]
-fn digitalocean_doks_deploy_a_non_working_environment_with_a_non_working_failover() {
- let test_name = function_name!();
- engine_run_test(|| {
- init();
-
- let span = span!(Level::INFO, "test", name = test_name,);
- let _enter = span.enter();
-
- let logger = logger();
- let secrets = FuncTestsSecrets::new();
- let context = context(
- secrets
- .DIGITAL_OCEAN_TEST_ORGANIZATION_ID
- .as_ref()
- .expect("DIGITAL_OCEAN_TEST_ORGANIZATION_ID is not set"),
- secrets
- .DIGITAL_OCEAN_TEST_CLUSTER_ID
- .as_ref()
- .expect("DIGITAL_OCEAN_TEST_CLUSTER_ID is not set"),
- );
- let test_domain = secrets
- .DEFAULT_TEST_DOMAIN
- .as_ref()
- .expect("DEFAULT_TEST_DOMAIN is not set in secrets");
-
- let environment = test_utilities::common::non_working_environment(&context, test_domain.as_str());
- let failover_environment = test_utilities::common::non_working_environment(&context, test_domain.as_str());
-
- let context_for_deletion = context.clone_not_same_execution_id();
- let mut delete_env =
- test_utilities::common::non_working_environment(&context_for_deletion, test_domain.as_str());
- delete_env.action = Action::Delete;
-
- // environment action initialize
- let env_action_delete = EnvironmentAction::Environment(delete_env.clone());
- let env_action = EnvironmentAction::EnvironmentWithFailover(environment.clone(), failover_environment.clone());
-
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
-
- match delete_env.delete_environment(Kind::Do, &context_for_deletion, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
-
- if let Err(e) = clean_environments(
- &context,
- vec![environment.clone(), failover_environment.clone()],
- secrets.clone(),
- DO_TEST_REGION,
- ) {
- warn!("cannot clean environments, error: {:?}", e);
- }
-
- test_name.to_string()
- })
-}
-
#[cfg(feature = "test-do-self-hosted")]
#[named]
#[test]
@@ -1105,20 +904,15 @@ fn digitalocean_doks_deploy_a_working_environment_with_sticky_session() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_for_delete = EnvironmentAction::Environment(environment_for_delete.clone());
- match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
// checking cookie is properly set on the app
assert!(routers_sessions_are_sticky(environment.routers.clone()));
- match environment_for_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_for_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_for_delete.delete_environment(Kind::Do, &context_for_delete, &env_action_for_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
diff --git a/tests/digitalocean/do_utility_kubernetes_doks_test_cluster.rs b/tests/digitalocean/do_utility_kubernetes_doks_test_cluster.rs
index 0ca93350..948f8859 100644
--- a/tests/digitalocean/do_utility_kubernetes_doks_test_cluster.rs
+++ b/tests/digitalocean/do_utility_kubernetes_doks_test_cluster.rs
@@ -66,11 +66,8 @@ fn create_digitalocean_kubernetes_doks_test_cluster() {
if let Err(err) = tx.create_kubernetes(&kubernetes) {
panic!("{:?}", err)
}
- let _ = match tx.commit() {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = tx.commit();
+ assert!(matches!(ret, TransactionResult::Ok));
test_name.to_string()
});
@@ -132,11 +129,8 @@ fn destroy_digitalocean_kubernetes_doks_test_cluster() {
if let Err(err) = tx.delete_kubernetes(&kubernetes) {
panic!("{:?}", err)
}
- match tx.commit() {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = tx.commit();
+ assert!(matches!(ret, TransactionResult::Ok));
test_name.to_string()
});
diff --git a/tests/scaleway/scw_databases.rs b/tests/scaleway/scw_databases.rs
index baa46b4d..f5bad195 100644
--- a/tests/scaleway/scw_databases.rs
+++ b/tests/scaleway/scw_databases.rs
@@ -69,17 +69,12 @@ fn deploy_an_environment_with_3_databases_and_3_apps() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
- match environment_delete.delete_environment(Kind::Scw, &context_for_deletion, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_delete.delete_environment(Kind::Scw, &context_for_deletion, &env_action_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
// delete images created during test from registries
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
@@ -133,17 +128,11 @@ fn deploy_an_environment_with_db_and_pause_it() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
- match environment.pause_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.pause_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
// Check that we have actually 0 pods running for this db
let app_name = format!("postgresql{}-0", environment.databases[0].name);
@@ -157,16 +146,9 @@ fn deploy_an_environment_with_db_and_pause_it() {
assert_eq!(ret.is_ok(), true);
assert_eq!(ret.unwrap().items.is_empty(), true);
- match environment_delete.delete_environment(
- Kind::Scw,
- &context_for_deletion,
- &env_action_delete,
- logger.clone(),
- ) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_delete.delete_environment(Kind::Scw, &context_for_deletion, &env_action_delete, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
// delete images created during test from registries
if let Err(e) = clean_environments(&context, vec![environment], secrets.clone(), SCW_TEST_ZONE) {
@@ -229,18 +211,12 @@ fn postgresql_deploy_a_working_development_environment_with_all_options() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_for_deletion = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
- match environment_delete.delete_environment(Kind::Scw, &context_for_deletion, &env_action_for_deletion, logger)
- {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_delete.delete_environment(Kind::Scw, &context_for_deletion, &env_action_for_deletion, logger);
+ assert!(matches!(result, TransactionResult::Ok));
// delete images created during test from registries
if let Err(e) = clean_environments(
@@ -371,21 +347,17 @@ fn postgresql_deploy_a_working_environment_and_redeploy() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
- match environment_to_redeploy.deploy_environment(
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
+
+ let result = environment_to_redeploy.deploy_environment(
Kind::Scw,
&context_for_redeploy,
&env_action_redeploy,
logger.clone(),
- ) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ );
+ assert!(matches!(result, TransactionResult::Ok));
+
// TO CHECK: DATABASE SHOULDN'T BE RESTARTED AFTER A REDEPLOY
let database_name = format!("postgresql-{}-0", &environment_check.databases[0].name);
match is_pod_restarted_env(
@@ -399,11 +371,11 @@ fn postgresql_deploy_a_working_environment_and_redeploy() {
(false, _) => assert!(false),
}
- match environment_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ let result = environment_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_delete, logger);
+ assert!(matches!(
+ result,
+ TransactionResult::Ok | TransactionResult::UnrecoverableError(_, _)
+ ));
// delete images created during test from registries
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
diff --git a/tests/scaleway/scw_environment.rs b/tests/scaleway/scw_environment.rs
index 41063c19..c6186216 100644
--- a/tests/scaleway/scw_environment.rs
+++ b/tests/scaleway/scw_environment.rs
@@ -64,18 +64,12 @@ fn scaleway_kapsule_deploy_a_working_environment_with_no_router() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_for_delete = EnvironmentAction::Environment(environment_for_delete.clone());
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
- match environment_for_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_for_delete, logger)
- {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_for_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_for_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
@@ -135,7 +129,8 @@ fn test_build_cache() {
PullResult::None => assert!(true),
};
- let build_result = local_docker.build(app.to_build(), false).unwrap();
+ let cancel_task = || false;
+ let build_result = local_docker.build(app.to_build(), false, &cancel_task).unwrap();
let _ = match scr.push(&build_result.build.image, false) {
Ok(_) => assert!(true),
@@ -218,18 +213,15 @@ fn scaleway_kapsule_deploy_a_not_working_environment_with_no_router() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_for_delete = EnvironmentAction::Environment(environment_for_delete.clone());
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::UnrecoverableError(_, _)));
- match environment_for_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_for_delete, logger)
- {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ let result =
+ environment_for_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_for_delete, logger);
+ assert!(matches!(
+ result,
+ TransactionResult::Ok | TransactionResult::UnrecoverableError(_, _)
+ ));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
@@ -277,11 +269,8 @@ fn scaleway_kapsule_deploy_a_working_environment_and_pause() {
let env_action = EnvironmentAction::Environment(environment.clone());
let selector = format!("appId={}", environment.applications[0].id);
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
let ret = get_pods(
context.clone(),
@@ -293,11 +282,8 @@ fn scaleway_kapsule_deploy_a_working_environment_and_pause() {
assert_eq!(ret.is_ok(), true);
assert_eq!(ret.unwrap().items.is_empty(), false);
- match environment.pause_environment(Kind::Scw, &context_for_delete, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.pause_environment(Kind::Scw, &context_for_delete, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
// Check that we have actually 0 pods running for this app
let ret = get_pods(
@@ -312,11 +298,8 @@ fn scaleway_kapsule_deploy_a_working_environment_and_pause() {
// Check we can resume the env
let ctx_resume = context.clone_not_same_execution_id();
- match environment.deploy_environment(Kind::Scw, &ctx_resume, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &ctx_resume, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
let ret = get_pods(
context.clone(),
@@ -329,11 +312,8 @@ fn scaleway_kapsule_deploy_a_working_environment_and_pause() {
assert_eq!(ret.unwrap().items.is_empty(), false);
// Cleanup
- match environment.delete_environment(Kind::Scw, &context_for_delete, &env_action, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.delete_environment(Kind::Scw, &context_for_delete, &env_action, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
@@ -403,18 +383,12 @@ fn scaleway_kapsule_build_with_buildpacks_and_deploy_a_working_environment() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_for_delete = EnvironmentAction::Environment(environment_for_delete.clone());
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
- match environment_for_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_for_delete, logger)
- {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_for_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_for_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
@@ -465,17 +439,12 @@ fn scaleway_kapsule_deploy_a_working_environment_with_domain() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_for_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
- match environment_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_for_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_for_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
@@ -544,11 +513,8 @@ fn scaleway_kapsule_deploy_a_working_environment_with_storage() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
match get_pvc(context.clone(), Kind::Scw, environment.clone(), secrets.clone()) {
Ok(pvc) => assert_eq!(
@@ -558,11 +524,9 @@ fn scaleway_kapsule_deploy_a_working_environment_with_storage() {
Err(_) => assert!(false),
};
- match environment_delete.delete_environment(Kind::Scw, &context_for_deletion, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_delete.delete_environment(Kind::Scw, &context_for_deletion, &env_action_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
@@ -609,11 +573,8 @@ fn deploy_a_working_environment_and_pause_it() {
let ea = EnvironmentAction::Environment(environment.clone());
let selector = format!("appId={}", environment.applications[0].id);
- match environment.deploy_environment(Kind::Scw, &context, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &ea, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
let ret = get_pods(
context.clone(),
@@ -625,11 +586,8 @@ fn deploy_a_working_environment_and_pause_it() {
assert_eq!(ret.is_ok(), true);
assert_eq!(ret.unwrap().items.is_empty(), false);
- match environment.pause_environment(Kind::Scw, &context_for_delete, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.pause_environment(Kind::Scw, &context_for_delete, &ea, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
// Check that we have actually 0 pods running for this app
let ret = get_pods(
@@ -644,11 +602,8 @@ fn deploy_a_working_environment_and_pause_it() {
// Check we can resume the env
let ctx_resume = context.clone_not_same_execution_id();
- match environment.deploy_environment(Kind::Scw, &ctx_resume, &ea, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &ctx_resume, &ea, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
let ret = get_pods(
context.clone(),
@@ -661,11 +616,8 @@ fn deploy_a_working_environment_and_pause_it() {
assert_eq!(ret.unwrap().items.is_empty(), false);
// Cleanup
- match environment.delete_environment(Kind::Scw, &context_for_delete, &ea, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.delete_environment(Kind::Scw, &context_for_delete, &ea, logger);
+ assert!(matches!(result, TransactionResult::Ok));
return test_name.to_string();
})
}
@@ -735,11 +687,8 @@ fn scaleway_kapsule_redeploy_same_app() {
let env_action_redeploy = EnvironmentAction::Environment(environment_redeploy.clone());
let env_action_delete = EnvironmentAction::Environment(environment_delete.clone());
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
match get_pvc(context.clone(), Kind::Scw, environment.clone(), secrets.clone()) {
Ok(pvc) => assert_eq!(
@@ -758,11 +707,9 @@ fn scaleway_kapsule_redeploy_same_app() {
secrets.clone(),
);
- match environment_redeploy.deploy_environment(Kind::Scw, &context_bis, &env_action_redeploy, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_redeploy.deploy_environment(Kind::Scw, &context_bis, &env_action_redeploy, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
let (_, number2) = is_pod_restarted_env(
context.clone(),
@@ -775,11 +722,9 @@ fn scaleway_kapsule_redeploy_same_app() {
// nothing changed in the app, so, it shouldn't be restarted
assert!(number.eq(&number2));
- match environment_delete.delete_environment(Kind::Scw, &context_for_deletion, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_delete.delete_environment(Kind::Scw, &context_for_deletion, &env_action_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
@@ -848,26 +793,20 @@ fn scaleway_kapsule_deploy_a_not_working_environment_and_then_working_environmen
let env_action_not_working = EnvironmentAction::Environment(environment_for_not_working.clone());
let env_action_delete = EnvironmentAction::Environment(environment_for_delete.clone());
- match environment_for_not_working.deploy_environment(
+ let result = environment_for_not_working.deploy_environment(
Kind::Scw,
&context_for_not_working,
&env_action_not_working,
logger.clone(),
- ) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
- match environment_for_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ );
+ assert!(matches!(result, TransactionResult::UnrecoverableError(_, _)));
+
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
+
+ let result =
+ environment_for_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
@@ -945,48 +884,39 @@ fn scaleway_kapsule_deploy_ok_fail_fail_ok_environment() {
let env_action_delete = EnvironmentAction::Environment(delete_env.clone());
// OK
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
// FAIL and rollback
- match not_working_env_1.deploy_environment(
+ let result = not_working_env_1.deploy_environment(
Kind::Scw,
&context_for_not_working_1,
&env_action_not_working_1,
logger.clone(),
- ) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(true),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ );
+ assert!(matches!(
+ result,
+ TransactionResult::Rollback(_) | TransactionResult::UnrecoverableError(_, _)
+ ));
// FAIL and Rollback again
- match not_working_env_2.deploy_environment(
+ let result = not_working_env_2.deploy_environment(
Kind::Scw,
&context_for_not_working_2,
&env_action_not_working_2,
logger.clone(),
- ) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(true),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ );
+ assert!(matches!(
+ result,
+ TransactionResult::Rollback(_) | TransactionResult::UnrecoverableError(_, _)
+ ));
// Should be working
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
- match delete_env.delete_environment(Kind::Scw, &context_for_delete, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = delete_env.delete_environment(Kind::Scw, &context_for_delete, &env_action_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
@@ -1038,17 +968,11 @@ fn scaleway_kapsule_deploy_a_non_working_environment_with_no_failover() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_delete = EnvironmentAction::Environment(delete_env.clone());
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::UnrecoverableError(_, _)));
- match delete_env.delete_environment(Kind::Scw, &context_for_delete, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = delete_env.delete_environment(Kind::Scw, &context_for_delete, &env_action_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
@@ -1058,144 +982,6 @@ fn scaleway_kapsule_deploy_a_non_working_environment_with_no_failover() {
})
}
-#[cfg(feature = "test-scw-self-hosted")]
-#[named]
-#[test]
-fn scaleway_kapsule_deploy_a_non_working_environment_with_a_working_failover() {
- let test_name = function_name!();
- engine_run_test(|| {
- init();
-
- let span = span!(Level::INFO, "test", name = test_name,);
- let _enter = span.enter();
-
- let logger = logger();
-
- // context for non working environment
-
- let secrets = FuncTestsSecrets::new();
- let context = context(
- secrets
- .SCALEWAY_TEST_ORGANIZATION_ID
- .as_ref()
- .expect("SCALEWAY_TEST_ORGANIZATION_ID")
- .as_str(),
- secrets
- .SCALEWAY_TEST_CLUSTER_ID
- .as_ref()
- .expect("SCALEWAY_TEST_CLUSTER_ID")
- .as_str(),
- );
- let test_domain = secrets
- .DEFAULT_TEST_DOMAIN
- .as_ref()
- .expect("DEFAULT_TEST_DOMAIN is not set in secrets");
-
- let environment = test_utilities::common::non_working_environment(&context, test_domain.as_str());
- let failover_environment = test_utilities::common::working_minimal_environment(&context, test_domain.as_str());
-
- // context for deletion
- let context_deletion = context.clone_not_same_execution_id();
- let mut delete_env =
- test_utilities::common::working_minimal_environment(&context_deletion, test_domain.as_str());
- delete_env.action = Action::Delete;
-
- let env_action_delete = EnvironmentAction::Environment(delete_env.clone());
- let env_action = EnvironmentAction::EnvironmentWithFailover(environment.clone(), failover_environment.clone());
-
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
-
- match delete_env.delete_environment(Kind::Scw, &context_deletion, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
-
- if let Err(e) = clean_environments(
- &context,
- vec![environment.clone(), failover_environment.clone()],
- secrets.clone(),
- SCW_TEST_ZONE,
- ) {
- warn!("cannot clean environments, error: {:?}", e);
- }
-
- test_name.to_string()
- })
-}
-
-#[cfg(feature = "test-scw-self-hosted")]
-#[named]
-#[test]
-fn scaleway_kapsule_deploy_a_non_working_environment_with_a_non_working_failover() {
- let test_name = function_name!();
- engine_run_test(|| {
- init();
-
- let span = span!(Level::INFO, "test", name = test_name,);
- let _enter = span.enter();
-
- let logger = logger();
-
- let secrets = FuncTestsSecrets::new();
- let context = context(
- secrets
- .SCALEWAY_TEST_ORGANIZATION_ID
- .as_ref()
- .expect("SCALEWAY_TEST_ORGANIZATION_ID")
- .as_str(),
- secrets
- .SCALEWAY_TEST_CLUSTER_ID
- .as_ref()
- .expect("SCALEWAY_TEST_CLUSTER_ID")
- .as_str(),
- );
- let test_domain = secrets
- .DEFAULT_TEST_DOMAIN
- .as_ref()
- .expect("DEFAULT_TEST_DOMAIN is not set in secrets");
-
- let environment = test_utilities::common::non_working_environment(&context, test_domain.as_str());
- let failover_environment = test_utilities::common::non_working_environment(&context, test_domain.as_str());
-
- let context_for_deletion = context.clone_not_same_execution_id();
- let mut delete_env =
- test_utilities::common::non_working_environment(&context_for_deletion, test_domain.as_str());
- delete_env.action = Action::Delete;
-
- // environment action initialize
- let env_action_delete = EnvironmentAction::Environment(delete_env.clone());
- let env_action = EnvironmentAction::EnvironmentWithFailover(environment.clone(), failover_environment.clone());
-
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(false),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
-
- match delete_env.delete_environment(Kind::Scw, &context_for_deletion, &env_action_delete, logger) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(true),
- };
-
- if let Err(e) = clean_environments(
- &context,
- vec![environment.clone(), failover_environment.clone()],
- secrets.clone(),
- SCW_TEST_ZONE,
- ) {
- warn!("cannot clean environments, error: {:?}", e);
- }
-
- test_name.to_string()
- })
-}
-
#[cfg(feature = "test-scw-self-hosted")]
#[named]
#[test]
@@ -1237,21 +1023,15 @@ fn scaleway_kapsule_deploy_a_working_environment_with_sticky_session() {
let env_action = EnvironmentAction::Environment(environment.clone());
let env_action_for_delete = EnvironmentAction::Environment(environment_for_delete.clone());
- match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result = environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone());
+ assert!(matches!(result, TransactionResult::Ok));
// checking cookie is properly set on the app
assert!(routers_sessions_are_sticky(environment.routers.clone()));
- match environment_for_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_for_delete, logger)
- {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let result =
+ environment_for_delete.delete_environment(Kind::Scw, &context_for_delete, &env_action_for_delete, logger);
+ assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
diff --git a/tests/scaleway/scw_utility_kubernetes_kapsule_test_cluster.rs b/tests/scaleway/scw_utility_kubernetes_kapsule_test_cluster.rs
index 0350a6ab..e68781fa 100644
--- a/tests/scaleway/scw_utility_kubernetes_kapsule_test_cluster.rs
+++ b/tests/scaleway/scw_utility_kubernetes_kapsule_test_cluster.rs
@@ -65,11 +65,8 @@ fn create_scaleway_kubernetes_kapsule_test_cluster() {
if let Err(err) = tx.create_kubernetes(&kubernetes) {
panic!("{:?}", err)
}
- let _ = match tx.commit() {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+
+ assert!(matches!(tx.commit(), TransactionResult::Ok));
test_name.to_string()
});
@@ -130,11 +127,8 @@ fn destroy_scaleway_kubernetes_kapsule_test_cluster() {
if let Err(err) = tx.delete_kubernetes(&kubernetes) {
panic!("{:?}", err)
}
- match tx.commit() {
- TransactionResult::Ok => assert!(true),
- TransactionResult::Rollback(_) => assert!(false),
- TransactionResult::UnrecoverableError(_, _) => assert!(false),
- };
+ let ret = tx.commit();
+ assert!(matches!(ret, TransactionResult::Ok));
test_name.to_string()
});