Repository: cxf Updated Branches: refs/heads/master 3182059e0 -> 44b04b36d
[CXF-6889] Creating a dedicated test suite, more to follow Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/44b04b36 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/44b04b36 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/44b04b36 Branch: refs/heads/master Commit: 44b04b36d31d519d76812a66a96feae5a4814728 Parents: 3182059 Author: Sergey Beryozkin <[email protected]> Authored: Fri Jul 7 14:02:38 2017 +0100 Committer: Sergey Beryozkin <[email protected]> Committed: Fri Jul 7 14:02:38 2017 +0100 ---------------------------------------------------------------------- .../cxf/systest/jaxrs/JAXRSAsyncClientTest.java | 42 +---- .../reactive/JAXRSCompletionStageTest.java | 99 ++++++++++++ .../jaxrs/reactive/JAXRSObservableTest.java | 162 +++++++++++++++++++ .../jaxrs/reactive/JAXRSReactiveTest.java | 162 ------------------- 4 files changed, 262 insertions(+), 203 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/44b04b36/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java ---------------------------------------------------------------------- diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java index 628466f..d0dc048 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java @@ -27,7 +27,6 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.CompletionStage; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -386,47 +385,8 @@ public class JAXRSAsyncClientTest extends AbstractBusClientServerTestBase { wc.close(); } - - @Test - public void testGetBookAsyncStage() throws Exception { - String address = "http://localhost:" + PORT + "/bookstore/books"; - WebClient wc = createWebClient(address); - CompletionStage<Book> stage = wc.path("123").rx().get(Book.class); - Book book = stage.toCompletableFuture().join(); - assertEquals(123L, book.getId()); - } - @Test - public void testGetBookAsyncStageThenAcceptAsync() throws Exception { - String address = "http://localhost:" + PORT + "/bookstore/books"; - WebClient wc = createWebClient(address); - CompletionStage<Book> stage = wc.path("123").rx().get(Book.class); - Holder<Book> holder = new Holder<Book>(); - stage.thenApply(v -> { - v.setId(v.getId() * 2); - return v; - }).thenAcceptAsync(v -> { - holder.value = v; - }); - Thread.sleep(3000); - assertEquals(246L, holder.value.getId()); - } - - @Test - public void testGetBookAsyncStage404() throws Exception { - String address = "http://localhost:" + PORT + "/bookstore/bookheaders/404"; - WebClient wc = createWebClient(address); - CompletionStage<Book> stage = wc.path("123").rx().get(Book.class); - try { - stage.toCompletableFuture().get(); - fail("Exception expected"); - } catch (ExecutionException ex) { - assertTrue(ex.getCause() instanceof NotFoundException); - } - - } private WebClient createWebClient(String address) { - List<Object> providers = new ArrayList<>(); - return WebClient.create(address, providers); + return WebClient.create(address); } private InvocationCallback<Object> createCallback(final Holder<Object> holder) { http://git-wip-us.apache.org/repos/asf/cxf/blob/44b04b36/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSCompletionStageTest.java ---------------------------------------------------------------------- diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSCompletionStageTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSCompletionStageTest.java new file mode 100644 index 0000000..b6a4fb7 --- /dev/null +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSCompletionStageTest.java @@ -0,0 +1,99 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.cxf.systest.jaxrs.reactive; + +import java.util.concurrent.CompletionStage; +import java.util.concurrent.ExecutionException; + +import javax.ws.rs.NotFoundException; +import javax.xml.ws.Holder; + +import org.apache.cxf.jaxrs.client.WebClient; +import org.apache.cxf.jaxrs.model.AbstractResourceInfo; +import org.apache.cxf.systest.jaxrs.Book; +import org.apache.cxf.systest.jaxrs.BookServerAsyncClient; +import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +public class JAXRSCompletionStageTest extends AbstractBusClientServerTestBase { + public static final String PORT = BookServerAsyncClient.PORT; + + @BeforeClass + public static void startServers() throws Exception { + AbstractResourceInfo.clearAllMaps(); + assertTrue("server did not launch correctly", + launchServer(BookServerAsyncClient.class, true)); + createStaticBus(); + } + + @Before + public void setUp() throws Exception { + String property = System.getProperty("test.delay"); + if (property != null) { + Thread.sleep(Long.valueOf(property)); + } + } + + + @Test + public void testGetBookAsyncStage() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/books"; + WebClient wc = createWebClient(address); + CompletionStage<Book> stage = wc.path("123").rx().get(Book.class); + Book book = stage.toCompletableFuture().join(); + assertEquals(123L, book.getId()); + } + @Test + public void testGetBookAsyncStageThenAcceptAsync() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/books"; + WebClient wc = createWebClient(address); + CompletionStage<Book> stage = wc.path("123").rx().get(Book.class); + Holder<Book> holder = new Holder<Book>(); + stage.thenApply(v -> { + v.setId(v.getId() * 2); + return v; + }).thenAcceptAsync(v -> { + holder.value = v; + }); + Thread.sleep(3000); + assertEquals(246L, holder.value.getId()); + } + + @Test + public void testGetBookAsyncStage404() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/bookheaders/404"; + WebClient wc = createWebClient(address); + CompletionStage<Book> stage = wc.path("123").rx().get(Book.class); + try { + stage.toCompletableFuture().get(); + fail("Exception expected"); + } catch (ExecutionException ex) { + assertTrue(ex.getCause() instanceof NotFoundException); + } + + } + private WebClient createWebClient(String address) { + return WebClient.create(address); + } + +} http://git-wip-us.apache.org/repos/asf/cxf/blob/44b04b36/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSObservableTest.java ---------------------------------------------------------------------- diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSObservableTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSObservableTest.java new file mode 100644 index 0000000..08106ea --- /dev/null +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSObservableTest.java @@ -0,0 +1,162 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.cxf.systest.jaxrs.reactive; + +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import javax.ws.rs.NotFoundException; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.Invocation; +import javax.ws.rs.core.GenericType; + +import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; + +import org.apache.cxf.jaxrs.client.WebClient; +import org.apache.cxf.jaxrs.model.AbstractResourceInfo; +import org.apache.cxf.jaxrs.rx.client.ObservableRxInvoker; +import org.apache.cxf.jaxrs.rx.client.ObservableRxInvokerProvider; +import org.apache.cxf.jaxrs.rx.provider.ObservableReader; +import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; + +import org.junit.BeforeClass; +import org.junit.Test; + +import rx.Observable; + +public class JAXRSObservableTest extends AbstractBusClientServerTestBase { + public static final String PORT = ReactiveServer.PORT; + @BeforeClass + public static void startServers() throws Exception { + AbstractResourceInfo.clearAllMaps(); + assertTrue("server did not launch correctly", + launchServer(ReactiveServer.class, true)); + createStaticBus(); + } + @Test + public void testGetHelloWorldText() throws Exception { + String address = "http://localhost:" + PORT + "/reactive/text"; + WebClient wc = WebClient.create(address); + String text = wc.accept("text/plain").get(String.class); + assertEquals("Hello, world!", text); + } + @Test + public void testGetHelloWorldAsyncText() throws Exception { + String address = "http://localhost:" + PORT + "/reactive/textAsync"; + WebClient wc = WebClient.create(address); + String text = wc.accept("text/plain").get(String.class); + assertEquals("Hello, world!", text); + } + + @Test + public void testGetHelloWorldTextObservableSync() throws Exception { + String address = "http://localhost:" + PORT + "/reactive/text"; + WebClient wc = WebClient.create(address, Collections.singletonList( + new ObservableReader<Object>())); + GenericType<Observable<String>> genericResponseType = + new GenericType<Observable<String>>() { + }; + Observable<String> obs = wc.accept("text/plain").get(genericResponseType); + obs.subscribe(s -> assertResponse(s)); + } + + private void assertResponse(String s) { + assertEquals("Hello, world!", s); + } + @Test + public void testGetHelloWorldJson() throws Exception { + String address = "http://localhost:" + PORT + "/reactive/textJson"; + WebClient wc = WebClient.create(address, + Collections.singletonList(new JacksonJsonProvider())); + HelloWorldBean bean = wc.accept("application/json").get(HelloWorldBean.class); + assertEquals("Hello", bean.getGreeting()); + assertEquals("World", bean.getAudience()); + } + @Test + public void testGetHelloWorldJsonList() throws Exception { + String address = "http://localhost:" + PORT + "/reactive/textJsonList"; + doTestGetHelloWorldJsonList(address); + } + @Test + public void testGetHelloWorldJsonImplicitList() throws Exception { + String address = "http://localhost:" + PORT + "/reactive/textJsonImplicitList"; + doTestGetHelloWorldJsonList(address); + } + @Test + public void testGetHelloWorldJsonImplicitListAsync() throws Exception { + String address = "http://localhost:" + PORT + "/reactive/textJsonImplicitListAsync"; + doTestGetHelloWorldJsonList(address); + } + @Test + public void testGetHelloWorldJsonImplicitListAsyncStream() throws Exception { + String address = "http://localhost:" + PORT + "/reactive/textJsonImplicitListAsyncStream"; + doTestGetHelloWorldJsonList(address); + } + private void doTestGetHelloWorldJsonList(String address) throws Exception { + WebClient wc = WebClient.create(address, + Collections.singletonList(new JacksonJsonProvider())); + WebClient.getConfig(wc).getHttpConduit().getClient().setReceiveTimeout(10000000); + GenericType<List<HelloWorldBean>> genericResponseType = new GenericType<List<HelloWorldBean>>() { + }; + + List<HelloWorldBean> beans = wc.accept("application/json").get(genericResponseType); + assertEquals(2, beans.size()); + assertEquals("Hello", beans.get(0).getGreeting()); + assertEquals("World", beans.get(0).getAudience()); + assertEquals("Ciao", beans.get(1).getGreeting()); + assertEquals("World", beans.get(1).getAudience()); + } + + @Test + public void testGetHelloWorldAsyncObservable() throws Exception { + String address = "http://localhost:" + PORT + "/reactive/textAsync"; + WebClient wc = WebClient.create(address, + Collections.singletonList(new ObservableRxInvokerProvider())); + Observable<String> obs = wc.accept("text/plain") + .rx(ObservableRxInvoker.class) + .get(String.class); + obs.map(s -> { + return s + s; + }); + + Thread.sleep(3000); + + obs.subscribe(s -> assertDuplicateResponse(s)); + } + @Test + public void testGetHelloWorldAsyncObservable404() throws Exception { + String address = "http://localhost:" + PORT + "/reactive/textAsync404"; + Invocation.Builder b = ClientBuilder.newClient().register(new ObservableRxInvokerProvider()) + .target(address).request(); + b.rx(ObservableRxInvoker.class).get(String.class).subscribe( + s -> { + fail("Exception expected"); + }, + t -> validateT((ExecutionException)t)); + } + + private void validateT(ExecutionException t) { + assertTrue(t.getCause() instanceof NotFoundException); + } + private void assertDuplicateResponse(String s) { + assertEquals("Hello, world!Hello, world!", s); + } +} http://git-wip-us.apache.org/repos/asf/cxf/blob/44b04b36/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSReactiveTest.java ---------------------------------------------------------------------- diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSReactiveTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSReactiveTest.java deleted file mode 100644 index dd8ee5c..0000000 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSReactiveTest.java +++ /dev/null @@ -1,162 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.cxf.systest.jaxrs.reactive; - -import java.util.Collections; -import java.util.List; -import java.util.concurrent.ExecutionException; - -import javax.ws.rs.NotFoundException; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.Invocation; -import javax.ws.rs.core.GenericType; - -import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; - -import org.apache.cxf.jaxrs.client.WebClient; -import org.apache.cxf.jaxrs.model.AbstractResourceInfo; -import org.apache.cxf.jaxrs.rx.client.ObservableRxInvoker; -import org.apache.cxf.jaxrs.rx.client.ObservableRxInvokerProvider; -import org.apache.cxf.jaxrs.rx.provider.ObservableReader; -import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; - -import org.junit.BeforeClass; -import org.junit.Test; - -import rx.Observable; - -public class JAXRSReactiveTest extends AbstractBusClientServerTestBase { - public static final String PORT = ReactiveServer.PORT; - @BeforeClass - public static void startServers() throws Exception { - AbstractResourceInfo.clearAllMaps(); - assertTrue("server did not launch correctly", - launchServer(ReactiveServer.class, true)); - createStaticBus(); - } - @Test - public void testGetHelloWorldText() throws Exception { - String address = "http://localhost:" + PORT + "/reactive/text"; - WebClient wc = WebClient.create(address); - String text = wc.accept("text/plain").get(String.class); - assertEquals("Hello, world!", text); - } - @Test - public void testGetHelloWorldAsyncText() throws Exception { - String address = "http://localhost:" + PORT + "/reactive/textAsync"; - WebClient wc = WebClient.create(address); - String text = wc.accept("text/plain").get(String.class); - assertEquals("Hello, world!", text); - } - - @Test - public void testGetHelloWorldTextObservableSync() throws Exception { - String address = "http://localhost:" + PORT + "/reactive/text"; - WebClient wc = WebClient.create(address, Collections.singletonList( - new ObservableReader<Object>())); - GenericType<Observable<String>> genericResponseType = - new GenericType<Observable<String>>() { - }; - Observable<String> obs = wc.accept("text/plain").get(genericResponseType); - obs.subscribe(s -> assertResponse(s)); - } - - private void assertResponse(String s) { - assertEquals("Hello, world!", s); - } - @Test - public void testGetHelloWorldJson() throws Exception { - String address = "http://localhost:" + PORT + "/reactive/textJson"; - WebClient wc = WebClient.create(address, - Collections.singletonList(new JacksonJsonProvider())); - HelloWorldBean bean = wc.accept("application/json").get(HelloWorldBean.class); - assertEquals("Hello", bean.getGreeting()); - assertEquals("World", bean.getAudience()); - } - @Test - public void testGetHelloWorldJsonList() throws Exception { - String address = "http://localhost:" + PORT + "/reactive/textJsonList"; - doTestGetHelloWorldJsonList(address); - } - @Test - public void testGetHelloWorldJsonImplicitList() throws Exception { - String address = "http://localhost:" + PORT + "/reactive/textJsonImplicitList"; - doTestGetHelloWorldJsonList(address); - } - @Test - public void testGetHelloWorldJsonImplicitListAsync() throws Exception { - String address = "http://localhost:" + PORT + "/reactive/textJsonImplicitListAsync"; - doTestGetHelloWorldJsonList(address); - } - @Test - public void testGetHelloWorldJsonImplicitListAsyncStream() throws Exception { - String address = "http://localhost:" + PORT + "/reactive/textJsonImplicitListAsyncStream"; - doTestGetHelloWorldJsonList(address); - } - private void doTestGetHelloWorldJsonList(String address) throws Exception { - WebClient wc = WebClient.create(address, - Collections.singletonList(new JacksonJsonProvider())); - WebClient.getConfig(wc).getHttpConduit().getClient().setReceiveTimeout(10000000); - GenericType<List<HelloWorldBean>> genericResponseType = new GenericType<List<HelloWorldBean>>() { - }; - - List<HelloWorldBean> beans = wc.accept("application/json").get(genericResponseType); - assertEquals(2, beans.size()); - assertEquals("Hello", beans.get(0).getGreeting()); - assertEquals("World", beans.get(0).getAudience()); - assertEquals("Ciao", beans.get(1).getGreeting()); - assertEquals("World", beans.get(1).getAudience()); - } - - @Test - public void testGetHelloWorldAsyncObservable() throws Exception { - String address = "http://localhost:" + PORT + "/reactive/textAsync"; - WebClient wc = WebClient.create(address, - Collections.singletonList(new ObservableRxInvokerProvider())); - Observable<String> obs = wc.accept("text/plain") - .rx(ObservableRxInvoker.class) - .get(String.class); - obs.map(s -> { - return s + s; - }); - - Thread.sleep(3000); - - obs.subscribe(s -> assertDuplicateResponse(s)); - } - @Test - public void testGetHelloWorldAsyncObservable404() throws Exception { - String address = "http://localhost:" + PORT + "/reactive/textAsync404"; - Invocation.Builder b = ClientBuilder.newClient().register(new ObservableRxInvokerProvider()) - .target(address).request(); - b.rx(ObservableRxInvoker.class).get(String.class).subscribe( - s -> { - fail("Exception expected"); - }, - t -> validateT((ExecutionException)t)); - } - - private void validateT(ExecutionException t) { - assertTrue(t.getCause() instanceof NotFoundException); - } - private void assertDuplicateResponse(String s) { - assertEquals("Hello, world!Hello, world!", s); - } -}
