080f8097ea44dada1d70bed1e6e1506dc7cc572c
[dcaegen2/services/sdk.git] /
1 /*
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
10  *
11  *       http://www.apache.org/licenses/LICENSE-2.0
12  *
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=====================================
19  */
20
21 package org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.listener;
22
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;
27
28 import java.math.BigInteger;
29
30
31 import static org.assertj.core.api.Assertions.assertThat;
32
33 class MerkleTreeParserTest {
34
35     private final MerkleTreeParser cut = new MerkleTreeParser();
36
37     @Test
38     void fromJsonObject_givenEmptyJsonObject_shouldReturnEmptyMerkleTree() {
39         JsonObject jsonObject = new JsonObject();
40
41         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
42
43         assertThat(tree.isSame(emptyTree())).isTrue();
44     }
45
46     @Test
47     void fromJsonObject_givenSingleKeyValuePair_shouldReturnSingleNodeTree() {
48         JsonObject jsonObject = new JsonObject();
49         jsonObject.addProperty("p1", "v1");
50
51         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
52
53         MerkleTree<String> expected = emptyTree()
54                 .add("v1", "p1");
55         assertThat(tree).isEqualTo(expected);
56     }
57
58     @Test
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);
66
67         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
68
69         MerkleTree<String> expected = emptyTree()
70                 .add("v1", "p1", "p2", "p3");
71         assertThat(tree).isEqualTo(expected);
72     }
73
74     @Test
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);
81
82         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
83
84         MerkleTree<String> expected = emptyTree()
85                 .add("vA", "p1", "A")
86                 .add("vB", "p1", "B");
87         assertThat(tree).isEqualTo(expected);
88     }
89
90     @Test
91     void fromJsonObject_givenJsonArray_shouldCreateMultipleLeafsUnderArtificialNodes() {
92         JsonObject singleKeyValuePair = new JsonObject();
93         singleKeyValuePair.addProperty("p2", "v2");
94         JsonArray jsonArray = new JsonArray();
95         jsonArray.add("v1");
96         jsonArray.add(singleKeyValuePair);
97         JsonObject jsonObject = new JsonObject();
98         jsonObject.add("p1", jsonArray);
99
100         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
101
102         MerkleTree<String> expected = emptyTree()
103                 .add("v1", "p1", "0")
104                 .add("v2", "p1", "1", "p2");
105         assertThat(tree).isEqualTo(expected);
106     }
107
108
109     @Test
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();
115         jsonArray.add("v2");
116         jsonArray.add("v3");
117
118         JsonObject jsonObject = new JsonObject();
119         jsonObject.addProperty("p1", "v1");
120         jsonObject.add("p2", jsonArray);
121         jsonObject.add("p3", jsonObject2);
122
123         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
124
125         MerkleTree<String> expected = emptyTree()
126                 .add("v1", "p1")
127                 .add("v2", "p2", "0")
128                 .add("v3", "p2", "1")
129                 .add("v4", "p3", "p4");
130         assertThat(tree).isEqualTo(expected);
131     }
132
133     @Test
134     void fromJsonObject_givenNotStringValues_shouldCastAllToString() {
135         JsonArray jsonArray = new JsonArray();
136         jsonArray.add(1);
137         jsonArray.add(2L);
138         jsonArray.add(3.0);
139         jsonArray.add(true);
140         jsonArray.add(new BigInteger("999799799799799"));
141         JsonObject jsonObject = new JsonObject();
142         jsonObject.add("p1", jsonArray);
143
144         MerkleTree<String> tree = cut.fromJsonObject(jsonObject);
145
146         MerkleTree<String> expected = emptyTree()
147                 .add("1", "p1", "0")
148                 .add("2", "p1", "1")
149                 .add("3.0", "p1", "2")
150                 .add("true", "p1", "3")
151                 .add("999799799799799", "p1", "4");
152         assertThat(tree).isEqualTo(expected);
153     }
154
155     @NotNull
156     private MerkleTree<String> emptyTree() {
157         return MerkleTree.emptyWithDefaultDigest(String::getBytes);
158     }
159 }