From 7c4ecf13ab60fd5f8c0ce63bb05c0ce7c265b5c2 Mon Sep 17 00:00:00 2001 From: Harshit Aggarwal <haaggarw@microsoft.com> Date: Fri, 21 Aug 2020 10:24:40 +0530 Subject: [PATCH] changing delete api call in action and ddms repo --- .../azure/action/ActionRepository.java | 37 +++++++++++------ .../provider/azure/ddms/DdmsRepository.java | 37 +++++++++++------ .../azure/action/ActionRepositoryTest.java | 40 ++++++------------- .../azure/ddms/DdmsRepositoryTest.java | 40 ++++++------------- 4 files changed, 74 insertions(+), 80 deletions(-) diff --git a/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/action/ActionRepository.java b/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/action/ActionRepository.java index c28557ef7..01350ceab 100644 --- a/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/action/ActionRepository.java +++ b/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/action/ActionRepository.java @@ -64,13 +64,21 @@ public class ActionRepository implements IActionRepo { try { mutex.lock(); - if (exists(action.getId())) { - logger.error(String.format("An action already exists with the id: %s", action.getId())); - throw new AppException(409, "Conflict", String.format("An action already exists with the id: %s", action.getId())); - } - ActionDoc doc = new ActionDoc(action, dpsHeaders.getPartitionId()); - cosmosStore.upsertItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getActionContainerName(), doc); + + try { + cosmosStore.createItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getActionContainerName(), doc); + } + catch (AppException e) { + if(e.getError().getCode() == 409) { + logger.error(String.format("An action already exists with the id: %s", action.getId())); + throw new AppException(409, "Conflict", String.format("An action already exists with the id: %s", action.getId())); + } + else { + logger.error(e.getMessage()); + throw new AppException(e.getError().getCode(), e.getError().getReason(), e.getMessage()); + } + } } finally { mutex.unlock(); @@ -93,11 +101,18 @@ public class ActionRepository implements IActionRepo { @Override public boolean delete(String id) { - if(!exists(id)){ + try { + cosmosStore.deleteItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getActionContainerName(), id, dpsHeaders.getPartitionId()); + } + catch (AppException e) { + if(e.getError().getCode() == 404) { + logger.error(String.format("Action with id %s does not exist.", id)); + } + else { + logger.error(e.getMessage()); + } return false; } - - cosmosStore.deleteItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getActionContainerName(), id, dpsHeaders.getPartitionId()); return true; } @@ -113,10 +128,6 @@ public class ActionRepository implements IActionRepo { .stream().map(this::convertToActionClass).collect(Collectors.toList()); } - private boolean exists(String id) { - return cosmosStore.findItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getActionContainerName(), id, dpsHeaders.getPartitionId(), ActionDoc.class).isPresent(); - } - private Action convertToActionClass(ActionDoc doc){ Action action = new Action(); action.setId(doc.getId()); diff --git a/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepository.java b/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepository.java index 7a8ed6dcb..608842be5 100644 --- a/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepository.java +++ b/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepository.java @@ -61,13 +61,21 @@ public class DdmsRepository implements IDdmsRepository { try { mutex.lock(); - if(exists(ddms.getId())){ - logger.error(String.format("A DDMS already exists with the same id: %s", ddms.getId())); - throw new AppException(409, "Conflict", String.format("A DDMS already exists with the same id: %s", ddms.getId())); - } - DdmsDoc doc = new DdmsDoc(ddms, dpsHeaders.getPartitionId()); - cosmosStore.upsertItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getDdmsContainerName(), doc); + + try { + cosmosStore.createItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getDdmsContainerName(), doc); + } + catch (AppException e) { + if(e.getError().getCode() == 409) { + logger.error(String.format("A DDMS already exists with the same id: %s", ddms.getId())); + throw new AppException(409, "Conflict", String.format("A DDMS already exists with the same id: %s", ddms.getId())); + } + else { + logger.error(e.getMessage()); + throw new AppException(e.getError().getCode(), e.getError().getReason(), e.getMessage()); + } + } } finally { mutex.unlock(); @@ -107,18 +115,21 @@ public class DdmsRepository implements IDdmsRepository { @Override public boolean delete(String id) { - if(!exists(id)){ + try { + cosmosStore.deleteItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getDdmsContainerName(), id, dpsHeaders.getPartitionId()); + } + catch (AppException e) { + if(e.getError().getCode() == 404) { + logger.error(String.format("DDMS with id %s does not exist.", id)); + } + else { + logger.error(e.getMessage()); + } return false; } - - cosmosStore.deleteItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getDdmsContainerName(), id, dpsHeaders.getPartitionId()); return true; } - private boolean exists(String id) { - return cosmosStore.findItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getDdmsContainerName(), id, dpsHeaders.getPartitionId(), DdmsDoc.class).isPresent(); - } - private Ddms ConvertToDdmsClass(DdmsDoc doc){ Ddms ddms= new Ddms(); ddms.setId(doc.getId()); diff --git a/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/action/ActionRepositoryTest.java b/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/action/ActionRepositoryTest.java index 4a97c6ba1..6eac4245a 100644 --- a/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/action/ActionRepositoryTest.java +++ b/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/action/ActionRepositoryTest.java @@ -30,7 +30,6 @@ import org.opengroup.osdu.register.provider.azure.di.AzureBootstrapConfig; import org.opengroup.osdu.register.provider.azure.di.CosmosContainerConfig; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -43,6 +42,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -70,9 +70,6 @@ public class ActionRepositoryTest { @Mock private JaxRsDpsLog logger; - @Mock - private Map<String, String> logHeaders; - @InjectMocks private ActionRepository repo; @@ -101,9 +98,7 @@ public class ActionRepositoryTest { @Test public void createActionThrows409WhenIdExists() { Action action = createAction(); - Optional<ActionDoc> cosmosItem = Optional.of(new ActionDoc(action, dataPartitionId)); - - doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId), any()); + doThrow(new AppException(409, "Reason", "Message")).when(cosmosStore).createItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), any()); AppException exception = assertThrows(AppException.class, () -> { repo.createAction(action); @@ -112,7 +107,6 @@ public class ActionRepositoryTest { assertEquals(409, exception.getError().getCode()); assertEquals("Conflict", exception.getError().getReason()); assertEquals(String.format("An action already exists with the id: %s", action.getId()), exception.getError().getMessage()); - verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId, ActionDoc.class); verify(dpsHeaders, times(2)).getPartitionId(); verify(logger, times(1)).error(String.format("An action already exists with the id: %s", action.getId())); } @@ -120,18 +114,14 @@ public class ActionRepositoryTest { @Test public void createActionDocumentInsertedSuccessfully() { Action action = createAction(); - - Optional<ActionDoc> cosmosItem = Optional.empty(); - doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId), any()); - doNothing().when(cosmosStore).upsertItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), any()); + doNothing().when(cosmosStore).createItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), any()); Action output = repo.createAction(action); assertEquals(action, output); - verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId, ActionDoc.class); - verify(azureBootstrapConfig, times(2)).getCosmosDBName(); - verify(cosmosContainerConfig, times(2)).getActionContainerName(); - verify(dpsHeaders, times(4)).getPartitionId(); + verify(azureBootstrapConfig, times(1)).getCosmosDBName(); + verify(cosmosContainerConfig, times(1)).getActionContainerName(); + verify(dpsHeaders, times(2)).getPartitionId(); } @Test @@ -172,34 +162,30 @@ public class ActionRepositoryTest { @Test public void deleteActionReturnsFalseWhenIdNotFound() { - doReturn(Optional.empty()).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId), any()); + doThrow(new AppException(404, "Reason", "Message")).when(cosmosStore).deleteItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId)); boolean output = repo.delete(actionId); assertFalse(output); - verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId, ActionDoc.class); + verify(cosmosStore, times(1)).deleteItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId); verify(azureBootstrapConfig, times(1)).getCosmosDBName(); verify(cosmosContainerConfig, times(1)).getActionContainerName(); verify(dpsHeaders, times(2)).getPartitionId(); + verify(logger, times(1)).error("Action with id id-1 does not exist."); } @Test public void deleteActionReturnsTrueWhenDeletedSuccessfully() { - Action action = createAction(); - ActionDoc doc = new ActionDoc(action, dataPartitionId); - - Optional<ActionDoc> cosmosItem = Optional.of(doc); - doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId), any()); + doNothing().when(cosmosStore).deleteItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId)); boolean output = repo.delete(actionId); assertTrue(output); - verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId, ActionDoc.class); verify(cosmosStore, times(1)).deleteItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId); - verify(azureBootstrapConfig, times(2)).getCosmosDBName(); - verify(cosmosContainerConfig, times(2)).getActionContainerName(); - verify(dpsHeaders, times(4)).getPartitionId(); + verify(azureBootstrapConfig, times(1)).getCosmosDBName(); + verify(cosmosContainerConfig, times(1)).getActionContainerName(); + verify(dpsHeaders, times(2)).getPartitionId(); } @Test diff --git a/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepositoryTest.java b/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepositoryTest.java index 1e4354c93..256e9320a 100644 --- a/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepositoryTest.java +++ b/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepositoryTest.java @@ -31,7 +31,6 @@ import org.opengroup.osdu.register.provider.azure.di.CosmosContainerConfig; import java.util.Collections; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -44,6 +43,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -71,9 +71,6 @@ public class DdmsRepositoryTest { @Mock private JaxRsDpsLog logger; - @Mock - private Map<String, String> logHeaders; - @InjectMocks private DdmsRepository repo; @@ -87,9 +84,7 @@ public class DdmsRepositoryTest { @Test public void createDdmsThrows409WhenIdExists() { Ddms ddms = createDdms(); - Optional<DdmsDoc> cosmosItem = Optional.of(new DdmsDoc()); - - doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId), any()); + doThrow(new AppException(409, "Reason", "Message")).when(cosmosStore).createItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), any()); AppException exception = assertThrows(AppException.class, () -> { repo.create(ddms); @@ -98,7 +93,6 @@ public class DdmsRepositoryTest { assertEquals(409, exception.getError().getCode()); assertEquals("Conflict", exception.getError().getReason()); assertEquals(String.format("A DDMS already exists with the same id: %s", ddms.getId()), exception.getError().getMessage()); - verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId, DdmsDoc.class); verify(cosmosContainerConfig, times(1)).getDdmsContainerName(); verify(dpsHeaders, times(2)).getPartitionId(); verify(logger, times(1)).error(String.format("A DDMS already exists with the same id: %s", ddms.getId())); @@ -107,18 +101,14 @@ public class DdmsRepositoryTest { @Test public void createDdmsDocumentInsertedSuccessfully() { Ddms ddms = createDdms(); - - Optional<DdmsDoc> cosmosItem = Optional.empty(); - doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId), any()); - doNothing().when(cosmosStore).upsertItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), any()); + doNothing().when(cosmosStore).createItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), any()); Ddms output = repo.create(ddms); assertEquals(ddms, output); - verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId, DdmsDoc.class); - verify(azureBootstrapConfig, times(2)).getCosmosDBName(); - verify(cosmosContainerConfig, times(2)).getDdmsContainerName(); - verify(dpsHeaders, times(4)).getPartitionId(); + verify(azureBootstrapConfig, times(1)).getCosmosDBName(); + verify(cosmosContainerConfig, times(1)).getDdmsContainerName(); + verify(dpsHeaders, times(2)).getPartitionId(); } @Test @@ -160,34 +150,30 @@ public class DdmsRepositoryTest { @Test public void deleteDdmsReturnsFalseWhenIdNotFound() { - doReturn(Optional.empty()).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId), any()); + doThrow(new AppException(404, "Reason", "Message")).when(cosmosStore).deleteItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId)); boolean output = repo.delete(ddmsId); assertFalse(output); - verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId, DdmsDoc.class); + verify(cosmosStore, times(1)).deleteItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId); verify(azureBootstrapConfig, times(1)).getCosmosDBName(); verify(cosmosContainerConfig, times(1)).getDdmsContainerName(); verify(dpsHeaders, times(2)).getPartitionId(); + verify(logger, times(1)).error(String.format("DDMS with id %s does not exist.", ddmsId)); } @Test public void deleteDdmsReturnsTrueWhenDeletedSuccessfully() { - Ddms ddms = createDdms(); - DdmsDoc doc = new DdmsDoc(ddms, dataPartitionId); - - Optional<DdmsDoc> cosmosItem = Optional.of(doc); - doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId), any()); + doNothing().when(cosmosStore).deleteItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId)); boolean output = repo.delete(ddmsId); assertTrue(output); - verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId, DdmsDoc.class); verify(cosmosStore, times(1)).deleteItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId); - verify(azureBootstrapConfig, times(2)).getCosmosDBName(); - verify(cosmosContainerConfig, times(2)).getDdmsContainerName(); - verify(dpsHeaders, times(4)).getPartitionId(); + verify(azureBootstrapConfig, times(1)).getCosmosDBName(); + verify(cosmosContainerConfig, times(1)).getDdmsContainerName(); + verify(dpsHeaders, times(2)).getPartitionId(); } @Test -- GitLab