Bump upstreams
[netconf.git] / restconf / restconf-nb / src / test / java / org / opendaylight / restconf / nb / rfc8040 / utils / parser / NetconfFieldsTranslatorTest.java
1 /*
2  * Copyright © 2020 FRINX s.r.o. and others.  All rights reserved.
3  * Copyright © 2021 PANTHEON.tech, s.r.o.
4  *
5  * This program and the accompanying materials are made available under the
6  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
7  * and is available at http://www.eclipse.org/legal/epl-v10.html
8  */
9 package org.opendaylight.restconf.nb.rfc8040.utils.parser;
10
11 import static org.junit.Assert.assertEquals;
12
13 import java.util.List;
14 import java.util.Set;
15 import java.util.stream.Collectors;
16 import org.junit.runner.RunWith;
17 import org.mockito.junit.MockitoJUnitRunner;
18 import org.opendaylight.restconf.api.query.FieldsParam;
19 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
22 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
24
25 /**
26  * Unit test for {@link NetconfFieldsTranslator}.
27  */
28 @RunWith(MockitoJUnitRunner.class)
29 public class NetconfFieldsTranslatorTest extends AbstractFieldsTranslatorTest<YangInstanceIdentifier> {
30     @Override
31     protected List<YangInstanceIdentifier> translateFields(final InstanceIdentifierContext context,
32             final FieldsParam fields) {
33         return NetconfFieldsTranslator.translate(context, fields);
34     }
35
36     @Override
37     protected void assertSimplePath(final List<YangInstanceIdentifier> result) {
38         assertEquals(1, result.size());
39         final var pathArguments = result.get(0).getPathArguments();
40         assertEquals(1, pathArguments.size());
41         assertEquals(LIBRARY_Q_NAME, pathArguments.get(0).getNodeType());
42     }
43
44     @Override
45     protected void assertKeyedList(final List<YangInstanceIdentifier> result) {
46         assertEquals(1, result.size());
47     }
48
49     @Override
50     protected void assertDoublePath(final List<YangInstanceIdentifier> result) {
51         assertEquals(2, result.size());
52
53         final var libraryPath = assertPath(result, LIBRARY_Q_NAME);
54         assertEquals(1, libraryPath.getPathArguments().size());
55
56         final var playerPath = assertPath(result, PLAYER_Q_NAME);
57         assertEquals(1, playerPath.getPathArguments().size());
58     }
59
60     @Override
61     protected void assertSubPath(final List<YangInstanceIdentifier> result) {
62         assertEquals(1, result.size());
63         final var pathArguments = result.get(0).getPathArguments();
64         assertEquals(6, pathArguments.size());
65         assertEquals(LIBRARY_Q_NAME, pathArguments.get(0).getNodeType());
66         assertEquals(ARTIST_Q_NAME, pathArguments.get(1).getNodeType());
67         assertEquals(ARTIST_Q_NAME, pathArguments.get(2).getNodeType());
68         assertEquals(ALBUM_Q_NAME, pathArguments.get(3).getNodeType());
69         assertEquals(ALBUM_Q_NAME, pathArguments.get(4).getNodeType());
70         assertEquals(NAME_Q_NAME, pathArguments.get(5).getNodeType());
71     }
72
73     @Override
74     protected void assertChildrenPath(final List<YangInstanceIdentifier> result) {
75         assertEquals(1, result.size());
76         final var pathArguments = result.get(0).getPathArguments();
77         assertEquals(6, pathArguments.size());
78         assertEquals(LIBRARY_Q_NAME, pathArguments.get(0).getNodeType());
79         assertEquals(ARTIST_Q_NAME, pathArguments.get(1).getNodeType());
80         assertEquals(ARTIST_Q_NAME, pathArguments.get(2).getNodeType());
81         assertEquals(ALBUM_Q_NAME, pathArguments.get(3).getNodeType());
82         assertEquals(ALBUM_Q_NAME, pathArguments.get(4).getNodeType());
83         assertEquals(NAME_Q_NAME, pathArguments.get(5).getNodeType());
84     }
85
86     @Override
87     protected void assertNamespace(final List<YangInstanceIdentifier> result) {
88         assertEquals(1, result.size());
89         final var augmentedLibraryPath = assertPath(result, AUGMENTED_LIBRARY_Q_NAME);
90         assertEquals(1, augmentedLibraryPath.getPathArguments().size());
91     }
92
93     @Override
94     protected void assertMultipleChildren1(final List<YangInstanceIdentifier> result) {
95         assertEquals(3, result.size());
96
97         final var tosPath = assertPath(result, TYPE_OF_SERVICE_Q_NAME);
98         assertEquals(3, tosPath.getPathArguments().size());
99
100         final var instanceNamePath = assertPath(result, INSTANCE_NAME_Q_NAME);
101         assertEquals(5, instanceNamePath.getPathArguments().size());
102
103         final var providerPath = assertPath(result, PROVIDER_Q_NAME);
104         assertEquals(5, providerPath.getPathArguments().size());
105     }
106
107     @Override
108     protected void assertMultipleChildren2(final List<YangInstanceIdentifier> result) {
109         assertEquals(3, result.size());
110
111         final var tosPath = assertPath(result, TYPE_OF_SERVICE_Q_NAME);
112         assertEquals(3, tosPath.getPathArguments().size());
113
114         final var instanceNamePath = assertPath(result, INSTANCE_NAME_Q_NAME);
115         assertEquals(5, instanceNamePath.getPathArguments().size());
116
117         final var providerPath = assertPath(result, PROVIDER_Q_NAME);
118         assertEquals(5, providerPath.getPathArguments().size());
119     }
120
121     @Override
122     protected void assertMultipleChildren3(final List<YangInstanceIdentifier> result) {
123         assertEquals(3, result.size());
124
125         final var instanceNamePath = assertPath(result, INSTANCE_NAME_Q_NAME);
126         assertEquals(5, instanceNamePath.getPathArguments().size());
127
128         final var tosPath = assertPath(result, TYPE_OF_SERVICE_Q_NAME);
129         assertEquals(3, tosPath.getPathArguments().size());
130
131         final var nextServicePath = assertPath(result, NEXT_SERVICE_Q_NAME);
132         assertEquals(4, nextServicePath.getPathArguments().size());
133     }
134
135     @Override
136     protected void assertMultipleChildren4(final List<YangInstanceIdentifier> result) {
137         assertEquals(4, result.size());
138
139         final var instanceNamePath = assertPath(result, INSTANCE_NAME_Q_NAME);
140         assertEquals(5, instanceNamePath.getPathArguments().size());
141
142         final var tosPath = assertPath(result, TYPE_OF_SERVICE_Q_NAME);
143         assertEquals(3, tosPath.getPathArguments().size());
144
145         final var nextServicePath = assertPath(result, NEXT_SERVICE_Q_NAME);
146         assertEquals(4, nextServicePath.getPathArguments().size());
147
148         final var providerPath = assertPath(result, PROVIDER_Q_NAME);
149         assertEquals(5, providerPath.getPathArguments().size());
150     }
151
152     @Override
153     protected void assertMultipleChildren5(final List<YangInstanceIdentifier> result) {
154         assertEquals(4, result.size());
155
156         final var instanceNamePath = assertPath(result, INSTANCE_NAME_Q_NAME);
157         assertEquals(5, instanceNamePath.getPathArguments().size());
158
159         final var tosPath = assertPath(result, TYPE_OF_SERVICE_Q_NAME);
160         assertEquals(3, tosPath.getPathArguments().size());
161
162         final var nextServicePath = assertPath(result, NEXT_SERVICE_Q_NAME);
163         assertEquals(4, nextServicePath.getPathArguments().size());
164
165         final var providerPath = assertPath(result, PROVIDER_Q_NAME);
166         assertEquals(5, providerPath.getPathArguments().size());
167     }
168
169     @Override
170     protected void assertAugmentedChild(final List<YangInstanceIdentifier> result) {
171         assertEquals(1, result.size());
172         final var pathArguments = result.get(0).getPathArguments();
173
174         assertEquals(2, pathArguments.size());
175         assertEquals(PLAYER_Q_NAME, pathArguments.get(0).getNodeType());
176         assertEquals(SPEED_Q_NAME, pathArguments.get(1).getNodeType());
177     }
178
179     @Override
180     protected void assertListFieldUnderList(final List<YangInstanceIdentifier> result) {
181         assertEquals(1, result.size());
182         assertEquals(List.of(
183             NodeIdentifier.create(SERVICES_Q_NAME),
184             NodeIdentifierWithPredicates.of(SERVICES_Q_NAME),
185             NodeIdentifier.create(INSTANCE_Q_NAME),
186             NodeIdentifierWithPredicates.of(INSTANCE_Q_NAME)),
187             result.get(0).getPathArguments());
188     }
189
190     @Override
191     protected void assertLeafList(final List<YangInstanceIdentifier> parsedFields) {
192         assertEquals(1, parsedFields.size());
193         assertEquals(List.of(new NodeIdentifier(PROTOCOLS_Q_NAME)), parsedFields.get(0).getPathArguments());
194     }
195
196     @Override
197     protected void assertDuplicateNodes1(final List<YangInstanceIdentifier> parsedFields) {
198         assertEquals(4, parsedFields.size());
199         assertEquals(
200             Set.of(List.of(NodeIdentifier.create(BAR_Q_NAME), NodeIdentifier.create(ALPHA_Q_NAME)),
201                 List.of(NodeIdentifier.create(BAR_Q_NAME), NodeIdentifier.create(BETA_Q_NAME),
202                     NodeIdentifier.create(GAMMA_Q_NAME)),
203                 List.of(NodeIdentifier.create(BAZ_Q_NAME), NodeIdentifierWithPredicates.of(BAZ_Q_NAME),
204                     NodeIdentifier.create(ALPHA_Q_NAME)),
205                 List.of(NodeIdentifier.create(BAZ_Q_NAME), NodeIdentifierWithPredicates.of(BAZ_Q_NAME),
206                     NodeIdentifier.create(BETA_Q_NAME), NodeIdentifier.create(GAMMA_Q_NAME))),
207             parsedFields.stream().map(YangInstanceIdentifier::getPathArguments).collect(Collectors.toSet()));
208     }
209
210     @Override
211     protected void assertDuplicateNodes2(final List<YangInstanceIdentifier> parsedFields) {
212         assertEquals(4, parsedFields.size());
213         assertEquals(
214             Set.of(List.of(NodeIdentifier.create(BAR_Q_NAME), NodeIdentifier.create(ALPHA_Q_NAME)),
215                 List.of(NodeIdentifier.create(BAR_Q_NAME), NodeIdentifier.create(BETA_Q_NAME),
216                     NodeIdentifier.create(DELTA_Q_NAME)),
217                 List.of(NodeIdentifier.create(BAZ_Q_NAME), NodeIdentifierWithPredicates.of(BAZ_Q_NAME),
218                     NodeIdentifier.create(ALPHA_Q_NAME)),
219                 List.of(NodeIdentifier.create(BAZ_Q_NAME), NodeIdentifierWithPredicates.of(BAZ_Q_NAME),
220                     NodeIdentifier.create(BETA_Q_NAME), NodeIdentifier.create(EPSILON_Q_NAME))),
221             parsedFields.stream().map(YangInstanceIdentifier::getPathArguments).collect(Collectors.toSet()));
222     }
223
224     private static YangInstanceIdentifier assertPath(final List<YangInstanceIdentifier> paths, final QName lastArg) {
225         return paths.stream()
226             .filter(path -> lastArg.equals(path.getLastPathArgument().getNodeType()))
227             .findAny()
228             .orElseThrow(() -> new AssertionError("Path ending with " + lastArg + " not found"));
229     }
230 }