You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by il...@apache.org on 2014/05/14 16:34:29 UTC

git commit: [OLINGO-260] async tests

Repository: olingo-odata4
Updated Branches:
  refs/heads/master 6e9fb661c -> 569996aad


[OLINGO-260] async tests


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/569996aa
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/569996aa
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/569996aa

Branch: refs/heads/master
Commit: 569996aaddcce9fd698ff68c06e6e1dbc52b36e3
Parents: 6e9fb66
Author: Francesco Chicchiriccò <--global>
Authored: Wed May 14 16:34:19 2014 +0200
Committer: Francesco Chicchiriccò <--global>
Committed: Wed May 14 16:34:19 2014 +0200

----------------------------------------------------------------------
 .../apache/olingo/ext/proxy/api/AsyncCall.java  |  70 +++++++++++
 .../olingo/fit/proxy/v3/AsyncTestITCase.java    | 126 +++++++++++++++++++
 .../olingo/fit/proxy/v4/AsyncTestITCase.java    |  92 ++++++++++++++
 .../apache/olingo/fit/v4/AsyncTestITCase.java   |  48 ++++---
 4 files changed, 311 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/569996aa/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AsyncCall.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AsyncCall.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AsyncCall.java
new file mode 100644
index 0000000..e3eea9e
--- /dev/null
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/api/AsyncCall.java
@@ -0,0 +1,70 @@
+/*
+ * 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.olingo.ext.proxy.api;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.apache.olingo.client.api.CommonConfiguration;
+
+public abstract class AsyncCall<V> implements Future<V> {
+
+  private final Future<V> future;
+
+  public AsyncCall(final CommonConfiguration configuration) {
+    this.future = configuration.getExecutor().submit(new Callable<V>() {
+
+      @Override
+      public V call() throws Exception {
+        return AsyncCall.this.call();
+      }
+    });
+  }
+
+  public abstract V call();
+
+  @Override
+  public boolean cancel(final boolean mayInterruptIfRunning) {
+    return this.future.cancel(mayInterruptIfRunning);
+  }
+
+  @Override
+  public boolean isCancelled() {
+    return this.future.isCancelled();
+  }
+
+  @Override
+  public boolean isDone() {
+    return this.future.isDone();
+  }
+
+  @Override
+  public V get() throws InterruptedException, ExecutionException {
+    return this.future.get();
+  }
+
+  @Override
+  public V get(final long timeout, final TimeUnit unit)
+          throws InterruptedException, ExecutionException, TimeoutException {
+
+    return this.future.get(timeout, unit);
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/569996aa/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AsyncTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AsyncTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AsyncTestITCase.java
new file mode 100644
index 0000000..3cd51bc
--- /dev/null
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v3/AsyncTestITCase.java
@@ -0,0 +1,126 @@
+/*
+ * 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.olingo.fit.proxy.v3;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.UUID;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import org.apache.olingo.ext.proxy.api.AsyncCall;
+import org.apache.olingo.ext.proxy.api.Query;
+import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.Employee;
+import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.
+        EmployeeCollection;
+import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.Product;
+import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.
+        ProductCollection;
+import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.
+        SpecialEmployee;
+import org.apache.olingo.fit.proxy.v3.staticservice.microsoft.test.odata.services.astoriadefaultservice.types.
+        SpecialEmployeeCollection;
+import org.junit.Test;
+
+public class AsyncTestITCase extends AbstractTestITCase {
+
+  @Test
+  public void retrieveEntitySet() throws InterruptedException, ExecutionException {
+    final Future<ProductCollection> futureProds =
+            new AsyncCall<ProductCollection>(containerFactory.getConfiguration()) {
+
+              @Override
+              public ProductCollection call() {
+                return container.getProduct().getAll();
+              }
+            };
+    assertNotNull(futureProds);
+
+    while (!futureProds.isDone()) {
+      Thread.sleep(1000L);
+    }
+
+    final ProductCollection products = futureProds.get();
+    assertNotNull(products);
+    assertFalse(products.isEmpty());
+    for (Product product : products) {
+      assertNotNull(product);
+    }
+  }
+
+  @Test
+  public void updateEntity() throws InterruptedException, ExecutionException {
+    final String random = UUID.randomUUID().toString();
+
+    final Product product = container.getProduct().get(-10);
+    product.setDescription("AsyncTest#updateEntity " + random);
+
+    final Future<Void> futureFlush = new AsyncCall<Void>(containerFactory.getConfiguration()) {
+
+      @Override
+      public Void call() {
+        container.flush();
+        return null;
+      }
+    };
+    assertNotNull(futureFlush);
+
+    while (!futureFlush.isDone()) {
+      Thread.sleep(1000L);
+    }
+
+    final Future<Product> futureProd = new AsyncCall<Product>(containerFactory.getConfiguration()) {
+
+      @Override
+      public Product call() {
+        return container.getProduct().get(-10);
+      }
+    };
+
+    assertEquals("AsyncTest#updateEntity " + random, futureProd.get().getDescription());
+  }
+
+  @Test
+  public void polymorphQuery() throws Exception {
+    final Future<Query<Employee, EmployeeCollection>> queryEmployee =
+            new AsyncCall<Query<Employee, EmployeeCollection>>(containerFactory.getConfiguration()) {
+
+              @Override
+              public Query<Employee, EmployeeCollection> call() {
+                return container.getPerson().createQuery(EmployeeCollection.class);
+              }
+            };
+    assertFalse(queryEmployee.get().getResult().isEmpty());
+
+    final Future<Query<SpecialEmployee, SpecialEmployeeCollection>> querySpecialEmployee =
+            new AsyncCall<Query<SpecialEmployee, SpecialEmployeeCollection>>(containerFactory.getConfiguration()) {
+
+              @Override
+              public Query<SpecialEmployee, SpecialEmployeeCollection> call() {
+                return container.getPerson().createQuery(SpecialEmployeeCollection.class);
+              }
+            };
+    assertFalse(querySpecialEmployee.get().getResult().isEmpty());
+
+    assertTrue(container.getPerson().getAll().size()
+            > queryEmployee.get().getResult().size() + querySpecialEmployee.get().getResult().size());
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/569996aa/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AsyncTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AsyncTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AsyncTestITCase.java
new file mode 100644
index 0000000..f5f4561
--- /dev/null
+++ b/fit/src/test/java/org/apache/olingo/fit/proxy/v4/AsyncTestITCase.java
@@ -0,0 +1,92 @@
+/*
+ * 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.olingo.fit.proxy.v4;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.olingo.ext.proxy.api.AsyncCall;
+import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Customer;
+import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.
+        CustomerCollection;
+import org.apache.olingo.fit.proxy.v4.staticservice.microsoft.test.odata.services.odatawcfservice.types.Person;
+import org.junit.Test;
+
+public class AsyncTestITCase extends AbstractTestITCase {
+
+  @Test
+  public void retrieveEntitySet() throws InterruptedException, ExecutionException {
+    final Future<CustomerCollection> futureCustomers =
+            new AsyncCall<CustomerCollection>(containerFactory.getConfiguration()) {
+
+              @Override
+              public CustomerCollection call() {
+                return container.getCustomers().getAll();
+              }
+            };
+    assertNotNull(futureCustomers);
+
+    while (!futureCustomers.isDone()) {
+      Thread.sleep(1000L);
+    }
+
+    final CustomerCollection customers = futureCustomers.get();
+    assertNotNull(customers);
+    assertFalse(customers.isEmpty());
+    for (Customer customer : customers) {
+      assertNotNull(customer);
+    }
+  }
+
+  @Test
+  public void updateEntity() throws InterruptedException {
+    final String randomFirstName = RandomStringUtils.random(10);
+
+    Person person = container.getPeople().get(1);
+    person.setFirstName(randomFirstName);
+
+    final Future<Void> futureFlush = new AsyncCall<Void>(containerFactory.getConfiguration()) {
+
+      @Override
+      public Void call() {
+        container.flush();
+        return null;
+      }
+    };
+    assertNotNull(futureFlush);
+
+    while (!futureFlush.isDone()) {
+      Thread.sleep(1000L);
+    }
+
+    final Future<Person> futureProd = new AsyncCall<Person>(containerFactory.getConfiguration()) {
+
+      @Override
+      public Person call() {
+        return container.getPeople().get(1);
+      }
+    };
+
+    assertEquals(randomFirstName, person.getFirstName());
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/569996aa/fit/src/test/java/org/apache/olingo/fit/v4/AsyncTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/AsyncTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/AsyncTestITCase.java
index 373a489..4960a48 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/AsyncTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/AsyncTestITCase.java
@@ -18,9 +18,13 @@
  */
 package org.apache.olingo.fit.v4;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
 import java.net.URI;
 import java.util.List;
-
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
@@ -28,9 +32,7 @@ import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySe
 import org.apache.olingo.client.api.communication.request.v4.AsyncRequestWrapper;
 import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
 import org.apache.olingo.client.api.communication.response.v4.AsyncResponseWrapper;
-import org.apache.olingo.client.api.uri.CommonURIBuilder;
 import org.apache.olingo.client.api.uri.v4.URIBuilder;
-import static org.apache.olingo.fit.v4.AbstractTestITCase.client;
 import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.domain.ODataInlineEntity;
@@ -38,17 +40,13 @@ import org.apache.olingo.commons.api.domain.ODataLink;
 import org.apache.olingo.commons.api.domain.v4.ODataEntity;
 import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import org.junit.Test;
 
 public class AsyncTestITCase extends AbstractTestITCase {
 
   @Test
-  public void asyncRequestV3Style() throws InterruptedException, ExecutionException {
-    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+  public void clientAsync() throws InterruptedException, ExecutionException {
+    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customers");
     final Future<ODataRetrieveResponse<ODataEntitySet>> futureRes =
             client.getRetrieveRequestFactory().getEntitySetRequest(uriBuilder.build()).asyncExecute();
@@ -120,7 +118,18 @@ public class AsyncTestITCase extends AbstractTestITCase {
     assertTrue(found);
   }
 
-  private void asynOrders(final ODataPubFormat format) {
+  @Test
+  public void withInlineEntryAsAtom() {
+    withInlineEntry(ODataPubFormat.ATOM);
+  }
+
+  @Test
+  public void withInlineEntryAsJSON() {
+    // this needs to be full, otherwise there is no mean to recognize links
+    withInlineEntry(ODataPubFormat.JSON_FULL_METADATA);
+  }
+
+  private void asyncOrders(final ODataPubFormat format) {
     final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("async").appendEntitySetSegment("Orders");
 
@@ -144,23 +153,12 @@ public class AsyncTestITCase extends AbstractTestITCase {
   }
 
   @Test
-  public void withInlineEntryAsAtom() {
-    withInlineEntry(ODataPubFormat.ATOM);
-  }
-
-  @Test
-  public void withInlineEntryAsJSON() {
-    // this needs to be full, otherwise there is no mean to recognize links
-    withInlineEntry(ODataPubFormat.JSON_FULL_METADATA);
-  }
-
-  @Test
-  public void asynOrdersAsAtom() {
-    asynOrders(ODataPubFormat.ATOM);
+  public void asyncOrdersAsAtom() {
+    asyncOrders(ODataPubFormat.ATOM);
   }
 
   @Test
-  public void asynOrdersAsJSON() {
-    asynOrders(ODataPubFormat.JSON);
+  public void asyncOrdersAsJSON() {
+    asyncOrders(ODataPubFormat.JSON);
   }
 }