summaryrefslogtreecommitdiffstats
path: root/tenant-cd-api
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-08-09 15:49:29 +0200
committerjonmv <venstad@gmail.com>2022-08-09 15:49:29 +0200
commitddbba7d6564804f3ca33099cb2e638832699f4e6 (patch)
treec6b27af0b41c9fb1f65753971d0323414d3ad7df /tenant-cd-api
parent9d1b7d6dfd69c6c15786d7b24a1a8136be7d0484 (diff)
Add conditions for enabling/disabling tests based on region/instance
Diffstat (limited to 'tenant-cd-api')
-rw-r--r--tenant-cd-api/src/main/java/ai/vespa/hosted/cd/DisabledInInstances.java43
-rw-r--r--tenant-cd-api/src/main/java/ai/vespa/hosted/cd/DisabledInRegions.java44
-rw-r--r--tenant-cd-api/src/main/java/ai/vespa/hosted/cd/EnabledInInstances.java43
-rw-r--r--tenant-cd-api/src/main/java/ai/vespa/hosted/cd/EnabledInRegions.java43
4 files changed, 173 insertions, 0 deletions
diff --git a/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/DisabledInInstances.java b/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/DisabledInInstances.java
new file mode 100644
index 00000000000..1d2a3aea6db
--- /dev/null
+++ b/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/DisabledInInstances.java
@@ -0,0 +1,43 @@
+package ai.vespa.hosted.cd;
+
+import org.junit.jupiter.api.extension.ConditionEvaluationResult;
+import org.junit.jupiter.api.extension.ExecutionCondition;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.platform.commons.util.AnnotationUtils;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @author jonmv
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
+@ExtendWith(DisabledInInstancesCondition.class)
+public @interface DisabledInInstances {
+
+ /** One or more instances that this should be enabled in. */
+ String[] value();
+
+}
+
+class DisabledInInstancesCondition implements ExecutionCondition {
+
+ @Override
+ public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
+ Optional<DisabledInInstances> annotation = AnnotationUtils.findAnnotation(context.getElement(), DisabledInInstances.class);
+ if (annotation.isEmpty())
+ return ConditionEvaluationResult.enabled(DisabledInInstances.class.getSimpleName() + " is not present");
+
+ List<String> disablingInstances = List.of(annotation.get().value());
+ String thisInstance = TestRuntime.get().application().instance();
+ String reason = "Disabled in: %s. Current instance: %s.".formatted(disablingInstances.isEmpty() ? "no instances" : " instances " + String.join(", ", disablingInstances), thisInstance);
+ return disablingInstances.contains(thisInstance) ? ConditionEvaluationResult.disabled(reason) : ConditionEvaluationResult.enabled(reason);
+ }
+
+} \ No newline at end of file
diff --git a/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/DisabledInRegions.java b/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/DisabledInRegions.java
new file mode 100644
index 00000000000..c8d890debd8
--- /dev/null
+++ b/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/DisabledInRegions.java
@@ -0,0 +1,44 @@
+package ai.vespa.hosted.cd;
+
+import org.junit.jupiter.api.extension.ConditionEvaluationResult;
+import org.junit.jupiter.api.extension.ExecutionCondition;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.platform.commons.util.AnnotationUtils;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
+
+/**
+ * @author jonmv
+ */
+@Target({ElementType.METHOD, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@ExtendWith(DisabledInRegionsCondition.class)
+public @interface DisabledInRegions {
+
+ /** One or more regions that this should be enabled in. */
+ String[] value();
+
+}
+
+class DisabledInRegionsCondition implements ExecutionCondition {
+
+ @Override
+ public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
+ Optional<DisabledInRegions> annotation = AnnotationUtils.findAnnotation(context.getElement(), DisabledInRegions.class);
+ if (annotation.isEmpty())
+ return ConditionEvaluationResult.enabled(DisabledInRegions.class.getSimpleName() + " is not present");
+
+ List<String> disablingRegions = List.of(annotation.get().value());
+ String thisRegion = TestRuntime.get().application().instance();
+ String reason = "Disabled in: %s. Current region: %s.".formatted(disablingRegions.isEmpty() ? "no instances" : " instances " + String.join(", ", disablingRegions), thisRegion);
+ return disablingRegions.contains(thisRegion) ? ConditionEvaluationResult.disabled(reason) : ConditionEvaluationResult.enabled(reason);
+ }
+
+} \ No newline at end of file
diff --git a/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/EnabledInInstances.java b/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/EnabledInInstances.java
new file mode 100644
index 00000000000..a7c08dfeb18
--- /dev/null
+++ b/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/EnabledInInstances.java
@@ -0,0 +1,43 @@
+package ai.vespa.hosted.cd;
+
+import org.junit.jupiter.api.extension.ConditionEvaluationResult;
+import org.junit.jupiter.api.extension.ExecutionCondition;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.platform.commons.util.AnnotationUtils;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @author jonmv
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
+@ExtendWith(EnabledInInstancesCondition.class)
+public @interface EnabledInInstances {
+
+ /** One or more instances that this should be enabled in. */
+ String[] value();
+
+}
+
+class EnabledInInstancesCondition implements ExecutionCondition {
+
+ @Override
+ public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
+ Optional<EnabledInInstances> annotation = AnnotationUtils.findAnnotation(context.getElement(), EnabledInInstances.class);
+ if (annotation.isEmpty())
+ return ConditionEvaluationResult.enabled(EnabledInInstances.class.getSimpleName() + " is not present");
+
+ List<String> enablingInstances = List.of(annotation.get().value());
+ String thisInstance = TestRuntime.get().application().instance();
+ String reason = "Enabled in: %s. Current instance: %s.".formatted(enablingInstances.isEmpty() ? "no instances" : " instances " + String.join(", ", enablingInstances), thisInstance);
+ return enablingInstances.contains(thisInstance) ? ConditionEvaluationResult.enabled(reason) : ConditionEvaluationResult.disabled(reason);
+ }
+
+} \ No newline at end of file
diff --git a/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/EnabledInRegions.java b/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/EnabledInRegions.java
new file mode 100644
index 00000000000..da1b1c0b0bb
--- /dev/null
+++ b/tenant-cd-api/src/main/java/ai/vespa/hosted/cd/EnabledInRegions.java
@@ -0,0 +1,43 @@
+package ai.vespa.hosted.cd;
+
+import org.junit.jupiter.api.extension.ConditionEvaluationResult;
+import org.junit.jupiter.api.extension.ExecutionCondition;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.platform.commons.util.AnnotationUtils;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * @author jonmv
+ */
+@Target({ElementType.METHOD, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@ExtendWith(EnabledInRegionsCondition.class)
+public @interface EnabledInRegions {
+
+ /** One or more regions that this should be enabled in. */
+ String[] value();
+
+}
+
+class EnabledInRegionsCondition implements ExecutionCondition {
+
+ @Override
+ public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
+ Optional<EnabledInRegions> annotation = AnnotationUtils.findAnnotation(context.getElement(), EnabledInRegions.class);
+ if (annotation.isEmpty())
+ return ConditionEvaluationResult.enabled(EnabledInRegions.class.getSimpleName() + " is not present");
+
+ List<String> enablingRegions = List.of(annotation.get().value());
+ String thisRegion = TestRuntime.get().application().instance();
+ String reason = "Enabled in: %s. Current region: %s.".formatted(enablingRegions.isEmpty() ? "no instances" : " instances " + String.join(", ", enablingRegions), thisRegion);
+ return enablingRegions.contains(thisRegion) ? ConditionEvaluationResult.enabled(reason) : ConditionEvaluationResult.disabled(reason);
+ }
+
+} \ No newline at end of file