diff --git a/indexer-service-root/src/main/java/org/opengroup/osdu/indexer/api/RecordIndexerApi.java b/indexer-service-root/src/main/java/org/opengroup/osdu/indexer/api/RecordIndexerApi.java index 233a061c51f761e63a6975fa1bc0bfdb5fe3fdba..473275737b178e6ef6664e5983238d3aa69fe481 100644 --- a/indexer-service-root/src/main/java/org/opengroup/osdu/indexer/api/RecordIndexerApi.java +++ b/indexer-service-root/src/main/java/org/opengroup/osdu/indexer/api/RecordIndexerApi.java @@ -17,8 +17,10 @@ package org.opengroup.osdu.indexer.api; import com.google.common.reflect.TypeToken; import com.google.gson.Gson; +import com.google.gson.JsonParseException; import io.swagger.annotations.ApiOperation; import lombok.extern.java.Log; +import org.opengroup.osdu.core.api.DpsHeaders; import org.opengroup.osdu.indexer.SwaggerDoc; import org.opengroup.osdu.indexer.util.JobStatus; import org.opengroup.osdu.indexer.model.RecordReindexRequest; @@ -26,6 +28,7 @@ import org.opengroup.osdu.indexer.service.IndexerService; import org.opengroup.osdu.indexer.service.ReindexService; import org.opengroup.osdu.indexer.util.RecordInfo; import org.opengroup.osdu.is.core.model.RecordChangedMessages; +import org.opengroup.osdu.is.core.util.AppException; import org.springframework.http.HttpStatus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -56,17 +59,34 @@ public class RecordIndexerApi { @NotNull(message = SwaggerDoc.REQUEST_VALIDATION_NOT_NULL_BODY) @Valid @RequestBody RecordChangedMessages recordChangedMessages) throws Exception { + if (recordChangedMessages.missingAccountId()) { + throw new AppException(org.apache.http.HttpStatus.SC_BAD_REQUEST, "Invalid tenant", + String.format("Required header: '%s' not found", DpsHeaders.DATA_PARTITION_ID)); + } + try { if (recordChangedMessages == null) { log.info("record change messages is null"); } - Type listType = new TypeToken<List<RecordInfo>>() {}.getType(); + Type listType = new TypeToken<List<RecordInfo>>() { + }.getType(); List<RecordInfo> recordInfos = new Gson().fromJson(recordChangedMessages.getData(), listType); if (recordInfos == null) { log.info("RECORD INFO IS NULL"); } + if (recordInfos.size() == 0) { + log.info("none of record-change message can be deserialized"); + return new ResponseEntity(HttpStatus.OK); + } this.indexerService.processRecordChangedMessages(recordChangedMessages, recordInfos); return new ResponseEntity(HttpStatus.OK); + } catch (AppException e) { + throw e; + } catch (JsonParseException e) { + throw new AppException(org.apache.http.HttpStatus.SC_BAD_REQUEST, "Request payload parsing error", "Unable to parse request payload.", e); + } catch (Exception e) { + throw new AppException(org.apache.http.HttpStatus.SC_BAD_REQUEST, "Unknown error", "An unknown error has occurred.", e); + } } // THIS IS AN INTERNAL USE API ONLY diff --git a/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/api/RecordIndexerApiTest.java b/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/api/RecordIndexerApiTest.java index 9a25b6c3ae47a3d01417f44bfa025b68444dcd08..573be342c220f5e121c87471295dd9f9ac6cf851 100644 --- a/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/api/RecordIndexerApiTest.java +++ b/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/api/RecordIndexerApiTest.java @@ -42,17 +42,17 @@ import static org.mockito.MockitoAnnotations.initMocks; import static org.powermock.api.mockito.PowerMockito.mockStatic; import static org.powermock.api.mockito.PowerMockito.when; -@Ignore @RunWith(PowerMockRunner.class) @PrepareForTest({HeadersUtil.class, IndexerQueueTaskBuilder.class, DpsHeaders.class, Config.class}) public class RecordIndexerApiTest { - private final String messageValid = "{\"data\":\"[{\\\"id\\\":\\\"tenant1:welldb:wellbore-d9033ae1-fb15-496c-9ba0-880fd1d2b2cf\\\",\\\"kind\\\":\\\"tenant1:welldb:wellbore:1.0.0\\\",\\\"op\\\":\\\"create\\\"}]\",\"attributes\":{\"slb-account-id\":\"tenant1\",\"slb-correlation-id\":\"b5a281bd-f59d-4db2-9939-b2d85036fc7e\"},\"messageId\":\"75328163778221\",\"publishTime\":\"2018-05-08T21:48:56.131Z\"}"; + private final String messageValid = "{\"data\":\"[{\\\"id\\\":\\\"opendes:welldb:wellbore-d9033ae1-fb15-496c-9ba0-880fd1d2b2cf\\\",\\\"kind\\\":\\\"tenant1:welldb:wellbore:1.0.0\\\",\\\"op\\\":\\\"create\\\"}]\",\"attributes\":{\"account-id\":\"opendes\",\"correlation-id\":\"b5a281bd-f59d-4db2-9939-b2d85036fc7e\"},\"messageId\":\"75328163778221\",\"publishTime\":\"2018-05-08T21:48:56.131Z\"}"; private final String messageEmpty = "{}"; - private final String messageWithEmptyData = "{\"data\":\"[]\",\"attributes\":{\"slb-account-id\":\"tenant1\",\"slb-correlation-id\":\"b5a281bd-f59d-4db2-9939-b2d85036fc7e\"},\"messageId\":\"75328163778221\",\"publishTime\":\"2018-05-08T21:48:56.131Z\"}"; - private final String messageWithIncorrectJsonFormat = "{\"data\":\"[{}}]\",\"attributes\":{\"slb-account-id\":\"tenant1\",\"slb-correlation-id\":\"b5a281bd-f59d-4db2-9939-b2d85036fc7e\"},\"messageId\":\"75328163778221\",\"publishTime\":\"2018-05-08T21:48:56.131Z\"}"; + private final String messageWithEmptyData = "{\"data\":\"[]\",\"attributes\":{\"account-id\":\"opendes\",\"correlation-id\":\"b5a281bd-f59d-4db2-9939-b2d85036fc7e\"},\"messageId\":\"75328163778221\",\"publishTime\":\"2018-05-08T21:48:56.131Z\"}"; + private final String messageWithIncorrectJsonFormat = "{\"data\":\"[{}}]\",\"attributes\":{\"account-id\":\"opendes\",\"correlation-id\":\"b5a281bd-f59d-4db2-9939-b2d85036fc7e\"},\"messageId\":\"75328163778221\",\"publishTime\":\"2018-05-08T21:48:56.131Z\"}"; private final String ACCOUNT_ID = "any-account"; + private final String DATA_PARTITION_ID = "opendes"; @InjectMocks private RecordIndexerApi sut; @@ -61,20 +61,15 @@ public class RecordIndexerApiTest { @Mock private IndexerService indexService; + @Mock + private DpsHeaders dpsHeaders; + @Before public void setup() { initMocks(this); -// mockStatic(HeadersUtil.class); -// mockStatic(IndexerQueueTaskBuilder.class); -// mockStatic(DpsHeaders.class); -// mockStatic(Config.class); - - DpsHeaders dpsHeaders = new DpsHeaders(); dpsHeaders.put(DpsHeaders.ACCOUNT_ID, this.ACCOUNT_ID); - when(DpsHeaders.createFromEntrySet(any())).thenReturn(dpsHeaders); - - when(Config.getDeploymentEnvironment()).thenReturn(DeploymentEnvironment.LOCAL); + dpsHeaders.put(DpsHeaders.DATA_PARTITION_ID, this.DATA_PARTITION_ID); } @Test @@ -89,7 +84,7 @@ public class RecordIndexerApiTest { @Test public void should_return400_given_emptyMessage_indexWorkerTest() { - should_return400_indexerWorkerTest(messageEmpty, "Required header: 'slb-data-partition-id' not found"); + should_return400_indexerWorkerTest(messageEmpty, String.format("Required header: '%s' not found", DpsHeaders.DATA_PARTITION_ID)); } @Test @@ -99,7 +94,7 @@ public class RecordIndexerApiTest { private void should_return200_indexerWorkerTest(String message) throws Exception { ResponseEntity response = this.sut.indexWorker(createRecordChangedMessage(message)); - Assert.assertEquals(HttpStatus.OK, response.getStatusCodeValue()); + Assert.assertEquals(HttpStatus.OK.value(), response.getStatusCodeValue()); } private void should_return400_indexerWorkerTest(String message, String errorMessage) { @@ -107,7 +102,7 @@ public class RecordIndexerApiTest { this.sut.indexWorker(createRecordChangedMessage(message)); fail("Should throw exception"); } catch (AppException e) { - Assert.assertEquals(HttpStatus.BAD_REQUEST, e.getError().getCode()); + Assert.assertEquals(HttpStatus.BAD_REQUEST.value(), e.getError().getCode()); Assert.assertEquals(errorMessage, e.getError().getMessage()); } catch (Exception e) { fail("Should not throw this exception" + e.getMessage()); diff --git a/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/model/ElasticTypeTest.java b/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/model/ElasticTypeTest.java index 53773ae8efe8874d423433dcfb52a18965a66b82..271b0b6717e237b657e59f3ace3d15fadd7647be 100644 --- a/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/model/ElasticTypeTest.java +++ b/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/model/ElasticTypeTest.java @@ -15,6 +15,7 @@ package org.opengroup.osdu.indexer.model; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.junit4.SpringRunner; diff --git a/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/model/IndexingStatusTest.java b/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/model/IndexingStatusTest.java index 75cdf7e97da6dead3cbfc47ae4d092680ba458a8..61ccf7a0eadcc771445826968ddb80bcde5a667b 100644 --- a/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/model/IndexingStatusTest.java +++ b/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/model/IndexingStatusTest.java @@ -15,6 +15,7 @@ package org.opengroup.osdu.indexer.model; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.junit4.SpringRunner; diff --git a/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/util/RecordInfoTest.java b/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/util/RecordInfoTest.java index 38c7dcd928dd06e7bda335e8e5dcbb70d01a0c9f..43bb8e26537ee5f9f505a9dcb345fc827630200e 100644 --- a/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/util/RecordInfoTest.java +++ b/indexer-service-root/src/test/java/org/opengroup/osdu/indexer/util/RecordInfoTest.java @@ -57,8 +57,8 @@ public class RecordInfoTest { Assert.assertEquals(OperationType.update, kindRecordOpMap.get("tenant1:testindexer3:well:1.0.0").get("tenant1:doc:test3")); } - @Test - public void should_return400_getUpsertRecordTest(List<RecordInfo> msgs, String errorMessage) { + + private void should_return400_getUpsertRecordTest(List<RecordInfo> msgs, String errorMessage) { try { RecordInfo.getUpsertRecordIds(msgs); } catch (AppException e) { @@ -82,8 +82,8 @@ public class RecordInfoTest { Assert.assertEquals(2, deleteRecordMap.get("tenant1:testindexer4:well:1.0.0").size()); } - @Test - public void should_return400_getDeleteRecordTest(List<RecordInfo> msgs, String errorMessage) { + + private void should_return400_getDeleteRecordTest(List<RecordInfo> msgs, String errorMessage) { try { RecordInfo.getDeleteRecordIds(msgs); fail("Should throw exception");