2  * ============LICENSE_START====================================
 
   3  * DCAEGEN2-SERVICES-SDK
 
   4  * =========================================================
 
   5  * Copyright (C) 2019 Nokia. 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.dcaegen2.services.sdk.rest.services.cbs.client.api.listener;
 
  23 import com.google.gson.JsonArray;
 
  24 import com.google.gson.JsonObject;
 
  25 import io.vavr.collection.List;
 
  26 import org.jetbrains.annotations.NotNull;
 
  27 import org.junit.jupiter.api.Test;
 
  29 import java.math.BigInteger;
 
  32 import static org.assertj.core.api.Assertions.assertThat;
 
  34 class MerkleTreeParserTest {
 
  36     private final MerkleTreeParser cut = new MerkleTreeParser();
 
  39     void fromJsonObject_givenEmptyJsonObject_shouldReturnEmptyMerkleTree() {
 
  40         JsonObject jsonObject = new JsonObject();
 
  42         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
 
  43         assertThat(tree.isSame(List.empty(), emptyTree())).isTrue();
 
  47     void fromJsonObject_givenSingleKeyValuePair_shouldReturnSingleNodeTree() {
 
  48         JsonObject jsonObject = new JsonObject();
 
  49         jsonObject.addProperty("p1", "v1");
 
  51         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
 
  53         MerkleTree<String> expected = emptyTree()
 
  54                 .add(List.of("p1"), "v1");
 
  55         assertThat(tree).isEqualTo(expected);
 
  59     void fromJsonObject_givenSingleKeyValuePair_atDeeperPathLevel_shouldReturnTreeWithSingleLeafAndCorrectNodesOnTheWay() {
 
  60         JsonObject singleKeyValuePair = new JsonObject();
 
  61         singleKeyValuePair.addProperty("p3", "v1");
 
  62         JsonObject intermediateNode = new JsonObject();
 
  63         intermediateNode.add("p2", singleKeyValuePair);
 
  64         JsonObject jsonObject = new JsonObject();
 
  65         jsonObject.add("p1", intermediateNode);
 
  67         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
 
  69         MerkleTree<String> expected = emptyTree()
 
  70                 .add(List.of("p1", "p2", "p3"), "v1");
 
  71         assertThat(tree).isEqualTo(expected);
 
  75     void fromJsonObject_givenMultipleKeyValuePairs_shouldCreateMultipleLeafs() {
 
  76         JsonObject keyValuePairs = new JsonObject();
 
  77         keyValuePairs.addProperty("A", "vA");
 
  78         keyValuePairs.addProperty("B", "vB");
 
  79         JsonObject jsonObject = new JsonObject();
 
  80         jsonObject.add("p1", keyValuePairs);
 
  82         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
 
  84         MerkleTree<String> expected = emptyTree()
 
  85                 .add(List.of("p1", "A"), "vA")
 
  86                 .add(List.of("p1", "B"), "vB");
 
  87         assertThat(tree).isEqualTo(expected);
 
  91     void fromJsonObject_givenJsonArray_shouldCreateMultipleLeafsUnderArtificialNodes() {
 
  92         JsonObject singleKeyValuePair = new JsonObject();
 
  93         singleKeyValuePair.addProperty("p2", "v2");
 
  94         JsonArray jsonArray = new JsonArray();
 
  96         jsonArray.add(singleKeyValuePair);
 
  97         JsonObject jsonObject = new JsonObject();
 
  98         jsonObject.add("p1", jsonArray);
 
 100         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
 
 102         MerkleTree<String> expected = emptyTree()
 
 103                 .add(List.of("p1", "0"), "v1")
 
 104                 .add(List.of("p1", "1", "p2"), "v2");
 
 105         assertThat(tree).isEqualTo(expected);
 
 110     void fromJsonObject_givenMoreComplicatedJson_shouldReturnCorrectTree() {
 
 111         // below example is contained in javadoc for method
 
 112         JsonObject jsonObject2 = new JsonObject();
 
 113         jsonObject2.addProperty("p4", "v4");
 
 114         JsonArray jsonArray = new JsonArray();
 
 118         JsonObject jsonObject = new JsonObject();
 
 119         jsonObject.addProperty("p1", "v1");
 
 120         jsonObject.add("p2", jsonArray);
 
 121         jsonObject.add("p3", jsonObject2);
 
 123         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
 
 125         MerkleTree<String> expected = emptyTree()
 
 126                 .add(List.of("p1"), "v1")
 
 127                 .add(List.of("p2", "0"), "v2")
 
 128                 .add(List.of("p2", "1"), "v3")
 
 129                 .add(List.of("p3", "p4"), "v4");
 
 130         assertThat(tree).isEqualTo(expected);
 
 134     void fromJsonObject_givenNotStringValues_shouldCastAllToString() {
 
 135         JsonArray jsonArray = new JsonArray();
 
 140         jsonArray.add(new BigInteger("999799799799799"));
 
 141         JsonObject jsonObject = new JsonObject();
 
 142         jsonObject.add("p1", jsonArray);
 
 144         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
 
 146         MerkleTree<String> expected = emptyTree()
 
 147                 .add(List.of("p1", "0"), "1")
 
 148                 .add(List.of("p1", "1"), "2")
 
 149                 .add(List.of("p1", "2"), "3.0")
 
 150                 .add(List.of("p1", "3"), "true")
 
 151                 .add(List.of("p1", "4"), "999799799799799");
 
 152         assertThat(tree).isEqualTo(expected);
 
 156     private MerkleTree<String> emptyTree() {
 
 157         return MerkleTree.emptyWithDefaultDigest(String::getBytes);