Skip to content

Commit

Permalink
fix(server): Ignore predefined errors when validating specific failures
Browse files Browse the repository at this point in the history
  • Loading branch information
eduwercamacaro authored Aug 28, 2024
1 parent 94b076c commit e181936
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,14 @@
import io.littlehorse.common.util.LHUtil;
import io.littlehorse.sdk.common.proto.Edge;
import io.littlehorse.sdk.common.proto.FailureHandlerDef;
import io.littlehorse.sdk.common.proto.LHErrorType;
import io.littlehorse.sdk.common.proto.Node;
import io.littlehorse.sdk.common.proto.Node.NodeCase;
import io.littlehorse.sdk.common.proto.NopNode;
import io.littlehorse.server.streams.topology.core.ExecutionContext;
import io.littlehorse.server.streams.topology.core.MetadataCommandExecution;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
Expand Down Expand Up @@ -223,9 +225,12 @@ public void validate(MetadataCommandExecution ctx) throws LHApiException {
}

private void validateFailureHandlers() {
List<String> predefinedErrors =
Arrays.stream(LHErrorType.values()).map(LHErrorType::toString).toList();
String invalidNames = failureHandlers.stream()
.map(FailureHandlerDefModel::getSpecificFailure)
.filter(Objects::nonNull)
.filter(failureName -> !predefinedErrors.contains(failureName))
.filter(Predicate.not(LHUtil::isValidLHName))
.collect(Collectors.joining(", "));
if (!invalidNames.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import io.littlehorse.common.exceptions.LHApiException;
import io.littlehorse.common.model.metadatacommand.MetadataCommandModel;
import io.littlehorse.common.model.metadatacommand.subcommand.PutTenantRequestModel;
import io.littlehorse.sdk.common.proto.LHErrorType;
import io.littlehorse.server.TestCommandExecutionContext;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
Expand All @@ -17,6 +18,8 @@ public class NodeModelTest {
private final SubNode mockSubnode = mock();
private final FailureHandlerDefModel exceptionHandlerDef = TestUtil.exceptionHandler("my-handler");
private final FailureHandlerDefModel invalidExceptionHandlerDef = TestUtil.exceptionHandler("my.handler");
private final FailureHandlerDefModel technicalErrorHandlerDef =
TestUtil.exceptionHandler(LHErrorType.TIMEOUT.name());
private final PutTenantRequestModel dummySubcommand = new PutTenantRequestModel("my-tenant");
private final MetadataCommandModel dummyCommand = new MetadataCommandModel(dummySubcommand);
private TestCommandExecutionContext commandContext =
Expand All @@ -34,4 +37,12 @@ public void shouldValidateFailureName() {
.hasMessage("INVALID_ARGUMENT: Invalid names for exception handlers: my.handler");
verify(mockSubnode, never()).validate(Mockito.any());
}

@Test
public void shouldNotValidatePredefinedTechnicalErrors() {
doReturn(mockSubnode).when(node).getSubNode();
node.getFailureHandlers().add(technicalErrorHandlerDef);
node.validate(commandContext);
verify(mockSubnode, times(1)).validate(Mockito.any());
}
}

0 comments on commit e181936

Please sign in to comment.