From 174fbff9b42b7ab003848a1eef2e46eac0783789 Mon Sep 17 00:00:00 2001 From: Aman Verma Date: Wed, 5 Aug 2020 17:28:06 +0530 Subject: [PATCH 1/5] adding new method --- .../org/opengroup/osdu/azure/CosmosStore.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/main/java/org/opengroup/osdu/azure/CosmosStore.java b/src/main/java/org/opengroup/osdu/azure/CosmosStore.java index a7e166b0..3c50a4ae 100644 --- a/src/main/java/org/opengroup/osdu/azure/CosmosStore.java +++ b/src/main/java/org/opengroup/osdu/azure/CosmosStore.java @@ -14,6 +14,7 @@ package org.opengroup.osdu.azure; +import com.azure.cosmos.ConflictException; import com.azure.cosmos.CosmosClientException; import com.azure.cosmos.CosmosContainer; import com.azure.cosmos.CosmosItem; @@ -316,6 +317,32 @@ public class CosmosStore { } } + /** + * @param dataPartitionId Data partition id to fetch appropriate cosmos client for each partition + * @param cosmosDBName Database to be used + * @param collection Collection to be used + * @param item Data object to store + * @param Type of response + */ + public void createItem( + final String dataPartitionId, + final String cosmosDBName, + final String collection, + final T item) { + try { + CosmosContainer cosmosContainer = getCosmosContainer(dataPartitionId, cosmosDBName, collection); + cosmosContainer.createItem(item); + } catch (ConflictException e) { + String errorMessage = "Resource with specified id or name already exists."; + LOGGER.log(Level.WARNING, errorMessage, e); + throw new AppException(409, errorMessage, e.getMessage(), e); + } catch (CosmosClientException e) { + String errorMessage = "Unexpectedly failed to insert item into CosmosDB"; + LOGGER.log(Level.WARNING, errorMessage, e); + throw new AppException(500, errorMessage, e.getMessage(), e); + } + } + /** * @param cosmos Container to query * @param id ID of item -- GitLab From 4b1246d7f3ec3c226f80f6112095a6a3d22a4fbf Mon Sep 17 00:00:00 2001 From: Aman Verma Date: Wed, 5 Aug 2020 17:38:38 +0530 Subject: [PATCH 2/5] adding required UTs --- .../opengroup/osdu/azure/CosmosStoreTest.java | 52 +++++++++++-------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/src/test/java/org/opengroup/osdu/azure/CosmosStoreTest.java b/src/test/java/org/opengroup/osdu/azure/CosmosStoreTest.java index 6d78f550..e3be7c32 100644 --- a/src/test/java/org/opengroup/osdu/azure/CosmosStoreTest.java +++ b/src/test/java/org/opengroup/osdu/azure/CosmosStoreTest.java @@ -14,17 +14,7 @@ package org.opengroup.osdu.azure; -import com.azure.cosmos.CosmosClient; -import com.azure.cosmos.CosmosClientException; -import com.azure.cosmos.CosmosContainer; -import com.azure.cosmos.CosmosDatabase; -import com.azure.cosmos.CosmosItem; -import com.azure.cosmos.CosmosItemProperties; -import com.azure.cosmos.CosmosItemResponse; -import com.azure.cosmos.FeedOptions; -import com.azure.cosmos.FeedResponse; -import com.azure.cosmos.NotFoundException; -import com.azure.cosmos.SqlQuerySpec; +import com.azure.cosmos.*; import com.azure.cosmos.internal.AsyncDocumentClient; import com.azure.cosmos.internal.Document; import org.junit.jupiter.api.BeforeEach; @@ -43,19 +33,10 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.lenient; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class CosmosStoreTest { @@ -158,6 +139,33 @@ class CosmosStoreTest { assertEquals(500, exception.getError().getCode()); } + @Test + void createItem_throws409_ifDuplicateDocument() throws CosmosClientException { + doThrow(ConflictException.class).when(container).createItem(any()); + AppException exception = assertThrows(AppException.class, () -> { + cosmosStore.createItem(DATA_PARTITION_ID, COSMOS_DB, COLLECTION, "some-data"); + }); + assertEquals(409, exception.getError().getCode()); + } + + @Test + void createItem_throws500_ifUnknownError() throws CosmosClientException { + doThrow(CosmosClientException.class).when(container).createItem(any()); + AppException exception = assertThrows(AppException.class, () -> { + cosmosStore.createItem(DATA_PARTITION_ID, COSMOS_DB, COLLECTION, "some-data"); + }); + assertEquals(500, exception.getError().getCode()); + } + + @Test + void createItem_Success() throws CosmosClientException { + try { + cosmosStore.createItem(DATA_PARTITION_ID, COSMOS_DB, COLLECTION, "some-data"); + } catch (Exception ex) { + fail("Should not fail."); + } + } + @Test void findAllItems_executesCorrectQuery() throws IOException { mockQueryResponse("s1"); -- GitLab From f018827819600ea2f5e485bd7f5755da992bcdc9 Mon Sep 17 00:00:00 2001 From: Aman Verma Date: Wed, 5 Aug 2020 17:53:43 +0530 Subject: [PATCH 3/5] upgrading version --- pom.xml | 2 +- .../opengroup/osdu/azure/CosmosStoreTest.java | 22 +++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index aeecd6fd..ed1aae4c 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ org.opengroup.osdu core-lib-azure jar - 0.0.15 + 0.0.16 core-lib-azure diff --git a/src/test/java/org/opengroup/osdu/azure/CosmosStoreTest.java b/src/test/java/org/opengroup/osdu/azure/CosmosStoreTest.java index e3be7c32..055ab6a0 100644 --- a/src/test/java/org/opengroup/osdu/azure/CosmosStoreTest.java +++ b/src/test/java/org/opengroup/osdu/azure/CosmosStoreTest.java @@ -14,7 +14,18 @@ package org.opengroup.osdu.azure; -import com.azure.cosmos.*; +import com.azure.cosmos.ConflictException; +import com.azure.cosmos.CosmosClient; +import com.azure.cosmos.CosmosClientException; +import com.azure.cosmos.CosmosContainer; +import com.azure.cosmos.CosmosDatabase; +import com.azure.cosmos.CosmosItem; +import com.azure.cosmos.CosmosItemProperties; +import com.azure.cosmos.CosmosItemResponse; +import com.azure.cosmos.FeedOptions; +import com.azure.cosmos.FeedResponse; +import com.azure.cosmos.NotFoundException; +import com.azure.cosmos.SqlQuerySpec; import com.azure.cosmos.internal.AsyncDocumentClient; import com.azure.cosmos.internal.Document; import org.junit.jupiter.api.BeforeEach; @@ -36,7 +47,14 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + @ExtendWith(MockitoExtension.class) class CosmosStoreTest { -- GitLab From 24cf126dcb270b92b1918b40c8d3aec30180dfc0 Mon Sep 17 00:00:00 2001 From: Aman Verma Date: Wed, 5 Aug 2020 17:56:44 +0530 Subject: [PATCH 4/5] removing import by * --- .../java/org/opengroup/osdu/azure/CosmosStoreTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/opengroup/osdu/azure/CosmosStoreTest.java b/src/test/java/org/opengroup/osdu/azure/CosmosStoreTest.java index 055ab6a0..badef31c 100644 --- a/src/test/java/org/opengroup/osdu/azure/CosmosStoreTest.java +++ b/src/test/java/org/opengroup/osdu/azure/CosmosStoreTest.java @@ -44,7 +44,11 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doReturn; @@ -55,7 +59,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; - @ExtendWith(MockitoExtension.class) class CosmosStoreTest { -- GitLab From 5871c627b8e9de34ce9f863f0af2c20077d83049 Mon Sep 17 00:00:00 2001 From: Aman Verma Date: Wed, 5 Aug 2020 18:01:42 +0530 Subject: [PATCH 5/5] adding example --- src/main/java/org/opengroup/osdu/azure/CosmosStore.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/opengroup/osdu/azure/CosmosStore.java b/src/main/java/org/opengroup/osdu/azure/CosmosStore.java index 3c50a4ae..3a64c169 100644 --- a/src/main/java/org/opengroup/osdu/azure/CosmosStore.java +++ b/src/main/java/org/opengroup/osdu/azure/CosmosStore.java @@ -70,6 +70,10 @@ import java.util.logging.Logger; * * List objects = cosmosStore.queryItems("dataPartitionId", "cosmosDb", "collection", query, options, MyObject.class); * } + * + * void createItemExample() { + * cosmosStore.createItem("dataPartitionId", "cosmosDb", "collection", "some-data"); + * } * } * */ -- GitLab