You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2013/12/17 09:37:36 UTC

git commit: [OLINGO-84] Added tests

Updated Branches:
  refs/heads/master c4706cf85 -> f1901353c


[OLINGO-84] Added tests


Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/commit/f1901353
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/tree/f1901353
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/diff/f1901353

Branch: refs/heads/master
Commit: f1901353c2649969841310ea56060e387fc3ad0c
Parents: c4706cf
Author: Michael Bolz <mi...@apache.org>
Authored: Tue Dec 17 09:37:21 2013 +0100
Committer: Michael Bolz <mi...@apache.org>
Committed: Tue Dec 17 09:37:21 2013 +0100

----------------------------------------------------------------------
 .../odata2/core/annotation/data/DataStore.java  |   2 +-
 .../data/AnnotationsInMemoryDsTest.java         | 150 ++++++++++++++++++-
 .../odata2/core/annotation/model/Building.java  |   4 +
 3 files changed, 152 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/f1901353/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/core/annotation/data/DataStore.java
----------------------------------------------------------------------
diff --git a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/core/annotation/data/DataStore.java b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/core/annotation/data/DataStore.java
index beeac17..7dca42b 100644
--- a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/core/annotation/data/DataStore.java
+++ b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/core/annotation/data/DataStore.java
@@ -114,7 +114,7 @@ public class DataStore<T> {
 
   private T create(final T object, final KeyElement keyElement) throws DataStoreException {
     synchronized (dataStore) {
-      if (keyElement.keyValuesMissing() || dataStore.get(keyElement) != null) {
+      if (keyElement.keyValuesMissing() || dataStore.containsKey(keyElement)) {
         KeyElement newKey = createSetAndGetKeys(object);
         return this.create(object, newKey);
       }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/f1901353/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java
----------------------------------------------------------------------
diff --git a/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java
index f257933..0ec8899 100644
--- a/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java
+++ b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java
@@ -15,9 +15,17 @@
  */
 package org.apache.olingo.odata2.core.annotation.data;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
+import org.apache.olingo.odata2.api.annotation.edm.EdmKey;
+import org.apache.olingo.odata2.api.annotation.edm.EdmProperty;
+import org.apache.olingo.odata2.api.data.DataSource;
 import org.apache.olingo.odata2.api.edm.EdmEntitySet;
 import org.apache.olingo.odata2.api.edm.EdmEntityType;
 import org.apache.olingo.odata2.api.edm.FullQualifiedName;
@@ -27,6 +35,7 @@ import org.apache.olingo.odata2.core.annotation.edm.AnnotationEdmProvider;
 import org.apache.olingo.odata2.core.annotation.model.Building;
 import org.apache.olingo.odata2.core.annotation.model.ModelSharedConstants;
 import org.apache.olingo.odata2.core.annotation.model.Photo;
+import org.apache.olingo.odata2.core.annotation.model.Room;
 import org.apache.olingo.odata2.core.annotation.util.AnnotationHelper;
 import org.junit.Assert;
 import org.junit.Test;
@@ -45,8 +54,140 @@ public class AnnotationsInMemoryDsTest {
     datasource = new AnnotationInMemoryDs(Building.class.getPackage().getName(), false);
     edmProvider = new AnnotationEdmProvider(Building.class.getPackage().getName());
   }
+  
+  @Test
+  public void multiThreadedSyncOnBuildingsTest() throws Exception {
+    final EdmEntitySet edmEntitySet = createMockedEdmEntitySet("Buildings");
+
+    List<Thread> threads = new ArrayList<Thread>();
+    int max = 500;
+    for (int i = 0; i < max; i++) {
+      threads.add(createBuildingThread(datasource, edmEntitySet, String.valueOf("10")));
+    }
+    
+    for (Thread thread : threads) {
+      thread.start();
+    }
+
+    TimeUnit.MILLISECONDS.sleep(1000);
+    
+    DataStore<Building> ds = datasource.getDataStore(Building.class);
+    Collection<Building> buildings = ds.read();
+    Assert.assertEquals(max, buildings.size());
+  }
+
+  @org.apache.olingo.odata2.api.annotation.edm.EdmEntitySet
+  @org.apache.olingo.odata2.api.annotation.edm.EdmEntityType
+  private static class SimpleEntity {
+    @EdmKey
+    @EdmProperty
+    public Integer id;
+    @EdmProperty
+    public String name;
+  }
+  
+  @Test
+  public void multiThreadedSyncCreateReadTest() throws Exception {
+    Collection<Class<?>> ac = new ArrayList<Class<?>>();
+    ac.add(SimpleEntity.class);
+    final AnnotationInMemoryDs localDs = new AnnotationInMemoryDs(SimpleEntity.class.getPackage().getName(), true);
+    final AnnotationEdmProvider localProvider = new AnnotationEdmProvider(ac);
+    final EdmEntitySet edmEntitySet = createMockedEdmEntitySet(localProvider, "SimpleEntitySet");
+
+    List<Thread> threads = new ArrayList<Thread>();
+    int max = 500;
+    for (int i = 0; i < max; i++) {
+    Runnable run = new Runnable() {
+      @Override
+      public void run() {
+        SimpleEntity se = new SimpleEntity();
+        se.id = Integer.valueOf(String.valueOf(System.currentTimeMillis()).substring(8));
+        se.name = "Name: " + System.currentTimeMillis();
+        try {
+          localDs.createData(edmEntitySet, se);
+        } catch (Exception ex) {
+          throw new RuntimeException(ex);
+        }
+      }
+    };
+
+      threads.add(new Thread(run));
+    }
+    
+    for (Thread thread : threads) {
+      thread.start();
+    }
+
+    TimeUnit.MILLISECONDS.sleep(500);
+    
+    DataStore<SimpleEntity> ds = localDs.getDataStore(SimpleEntity.class);
+    Collection<SimpleEntity> buildings = ds.read();
+    Assert.assertEquals(max, buildings.size());
+  }
+
+  private Thread createBuildingThread(final DataSource datasource, final EdmEntitySet edmEntitySet, final String id) {
+    Runnable run = new Runnable() {
+      @Override
+      public void run() {
+        Building building = new Building();
+        building.setName("Common Building - " + System.currentTimeMillis());
+        building.setId(id);
+        try {
+          datasource.createData(edmEntitySet, building);
+        } catch (Exception ex) {
+          throw new RuntimeException(ex);
+        }
+      }
+    };
+
+    return new Thread(run);
+  }
 
   @Test
+  @SuppressWarnings("unchecked")
+  public void readRelatedEntity() throws Exception {
+    EdmEntitySet buildingsEntitySet = createMockedEdmEntitySet("Buildings");
+    EdmEntitySet roomsEntitySet = createMockedEdmEntitySet("Rooms");
+
+    Building building = new Building();
+    building.setName("Common Building");
+    
+    final int roomsCount = 10;
+    List<Room> rooms = new ArrayList<Room>();
+    for (int i = 0; i < roomsCount; i++) {
+      Room room = new Room(i, "Room " + i);
+      room.setBuilding(building);
+      datasource.createData(roomsEntitySet, room);
+      rooms.add(room);
+    }
+    
+    building.getRooms().addAll(rooms);
+    datasource.createData(buildingsEntitySet, building);
+
+    Map<String, Object> keys = new HashMap<String, Object>();
+    keys.put("Id", "1");
+
+    Building read = (Building) datasource.readData(buildingsEntitySet, keys);
+    Assert.assertEquals("Common Building", read.getName());
+    Assert.assertEquals("1", read.getId());
+    
+    // execute
+    Object relatedData = datasource.readRelatedData(
+        buildingsEntitySet, building, roomsEntitySet, Collections.EMPTY_MAP);
+    
+    // validate
+    Assert.assertTrue("Result is no collection.", relatedData instanceof Collection);
+    Collection<Room> relatedRooms = (Collection<Room>) relatedData;
+    Assert.assertEquals(roomsCount, relatedRooms.size());
+    for (Room room : relatedRooms) {
+      Assert.assertNotNull(room.getId());
+      Assert.assertTrue(room.getName().matches("Room \\d*"));
+      Assert.assertEquals("Common Building", room.getBuilding().getName());
+    }
+  }
+
+  
+  @Test
   public void createSimpleEntity() throws Exception {
     EdmEntitySet edmEntitySet = createMockedEdmEntitySet("Buildings");
 
@@ -131,9 +272,7 @@ public class AnnotationsInMemoryDsTest {
   }
 
   @Test
-  // @Ignore("Rethink update method")
-      public
-      void createAndUpdateEntityTwoKeys() throws Exception {
+  public void createAndUpdateEntityTwoKeys() throws Exception {
     EdmEntitySet edmEntitySet = createMockedEdmEntitySet("Photos");
 
     Photo photo = new Photo();
@@ -175,6 +314,11 @@ public class AnnotationsInMemoryDsTest {
   }
 
   private EdmEntitySet createMockedEdmEntitySet(final String entitySetName) throws ODataException {
+    return createMockedEdmEntitySet(edmProvider, entitySetName);
+  }
+  
+  private EdmEntitySet createMockedEdmEntitySet(AnnotationEdmProvider edmProvider, final String entitySetName) 
+      throws ODataException {
     EntitySet entitySet = edmProvider.getEntitySet(DEFAULT_CONTAINER, entitySetName);
     FullQualifiedName entityType = entitySet.getEntityType();
 

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/f1901353/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/model/Building.java
----------------------------------------------------------------------
diff --git a/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/model/Building.java b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/model/Building.java
index 9ff7cf5..9f9dc00 100644
--- a/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/model/Building.java
+++ b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/model/Building.java
@@ -53,6 +53,10 @@ public class Building {
     return id;
   }
 
+  public void setId(String id) {
+    this.id = id;
+  }
+
   public void setName(final String name) {
     this.name = name;
   }