diff options
Diffstat (limited to 'tenant-cd-api/src/main/java/ai/vespa/hosted/cd/DisabledInRegions.java')
-rw-r--r-- | tenant-cd-api/src/main/java/ai/vespa/hosted/cd/DisabledInRegions.java | 44 |
1 files changed, 44 insertions, 0 deletions
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 |