Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
stop ConnectionActor on validation error + added test, register Conne…
…ctionConfigurationInvalidException in error registry

Signed-off-by: Dominik Guggemos <dominik.guggemos@bosch-si.com>
  • Loading branch information
dguggemos committed Apr 10, 2018
1 parent 0c96116 commit 455a86f
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 3 deletions.
Expand Up @@ -357,6 +357,8 @@ private void createConnection(final CreateConnection command) {
propsFactory.getActorPropsForType(command.getConnection(), connectionStatus);
} catch (final Exception e) {
handleException("connect", origin, e);
stopSelf();
return;
}

final ConnectionCreated connectionCreated =
Expand Down
Expand Up @@ -15,9 +15,12 @@
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.assertj.core.api.Assertions;
import org.eclipse.ditto.model.base.exceptions.DittoRuntimeException;
import org.eclipse.ditto.model.base.headers.DittoHeaders;
import org.eclipse.ditto.model.connectivity.Connection;
import org.eclipse.ditto.model.connectivity.ConnectionConfigurationInvalidException;
import org.eclipse.ditto.model.connectivity.ConnectionStatus;
import org.eclipse.ditto.model.base.headers.DittoHeaders;
import org.eclipse.ditto.signals.commands.connectivity.exceptions.ConnectionNotAccessibleException;
import org.eclipse.ditto.signals.commands.connectivity.modify.CloseConnection;
import org.eclipse.ditto.signals.commands.connectivity.modify.CloseConnectionResponse;
Expand Down Expand Up @@ -205,6 +208,27 @@ public void recoverDeletedConnection() {
}};
}

@Test
public void exceptionDuringClientActorPropsCreation() {
new TestKit(actorSystem) {{

final Props connectionActorProps =
ConnectionActor.props(TestConstants.createRandomConnectionId(), pubSubMediator,
(connection, connectionStatus) -> {
throw ConnectionConfigurationInvalidException.newBuilder("validation failed...")
.build();
});
final ActorRef connectionActorRef = watch(actorSystem.actorOf(connectionActorProps, connectionId));

// create connection
connectionActorRef.tell(createConnection, getRef());
final DittoRuntimeException dittoRuntimeException = expectMsgClass(DittoRuntimeException.class);
Assertions.assertThat(dittoRuntimeException).hasMessageContaining("validation failed...");

expectTerminated(connectionActorRef);
}};
}

@Test
public void testThingEventWithAuthorizedSubjectExpectIsForwarded() {
final Set<String> valid = Collections.singleton(TestConstants.SUBJECT_ID);
Expand Down
Expand Up @@ -17,18 +17,19 @@

import javax.annotation.concurrent.Immutable;

import org.eclipse.ditto.model.base.exceptions.DittoRuntimeException;
import org.eclipse.ditto.model.connectivity.ConnectionConfigurationInvalidException;
import org.eclipse.ditto.model.connectivity.ConnectionUriInvalidException;
import org.eclipse.ditto.model.connectivity.MessageMapperConfigurationFailedException;
import org.eclipse.ditto.model.connectivity.MessageMapperConfigurationInvalidException;
import org.eclipse.ditto.model.connectivity.MessageMappingFailedException;
import org.eclipse.ditto.model.base.exceptions.DittoRuntimeException;
import org.eclipse.ditto.signals.base.AbstractErrorRegistry;
import org.eclipse.ditto.signals.base.JsonParsable;
import org.eclipse.ditto.signals.commands.base.CommonErrorRegistry;
import org.eclipse.ditto.signals.commands.connectivity.exceptions.ConnectionConflictException;
import org.eclipse.ditto.signals.commands.connectivity.exceptions.ConnectionFailedException;
import org.eclipse.ditto.signals.commands.connectivity.exceptions.ConnectionNotAccessibleException;
import org.eclipse.ditto.signals.commands.connectivity.exceptions.ConnectionUnavailableException;
import org.eclipse.ditto.signals.commands.base.CommonErrorRegistry;

/**
* A {@link org.eclipse.ditto.signals.base.ErrorRegistry} aware of all
Expand Down Expand Up @@ -67,6 +68,8 @@ public static ConnectivityErrorRegistry newInstance(
final CommonErrorRegistry commonErrorRegistry = CommonErrorRegistry.newInstance();
commonErrorRegistry.getTypes().forEach(type -> parseStrategies.put(type, commonErrorRegistry));

parseStrategies.put(ConnectionConfigurationInvalidException.ERROR_CODE,
ConnectionConfigurationInvalidException::fromJson);
parseStrategies.put(ConnectionUriInvalidException.ERROR_CODE, ConnectionUriInvalidException::fromJson);
parseStrategies.put(MessageMappingFailedException.ERROR_CODE, MessageMappingFailedException::fromJson);
parseStrategies.put(MessageMapperConfigurationInvalidException.ERROR_CODE,
Expand Down

0 comments on commit 455a86f

Please sign in to comment.