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);