Search in sources :

Example 1 with Response

use of io.spine.core.Response in project core-java by SpineEventEngine.

the class SubscriptionServiceShould method handle_cancellation_process_exceptions_and_call_observer_error_callback.

@Test
public void handle_cancellation_process_exceptions_and_call_observer_error_callback() {
    final BoundedContext boundedContext = setupBoundedContextWithProjectAggregateRepo();
    final SubscriptionService subscriptionService = SubscriptionService.newBuilder().add(boundedContext).build();
    final Target target = getProjectQueryTarget();
    final Topic topic = requestFactory.topic().forTarget(target);
    final MemoizeStreamObserver<Subscription> subscriptionObserver = new MemoizeStreamObserver<>();
    subscriptionService.subscribe(topic, subscriptionObserver);
    final String rejectionMessage = "Execution breaking exception";
    final MemoizeStreamObserver<Response> observer = new MemoizeStreamObserver<Response>() {

        @Override
        public void onNext(Response value) {
            super.onNext(value);
            throw new RuntimeException(rejectionMessage);
        }
    };
    subscriptionService.cancel(subscriptionObserver.streamFlowValue, observer);
    assertNotNull(observer.streamFlowValue);
    assertFalse(observer.isCompleted);
    assertNotNull(observer.throwable);
    assertInstanceOf(RuntimeException.class, observer.throwable);
    assertEquals(observer.throwable.getMessage(), rejectionMessage);
}
Also used : Response(io.spine.core.Response) Target(io.spine.client.Target) Topic(io.spine.client.Topic) Subscription(io.spine.client.Subscription) Test(org.junit.Test)

Example 2 with Response

use of io.spine.core.Response in project core-java by SpineEventEngine.

the class StandShould method use_provided_executor_upon_update_of_watched_type.

@Test
public void use_provided_executor_upon_update_of_watched_type() {
    final Executor executor = mock(Executor.class);
    final BoundedContext boundedContext = BoundedContext.newBuilder().setStand(Stand.newBuilder().setCallbackExecutor(executor)).build();
    final Stand stand = boundedContext.getStand();
    final StandTestProjectionRepository standTestProjectionRepo = new StandTestProjectionRepository();
    stand.registerTypeSupplier(standTestProjectionRepo);
    final Topic projectProjections = requestFactory.topic().allOf(Project.class);
    final MemoizingObserver<Subscription> observer = memoizingObserver();
    stand.subscribe(projectProjections, observer);
    final Subscription subscription = observer.firstResponse();
    final StreamObserver<Response> noopObserver = noOpObserver();
    stand.activate(subscription, emptyUpdateCallback(), noopObserver);
    assertNotNull(subscription);
    verify(executor, never()).execute(any(Runnable.class));
    final ProjectId someId = ProjectId.getDefaultInstance();
    final Version stateVersion = GivenVersion.withNumber(1);
    stand.update(asEnvelope(someId, Project.getDefaultInstance(), stateVersion));
    verify(executor, times(1)).execute(any(Runnable.class));
}
Also used : QueryResponse(io.spine.client.QueryResponse) Response(io.spine.core.Response) Executor(java.util.concurrent.Executor) GivenVersion(io.spine.core.given.GivenVersion) Version(io.spine.core.Version) ProjectId(io.spine.test.projection.ProjectId) BoundedContext(io.spine.server.BoundedContext) StandTestProjectionRepository(io.spine.server.stand.Given.StandTestProjectionRepository) Topic(io.spine.client.Topic) Subscription(io.spine.client.Subscription) Test(org.junit.Test) TenantAwareTest(io.spine.server.tenant.TenantAwareTest)

Example 3 with Response

use of io.spine.core.Response in project core-java by SpineEventEngine.

the class SubscriptionServiceShould method cancel_subscription_on_topic.

@Test
public void cancel_subscription_on_topic() {
    final BoundedContext boundedContext = setupBoundedContextWithProjectAggregateRepo();
    final SubscriptionService subscriptionService = SubscriptionService.newBuilder().add(boundedContext).build();
    final Target target = getProjectQueryTarget();
    final Topic topic = requestFactory.topic().forTarget(target);
    // Subscribe
    final MemoizeStreamObserver<Subscription> subscribeObserver = new MemoizeStreamObserver<>();
    subscriptionService.subscribe(topic, subscribeObserver);
    // Activate subscription
    final MemoizeStreamObserver<SubscriptionUpdate> activateSubscription = spy(new MemoizeStreamObserver<SubscriptionUpdate>());
    subscriptionService.activate(subscribeObserver.streamFlowValue, activateSubscription);
    // Cancel subscription
    subscriptionService.cancel(subscribeObserver.streamFlowValue, new MemoizeStreamObserver<Response>());
    // Post update to Stand
    final ProjectId projectId = ProjectId.newBuilder().setId("some-other-id").build();
    final Message projectState = Project.newBuilder().setId(projectId).build();
    final int version = 1;
    final VersionableEntity entity = mockEntity(projectId, projectState, version);
    boundedContext.getStand().post(requestFactory.createCommandContext().getActorContext().getTenantId(), entity);
    // The update must not be handled by the observer
    verify(activateSubscription, never()).onNext(any(SubscriptionUpdate.class));
    verify(activateSubscription, never()).onCompleted();
}
Also used : Message(com.google.protobuf.Message) ProjectId(io.spine.test.aggregate.ProjectId) SubscriptionUpdate(io.spine.client.SubscriptionUpdate) AbstractVersionableEntity(io.spine.server.entity.AbstractVersionableEntity) VersionableEntity(io.spine.server.entity.VersionableEntity) Response(io.spine.core.Response) Target(io.spine.client.Target) Topic(io.spine.client.Topic) Subscription(io.spine.client.Subscription) Test(org.junit.Test)

Aggregations

Subscription (io.spine.client.Subscription)3 Topic (io.spine.client.Topic)3 Response (io.spine.core.Response)3 Test (org.junit.Test)3 Target (io.spine.client.Target)2 Message (com.google.protobuf.Message)1 QueryResponse (io.spine.client.QueryResponse)1 SubscriptionUpdate (io.spine.client.SubscriptionUpdate)1 Version (io.spine.core.Version)1 GivenVersion (io.spine.core.given.GivenVersion)1 BoundedContext (io.spine.server.BoundedContext)1 AbstractVersionableEntity (io.spine.server.entity.AbstractVersionableEntity)1 VersionableEntity (io.spine.server.entity.VersionableEntity)1 StandTestProjectionRepository (io.spine.server.stand.Given.StandTestProjectionRepository)1 TenantAwareTest (io.spine.server.tenant.TenantAwareTest)1 ProjectId (io.spine.test.aggregate.ProjectId)1 ProjectId (io.spine.test.projection.ProjectId)1 Executor (java.util.concurrent.Executor)1