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 org.jetbrains.annotations.NotNull;
26 import org.junit.jupiter.api.Test;
28 import java.math.BigInteger;
31 import static org.assertj.core.api.Assertions.assertThat;
33 class MerkleTreeParserTest {
35 private final MerkleTreeParser cut = new MerkleTreeParser();
38 void fromJsonObject_givenEmptyJsonObject_shouldReturnEmptyMerkleTree() {
39 JsonObject jsonObject = new JsonObject();
41 MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
43 assertThat(tree.isSame(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()
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("v1", "p1", "p2", "p3");
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()
86 .add("vB", "p1", "B");
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("v1", "p1", "0")
104 .add("v2", "p1", "1", "p2");
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()
127 .add("v2", "p2", "0")
128 .add("v3", "p2", "1")
129 .add("v4", "p3", "p4");
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()
149 .add("3.0", "p1", "2")
150 .add("true", "p1", "3")
151 .add("999799799799799", "p1", "4");
152 assertThat(tree).isEqualTo(expected);
156 private MerkleTree<String> emptyTree() {
157 return MerkleTree.emptyWithDefaultDigest(String::getBytes);