Skip to content

Commit 6735c79

Browse files
authored
Merge pull request #792 from scalecube/newTest/errorMapperInServiceCall
Added test on ServiceCall with custom errorMapper
2 parents cc83cd9 + ce221fe commit 6735c79

File tree

3 files changed

+114
-22
lines changed

3 files changed

+114
-22
lines changed

services/src/test/java/io/scalecube/services/ServiceCallLocalTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,20 @@
1919
import io.scalecube.services.api.ServiceMessage;
2020
import io.scalecube.services.discovery.ScalecubeServiceDiscovery;
2121
import io.scalecube.services.exceptions.ServiceException;
22+
import io.scalecube.services.registry.api.ServiceRegistry;
2223
import io.scalecube.services.routing.RoundRobinServiceRouter;
2324
import io.scalecube.services.sut.EmptyGreetingResponse;
25+
import io.scalecube.services.sut.GreetingRequest;
2426
import io.scalecube.services.sut.GreetingResponse;
27+
import io.scalecube.services.sut.GreetingService;
2528
import io.scalecube.services.sut.GreetingServiceImpl;
2629
import io.scalecube.services.transport.rsocket.RSocketServiceTransport;
2730
import java.time.Duration;
31+
import java.util.Collections;
32+
import java.util.Optional;
33+
import java.util.UUID;
2834
import org.junit.jupiter.api.AfterAll;
35+
import org.junit.jupiter.api.Assertions;
2936
import org.junit.jupiter.api.BeforeAll;
3037
import org.junit.jupiter.api.Test;
3138
import org.reactivestreams.Publisher;
@@ -175,4 +182,37 @@ public void test_async_greeting_return_string_service_not_found_error_case() {
175182
ex.getMessage(), "No reachable member with such service: " + NOT_FOUND_REQ.qualifier());
176183
}
177184
}
185+
186+
@Test
187+
public void test_custom_error_mapper() {
188+
GreetingService service =
189+
new ServiceCall()
190+
.errorMapper(
191+
message -> {
192+
throw new RuntimeException("custom error mapper");
193+
})
194+
.transport(new RSocketServiceTransport().start().block().clientTransport())
195+
.router(ServiceCallLocalTest::route)
196+
.api(GreetingService.class);
197+
198+
StepVerifier.create(service.exceptionRequest(new GreetingRequest()))
199+
.expectErrorSatisfies(
200+
throwable -> {
201+
Assertions.assertEquals(RuntimeException.class, throwable.getClass());
202+
Assertions.assertEquals("custom error mapper", throwable.getMessage());
203+
})
204+
.verify(timeout);
205+
}
206+
207+
private static Optional<ServiceReference> route(
208+
ServiceRegistry serviceRegistry, ServiceMessage request) {
209+
return Optional.of(
210+
new ServiceReference(
211+
new ServiceMethodDefinition("dummy"),
212+
new ServiceRegistration("ns", Collections.emptyMap(), Collections.emptyList()),
213+
ServiceEndpoint.builder()
214+
.id(UUID.randomUUID().toString())
215+
.address(provider.serviceAddress())
216+
.build()));
217+
}
178218
}

services/src/test/java/io/scalecube/services/ServiceCallRemoteTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,21 @@
2020
import io.scalecube.services.api.ServiceMessage;
2121
import io.scalecube.services.discovery.ScalecubeServiceDiscovery;
2222
import io.scalecube.services.exceptions.ServiceException;
23+
import io.scalecube.services.registry.api.ServiceRegistry;
2324
import io.scalecube.services.sut.EmptyGreetingResponse;
25+
import io.scalecube.services.sut.GreetingRequest;
2426
import io.scalecube.services.sut.GreetingResponse;
27+
import io.scalecube.services.sut.GreetingService;
2528
import io.scalecube.services.sut.GreetingServiceImpl;
2629
import io.scalecube.services.sut.QuoteService;
2730
import io.scalecube.services.sut.SimpleQuoteService;
2831
import io.scalecube.services.transport.rsocket.RSocketServiceTransport;
2932
import java.time.Duration;
33+
import java.util.Collections;
34+
import java.util.Optional;
35+
import java.util.UUID;
3036
import org.junit.jupiter.api.AfterAll;
37+
import org.junit.jupiter.api.Assertions;
3138
import org.junit.jupiter.api.BeforeAll;
3239
import org.junit.jupiter.api.Disabled;
3340
import org.junit.jupiter.api.Test;
@@ -256,6 +263,39 @@ public void test_many_stream_block_first() {
256263
}
257264
}
258265

266+
@Test
267+
public void test_custom_error_mapper() {
268+
GreetingService service =
269+
new ServiceCall()
270+
.errorMapper(
271+
message -> {
272+
throw new RuntimeException("custom error mapper");
273+
})
274+
.transport(new RSocketServiceTransport().start().block().clientTransport())
275+
.router(ServiceCallRemoteTest::route)
276+
.api(GreetingService.class);
277+
278+
StepVerifier.create(service.exceptionRequest(new GreetingRequest()))
279+
.expectErrorSatisfies(
280+
throwable -> {
281+
Assertions.assertEquals(RuntimeException.class, throwable.getClass());
282+
Assertions.assertEquals("custom error mapper", throwable.getMessage());
283+
})
284+
.verify(TIMEOUT);
285+
}
286+
287+
private static Optional<ServiceReference> route(
288+
ServiceRegistry serviceRegistry, ServiceMessage request) {
289+
return Optional.of(
290+
new ServiceReference(
291+
new ServiceMethodDefinition("dummy"),
292+
new ServiceRegistration("ns", Collections.emptyMap(), Collections.emptyList()),
293+
ServiceEndpoint.builder()
294+
.id(UUID.randomUUID().toString())
295+
.address(provider.serviceAddress())
296+
.build()));
297+
}
298+
259299
private static Microservices gateway() {
260300
return Microservices.builder()
261301
.discovery("gateway", ScalecubeServiceDiscovery::new)

services/src/test/java/io/scalecube/services/ServiceRemoteTest.java

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@
2727
import org.junit.jupiter.api.Disabled;
2828
import org.junit.jupiter.api.Test;
2929
import org.reactivestreams.Publisher;
30-
import reactor.core.publisher.*;
30+
import reactor.core.publisher.DirectProcessor;
31+
import reactor.core.publisher.EmitterProcessor;
32+
import reactor.core.publisher.Flux;
33+
import reactor.core.publisher.Hooks;
34+
import reactor.core.publisher.Mono;
35+
import reactor.core.publisher.UnicastProcessor;
3136
import reactor.test.StepVerifier;
3237

3338
public class ServiceRemoteTest extends BaseTest {
@@ -374,15 +379,18 @@ public void test_remote_bidi_greeting_message_expect_IllegalArgumentException()
374379

375380
// call the service. bidiThrowingGreeting
376381
Flux<GreetingResponse> responses =
377-
service.bidiGreetingIllegalArgumentExceptionMessage(
378-
Mono.just(ServiceMessage.builder()
379-
.data(new GreetingRequest("IllegalArgumentException")).build()))
382+
service
383+
.bidiGreetingIllegalArgumentExceptionMessage(
384+
Mono.just(
385+
ServiceMessage.builder()
386+
.data(new GreetingRequest("IllegalArgumentException"))
387+
.build()))
380388
.map(ServiceMessage::data);
381389

382390
// call the service.
383391
StepVerifier.create(responses)
384-
.expectErrorMessage("IllegalArgumentException")
385-
.verify(Duration.ofSeconds(3));
392+
.expectErrorMessage("IllegalArgumentException")
393+
.verify(Duration.ofSeconds(3));
386394
}
387395

388396
@Test
@@ -414,14 +422,16 @@ public void test_remote_bidi_greeting_message_expect_NotAuthorized() {
414422
DirectProcessor<GreetingRequest> requests = DirectProcessor.create();
415423

416424
// call the service.
417-
Flux<GreetingResponse> responses = service.bidiGreetingNotAuthorizedMessage(
418-
requests.map(request -> ServiceMessage.builder().data(request).build()))
425+
Flux<GreetingResponse> responses =
426+
service
427+
.bidiGreetingNotAuthorizedMessage(
428+
requests.map(request -> ServiceMessage.builder().data(request).build()))
419429
.map(ServiceMessage::data);
420430

421431
StepVerifier.create(responses)
422-
.then(() -> requests.onNext(new GreetingRequest("joe-1")))
423-
.expectErrorMessage("Not authorized")
424-
.verify(Duration.ofSeconds(3));
432+
.then(() -> requests.onNext(new GreetingRequest("joe-1")))
433+
.expectErrorMessage("Not authorized")
434+
.verify(Duration.ofSeconds(3));
425435
}
426436

427437
@Test
@@ -459,20 +469,22 @@ public void test_remote_bidi_greeting_message_expect_GreetingResponse() {
459469
UnicastProcessor<GreetingRequest> requests = UnicastProcessor.create();
460470

461471
// call the service.
462-
Flux<GreetingResponse> responses = service.bidiGreetingMessage(requests
463-
.map(request -> ServiceMessage.builder().data(request).build()))
472+
Flux<GreetingResponse> responses =
473+
service
474+
.bidiGreetingMessage(
475+
requests.map(request -> ServiceMessage.builder().data(request).build()))
464476
.map(ServiceMessage::data);
465477

466478
StepVerifier.create(responses)
467-
.then(() -> requests.onNext(new GreetingRequest("joe-1")))
468-
.expectNextMatches(resp -> resp.getResult().equals(" hello to: joe-1"))
469-
.then(() -> requests.onNext(new GreetingRequest("joe-2")))
470-
.expectNextMatches(resp -> resp.getResult().equals(" hello to: joe-2"))
471-
.then(() -> requests.onNext(new GreetingRequest("joe-3")))
472-
.expectNextMatches(resp -> resp.getResult().equals(" hello to: joe-3"))
473-
.then(() -> requests.onComplete())
474-
.expectComplete()
475-
.verify(Duration.ofSeconds(3));
479+
.then(() -> requests.onNext(new GreetingRequest("joe-1")))
480+
.expectNextMatches(resp -> resp.getResult().equals(" hello to: joe-1"))
481+
.then(() -> requests.onNext(new GreetingRequest("joe-2")))
482+
.expectNextMatches(resp -> resp.getResult().equals(" hello to: joe-2"))
483+
.then(() -> requests.onNext(new GreetingRequest("joe-3")))
484+
.expectNextMatches(resp -> resp.getResult().equals(" hello to: joe-3"))
485+
.then(() -> requests.onComplete())
486+
.expectComplete()
487+
.verify(Duration.ofSeconds(3));
476488
}
477489

478490
@Test

0 commit comments

Comments
 (0)