diff --git a/provider/legal-azure/src/main/java/org/opengroup/osdu/legal/azure/jobs/AboutToExpireLegalTagPublisherImpl.java b/provider/legal-azure/src/main/java/org/opengroup/osdu/legal/azure/jobs/AboutToExpireLegalTagPublisherImpl.java index 8d34282f97b98917facff423b9be85d9589424c8..9963945b15928394f0fe401e7d33c3566e568bb2 100644 --- a/provider/legal-azure/src/main/java/org/opengroup/osdu/legal/azure/jobs/AboutToExpireLegalTagPublisherImpl.java +++ b/provider/legal-azure/src/main/java/org/opengroup/osdu/legal/azure/jobs/AboutToExpireLegalTagPublisherImpl.java @@ -7,9 +7,19 @@ import org.opengroup.osdu.legal.jobs.models.AboutToExpireLegalTags; import org.springframework.stereotype.Service; @Service -public class AboutToExpireLegalTagPublisherImpl implements IAboutToExpireLegalTagPublisher { +public class AboutToExpireLegalTagPublisherImpl extends AbstractPublisher implements IAboutToExpireLegalTagPublisher { + protected final static String LEGAL_TAGS_CHANGE_EVENT_SUBJECT = "legaltagclosetoexpiretopic"; + protected final static String LEGAL_TAGS_CHANGE_EVENT_TYPE = "legaltagclosetoexpiretopic"; + protected final static String LEGAL_TAGS_CHANGE_EVENT_DATA_VERSION = "1.0"; + protected final static String LEGAL_TAGS_CHANGE_EVENT_DEBUG_MESSAGE = "Legal publishes about to expire tag event"; + + public AboutToExpireLegalTagPublisherImpl() { + super(LEGAL_TAGS_CHANGE_EVENT_SUBJECT, LEGAL_TAGS_CHANGE_EVENT_TYPE, LEGAL_TAGS_CHANGE_EVENT_DATA_VERSION, LEGAL_TAGS_CHANGE_EVENT_DEBUG_MESSAGE); + } + @Override public void publish(String projectId, DpsHeaders headers, AboutToExpireLegalTags aboutToExpireLegalTags) { - // to be implemented + publishToServiceBus(headers, aboutToExpireLegalTags); + publishToEventGrid(headers, aboutToExpireLegalTags); } } diff --git a/provider/legal-azure/src/main/java/org/opengroup/osdu/legal/azure/jobs/AbstractPublisher.java b/provider/legal-azure/src/main/java/org/opengroup/osdu/legal/azure/jobs/AbstractPublisher.java new file mode 100644 index 0000000000000000000000000000000000000000..03ce77f86c35110d82fbb7b73b25b5a038bea8d5 --- /dev/null +++ b/provider/legal-azure/src/main/java/org/opengroup/osdu/legal/azure/jobs/AbstractPublisher.java @@ -0,0 +1,133 @@ +// Copyright © Microsoft Corporation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package org.opengroup.osdu.legal.azure.jobs; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.microsoft.azure.eventgrid.models.EventGridEvent; +import com.microsoft.azure.servicebus.Message; +import org.joda.time.DateTime; +import org.opengroup.osdu.azure.eventgrid.EventGridTopicStore; +import org.opengroup.osdu.azure.servicebus.ITopicClientFactory; +import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.legal.azure.di.EventGridConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import jakarta.inject.Inject; +import jakarta.inject.Named; +import java.nio.charset.StandardCharsets; +import java.util.UUID; +import java.util.Map; +import java.util.HashMap; +import java.util.ArrayList; +import java.util.List; + +@Component +abstract public class AbstractPublisher { + private final String eventSubject; + private final String eventType; + private final String eventDataVersion; + private final String eventDebugMessage; + + @Autowired + private EventGridConfig eventGridConfig; + + @Autowired + private EventGridTopicStore eventGridTopicStore; + + @Inject + private ITopicClientFactory topicClientFactory; + + @Inject + private JaxRsDpsLog logger; + + @Inject + @Named("SERVICE_BUS_TOPIC") + private String serviceBusTopic; + + AbstractPublisher(String subject, String type, String dataVersion, String debugMessage) { + eventSubject = subject; + eventType = type; + eventDataVersion = dataVersion; + eventDebugMessage = debugMessage; + } + + protected void publishToServiceBus(DpsHeaders headers, Object tags) { + Message message = createMessage(headers, tags); + try { + logger.debug("Legal publishes message " + headers.getCorrelationId()); + topicClientFactory.getClient(headers.getPartitionId(), serviceBusTopic).send(message); + } catch (Exception exception) { + logger.error(exception.getMessage(), exception); + } + } + + protected void publishToEventGrid(DpsHeaders headers, Object tags) { + if (eventGridConfig.isPublishingToEventGridEnabled() && tags != null) { + HashMap<String, Object> data = new HashMap<>(); + List<EventGridEvent> eventsList = new ArrayList<>(); + data.put("data", tags); + data.put(DpsHeaders.DATA_PARTITION_ID, headers.getPartitionId()); + data.put(DpsHeaders.CORRELATION_ID, headers.getCorrelationId()); + data.put(DpsHeaders.USER_EMAIL, headers.getUserEmail()); + String messageId = UUID.randomUUID().toString(); + + try { + eventsList.add(new EventGridEvent( + messageId, + eventSubject, + data, + eventType, + DateTime.now(), + eventDataVersion + )); + logger.debug(eventDebugMessage + ": " + data.get(DpsHeaders.CORRELATION_ID)); + eventGridTopicStore.publishToEventGridTopic(headers.getPartitionId(), eventGridConfig.getTopicName(), eventsList); + } catch (Exception exception) { + logger.error(exception.getMessage(), exception); + } + } + } + + private Message createMessage(DpsHeaders headers, Object tags) { + Gson gson = new Gson(); + Message message = new Message(); + Map<String, Object> properties = new HashMap<>(); + + // properties + properties.put(DpsHeaders.DATA_PARTITION_ID, headers.getPartitionId()); + headers.addCorrelationIdIfMissing(); + properties.put(DpsHeaders.CORRELATION_ID, headers.getCorrelationId()); + properties.put(DpsHeaders.USER_EMAIL, headers.getUserEmail()); + + message.setProperties(properties); + + // add all to body {"message": {"data":[], "id":...}} + JsonObject jo = new JsonObject(); + jo.add("data", gson.toJsonTree(tags)); + jo.addProperty(DpsHeaders.DATA_PARTITION_ID, headers.getPartitionId()); + jo.addProperty(DpsHeaders.CORRELATION_ID, headers.getCorrelationId()); + jo.addProperty(DpsHeaders.USER_EMAIL, headers.getUserEmail()); + JsonObject jomsg = new JsonObject(); + jomsg.add("message", jo); + + message.setBody(jomsg.toString().getBytes(StandardCharsets.UTF_8)); + message.setContentType("application/json"); + + return message; + } +} diff --git a/provider/legal-azure/src/main/java/org/opengroup/osdu/legal/azure/jobs/LegalTagPublisherImpl.java b/provider/legal-azure/src/main/java/org/opengroup/osdu/legal/azure/jobs/LegalTagPublisherImpl.java index 48ffbca20bcd373a884b38a82b6f2043f9e08056..7b44f6e00d7aeae89c150ffe57a4e541d593a1fc 100644 --- a/provider/legal-azure/src/main/java/org/opengroup/osdu/legal/azure/jobs/LegalTagPublisherImpl.java +++ b/provider/legal-azure/src/main/java/org/opengroup/osdu/legal/azure/jobs/LegalTagPublisherImpl.java @@ -14,123 +14,26 @@ package org.opengroup.osdu.legal.azure.jobs; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.microsoft.azure.eventgrid.models.EventGridEvent; -import com.microsoft.azure.servicebus.Message; -import org.joda.time.DateTime; -import org.opengroup.osdu.azure.eventgrid.EventGridTopicStore; -import org.opengroup.osdu.azure.servicebus.ITopicClientFactory; -import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; import org.opengroup.osdu.core.common.model.http.DpsHeaders; import org.opengroup.osdu.core.common.model.legal.StatusChangedTags; -import org.opengroup.osdu.legal.azure.di.EventGridConfig; import org.opengroup.osdu.legal.provider.interfaces.ILegalTagPublisher; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import jakarta.inject.Inject; -import jakarta.inject.Named; -import java.nio.charset.StandardCharsets; -import java.util.UUID; -import java.util.Map; -import java.util.HashMap; -import java.util.ArrayList; -import java.util.List; - @Component -public class LegalTagPublisherImpl implements ILegalTagPublisher { - private final static String LEGAL_TAGS_CHANGE_EVENT_SUBJECT = "legaltagschanged"; - private final static String LEGAL_TAGS_CHANGE_EVENT_TYPE = "legaltagschanged"; - private final static String LEGAL_TAGS_CHANGE_EVENT_DATA_VERSION = "1.0"; - - @Autowired - private EventGridConfig eventGridConfig; - - @Autowired - private EventGridTopicStore eventGridTopicStore; +public class LegalTagPublisherImpl extends AbstractPublisher implements ILegalTagPublisher { - @Inject - private ITopicClientFactory topicClientFactory; + protected final static String LEGAL_TAGS_CHANGE_EVENT_SUBJECT = "legaltagschanged"; + protected final static String LEGAL_TAGS_CHANGE_EVENT_TYPE = "legaltagschanged"; + protected final static String LEGAL_TAGS_CHANGE_EVENT_DATA_VERSION = "1.0"; + protected final static String LEGAL_TAGS_CHANGE_EVENT_DEBUG_MESSAGE = "Legal publishes tag changed event"; - @Inject - private JaxRsDpsLog logger; - - @Inject - @Named("SERVICE_BUS_TOPIC") - private String serviceBusTopic; + public LegalTagPublisherImpl() { + super(LEGAL_TAGS_CHANGE_EVENT_SUBJECT, LEGAL_TAGS_CHANGE_EVENT_TYPE, LEGAL_TAGS_CHANGE_EVENT_DATA_VERSION, LEGAL_TAGS_CHANGE_EVENT_DEBUG_MESSAGE); + } @Override public void publish(String projectId, DpsHeaders headers, StatusChangedTags tags) { publishToServiceBus(headers, tags); - if (eventGridConfig.isPublishingToEventGridEnabled()) { - publishToEventGrid(headers, tags); - } - } - - private void publishToServiceBus(DpsHeaders headers, StatusChangedTags tags) { - Message message = createMessage(headers, tags); - try { - logger.debug("Storage publishes message " + headers.getCorrelationId()); - topicClientFactory.getClient(headers.getPartitionId(), serviceBusTopic).send(message); - } catch (Exception exception) { - logger.error(exception.getMessage(), exception); - } - } - - private void publishToEventGrid(DpsHeaders headers, StatusChangedTags tags) { - if (tags == null) { - return; - } - HashMap<String, Object> data = new HashMap<>(); - List<EventGridEvent> eventsList = new ArrayList<>(); - data.put("data", tags); - data.put(DpsHeaders.DATA_PARTITION_ID, headers.getPartitionId()); - data.put(DpsHeaders.CORRELATION_ID, headers.getCorrelationId()); - data.put(DpsHeaders.USER_EMAIL, headers.getUserEmail()); - String messageId = UUID.randomUUID().toString(); - - try { - eventsList.add(new EventGridEvent( - messageId, - LEGAL_TAGS_CHANGE_EVENT_SUBJECT, - data, - LEGAL_TAGS_CHANGE_EVENT_TYPE, - DateTime.now(), - LEGAL_TAGS_CHANGE_EVENT_DATA_VERSION - )); - logger.debug("Legal publishes tag changed event: " + data.get(DpsHeaders.CORRELATION_ID)); - eventGridTopicStore.publishToEventGridTopic(headers.getPartitionId(), eventGridConfig.getTopicName(), eventsList); - } catch (Exception exception) { - logger.error(exception.getMessage(), exception); - } - } - - private Message createMessage(DpsHeaders headers, StatusChangedTags tags) { - Gson gson = new Gson(); - Message message = new Message(); - Map<String, Object> properties = new HashMap<>(); - - // properties - properties.put(DpsHeaders.DATA_PARTITION_ID, headers.getPartitionId()); - headers.addCorrelationIdIfMissing(); - properties.put(DpsHeaders.CORRELATION_ID, headers.getCorrelationId()); - properties.put(DpsHeaders.USER_EMAIL, headers.getUserEmail()); - - message.setProperties(properties); - - // add all to body {"message": {"data":[], "id":...}} - JsonObject jo = new JsonObject(); - jo.add("data", gson.toJsonTree(tags)); - jo.addProperty(DpsHeaders.DATA_PARTITION_ID, headers.getPartitionId()); - jo.addProperty(DpsHeaders.CORRELATION_ID, headers.getCorrelationId()); - jo.addProperty(DpsHeaders.USER_EMAIL, headers.getUserEmail()); - JsonObject jomsg = new JsonObject(); - jomsg.add("message", jo); - - message.setBody(jomsg.toString().getBytes(StandardCharsets.UTF_8)); - message.setContentType("application/json"); - - return message; + publishToEventGrid(headers, tags); } -} +} \ No newline at end of file diff --git a/provider/legal-azure/src/main/resources/application.properties b/provider/legal-azure/src/main/resources/application.properties index b12e46204a87babf58495308d284bc407363c418..e4e7c9a15d4c13003247445916bdd2870a758377 100644 --- a/provider/legal-azure/src/main/resources/application.properties +++ b/provider/legal-azure/src/main/resources/application.properties @@ -82,7 +82,7 @@ api.server.fullUrl.enabled=${swaggerFullUrlEnabled:true} # Feature flag settings featureFlag.strategy=appProperty -featureFlag.aboutToExpireLegalTag.enabled=false +featureFlag.aboutToExpireLegalTag.enabled=true featureFlag.legalTagQueryApi.enabled=true featureFlag.legalTagQueryApiFreeTextAllFields.enabled=false diff --git a/provider/legal-azure/src/test/java/org/opengroup/osdu/legal/azure/AboutToExpireLegalTagPublisherImplTest.java b/provider/legal-azure/src/test/java/org/opengroup/osdu/legal/azure/AboutToExpireLegalTagPublisherImplTest.java index 79afec2278bc18d6a40f1b990635e9ad9dce2c0d..30e3990d88136e27eeab9b57c1ee33ca52cc15e3 100644 --- a/provider/legal-azure/src/test/java/org/opengroup/osdu/legal/azure/AboutToExpireLegalTagPublisherImplTest.java +++ b/provider/legal-azure/src/test/java/org/opengroup/osdu/legal/azure/AboutToExpireLegalTagPublisherImplTest.java @@ -14,28 +14,208 @@ package org.opengroup.osdu.legal.azure; +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.microsoft.azure.CloudException; +import com.microsoft.azure.eventgrid.models.EventGridEvent; +import com.microsoft.azure.servicebus.Message; +import com.microsoft.azure.servicebus.MessageBody; +import com.microsoft.azure.servicebus.TopicClient; +import com.microsoft.azure.servicebus.primitives.ServiceBusException; +import okhttp3.MediaType; +import okhttp3.ResponseBody; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import org.opengroup.osdu.azure.eventgrid.EventGridTopicStore; +import org.opengroup.osdu.azure.servicebus.ITopicClientFactory; +import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.legal.azure.di.EventGridConfig; import org.opengroup.osdu.legal.azure.jobs.AboutToExpireLegalTagPublisherImpl; import org.opengroup.osdu.legal.jobs.models.AboutToExpireLegalTags; +import retrofit2.Response; + +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; +import static org.mockito.Mockito.never; @RunWith(MockitoJUnitRunner.class) public class AboutToExpireLegalTagPublisherImplTest { + private final static String EVENT_SUBJECT = "legaltagclosetoexpiretopic"; + private static final String CORRELATION_ID = "correlation-id"; + private static final String USER_EMAIL = "user@email.com"; + private static final String PARTITION_ID = "partition-id"; + + @Mock + private JaxRsDpsLog logger; + + @Mock + private ITopicClientFactory topicClientFactory; + + @Mock + private EventGridTopicStore eventGridTopicStore; + + @Mock + private EventGridConfig eventGridConfig; + + @Mock + private TopicClient topicClient; + @Mock private DpsHeaders headers; @InjectMocks private AboutToExpireLegalTagPublisherImpl sut; + @Before + public void init() throws ServiceBusException, InterruptedException { + doReturn(CORRELATION_ID).when(headers).getCorrelationId(); + doReturn(USER_EMAIL).when(headers).getUserEmail(); + doReturn(PARTITION_ID).when(headers).getPartitionId(); + doReturn(topicClient).when(topicClientFactory).getClient(eq(PARTITION_ID), any()); + } + + @Test + public void shouldPublishToServiceBus() throws Exception { + AboutToExpireLegalTags aboutToExpireLegalTags = new AboutToExpireLegalTags(); + + ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); + ArgumentCaptor<String> debugLogArgumentCaptor = ArgumentCaptor.forClass(String.class); + + sut.publish("project-id", headers, aboutToExpireLegalTags); + + verify(logger).debug(debugLogArgumentCaptor.capture()); + verify(topicClient).send(messageArgumentCaptor.capture()); + + Map<String, Object> properties = messageArgumentCaptor.getValue().getProperties(); + MessageBody messageBody = messageArgumentCaptor.getValue().getMessageBody(); + Gson gson = new Gson(); + String messageKey = "message"; + String dataKey = "data"; + JsonObject jsonObjectMessage = gson.fromJson(new String(messageBody.getBinaryData().get(0)), JsonObject.class); + JsonObject jsonObject = (JsonObject) jsonObjectMessage.get(messageKey); + + assertEquals("Legal publishes message " + CORRELATION_ID, debugLogArgumentCaptor.getValue()); + assertEquals(PARTITION_ID, properties.get(DpsHeaders.DATA_PARTITION_ID)); + assertEquals(CORRELATION_ID, properties.get(DpsHeaders.CORRELATION_ID)); + assertEquals(USER_EMAIL, properties.get(DpsHeaders.USER_EMAIL)); + assertEquals(PARTITION_ID, jsonObject.get(DpsHeaders.DATA_PARTITION_ID).getAsString()); + assertEquals(CORRELATION_ID, jsonObject.get(DpsHeaders.CORRELATION_ID).getAsString()); + assertEquals(USER_EMAIL, jsonObject.get(DpsHeaders.USER_EMAIL).getAsString()); + assertEquals(gson.toJsonTree(aboutToExpireLegalTags), jsonObject.get(dataKey)); + } + + @Test + public void shouldLogError_whenPublishToServiceBusFails() throws Exception { + AboutToExpireLegalTags aboutToExpireLegalTags = new AboutToExpireLegalTags(); + + ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class); + ArgumentCaptor<String> debugLogArgumentCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor<Exception> exceptionArgumentCaptor = ArgumentCaptor.forClass(Exception.class); + ArgumentCaptor<String> errorLogArgumentCaptor = ArgumentCaptor.forClass(String.class); + + var serviceBusExceptionMessage = "com.microsoft.azure.servicebus.amqp.AmqpException: The connection was inactive for more than the allowed 300000 milliseconds"; + ServiceBusException serviceBusException = new ServiceBusException(true, serviceBusExceptionMessage); + doThrow(serviceBusException).when(topicClient).send(any()); + + sut.publish("project-id", headers, aboutToExpireLegalTags); + + verify(logger).debug(debugLogArgumentCaptor.capture()); + verify(topicClient).send(messageArgumentCaptor.capture()); + verify(logger).error(errorLogArgumentCaptor.capture(), exceptionArgumentCaptor.capture()); + + Map<String, Object> properties = messageArgumentCaptor.getValue().getProperties(); + MessageBody messageBody = messageArgumentCaptor.getValue().getMessageBody(); + Gson gson = new Gson(); + String messageKey = "message"; + String dataKey = "data"; + JsonObject jsonObjectMessage = gson.fromJson(new String(messageBody.getBinaryData().get(0)), JsonObject.class); + JsonObject jsonObject = (JsonObject) jsonObjectMessage.get(messageKey); + + assertEquals("Legal publishes message " + CORRELATION_ID, debugLogArgumentCaptor.getValue()); + assertEquals(serviceBusExceptionMessage, errorLogArgumentCaptor.getValue()); + assertEquals(serviceBusException, exceptionArgumentCaptor.getValue()); + assertEquals(PARTITION_ID, properties.get(DpsHeaders.DATA_PARTITION_ID)); + assertEquals(CORRELATION_ID, properties.get(DpsHeaders.CORRELATION_ID)); + assertEquals(USER_EMAIL, properties.get(DpsHeaders.USER_EMAIL)); + assertEquals(PARTITION_ID, jsonObject.get(DpsHeaders.DATA_PARTITION_ID).getAsString()); + assertEquals(CORRELATION_ID, jsonObject.get(DpsHeaders.CORRELATION_ID).getAsString()); + assertEquals(USER_EMAIL, jsonObject.get(DpsHeaders.USER_EMAIL).getAsString()); + assertEquals(gson.toJsonTree(aboutToExpireLegalTags), jsonObject.get(dataKey)); + } + + @Test + public void shouldPublishToEventGrid_whenFlagIsSet() throws ServiceBusException, InterruptedException { + AboutToExpireLegalTags aboutToExpireLegalTags = new AboutToExpireLegalTags(); + + ArgumentCaptor<String> partitionNameCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor<String> topicNameArgumentCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor<List<EventGridEvent>> listEventGridEventArgumentCaptor = ArgumentCaptor.forClass(List.class); + doNothing().when(this.eventGridTopicStore).publishToEventGridTopic( + partitionNameCaptor.capture(), topicNameArgumentCaptor.capture(), listEventGridEventArgumentCaptor.capture() + ); + when(this.eventGridConfig.isPublishingToEventGridEnabled()).thenReturn(true); + when(this.eventGridConfig.getTopicName()).thenReturn(EVENT_SUBJECT); + + sut.publish("project-id", headers, aboutToExpireLegalTags); + + verify(this.eventGridTopicStore, times(1)).publishToEventGridTopic(any(), any(), anyList()); + + assertEquals(1, listEventGridEventArgumentCaptor.getValue().size()); + assertEquals(EVENT_SUBJECT, topicNameArgumentCaptor.getValue()); + assertEquals(PARTITION_ID, partitionNameCaptor.getValue()); + } + @Test - public void shouldPublishToServiceBus() { + public void shouldLogError_whenPublishToEventGridFails() { AboutToExpireLegalTags aboutToExpireLegalTags = new AboutToExpireLegalTags(); + + ArgumentCaptor<String> partitionNameCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor<String> topicNameArgumentCaptor = ArgumentCaptor.forClass(String.class); + ArgumentCaptor<List<EventGridEvent>> listEventGridEventArgumentCaptor = ArgumentCaptor.forClass(List.class); + ArgumentCaptor<Exception> exceptionArgumentCaptor = ArgumentCaptor.forClass(Exception.class); + ArgumentCaptor<String> errorLogArgumentCaptor = ArgumentCaptor.forClass(String.class); + + when(this.eventGridConfig.isPublishingToEventGridEnabled()).thenReturn(true); + when(this.eventGridConfig.getTopicName()).thenReturn(EVENT_SUBJECT); + + var cloudExceptionMessage = "Cloud Exception occurred"; + MediaType mediaType = null; + Response<ResponseBody> errorResponse = Response.error(503, ResponseBody.create("Service Unavailable", mediaType)); + CloudException cloudException = new CloudException(cloudExceptionMessage, errorResponse); + doThrow(cloudException).when(eventGridTopicStore).publishToEventGridTopic(partitionNameCaptor.capture(), topicNameArgumentCaptor.capture(), listEventGridEventArgumentCaptor.capture()); + sut.publish("project-id", headers, aboutToExpireLegalTags); + + verify(this.eventGridTopicStore, times(1)).publishToEventGridTopic(any(), any(), anyList()); + verify(logger).error(errorLogArgumentCaptor.capture(), exceptionArgumentCaptor.capture()); + + assertEquals(1, listEventGridEventArgumentCaptor.getValue().size()); + assertEquals(EVENT_SUBJECT, topicNameArgumentCaptor.getValue()); + assertEquals( PARTITION_ID, partitionNameCaptor.getValue()); + assertEquals(cloudExceptionMessage, errorLogArgumentCaptor.getValue()); + assertEquals(cloudException, exceptionArgumentCaptor.getValue()); } -} + @Test + public void shouldNotPublishToEventGrid_whenFlagStatusChangedTagsIsNull() { + AboutToExpireLegalTags aboutToExpireLegalTags = null; + when(this.eventGridConfig.isPublishingToEventGridEnabled()).thenReturn(true); + + sut.publish("project-id", headers, aboutToExpireLegalTags); + + verify(this.eventGridTopicStore, never()).publishToEventGridTopic(any(), any(), anyList()); + } +} \ No newline at end of file diff --git a/provider/legal-azure/src/test/java/org/opengroup/osdu/legal/azure/jobs/LegalTagPublisherImplTest.java b/provider/legal-azure/src/test/java/org/opengroup/osdu/legal/azure/jobs/LegalTagPublisherImplTest.java index f2ac798b62e2d32b62f89dceff2b7d286889da47..b8ebb1c69a2526e6f26c141d39f90a3ee1ef1aa3 100644 --- a/provider/legal-azure/src/test/java/org/opengroup/osdu/legal/azure/jobs/LegalTagPublisherImplTest.java +++ b/provider/legal-azure/src/test/java/org/opengroup/osdu/legal/azure/jobs/LegalTagPublisherImplTest.java @@ -110,7 +110,7 @@ public class LegalTagPublisherImplTest { JsonObject jsonObjectMessage = gson.fromJson(new String(messageBody.getBinaryData().get(0)), JsonObject.class); JsonObject jsonObject = (JsonObject) jsonObjectMessage.get(messageKey); - assertEquals("Storage publishes message " + CORRELATION_ID, debugLogArgumentCaptor.getValue()); + assertEquals("Legal publishes message " + CORRELATION_ID, debugLogArgumentCaptor.getValue()); assertEquals(PARTITION_ID, properties.get(DpsHeaders.DATA_PARTITION_ID)); assertEquals(CORRELATION_ID, properties.get(DpsHeaders.CORRELATION_ID)); assertEquals(USER_EMAIL, properties.get(DpsHeaders.USER_EMAIL)); @@ -147,7 +147,7 @@ public class LegalTagPublisherImplTest { JsonObject jsonObjectMessage = gson.fromJson(new String(messageBody.getBinaryData().get(0)), JsonObject.class); JsonObject jsonObject = (JsonObject) jsonObjectMessage.get(messageKey); - assertEquals("Storage publishes message " + CORRELATION_ID, debugLogArgumentCaptor.getValue()); + assertEquals("Legal publishes message " + CORRELATION_ID, debugLogArgumentCaptor.getValue()); assertEquals(serviceBusExceptionMessage, errorLogArgumentCaptor.getValue()); assertEquals(serviceBusException, exceptionArgumentCaptor.getValue()); assertEquals(PARTITION_ID, properties.get(DpsHeaders.DATA_PARTITION_ID));