From f92f8d2a7e4a65e1b815111108828962126823c8 Mon Sep 17 00:00:00 2001 From: komakkar <komakkar@microsoft.com> Date: Mon, 7 Sep 2020 19:23:50 +0530 Subject: [PATCH] undoing stray changes --- .../azure/EventGridHandshakeHandlerTest.java | 75 +++++ .../EventGridRequestBodyExtractorTest.java | 304 ++++++++++++++++++ 2 files changed, 379 insertions(+) create mode 100644 provider/notification-azure/src/test/java/org/opengroup/osdu/notification/provider/azure/EventGridHandshakeHandlerTest.java create mode 100644 provider/notification-azure/src/test/java/org/opengroup/osdu/notification/provider/azure/EventGridRequestBodyExtractorTest.java diff --git a/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/provider/azure/EventGridHandshakeHandlerTest.java b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/provider/azure/EventGridHandshakeHandlerTest.java new file mode 100644 index 000000000..b58451b96 --- /dev/null +++ b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/provider/azure/EventGridHandshakeHandlerTest.java @@ -0,0 +1,75 @@ + +// 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.notification.provider.azure; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.MockitoJUnitRunner; +import org.opengroup.osdu.core.common.model.http.AppException; +import org.opengroup.osdu.notification.provider.azure.pubsub.EventGridHandshakeHandler; +import org.opengroup.osdu.notification.provider.azure.pubsub.EventGridRequestBodyExtractor; +import org.springframework.http.HttpStatus; + +import java.io.IOException; + +import static org.junit.Assert.fail; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class EventGridHandshakeHandlerTest { + @Mock + EventGridRequestBodyExtractor eventGridRequestBodyExtractor; + + @InjectMocks + @Spy + private EventGridHandshakeHandler sut; + + @Test + public void should_returnValidResponse_getHandshakeResponse() throws IOException { + // Set up + when(sut.getHandshakeResponse()).thenReturn("testValidationCode"); + String expectedResponse = "{\"ValidationResponse\":\"testValidationCode\"}"; + + // Act + String observedResponse = this.sut.getHandshakeResponse(); + + // Assert + Assert.assertEquals(observedResponse, expectedResponse); + } + + @Test + public void should_throw_getHandshakeResponse() throws IOException { + // Set up + when(sut.getHandshakeResponse()) + .thenThrow(new AppException(HttpStatus.BAD_REQUEST.value(), "Request payload parsing error", "" )); + try{ + // Act + String observedResponse = this.sut.getHandshakeResponse(); + + // Assert + fail("Should Throw Exception"); + } catch (AppException appException){ + Assert.assertEquals(HttpStatus.BAD_REQUEST.value(), appException.getError().getCode()); + Assert.assertEquals("Unable to parse request payload.", appException.getError().getMessage()); + } catch (Exception exception) { + fail("Should Throw AppException"); + } + } +} \ No newline at end of file diff --git a/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/provider/azure/EventGridRequestBodyExtractorTest.java b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/provider/azure/EventGridRequestBodyExtractorTest.java new file mode 100644 index 000000000..bce964c17 --- /dev/null +++ b/provider/notification-azure/src/test/java/org/opengroup/osdu/notification/provider/azure/EventGridRequestBodyExtractorTest.java @@ -0,0 +1,304 @@ +// 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.notification.provider.azure; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; +import org.opengroup.osdu.core.common.model.http.AppException; +import org.opengroup.osdu.notification.provider.azure.pubsub.EventGridRequestBodyExtractor; +import org.springframework.http.HttpStatus; + +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; +import java.util.Map; + +import static org.junit.Assert.fail; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class EventGridRequestBodyExtractorTest { + + private EventGridRequestBodyExtractor sut; + + @Mock + private HttpServletRequest httpServletRequest; + + @Mock + private JaxRsDpsLog log; + + @Test + public void should_returnTrue_isHandshakeRequest() throws IOException { + // Set up + String validHandshakeRequestRoot = + " [{\n" + + " \"id\": \"testId\",\n" + + " \"topic\": \"testTopic\",\n" + + " \"subject\": \"\",\n" + + " \"data\": {\n" + + " \"validationCode\": \"testValidationCode\",\n" + + " \"validationUrl\": \"testURL\"\n" + + " },\n" + + " \"eventType\": \"Microsoft.EventGrid.SubscriptionValidationEvent\",\n" + + " \"eventTime\": \"2020-08-14T11:18:55.9278057Z\",\n" + + " \"metadataVersion\": \"1\",\n" + + " \"dataVersion\": \"2\"\n" + + " }]"; + BufferedReader reader = new BufferedReader(new StringReader(validHandshakeRequestRoot)); + when(this.httpServletRequest.getReader()).thenReturn(reader); + sut = new EventGridRequestBodyExtractor(httpServletRequest, log); + + // Act + boolean response = this.sut.isHandshakeRequest(); + + // Assert + Assert.assertTrue(response); + } + + @Test + public void shouldThrow_whenRequestTypeIsNotright_isHandshakeRequest() throws IOException { + //SetUp + String invalidHandshakeRequestRoot = + " [{\n" + + " \"id\": \"testId\",\n" + + " \"topic\": \"testTopic\",\n" + + " \"subject\": \"\",\n" + + " \"data\": {\n" + + " \"validationCode\": \"testValidationCode\",\n" + + " \"validationUrl\": \"testURL\"\n" + + " },\n" + + " \"eventType\": \"SubscriptionValidationEvent\",\n" + + " \"eventTime\": \"2020-08-14T11:18:55.9278057Z\",\n" + + " \"metadataVersion\": \"1\",\n" + + " \"dataVersion\": \"2\"\n" + + " }]"; + BufferedReader reader = new BufferedReader(new StringReader(invalidHandshakeRequestRoot)); + when(this.httpServletRequest.getReader()).thenReturn(reader); + + try{ + // Act + sut = new EventGridRequestBodyExtractor(httpServletRequest, log); + + // Assert + fail("Should Throw Exception"); + } catch (AppException appException){ + Assert.assertEquals(HttpStatus.BAD_REQUEST.value(), appException.getError().getCode()); + Assert.assertEquals("Unable to parse request payload.", appException.getError().getMessage()); + } catch (Exception exception) { + fail("Should Throw AppException"); + } + } + + @Test + public void should_throwWhenAttributesAreMissing_extractDataFromRequestBody() throws IOException { + String requestRootWithoutAttributes = "[{\n" + + " \"id\": \"2425\",\n" + + " \"eventType\": \"recordInserted\",\n" + + " \"subject\": \"myapp/vehicles/motorcycles\",\n" + + " \"data\": {\n" + + " \"data\": \"W3sia2luZCI6InRlc3RraW5kIiwiaWQiOiJ0ZXN0aWQiLCJvcGVyYXRpb250eXBlIjoiY3JlYXRlIn0seyJraW5kIjoidGVzdGtpbmQyIiwiaWQiOiJ0ZXN0aWQyIiwib3BlcmF0aW9udHlwZSI6InVwZGF0ZSJ9XQ\",\n" + + " \"messageId\": \"136969346945\"\n" + + " },\n" + + " \"dataVersion\": \"1.0\",\n" + + " \"metadataVersion\": \"1\",\n" + + " \"eventTime\": \"2020-08-14T18:04:12+00:00\",\n" + + " \"topic\": \"/subscriptions/c99e2bf3-1777-412b-baba-d823676589c2/resourceGroups/komakkar-OSDU-RG/providers/Microsoft.EventGrid/topics/recordChanged\"\n" + + " }]"; + BufferedReader reader = new BufferedReader(new StringReader(requestRootWithoutAttributes)); + when(this.httpServletRequest.getReader()).thenReturn(reader); + + try{ + // Act + sut = new EventGridRequestBodyExtractor(httpServletRequest, log); + + // Asset + fail("Should Throw Exception"); + } catch (AppException appException){ + Assert.assertEquals(HttpStatus.BAD_REQUEST.value(), appException.getError().getCode()); + Assert.assertEquals("Unable to parse request payload.", appException.getError().getMessage()); + } catch (Exception exception) { + fail("Should Throw AppException"); + } + } + + @Test + public void should_throwWhenDataFiledIsMissing_extractDataFromRequestBody() throws IOException { + String requestRootWithoutData = "[{\n" + + " \"id\": \"2425\",\n" + + " \"eventType\": \"recordInserted\",\n" + + " \"subject\": \"myapp/vehicles/motorcycles\",\n" + + " \"data\": {\n" + + " \"attributes\": {\n" + + " \"correlation-id\": \"39137f49-67d6-4001-a6aa-15521ef4f49e\",\n" + + " \"data-partition-id\": \"opendes \"\n" + + " },\n" + + " \"messageId\": \"136969346945\"\n" + + " },\n" + + " \"dataVersion\": \"1.0\",\n" + + " \"metadataVersion\": \"1\",\n" + + " \"eventTime\": \"2020-08-14T18:04:12+00:00\",\n" + + " \"topic\": \"/subscriptions/c99e2bf3-1777-412b-baba-d823676589c2/resourceGroups/komakkar-OSDU-RG/providers/Microsoft.EventGrid/topics/recordChanged\"\n" + + " }]"; + BufferedReader reader = new BufferedReader(new StringReader(requestRootWithoutData)); + when(this.httpServletRequest.getReader()).thenReturn(reader); + + try{ + // Act + sut = new EventGridRequestBodyExtractor(httpServletRequest, log); + + // Asset + fail("Should Throw Exception"); + } catch (AppException appException){ + Assert.assertEquals(HttpStatus.BAD_REQUEST.value(), appException.getError().getCode()); + Assert.assertEquals("Unable to parse request payload.", appException.getError().getMessage()); + } catch (Exception exception) { + fail("Should Throw AppException"); + } + } + + @Test + public void should_throwWhenPartitionIdIsMissing_extractDataFromRequestBody() throws IOException { + String requestRootWithoutDataPartitionId = "[{\n" + + " \"id\": \"2425\",\n" + + " \"eventType\": \"recordInserted\",\n" + + " \"subject\": \"myapp/vehicles/motorcycles\",\n" + + " \"data\": {\n" + + " \"attributes\": {\n" + + " \"correlation-id\": \"39137f49-67d6-4001-a6aa-15521ef4f49e\"\n" + + " },\n" + + " \"data\": \"W3sia2luZCI6InRlc3RraW5kIiwiaWQiOiJ0ZXN0aWQiLCJvcGVyYXRpb250eXBlIjoiY3JlYXRlIn0seyJraW5kIjoidGVzdGtpbmQyIiwiaWQiOiJ0ZXN0aWQyIiwib3BlcmF0aW9udHlwZSI6InVwZGF0ZSJ9XQ\",\n"+ + " \"messageId\": \"136969346945\"\n" + + " },\n" + + " \"dataVersion\": \"1.0\",\n" + + " \"metadataVersion\": \"1\",\n" + + " \"eventTime\": \"2020-08-14T18:04:12+00:00\",\n" + + " \"topic\": \"/subscriptions/c99e2bf3-1777-412b-baba-d823676589c2/resourceGroups/komakkar-OSDU-RG/providers/Microsoft.EventGrid/topics/recordChanged\"\n" + + " }]"; + BufferedReader reader = new BufferedReader(new StringReader(requestRootWithoutDataPartitionId)); + when(this.httpServletRequest.getReader()).thenReturn(reader); + + try{ + // Act + sut = new EventGridRequestBodyExtractor(httpServletRequest, log); + + // Asset + fail("Should Throw Exception"); + } catch (AppException appException){ + Assert.assertEquals(HttpStatus.BAD_REQUEST.value(), appException.getError().getCode()); + Assert.assertEquals("Unable to parse request payload.", appException.getError().getMessage()); + } catch (Exception exception) { + fail("Should Throw AppException"); + } + } + + @Test + public void should_returnValidData_extractDataFromRequestBody() throws IOException { + String vaidRequestRoot = "[{\n" + + " \"id\": \"2425\",\n" + + " \"eventType\": \"recordInserted\",\n" + + " \"subject\": \"myapp/vehicles/motorcycles\",\n" + + " \"data\": {\n" + + " \"attributes\": {\n" + + " \"correlation-id\": \"39137f49-67d6-4001-a6aa-15521ef4f49e\",\n" + + " \"data-partition-id\": \"opendes \"\n" + + " },\n" + + " \"data\": \"W3sia2luZCI6InRlc3RraW5kIiwiaWQiOiJ0ZXN0aWQiLCJvcGVyYXRpb250eXBlIjoiY3JlYXRlIn0seyJraW5kIjoidGVzdGtpbmQyIiwiaWQiOiJ0ZXN0aWQyIiwib3BlcmF0aW9udHlwZSI6InVwZGF0ZSJ9XQ\",\n" + + " \"messageId\": \"136969346945\"\n" + + " },\n" + + " \"dataVersion\": \"1.0\",\n" + + " \"metadataVersion\": \"1\",\n" + + " \"eventTime\": \"2020-08-14T18:04:12+00:00\",\n" + + " \"topic\": \"/subscriptions/c99e2bf3-1777-412b-baba-d823676589c2/resourceGroups/komakkar-OSDU-RG/providers/Microsoft.EventGrid/topics/recordChanged\"\n" + + " }]"; + + String expectedData = "[{\"kind\":\"testkind\",\"id\":\"testid\",\"operationtype\":\"create\"},{\"kind\":\"testkind2\",\"id\":\"testid2\",\"operationtype\":\"update\"}]"; + + BufferedReader reader = new BufferedReader(new StringReader(vaidRequestRoot)); + when(this.httpServletRequest.getReader()).thenReturn(reader); + + sut = new EventGridRequestBodyExtractor(httpServletRequest, log); + + // Act + String receivedData = this.sut.extractDataFromRequestBody(); + + // Asset + Assert.assertEquals(expectedData,receivedData); + } + + @Test + public void should_returnValidAttributes_extractDataFromRequestBody() throws IOException { + String vaidRequestRoot = "[{\n" + + " \"id\": \"2425\",\n" + + " \"eventType\": \"recordInserted\",\n" + + " \"subject\": \"myapp/vehicles/motorcycles\",\n" + + " \"data\": {\n" + + " \"attributes\": {\n" + + " \"correlation-id\": \"39137f49-67d6-4001-a6aa-15521ef4f49e\",\n" + + " \"data-partition-id\": \"opendes\"\n" + + " },\n" + + " \"data\": \"W3sia2luZCI6InRlc3RraW5kIiwiaWQiOiJ0ZXN0aWQiLCJvcGVyYXRpb250eXBlIjoiY3JlYXRlIn0seyJraW5kIjoidGVzdGtpbmQyIiwiaWQiOiJ0ZXN0aWQyIiwib3BlcmF0aW9udHlwZSI6InVwZGF0ZSJ9XQ\",\n" + + " \"messageId\": \"136969346945\"\n" + + " },\n" + + " \"dataVersion\": \"1.0\",\n" + + " \"metadataVersion\": \"1\",\n" + + " \"eventTime\": \"2020-08-14T18:04:12+00:00\",\n" + + " \"topic\": \"/subscriptions/c99e2bf3-1777-412b-baba-d823676589c2/resourceGroups/komakkar-OSDU-RG/providers/Microsoft.EventGrid/topics/recordChanged\"\n" + + " }]"; + BufferedReader reader = new BufferedReader(new StringReader(vaidRequestRoot)); + when(this.httpServletRequest.getReader()).thenReturn(reader); + sut = new EventGridRequestBodyExtractor(httpServletRequest, log); + + // Act + Map<String, String> observedAttributes = this.sut.extractAttributesFromRequestBody(); + + // Asset + Assert.assertEquals(observedAttributes.get("correlation-id"),"39137f49-67d6-4001-a6aa-15521ef4f49e"); + Assert.assertEquals(observedAttributes.get("data-partition-id"),"opendes"); + } + + @Test + public void should_returnValidResponse_getHandshakeResponse() throws IOException { + // Set up + String validHandshakeRequestRoot = + " [{\n" + + " \"id\": \"testId\",\n" + + " \"topic\": \"testTopic\",\n" + + " \"subject\": \"\",\n" + + " \"data\": {\n" + + " \"validationCode\": \"testValidationCode\",\n" + + " \"validationUrl\": \"testURL\"\n" + + " },\n" + + " \"eventType\": \"Microsoft.EventGrid.SubscriptionValidationEvent\",\n" + + " \"eventTime\": \"2020-08-14T11:18:55.9278057Z\",\n" + + " \"metadataVersion\": \"1\",\n" + + " \"dataVersion\": \"2\"\n" + + " }]"; + String expectedResponse = "testValidationCode"; + BufferedReader reader = new BufferedReader(new StringReader(validHandshakeRequestRoot)); + when(this.httpServletRequest.getReader()).thenReturn(reader); + sut = new EventGridRequestBodyExtractor(httpServletRequest, log); + + // Act + String observedResponse = this.sut.getValidationCodeForHandshake(); + + // Assert + Assert.assertEquals(observedResponse, expectedResponse); + } +} -- GitLab