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;
}