private ErrorTypeRepository mockErrorModel() { final ErrorType parentErrorType = mock(ErrorType.class); ErrorTypeRepository errorTypeRepository = mock(ErrorTypeRepository.class); when(errorTypeRepository.lookupErrorType(any())).thenReturn(Optional.of(ErrorTypeBuilder.builder() .namespace("testNs") .identifier("test") .parentErrorType(parentErrorType) .build())); when(operationModel.getErrorModels()).thenReturn(singleton(new ImmutableErrorModel("test", "testNs", true, null))); return errorTypeRepository; }
@Test public void identifierMustBeSet() { expectException("string representation cannot be null"); errorTypeBuilder.namespace(NAMESPACE).parentErrorType(mockErrorType).build(); }
@Test public void parentMustBeSet() { expectException("parent error type cannot be null"); errorTypeBuilder.namespace(NAMESPACE).identifier(IDENTIFIER).build(); }
@Test public void namespaceMustBeSet() { expectException("namespace representation cannot be null"); errorTypeBuilder.identifier(IDENTIFIER).parentErrorType(mockErrorType).build(); }
public static ErrorTypeBuilder builder() { return new ErrorTypeBuilder(); }
/** * Creates a new instance of the configured error type. * * @return the error type with the provided configuration. */ public ErrorType build() { checkState(identifier != null, "string representation cannot be null"); checkState(namespace != null, "namespace representation cannot be null"); if (!isOrphan()) { checkState(parentErrorType != null, "parent error type cannot be null"); } return new ErrorTypeImplementation(identifier, namespace, parentErrorType); }
@Test public void identifierMustBeSet() { expectException("string representation cannot be null"); errorTypeBuilder.namespace(NAMESPACE).parentErrorType(mockErrorType).build(); }
@Test public void parentMustBeSet() { expectException("parent error type cannot be null"); errorTypeBuilder.namespace(NAMESPACE).identifier(IDENTIFIER).build(); }
@Test public void namespaceMustBeSet() { expectException("namespace representation cannot be null"); errorTypeBuilder.identifier(IDENTIFIER).parentErrorType(mockErrorType).build(); }
@Test public void resolveWithParentInChain() { ErrorType withParent = ErrorTypeBuilder.builder().parentErrorType(CONNECTION).identifier("CONNECT").namespace("TEST").build(); Optional<Error> surfaceError = mockError(withParent, new Exception()); when(event.getError()).thenReturn(surfaceError); Exception cause = new ConnectionException("Some Connection Error", new Exception()); MessagingException me = newMessagingException(cause, event, processor); MessagingException resolved = resolver.resolve(me, context); assertExceptionErrorType(resolved, withParent); assertExceptionMessage(resolved.getMessage(), ERROR_MESSAGE); }
@Test public void createsExpectedTypeAndRepresentation() { ErrorType errorType = errorTypeBuilder.namespace(NAMESPACE).identifier(IDENTIFIER).parentErrorType(mockErrorType).build(); assertThat(errorType.getParentErrorType(), is(mockErrorType)); assertThat(errorType.getNamespace(), is(NAMESPACE)); assertThat(errorType.getIdentifier(), is(IDENTIFIER)); assertThat(errorType.toString(), is(REPRESENTATION)); }
@Test public void givesStringRepresentation() { ErrorType anyError = ErrorTypeBuilder.builder().namespace("MULE").identifier("ANY").build(); ErrorType testError = ErrorTypeBuilder.builder().namespace("MULE").identifier("TEST").parentErrorType(anyError).build(); Error error = builder(new ComposedErrorMessageAwareException(createStaticMessage(EXCEPTION_MESSAGE), testError)) .errorType(testError)
ErrorTypeLocator errorTypeLocator = mock(ErrorTypeLocator.class); when(errorTypeLocator.lookupErrorType(any(Throwable.class))) .thenReturn(ErrorTypeBuilder.builder().namespace(CORE_NAMESPACE_NAME).identifier(ANY_IDENTIFIER).build()); when(muleContext.getErrorTypeLocator()).thenReturn(errorTypeLocator);
@Test public void resolveCorrectConnectionException() { ErrorType expected = ErrorTypeBuilder.builder().namespace("NS").identifier("CONNECTION").parentErrorType(CONNECTION).build(); ErrorTypeLocator locator = ErrorTypeLocator.builder(repository) .addComponentExceptionMapper(ci, ExceptionMapper.builder() .addExceptionMapping(ConnectionException.class, expected) .build()) .defaultExceptionMapper(ExceptionMapper.builder().build()) .defaultError(UNKNOWN) .build(); when(((PrivilegedMuleContext) context).getErrorTypeLocator()).thenReturn(locator); MessagingException me = newMessagingException(CONNECTION_EXCEPTION, event, processor); MessagingExceptionResolver anotherResolver = new MessagingExceptionResolver(new TestProcessor()); MessagingException resolved = anotherResolver.resolve(me, context); assertExceptionErrorType(resolved, expected); assertExceptionMessage(resolved.getMessage(), "CONNECTION PROBLEM"); }
private ErrorType buildErrorType(ComponentIdentifier identifier, ErrorType parent) { if (errorTypes.containsKey(identifier) || internalErrorTypes.containsKey(identifier)) { throw new IllegalStateException(format("An error type with identifier '%s' already exists", identifier)); } return ErrorTypeBuilder.builder() .namespace(identifier.getNamespace()) .identifier(identifier.getName()) .parentErrorType(parent) .build(); }
@Test public void createsExpectedTypeAndRepresentation() { ErrorType errorType = errorTypeBuilder.namespace(NAMESPACE).identifier(IDENTIFIER).parentErrorType(mockErrorType).build(); assertThat(errorType.getParentErrorType(), is(mockErrorType)); assertThat(errorType.getNamespace(), is(NAMESPACE)); assertThat(errorType.getIdentifier(), is(IDENTIFIER)); assertThat(errorType.toString(), is(REPRESENTATION)); }
@Test public void resolveWithParentInChain() { ErrorType withParent = ErrorTypeBuilder.builder().parentErrorType(CONNECTION).identifier("CONNECT").namespace("TEST").build(); Optional<Error> surfaceError = mockError(withParent, new Exception()); when(event.getError()).thenReturn(surfaceError); Exception cause = new ConnectionException("Some Connection Error", new Exception()); MessagingException me = newMessagingException(cause, event, processor); MessagingException resolved = resolver.resolve(me, context); assertExceptionErrorType(resolved, withParent); assertExceptionMessage(resolved.getMessage(), ERROR_MESSAGE); }
@Test public void givesStringRepresentation() { ErrorType anyError = ErrorTypeBuilder.builder().namespace("MULE").identifier("ANY").build(); ErrorType testError = ErrorTypeBuilder.builder().namespace("MULE").identifier("TEST").parentErrorType(anyError).build(); Error error = builder(new ComposedErrorMessageAwareException(createStaticMessage(EXCEPTION_MESSAGE), testError)) .errorType(testError)
ErrorTypeLocator errorTypeLocator = mock(ErrorTypeLocator.class); when(errorTypeLocator.lookupErrorType(any(Throwable.class))) .thenReturn(ErrorTypeBuilder.builder().namespace(CORE_NAMESPACE_NAME).identifier(ANY_IDENTIFIER).build()); when(muleContext.getErrorTypeLocator()).thenReturn(errorTypeLocator);
@Test public void resolveCorrectConnectionException() { ErrorType expected = ErrorTypeBuilder.builder().namespace("NS").identifier("CONNECTION").parentErrorType(CONNECTION).build(); ErrorTypeLocator locator = ErrorTypeLocator.builder(repository) .addComponentExceptionMapper(ci, ExceptionMapper.builder() .addExceptionMapping(ConnectionException.class, expected) .build()) .defaultExceptionMapper(ExceptionMapper.builder().build()) .defaultError(UNKNOWN) .build(); when(((PrivilegedMuleContext) context).getErrorTypeLocator()).thenReturn(locator); MessagingException me = newMessagingException(CONNECTION_EXCEPTION, event, processor); MessagingExceptionResolver anotherResolver = new MessagingExceptionResolver(new TestProcessor()); MessagingException resolved = anotherResolver.resolve(me, context); assertExceptionErrorType(resolved, expected); assertExceptionMessage(resolved.getMessage(), "CONNECTION PROBLEM"); }