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;
 
  27 import com.google.gson.stream.JsonReader;
 
  29 import java.io.StringReader;
 
  30 import java.util.Optional;
 
  32 import org.junit.jupiter.api.BeforeAll;
 
  33 import org.junit.jupiter.api.Test;
 
  34 import org.mockito.Mockito;
 
  35 import org.onap.bbs.event.processor.model.CpeAuthenticationConsumerDmaapModel;
 
  36 import org.onap.bbs.event.processor.model.ImmutableCpeAuthenticationConsumerDmaapModel;
 
  38 import reactor.core.publisher.Mono;
 
  39 import reactor.test.StepVerifier;
 
  41 class CpeAuthenticationDmaapConsumerJsonParserTest {
 
  43     private static JsonParser jsonParser;
 
  45     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE = "{\"event\": {"
 
  46             + "\"commonEventHeader\": { \"sourceName\":\"%s\"},"
 
  47             + "\"stateChangeFields\": {"
 
  48             + " \"oldState\": \"%s\","
 
  49             + " \"newState\": \"%s\","
 
  50             + " \"stateInterface\": \"%s\","
 
  51             + " \"additionalFields\": {"
 
  52             + "   \"macAddress\": \"%s\","
 
  53             + "   \"swVersion\": \"%s\""
 
  56     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_AUTHENTICATION_STATE = "{\"event\": {"
 
  57             + "\"commonEventHeader\": { \"sourceName\":\"%s\"},"
 
  58             + "\"stateChangeFields\": {"
 
  59             + " \"oldState\": \"%s\","
 
  60             + " \"stateInterface\": \"%s\","
 
  61             + " \"additionalFields\": {"
 
  62             + "   \"macAddress\": \"%s\","
 
  63             + "   \"swVersion\": \"%s\""
 
  66     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME = "{\"event\": {"
 
  67             + "\"commonEventHeader\": { },"
 
  68             + "\"stateChangeFields\": {"
 
  69             + " \"oldState\": \"%s\","
 
  70             + " \"newState\": \"%s\","
 
  71             + " \"stateInterface\": \"%s\","
 
  72             + " \"additionalFields\": {"
 
  73             + "   \"macAddress\": \"%s\","
 
  74             + "   \"swVersion\": \"%s\""
 
  77     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME_VALUE = "{\"event\": {"
 
  78             + "\"commonEventHeader\": { \"sourceName\":\"\"},"
 
  79             + "\"stateChangeFields\": {"
 
  80             + " \"oldState\": \"%s\","
 
  81             + " \"newState\": \"%s\","
 
  82             + " \"stateInterface\": \"%s\","
 
  83             + " \"additionalFields\": {"
 
  84             + "   \"macAddress\": \"%s\","
 
  85             + "   \"swVersion\": \"%s\""
 
  88     private static final String CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_STATE_CHANGE_FIELDS = "{\"event\": {"
 
  89             + "\"commonEventHeader\": { \"sourceName\":\"\"},"
 
  90             + "\"somethingElse\": {"
 
  91             + " \"oldState\": \"%s\","
 
  92             + " \"newState\": \"%s\","
 
  93             + " \"stateInterface\": \"%s\","
 
  94             + " \"additionalFields\": {"
 
  95             + "   \"macAddress\": \"%s\","
 
  96             + "   \"swVersion\": \"%s\""
 
 101         jsonParser = new JsonParser();
 
 105     void passingNonJson_getIllegalStateException() {
 
 107         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 108                 new CpeAuthenticationDmaapConsumerJsonParser();
 
 109         JsonReader jsonReader = new JsonReader(new StringReader("not JSON"));
 
 110         jsonReader.setLenient(true);
 
 111         JsonElement notJson = jsonParser.parse(jsonReader).getAsJsonPrimitive();
 
 113         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(notJson)))
 
 114                 .expectSubscription()
 
 115                 .verifyError(IllegalStateException.class);
 
 119     void passingNoEvents_EmptyFluxIsReturned() {
 
 121         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 122                 new CpeAuthenticationDmaapConsumerJsonParser();
 
 124         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse("[]"))))
 
 125                 .expectSubscription()
 
 130     void passingOneCorrectEvent_validationSucceeds() {
 
 132         String sourceName = "PNF-CorrelationId";
 
 133         String oldAuthenticationState = "outOfService";
 
 134         String newAuthenticationState = "inService";
 
 135         String stateInterface = "stateInterface";
 
 136         String rgwMacAddress = "00:0a:95:8d:78:16";
 
 137         String swVersion = "1.2";
 
 139         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE, sourceName, oldAuthenticationState,
 
 140                 newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
 
 142         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 143                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
 
 144         JsonElement jsonElement = jsonParser.parse(event);
 
 145         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
 
 146                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
 
 148         String eventsArray = "[" + event + "]";
 
 150         CpeAuthenticationConsumerDmaapModel expectedEventObject = ImmutableCpeAuthenticationConsumerDmaapModel.builder()
 
 151                 .correlationId(sourceName)
 
 152                 .oldAuthenticationState(oldAuthenticationState)
 
 153                 .newAuthenticationState(newAuthenticationState)
 
 154                 .stateInterface(stateInterface)
 
 155                 .rgwMacAddress(rgwMacAddress)
 
 156                 .swVersion(swVersion)
 
 159         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse(eventsArray))))
 
 160                 .expectSubscription()
 
 161                 .expectNext(expectedEventObject);
 
 165     void passingTwoCorrectEvents_validationSucceeds() {
 
 167         String sourceName1 = "PNF-CorrelationId";
 
 168         String sourceName2 = "PNF-CorrelationId";
 
 169         String oldAuthenticationState = "outOfService";
 
 170         String newAuthenticationState = "inService";
 
 171         String stateInterface = "stateInterface";
 
 172         String rgwMacAddress1 = "00:0a:95:8d:78:16";
 
 173         String rgwMacAddress2 = "00:0a:95:8d:78:17";
 
 174         String swVersion = "1.2";
 
 176         String firstEvent = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE, sourceName1, oldAuthenticationState,
 
 177                 newAuthenticationState, stateInterface, rgwMacAddress1, swVersion);
 
 178         String secondEvent = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE, sourceName2, oldAuthenticationState,
 
 179                 newAuthenticationState, stateInterface, rgwMacAddress2, swVersion);
 
 181         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 182                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
 
 183         JsonElement jsonElement1 = jsonParser.parse(firstEvent);
 
 184         Mockito.doReturn(Optional.of(jsonElement1.getAsJsonObject()))
 
 185                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement1);
 
 186         JsonElement jsonElement2 = jsonParser.parse(secondEvent);
 
 187         Mockito.doReturn(Optional.of(jsonElement2.getAsJsonObject()))
 
 188                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement2);
 
 190         String eventsArray = "[" + firstEvent + "," + secondEvent + "]";
 
 192         CpeAuthenticationConsumerDmaapModel expectedFirstEventObject =
 
 193                 ImmutableCpeAuthenticationConsumerDmaapModel.builder()
 
 194                 .correlationId(sourceName1)
 
 195                 .oldAuthenticationState(oldAuthenticationState)
 
 196                 .newAuthenticationState(newAuthenticationState)
 
 197                 .stateInterface(stateInterface)
 
 198                 .rgwMacAddress(rgwMacAddress1)
 
 199                 .swVersion(swVersion)
 
 201         CpeAuthenticationConsumerDmaapModel expectedSecondEventObject =
 
 202                 ImmutableCpeAuthenticationConsumerDmaapModel.builder()
 
 203                 .correlationId(sourceName2)
 
 204                 .oldAuthenticationState(oldAuthenticationState)
 
 205                 .newAuthenticationState(newAuthenticationState)
 
 206                 .stateInterface(stateInterface)
 
 207                 .rgwMacAddress(rgwMacAddress2)
 
 208                 .swVersion(swVersion)
 
 211         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse(eventsArray))))
 
 212                 .expectSubscription()
 
 213                 .expectNext(expectedFirstEventObject)
 
 214                 .expectNext(expectedSecondEventObject);
 
 218     void passingJsonWithMissingAuthenticationState_validationFails() {
 
 220         String sourceName = "PNF-CorrelationId";
 
 221         String oldAuthenticationState = "outOfService";
 
 222         String stateInterface = "stateInterface";
 
 223         String rgwMacAddress = "00:0a:95:8d:78:16";
 
 224         String swVersion = "1.2";
 
 226         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_AUTHENTICATION_STATE, sourceName,
 
 227                 oldAuthenticationState, stateInterface, rgwMacAddress, swVersion);
 
 229         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 230                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
 
 231         JsonElement jsonElement = jsonParser.parse(event);
 
 232         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
 
 233                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
 
 235         String eventsArray = "[" + event + "]";
 
 237         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse(eventsArray))))
 
 238                 .expectSubscription()
 
 243     void passingJsonWithMissingSourceName_validationFails() {
 
 245         String oldAuthenticationState = "outOfService";
 
 246         String newAuthenticationState = "inService";
 
 247         String stateInterface = "stateInterface";
 
 248         String rgwMacAddress = "00:0a:95:8d:78:16";
 
 249         String swVersion = "1.2";
 
 251         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME,
 
 252                 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
 
 254         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 255                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
 
 256         JsonElement jsonElement = jsonParser.parse(event);
 
 257         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
 
 258                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
 
 260         String eventsArray = "[" + event + "]";
 
 262         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse(eventsArray))))
 
 263                 .expectSubscription()
 
 268     void passingJsonWithMissingSourceNameValue_validationFails() {
 
 270         String oldAuthenticationState = "outOfService";
 
 271         String newAuthenticationState = "inService";
 
 272         String stateInterface = "stateInterface";
 
 273         String rgwMacAddress = "00:0a:95:8d:78:16";
 
 274         String swVersion = "1.2";
 
 276         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_SOURCE_NAME_VALUE,
 
 277                 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
 
 279         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 280                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
 
 281         JsonElement jsonElement = jsonParser.parse(event);
 
 282         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
 
 283                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
 
 285         String eventsArray = "[" + event + "]";
 
 287         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse(eventsArray))))
 
 288                 .expectSubscription()
 
 293     void passingJsonWithMissingStateChangeFieldsHeader_validationFails() {
 
 295         String oldAuthenticationState = "outOfService";
 
 296         String newAuthenticationState = "inService";
 
 297         String stateInterface = "stateInterface";
 
 298         String rgwMacAddress = "00:0a:95:8d:78:16";
 
 299         String swVersion = "1.2";
 
 301         String event = String.format(CPE_AUTHENTICATION_EVENT_TEMPLATE_WITH_MISSING_STATE_CHANGE_FIELDS,
 
 302                 oldAuthenticationState, newAuthenticationState, stateInterface, rgwMacAddress, swVersion);
 
 304         CpeAuthenticationDmaapConsumerJsonParser consumerJsonParser =
 
 305                 spy(new CpeAuthenticationDmaapConsumerJsonParser());
 
 306         JsonElement jsonElement = jsonParser.parse(event);
 
 307         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject()))
 
 308                 .when(consumerJsonParser).getJsonObjectFromAnArray(jsonElement);
 
 310         String eventsArray = "[" + event + "]";
 
 312         StepVerifier.create(consumerJsonParser.extractModelFromDmaap(Mono.just(jsonParser.parse(eventsArray))))
 
 313                 .expectSubscription()