2a9a7fcdf4fc7a467ce1e05bd40a6666f7f7eacf
[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 static org.assertj.core.api.Assertions.assertThat;
24
25 import org.junit.jupiter.api.Test;
26 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.listener.MerkleTree;
27
28 /**
29  * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
30  * @since February 2019
31  */
32 class MerkleTreeTest {
33
34     @Test
35     void shouldBeAbleToGetEntries() {
36         MerkleTree<String> cut = emptyTree()
37                 .add("value1", "ala", "ma", "kota")
38                 .add("value2", "ala", "ma", "psa");
39
40         assertThat(cut.get("ala", "ma", "kota")).contains("value1");
41         assertThat(cut.get("ala", "ma", "psa")).contains("value2");
42     }
43
44     @Test
45     void shouldReturnNoneForNonExistingPaths() {
46         MerkleTree<String> cut = emptyTree()
47                 .add("value1", "ala", "ma", "kota")
48                 .add("value2", "ala", "ma", "psa");
49
50         assertThat(cut.get("ala", "je", "obiad")).isEmpty();
51     }
52
53     @Test
54     void shouldReturnNoneWhenNodeDoesntContainValue() {
55         MerkleTree<String> cut = emptyTree()
56                 .add("value1", "ala", "ma", "kota")
57                 .add("value2", "ala", "ma", "psa");
58
59         assertThat(cut.get("ala", "ma")).isEmpty();
60     }
61
62
63     @Test
64     void shouldNotCreateNewObjectWhenNothingChanged() {
65         MerkleTree<String> cut = emptyTree()
66                 .add("some value", "ala", "ma", "kota");
67
68         final MerkleTree<String> result = cut.add("some value", "ala", "ma", "kota");
69
70         assertThat(result).isSameAs(cut);
71     }
72
73     @Test
74     void shouldRecalculateHashesAfterAddingNewNode() {
75         MerkleTree<String> cut = emptyTree()
76                 .add("value1", "ala", "ma", "kota")
77                 .add("value2", "ala", "ma", "psa")
78                 .add("value3", "ala", "name");
79
80         final MerkleTree<String> modified = cut.add("value4", "ala", "surname");
81
82         assertThat(modified).isNotSameAs(cut);
83
84         assertThat(modified.hashOf("ala", "ma")).isEqualTo(cut.hashOf("ala", "ma"));
85         assertThat(modified.hashOf("ala", "ma", "kota")).isEqualTo(cut.hashOf("ala", "ma", "kota"));
86         assertThat(modified.hashOf("ala", "ma", "psa")).isEqualTo(cut.hashOf("ala", "ma", "psa"));
87         assertThat(modified.hashOf("ala", "name")).isEqualTo(cut.hashOf("ala", "name"));
88
89         assertThat(modified.hashOf("ala", "surname")).isNotEqualTo(cut.hashOf("ala", "surname"));
90         assertThat(modified.hashOf("ala")).isNotEqualTo(cut.hashOf("ala"));
91         assertThat(modified.hash()).isNotEqualTo(cut.hash());
92     }
93
94     private MerkleTree<String> emptyTree() {
95         return MerkleTree.emptyWithDefaultDigest(String::getBytes);
96     }
97 }