2  * ============LICENSE_START=======================================================
 
   3  * BBS-RELOCATION-CPE-AUTHENTICATION-HANDLER
 
   4  * ================================================================================
 
   5  * Copyright (C) 2019 NOKIA Intellectual Property. All rights reserved.
 
   6  * ================================================================================
 
   7  * Licensed under the Apache License, Version 2.0 (the "License");
 
   8  * you may not use this file except in compliance with the License.
 
   9  * You may obtain a copy of the License at
 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
 
  13  * Unless required by applicable law or agreed to in writing, software
 
  14  * distributed under the License is distributed on an "AS IS" BASIS,
 
  15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  16  * See the License for the specific language governing permissions and
 
  17  * limitations under the License.
 
  18  * ============LICENSE_END=========================================================
 
  21 package org.onap.bbs.event.processor.utilities;
 
  23 import static org.mockito.Mockito.spy;
 
  25 import com.google.gson.JsonElement;
 
  26 import com.google.gson.JsonParser;
 
  28 import java.util.Optional;
 
  30 import org.junit.jupiter.api.BeforeAll;
 
  31 import org.junit.jupiter.api.Test;
 
  32 import org.mockito.Mockito;
 
  33 import org.onap.bbs.event.processor.model.CpeAuthenticationConsumerDmaapModel;
 
  34 import org.onap.bbs.event.processor.model.ImmutableCpeAuthenticationConsumerDmaapModel;
 
  36 import reactor.core.publisher.Mono;
 
  37 import reactor.test.StepVerifier;
 
  39 class CpeAuthenticationDmaapConsumerJsonParserTest {
 
  41     private static JsonParser jsonParser;
 
  43     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE = "{\"event\": {"
 
  44             + "\"commonEventHeader\": { \"sourceName\":\"%s\"},"
 
  45             + "\"stateChangeFields\": {"
 
  46             + " \"oldState\": \"%s\","
 
  47             + " \"newState\": \"%s\","
 
  48             + " \"stateInterface\": \"%s\","
 
  49             + " \"additionalFields\": {"
 
  50             + "   \"macAddress\": \"%s\","
 
  51             + "   \"swVersion\": \"%s\""
 
  54     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_AUTHENTICATION_STATE = "{\"event\": {"
 
  55             + "\"commonEventHeader\": { \"sourceName\":\"%s\"},"
 
  56             + "\"stateChangeFields\": {"
 
  57             + " \"oldState\": \"%s\","
 
  58             + " \"stateInterface\": \"%s\","
 
  59             + " \"additionalFields\": {"
 
  60             + "   \"macAddress\": \"%s\","
 
  61             + "   \"swVersion\": \"%s\""
 
  64     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME = "{\"event\": {"
 
  65             + "\"commonEventHeader\": { },"
 
  66             + "\"stateChangeFields\": {"
 
  67             + " \"oldState\": \"%s\","
 
  68             + " \"newState\": \"%s\","
 
  69             + " \"stateInterface\": \"%s\","
 
  70             + " \"additionalFields\": {"
 
  71             + "   \"macAddress\": \"%s\","
 
  72             + "   \"swVersion\": \"%s\""
 
  75     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME_VALUE = "{\"event\": {"
 
  76             + "\"commonEventHeader\": { \"sourceName\":\"\"},"
 
  77             + "\"stateChangeFields\": {"
 
  78             + " \"oldState\": \"%s\","
 
  79             + " \"newState\": \"%s\","
 
  80             + " \"stateInterface\": \"%s\","
 
  81             + " \"additionalFields\": {"
 
  82             + "   \"macAddress\": \"%s\","
 
  83             + "   \"swVersion\": \"%s\""
 
  86     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_STATE_CHANGE_FIELDS = "{\"event\": {"
 
  87             + "\"commonEventHeader\": { \"sourceName\":\"\"},"
 
  88             + "\"somethingElse\": {"
 
  89             + " \"oldState\": \"%s\","
 
  90             + " \"newState\": \"%s\","
 
  91             + " \"stateInterface\": \"%s\","
 
  92             + " \"additionalFields\": {"
 
  93             + "   \"macAddress\": \"%s\","
 
  94             + "   \"swVersion\": \"%s\""
 
  99         jsonParser = new JsonParser();
 
 103     void passingNonJson_EmptyFluxIsReturned() {
 
 105         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 106                 new CpeAuthenticationDmaapConsumerJsonParser();
 
 108         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just("not JSON")))
 
 109                 .expectSubscription()
 
 114     void passingNoEvents_EmptyFluxIsReturned() {
 
 116         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 117                 new CpeAuthenticationDmaapConsumerJsonParser();
 
 119         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just("[]")))
 
 120                 .expectSubscription()
 
 125     void passingOneCorrectEvent_validationSucceeds() {
 
 127         String sourceName = "PNF-CorrelationId";
 
 128         String oldAuthenticationState = "outOfService";
 
 129         String newAuthenticationState = "inService";
 
 130         String stateInterface = "stateInterface";
 
 131         String rgwMacAddress = "00:0a:95:8d:78:16";
 
 132         String swVersion = "1.2";
 
 134         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE, sourceName, oldAuthenticationState,
 
 135                 newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
 
 137         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 138                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
 
 139         JsonElement jsonElement = jsonParser.parse(event);
 
 140         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
 
 141                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
 
 143         String eventsArray = "[" + event + "]";
 
 145         CpeAuthenticationConsumerDmaapModel expectedEventObject = ImmutableCpeAuthenticationConsumerDmaapModel.builder()
 
 146                 .correlationId(sourceName)
 
 147                 .oldAuthenticationState(oldAuthenticationState)
 
 148                 .newAuthenticationState(newAuthenticationState)
 
 149                 .stateInterface(stateInterface)
 
 150                 .rgwMacAddress(rgwMacAddress)
 
 151                 .swVersion(swVersion)
 
 154         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
 
 155                 .expectSubscription()
 
 156                 .expectNext(expectedEventObject);
 
 160     void passingTwoCorrectEvents_validationSucceeds() {
 
 162         String sourceName1 = "PNF-CorrelationId";
 
 163         String sourceName2 = "PNF-CorrelationId";
 
 164         String oldAuthenticationState = "outOfService";
 
 165         String newAuthenticationState = "inService";
 
 166         String stateInterface = "stateInterface";
 
 167         String rgwMacAddress1 = "00:0a:95:8d:78:16";
 
 168         String rgwMacAddress2 = "00:0a:95:8d:78:17";
 
 169         String swVersion = "1.2";
 
 171         String firstEvent = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE, sourceName1, oldAuthenticationState,
 
 172                 newAuthenticationState, stateInterface, rgwMacAddress1, swVersion);
 
 173         String secondEvent = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE, sourceName2, oldAuthenticationState,
 
 174                 newAuthenticationState, stateInterface, rgwMacAddress2, swVersion);
 
 176         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 177                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
 
 178         JsonElement jsonElement1 = jsonParser.parse(firstEvent);
 
 179         Mockito.doReturn(Optional.of(jsonElement1.getAsJsonObject()))
 
 180                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement1);
 
 181         JsonElement jsonElement2 = jsonParser.parse(secondEvent);
 
 182         Mockito.doReturn(Optional.of(jsonElement2.getAsJsonObject()))
 
 183                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement2);
 
 185         String eventsArray = "[" + firstEvent + secondEvent + "]";
 
 187         CpeAuthenticationConsumerDmaapModel expectedFirstEventObject =
 
 188                 ImmutableCpeAuthenticationConsumerDmaapModel.builder()
 
 189                 .correlationId(sourceName1)
 
 190                 .oldAuthenticationState(oldAuthenticationState)
 
 191                 .newAuthenticationState(newAuthenticationState)
 
 192                 .stateInterface(stateInterface)
 
 193                 .rgwMacAddress(rgwMacAddress1)
 
 194                 .swVersion(swVersion)
 
 196         CpeAuthenticationConsumerDmaapModel expectedSecondEventObject =
 
 197                 ImmutableCpeAuthenticationConsumerDmaapModel.builder()
 
 198                 .correlationId(sourceName2)
 
 199                 .oldAuthenticationState(oldAuthenticationState)
 
 200                 .newAuthenticationState(newAuthenticationState)
 
 201                 .stateInterface(stateInterface)
 
 202                 .rgwMacAddress(rgwMacAddress2)
 
 203                 .swVersion(swVersion)
 
 206         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
 
 207                 .expectSubscription()
 
 208                 .expectNext(expectedFirstEventObject)
 
 209                 .expectNext(expectedSecondEventObject);
 
 213     void passingJsonWithMissingAuthenticationState_validationFails() {
 
 215         String sourceName = "PNF-CorrelationId";
 
 216         String oldAuthenticationState = "outOfService";
 
 217         String stateInterface = "stateInterface";
 
 218         String rgwMacAddress = "00:0a:95:8d:78:16";
 
 219         String swVersion = "1.2";
 
 221         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_AUTHENTICATION_STATE, sourceName,
 
 222                 oldAuthenticationState, stateInterface, rgwMacAddress, swVersion);
 
 224         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 225                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
 
 226         JsonElement jsonElement = jsonParser.parse(event);
 
 227         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
 
 228                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
 
 230         String eventsArray = "[" + event + "]";
 
 232         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
 
 233                 .expectSubscription()
 
 238     void passingJsonWithMissingSourceName_validationFails() {
 
 240         String oldAuthenticationState = "outOfService";
 
 241         String newAuthenticationState = "inService";
 
 242         String stateInterface = "stateInterface";
 
 243         String rgwMacAddress = "00:0a:95:8d:78:16";
 
 244         String swVersion = "1.2";
 
 246         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME,
 
 247                 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
 
 249         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 250                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
 
 251         JsonElement jsonElement = jsonParser.parse(event);
 
 252         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
 
 253                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
 
 255         String eventsArray = "[" + event + "]";
 
 257         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
 
 258                 .expectSubscription()
 
 263     void passingJsonWithMissingSourceNameValue_validationFails() {
 
 265         String oldAuthenticationState = "outOfService";
 
 266         String newAuthenticationState = "inService";
 
 267         String stateInterface = "stateInterface";
 
 268         String rgwMacAddress = "00:0a:95:8d:78:16";
 
 269         String swVersion = "1.2";
 
 271         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME_VALUE,
 
 272                 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
 
 274         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 275                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
 
 276         JsonElement jsonElement = jsonParser.parse(event);
 
 277         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
 
 278                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
 
 280         String eventsArray = "[" + event + "]";
 
 282         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
 
 283                 .expectSubscription()
 
 288     void passingJsonWithMissingStateChangeFieldsHeader_validationFails() {
 
 290         String oldAuthenticationState = "outOfService";
 
 291         String newAuthenticationState = "inService";
 
 292         String stateInterface = "stateInterface";
 
 293         String rgwMacAddress = "00:0a:95:8d:78:16";
 
 294         String swVersion = "1.2";
 
 296         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_STATE_CHANGE_FIELDS,
 
 297                 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
 
 299         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 300                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
 
 301         JsonElement jsonElement = jsonParser.parse(event);
 
 302         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
 
 303                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
 
 305         String eventsArray = "[" + event + "]";
 
 307         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(eventsArray)))
 
 308                 .expectSubscription()