Appending dummy root node to XML data format
[ccsdk/sli/plugins.git] / restconf-client / provider / src / test / java / org / onap / ccsdk / sli / plugins / yangserializers / dfserializer / DataFormatSerializerTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - CCSDK
4  * ================================================================================
5  * Copyright (C) 2018 Huawei Technologies Co., Ltd. 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.ccsdk.sli.plugins.yangserializers.dfserializer;
22
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.mockito.invocation.InvocationOnMock;
26 import org.mockito.stubbing.Answer;
27 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
28 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
29 import org.onap.ccsdk.sli.plugins.restapicall.HttpResponse;
30 import org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode;
31 import org.onap.ccsdk.sli.plugins.restconfapicall.RestconfApiCallNode;
32 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
33
34 import java.util.HashMap;
35 import java.util.Map;
36
37 import static org.hamcrest.MatcherAssert.assertThat;
38 import static org.hamcrest.core.Is.is;
39 import static org.mockito.Matchers.any;
40 import static org.mockito.Mockito.doAnswer;
41 import static org.mockito.Mockito.doCallRealMethod;
42 import static org.mockito.Mockito.doReturn;
43 import static org.mockito.Mockito.mock;
44 import static org.onap.ccsdk.sli.plugins.restapicall.HttpMethod.GET;
45 import static org.onap.ccsdk.sli.plugins.restapicall.HttpMethod.POST;
46 import static org.onap.ccsdk.sli.plugins.restapicall.HttpMethod.PUT;
47 import static org.onap.ccsdk.sli.plugins.restconfapicall.RestconfApiUtils.parseUrl;
48 import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.DECODE_FROM_JSON_RPC;
49 import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.DECODE_FROM_XML_RPC;
50 import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.ENCODE_TO_JSON_ID;
51 import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.ENCODE_TO_JSON_RPC;
52 import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.ENCODE_TO_JSON_YANG;
53 import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.ENCODE_TO_JSON_YANG_AUG_POST;
54 import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.ENCODE_TO_XML_ID;
55 import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.ENCODE_TO_XML_RPC;
56 import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.ENCODE_TO_XML_YANG;
57 import static org.onap.ccsdk.sli.plugins.yangserializers.dfserializer.DataFormatUtilsTest.ENCODE_TO_XML_YANG_AUG_POST;
58
59
60 /**
61  * Unit test cases for data format serialization and restconf api call node.
62  */
63 public class DataFormatSerializerTest {
64
65     private Map<String, String> p;
66
67     private RestconfApiCallNode restconf;
68
69     private RestapiCallNode restApi;
70
71     private DfCaptor dfCaptor;
72
73     /**
74      * Sets up the pre-requisite for each test case.
75      *
76      * @throws SvcLogicException when test case fails
77      */
78     @Before
79     public void setUp() throws SvcLogicException {
80         p = new HashMap<>();
81         p.put("restapiUser", "user1");
82         p.put("restapiPassword", "abc123");
83         p.put("responsePrefix", "response");
84         p.put("skipSending", "true");
85         restApi = new RestapiCallNode();
86         restconf = mock(RestconfApiCallNode.class);
87         dfCaptor = new DfCaptor();
88         createMethodMocks();
89     }
90
91     /**
92      * Creates method mocks using mockito for RestconfApiCallNode class.
93      *
94      * @throws SvcLogicException when test case fails
95      */
96     private void createMethodMocks() throws SvcLogicException {
97         doReturn(restApi).when(restconf).getRestapiCallNode();
98         doCallRealMethod().when(restconf).sendRequest(
99                 any(Map.class), any(SvcLogicContext.class));
100         doCallRealMethod().when(restconf).sendRequest(
101                 any(Map.class), any(SvcLogicContext.class), any(Integer.class));
102         doAnswer(dfCaptor).when(restconf).serializeRequest(
103                 any(Map.class), any(YangParameters.class), any(String.class),
104                 any(InstanceIdentifierContext.class));
105     }
106
107     /**
108      * Creates mock using mockito with input data for decoding.
109      *
110      * @param decodeData input data
111      * @throws SvcLogicException when test case fails
112      */
113     private void createMockForDecode(String decodeData)
114             throws SvcLogicException {
115         doReturn(decodeData).when(restconf).getResponse(
116                 any(SvcLogicContext.class), any(YangParameters.class),
117                 any(String.class), any(HttpResponse.class));
118         doCallRealMethod().when(restconf).serializeResponse(
119                 any(YangParameters.class), any(String.class), any(String.class),
120                 any(InstanceIdentifierContext.class));
121     }
122
123     /**
124      * Verifies encoding of parameters to JSON data format with identity-ref
125      * and inter-file linking.
126      *
127      * @throws SvcLogicException when test case fails
128      */
129     @Test
130     public void encodeToJsonId() throws SvcLogicException {
131         String pre = "identity-test:test.";
132         SvcLogicContext ctx = createAttList(pre);
133         ctx.setAttribute(pre + "l", "abc");
134         p.put("dirPath", "src/test/resources");
135         p.put("format", "json");
136         p.put("httpMethod", "post");
137         p.put("restapiUrl", "http://echo.getpostman" +
138                 ".com/restconf/operations/identity-test:test");
139         restconf.sendRequest(p, ctx);
140         assertThat(dfCaptor.getResult(), is(ENCODE_TO_JSON_ID));
141     }
142
143     /**
144      * Verifies encoding of parameters to XML data format with identity-ref
145      * and inter-file linking.
146      *
147      * @throws SvcLogicException when test case fails
148      */
149     @Test
150     public void encodeToXmlId() throws SvcLogicException {
151         String pre = "identity-test:test.";
152         SvcLogicContext ctx = createAttList(pre);
153         p.put("dirPath", "src/test/resources");
154         p.put("format", "xml");
155         p.put("httpMethod", "post");
156         p.put("restapiUrl", "http://echo.getpostman" +
157                 ".com/restconf/operations/identity-test:test");
158         restconf.sendRequest(p, ctx);
159         assertThat(dfCaptor.getResult(), is(ENCODE_TO_XML_ID));
160     }
161
162     /**
163      * Verifies decoding of parameters from JSON data format with identity-ref
164      * and inter-file linking.
165      *
166      * @throws SvcLogicException when test case fails
167      */
168     @Test
169     public void decodeToJsonId() throws SvcLogicException {
170         createMockForDecode(ENCODE_TO_JSON_ID);
171         SvcLogicContext ctx = new SvcLogicContext();
172         String pre = "identity-test:test.";
173         p.put("dirPath", "src/test/resources");
174         p.put("format", "json");
175         p.put("httpMethod", "get");
176         p.put("restapiUrl", "http://echo.getpostman" +
177                 ".com/restconf/operations/identity-test:test");
178         restconf.sendRequest(p, ctx);
179         assertThat(ctx.getAttribute(pre + "l"), is("abc"));
180         verifyAttList(ctx, pre);
181     }
182
183     /**
184      * Verifies decoding of parameters from XML data format with identity-ref
185      * and inter-file linking.
186      *
187      * @throws SvcLogicException when test case fails
188      */
189     @Test
190     public void decodeToXmlId() throws SvcLogicException {
191         createMockForDecode(ENCODE_TO_XML_ID);
192         SvcLogicContext ctx = new SvcLogicContext();
193         String pre = "identity-test:test.";
194         p.put("dirPath", "src/test/resources");
195         p.put("format", "xml");
196         p.put("httpMethod", "get");
197         p.put("restapiUrl", "http://echo.getpostman" +
198                 ".com/restconf/operations/identity-test:test");
199         restconf.sendRequest(p, ctx);
200         verifyAttList(ctx, pre);
201     }
202
203     /**
204      * Verifies encoding of parameters to JSON data format with containers,
205      * grouping and augment.
206      *
207      * @throws SvcLogicException when test case fails
208      */
209     @Test
210     public void encodeToJsonYang() throws SvcLogicException {
211         String pre = "test-yang:cont1.cont2.";
212         SvcLogicContext ctx = createAttListYang(pre);
213         p.put("dirPath", "src/test/resources");
214         p.put("format", "json");
215         p.put("httpMethod", "post");
216         p.put("restapiUrl", "http://echo.getpostman" +
217                 ".com/restconf/operations/test-yang:cont1");
218         restconf.sendRequest(p, ctx);
219         assertThat(dfCaptor.getResult(), is(ENCODE_TO_JSON_YANG));
220     }
221
222     /**
223      * Verifies encoding of parameters to JSON data format with augment as
224      * root child.
225      *
226      * @throws SvcLogicException when test case fails
227      */
228     @Test
229     public void encodeToJsonWithAugAsRootChild() throws SvcLogicException {
230         String pre = "test-yang:cont1.cont2.";
231         SvcLogicContext ctx = createAttListYang(pre);
232         p.put("dirPath", "src/test/resources");
233         p.put("format", "json");
234         p.put("httpMethod", "post");
235         p.put("restapiUrl", "http://echo.getpostman" +
236                 ".com/restconf/operations/test-yang:cont1/cont2/cont4");
237         restconf.sendRequest(p, ctx);
238         assertThat(dfCaptor.getResult(), is(ENCODE_TO_JSON_YANG_AUG_POST));
239     }
240
241     /**
242      * Verifies decoding of parameters from JSON data format with containers,
243      * grouping and augment.
244      *
245      * @throws SvcLogicException when test case fails
246      */
247     @Test
248     public void decodeToJsonYang() throws SvcLogicException {
249         createMockForDecode(ENCODE_TO_JSON_YANG);
250         SvcLogicContext ctx = new SvcLogicContext();
251         String pre = "test-yang:cont1.cont2.";
252         p.put("dirPath", "src/test/resources");
253         p.put("format", "json");
254         p.put("httpMethod", "get");
255         p.put("restapiUrl", "http://echo.getpostman" +
256                 ".com/restconf/operations/test-yang:cont1");
257         restconf.sendRequest(p, ctx);
258         verifyAttListYang(ctx, pre);
259     }
260
261     /**
262      * Verifies encoding of parameters to XML data format with containers,
263      * grouping and augment.
264      *
265      * @throws SvcLogicException when test case fails
266      */
267     @Test
268     public void encodeToXmlYang() throws SvcLogicException {
269         String pre = "test-yang:cont1.cont2.";
270         SvcLogicContext ctx = createAttListYang(pre);
271         p.put("dirPath", "src/test/resources");
272         p.put("format", "xml");
273         p.put("httpMethod", "post");
274         p.put("restapiUrl", "http://echo.getpostman" +
275                 ".com/restconf/operations/test-yang:cont1");
276         restconf.sendRequest(p, ctx);
277         assertThat(dfCaptor.getResult(), is(ENCODE_TO_XML_YANG));
278     }
279
280     /**
281      * Verifies encoding of parameters to XML data format with augment as
282      * root child.
283      *
284      * @throws SvcLogicException when test case fails
285      */
286     @Test
287     public void encodeToXmlWithAugAsRootChild() throws SvcLogicException {
288         String pre = "test-yang:cont1.cont2.";
289         SvcLogicContext ctx = createAttListYang(pre);
290         p.put("dirPath", "src/test/resources");
291         p.put("format", "xml");
292         p.put("httpMethod", "post");
293         p.put("restapiUrl", "http://echo.getpostman" +
294                 ".com/restconf/operations/test-yang:cont1/cont2/cont4");
295         restconf.sendRequest(p, ctx);
296         assertThat(dfCaptor.getResult(), is(ENCODE_TO_XML_YANG_AUG_POST));
297     }
298
299     /**
300      * Verifies decoding of parameters from XML data format with containers,
301      * grouping and augment.
302      *
303      * @throws SvcLogicException when test case fails
304      */
305     @Test
306     public void decodeToXmlYang() throws SvcLogicException {
307         createMockForDecode(ENCODE_TO_XML_YANG);
308         SvcLogicContext ctx = new SvcLogicContext();
309         String pre = "test-yang:cont1.cont2.";
310         p.put("dirPath", "src/test/resources");
311         p.put("format", "xml");
312         p.put("httpMethod", "get");
313         p.put("restapiUrl", "http://echo.getpostman" +
314                 ".com/restconf/operations/test-yang:cont1");
315         restconf.sendRequest(p, ctx);
316         verifyAttListYang(ctx, pre);
317     }
318
319     /**
320      * Verifies encoding of and decoding from, JSON respectively for data
321      * format with containers, grouping and augment.
322      *
323      * @throws SvcLogicException when test case fails
324      */
325     @Test
326     public void codecToJsonRpc() throws SvcLogicException {
327         createMockForDecode(DECODE_FROM_JSON_RPC);
328         String inPre = "test-yang:create-sfc.input.";
329         String outPre = "test-yang:create-sfc.output.";
330         SvcLogicContext ctx = createAttListRpc(inPre);
331         p.put("dirPath", "src/test/resources");
332         p.put("format", "json");
333         p.put("httpMethod", "post");
334         p.put("restapiUrl", "http://echo.getpostman" +
335                 ".com/restconf/operations/test-yang:create-sfc");
336         restconf.sendRequest(p, ctx);
337         assertThat(dfCaptor.getResult(), is(ENCODE_TO_JSON_RPC));
338         verifyAttListRpc(ctx, outPre);
339     }
340
341     /**
342      * Verifies encoding of and decoding from, XML respectively for data
343      * format with containers, grouping and augment.
344      *
345      * @throws SvcLogicException when test case fails
346      */
347     @Test
348     public void codecToXmlRpc() throws SvcLogicException {
349         createMockForDecode(DECODE_FROM_XML_RPC);
350         String inPre = "test-yang:create-sfc.input.";
351         String outPre = "test-yang:create-sfc.output.";
352         SvcLogicContext ctx = createAttListRpc(inPre);
353         p.put("dirPath", "src/test/resources");
354         p.put("format", "xml");
355         p.put("httpMethod", "post");
356         p.put("restapiUrl", "http://echo.getpostman" +
357                 ".com/restconf/operations/test-yang:create-sfc");
358         restconf.sendRequest(p, ctx);
359         assertThat(dfCaptor.getResult(), is(ENCODE_TO_XML_RPC));
360         verifyAttListRpc(ctx, outPre);
361     }
362
363     /**
364      * Verifies URL parser returning path with only schema information for all
365      * kind of URL.
366      *
367      * @throws SvcLogicException when test case fails
368      */
369     @Test
370     public void validateUrlParser() throws SvcLogicException {
371         String actVal = "identity-test:test";
372         String url1 = "http://echo.getpostman.com/restconf/operations/" +
373                 actVal;
374         String url2 = "http://echo.getpostman.com/restconf/data/" + actVal;
375         String url3 = "https://echo.getpostman.com/restconf/operations/" +
376                 actVal;
377         String url4 = "https://echo.getpostman.com/restconf/data/" + actVal +
378                 "/for-put";
379         String url5 = "http://localhost:8282/restconf/operations/" + actVal;
380         String url6 = "https://localhost:8282/restconf/operations/" + actVal;
381         String url7 = "http://localhost:8282/restconf/data/" + actVal +
382                 "/for-put";
383         String url8 = "https://localhost:8282/restconf/data/" + actVal;
384         String url9 = "http://182.2.61.24:2250/restconf/data/" + actVal;
385         String url10 = "https://182.2.61.24:2250/restconf/operations/" + actVal;
386         String val1 = parseUrl(url1, POST);
387         String val2 = parseUrl(url2, GET);
388         String val3 = parseUrl(url3, POST);
389         String val4 = parseUrl(url4, PUT);
390         String val5 = parseUrl(url5, GET);
391         String val6 = parseUrl(url6, POST);
392         String val7 = parseUrl(url7, PUT);
393         String val8 = parseUrl(url8, POST);
394         String val9 = parseUrl(url9, GET);
395         String val10 = parseUrl(url10, POST);
396         assertThat(val1, is(actVal));
397         assertThat(val2, is(actVal));
398         assertThat(val3, is(actVal));
399         assertThat(val4, is(actVal));
400         assertThat(val5, is(actVal));
401         assertThat(val6, is(actVal));
402         assertThat(val7, is(actVal));
403         assertThat(val8, is(actVal));
404         assertThat(val9, is(actVal));
405         assertThat(val10, is(actVal));
406     }
407
408     /**
409      * Creates attribute list for encoding JSON or XML with identity-ref YANG
410      * file.
411      *
412      * @param pre prefix
413      * @return service logic context
414      */
415     private SvcLogicContext createAttList(String pre) {
416         SvcLogicContext ctx = new SvcLogicContext();
417         String pre1 = pre + "con1.interfaces.";
418         ctx.setAttribute(pre + "con1.interface", "identity-types:physical");
419         ctx.setAttribute(pre1 + "int-list[0].iden", "optical");
420         ctx.setAttribute(pre1 + "int-list[0].available.ll[0]", "Giga");
421         ctx.setAttribute(pre1 + "int-list[0].available.ll[1]",
422                          "identity-types:Loopback");
423         ctx.setAttribute(pre1 + "int-list[0].available.ll[2]",
424                          "identity-types-second:Ethernet");
425         ctx.setAttribute(pre1 + "int-list[0].available.leaf1", "58");
426         ctx.setAttribute(pre1 + "int-list[0].available.leaf2",
427                          "identity-types-second:iden2");
428
429         ctx.setAttribute(pre1 + "int-list[1].iden", "214748364");
430         ctx.setAttribute(pre1 + "int-list[1].available.ll[0]", "Giga");
431         ctx.setAttribute(pre1 + "int-list[1].available.ll[1]",
432                          "identity-types:Loopback");
433         ctx.setAttribute(pre1 + "int-list[1].available.ll[2]",
434                          "identity-types-second:Ethernet");
435         ctx.setAttribute(pre1 + "int-list[1].available.leaf1",
436                          "8888");
437         ctx.setAttribute(pre1 + "int-list[1].available.leaf2",
438                          "identity-types-second:iden2");
439         return ctx;
440     }
441
442     /**
443      * Creates attribute list for encoding JSON or XML with container,
444      * grouping and augmented YANG file.
445      *
446      * @param pre prefix
447      * @return service logic context
448      */
449     private SvcLogicContext createAttListYang(String pre) {
450         SvcLogicContext ctx = new SvcLogicContext();
451         ctx.setAttribute(pre + "cont3.leaf10", "abc");
452         ctx.setAttribute(pre + "list1[0].leaf1", "true");
453         ctx.setAttribute(pre + "list1[0].leaf2", "abc");
454         ctx.setAttribute(pre + "list1[0].leaf3", "abc");
455         ctx.setAttribute(pre + "list1[0].ll1[0]", "abc");
456         ctx.setAttribute(pre + "list1[0].ll1[1]", "abc");
457         ctx.setAttribute(pre + "list1[0].ll2[0]", "abc");
458         ctx.setAttribute(pre + "list1[0].ll2[1]", "abc");
459         ctx.setAttribute(pre + "list1[0].cont4.leaf11", "abc");
460         ctx.setAttribute(pre + "list1[0].list4[0].leaf8", "abc");
461         ctx.setAttribute(pre + "list1[0].list4[1].leaf8", "abc");
462         ctx.setAttribute(pre + "list1[0].list5[0].leaf9", "abc");
463         ctx.setAttribute(pre + "list1[0].list5[1].leaf9", "abc");
464         ctx.setAttribute(pre + "list1[1].leaf1", "true");
465         ctx.setAttribute(pre + "list1[1].leaf2", "abc");
466         ctx.setAttribute(pre + "list1[1].leaf3", "abc");
467         ctx.setAttribute(pre + "list1[1].ll1[0]", "abc");
468         ctx.setAttribute(pre + "list1[1].ll1[1]", "abc");
469         ctx.setAttribute(pre + "list1[1].ll2[0]", "abc");
470         ctx.setAttribute(pre + "list1[1].ll2[1]", "abc");
471         ctx.setAttribute(pre + "list1[1].cont4.leaf11", "abc");
472         ctx.setAttribute(pre + "list1[1].list4[0].leaf8", "abc");
473         ctx.setAttribute(pre + "list1[1].list4[1].leaf8", "abc");
474         ctx.setAttribute(pre + "list1[1].list5[0].leaf9", "abc");
475         ctx.setAttribute(pre + "list1[1].list5[1].leaf9", "abc");
476         ctx.setAttribute(pre + "list2[0].leaf4", "abc");
477         ctx.setAttribute(pre + "list2[1].leaf4", "abc");
478         ctx.setAttribute(pre + "leaf5", "abc");
479         ctx.setAttribute(pre + "leaf6", "abc");
480         ctx.setAttribute(pre + "ll3[0]", "abc");
481         ctx.setAttribute(pre + "ll3[1]", "abc");
482         ctx.setAttribute(pre + "ll4[0]", "abc");
483         ctx.setAttribute(pre + "ll4[1]", "abc");
484         ctx.setAttribute(pre + "cont4.leaf10", "abc");
485         ctx.setAttribute(pre + "list6[0].leaf11", "abc");
486         ctx.setAttribute(pre + "list6[1].leaf11", "abc");
487         ctx.setAttribute(pre + "leaf12", "abc");
488         ctx.setAttribute(pre + "ll5[0]", "abc");
489         ctx.setAttribute(pre + "ll5[1]", "abc");
490         ctx.setAttribute(pre + "cont4.test-augment:cont5.leaf13", "true");
491         ctx.setAttribute(pre + "cont4.test-augment:list7[0].leaf14", "test");
492         ctx.setAttribute(pre + "cont4.test-augment:list7[1].leaf14", "create");
493         ctx.setAttribute(pre + "cont4.test-augment:leaf15", "abc");
494         ctx.setAttribute(pre + "cont4.test-augment:ll6[0]", "unbounded");
495         ctx.setAttribute(pre + "cont4.test-augment:ll6[1]", "8");
496         ctx.setAttribute(pre + "cont4.test-augment:cont13.cont12.leaf26",
497                          "abc");
498         ctx.setAttribute(pre + "cont4.test-augment:cont13.list9[0].leaf27",
499                          "abc");
500         ctx.setAttribute(pre + "cont4.test-augment:cont13.list9[1].leaf27",
501                          "abc");
502         ctx.setAttribute(pre + "cont4.test-augment:cont13.leaf28", "abc");
503         ctx.setAttribute(pre + "cont4.test-augment:cont13.ll9[0]", "abc");
504         ctx.setAttribute(pre + "cont4.test-augment:cont13.ll9[1]", "abc");
505         return ctx;
506     }
507
508     /**
509      * Creates attribute list for encoding JSON or XML with RPC YANG file.
510      *
511      * @param pre prefix
512      * @return service logic context
513      */
514     private SvcLogicContext createAttListRpc(String pre) {
515         SvcLogicContext ctx = new SvcLogicContext();
516         ctx.setAttribute(pre + "cont14.leaf28", "abc");
517         ctx.setAttribute(pre + "list10[0].leaf29", "abc");
518         ctx.setAttribute(pre + "list10[1].leaf29", "abc");
519         ctx.setAttribute(pre + "leaf30", "abc");
520         ctx.setAttribute(pre + "ll10[0]", "abc");
521         ctx.setAttribute(pre + "ll10[1]", "abc");
522         ctx.setAttribute(pre + "cont15.leaf31", "abc");
523         ctx.setAttribute(pre + "cont13.list9[0].leaf27", "abc");
524         ctx.setAttribute(pre + "cont13.list9[1].leaf27", "abc");
525         ctx.setAttribute(pre + "cont13.leaf28", "abc");
526         ctx.setAttribute(pre + "cont13.ll9[0]", "abc");
527         ctx.setAttribute(pre + "cont13.ll9[1]", "abc");
528         return ctx;
529     }
530
531     /**
532      * Verifies the attribute list for decoding from JSON or XML with
533      * identity-ref YANG file.
534      *
535      * @param ctx service logic context
536      * @param pre prefix
537      */
538     private void verifyAttList(SvcLogicContext ctx, String pre) {
539         String pre1 = pre + "con1.interfaces.";
540         assertThat(ctx.getAttribute(pre + "con1.interface"), is(
541                 "identity-types:physical"));
542         assertThat(ctx.getAttribute(pre + "con1.interface"), is(
543                 "identity-types:physical"));
544         assertThat(ctx.getAttribute(pre1 + "int-list[0].iden"), is("optical"));
545         assertThat(ctx.getAttribute(pre1 + "int-list[0].available.ll[0]"), is(
546                 "Giga"));
547         assertThat(ctx.getAttribute(pre1 + "int-list[0].available.ll[1]"), is(
548                 "identity-types:Loopback"));
549         assertThat(ctx.getAttribute(pre1 + "int-list[0].available.ll[2]"), is(
550                 "identity-types-second:Ethernet"));
551         assertThat(ctx.getAttribute(pre1 + "int-list[0].available.leaf1"), is(
552                 "58"));
553         assertThat(ctx.getAttribute(pre1 + "int-list[0].available.leaf2"), is(
554                 "identity-types-second:iden2"));
555
556         assertThat(ctx.getAttribute(pre1 + "int-list[1].iden"), is(
557                 "214748364"));
558         assertThat(ctx.getAttribute(pre1 + "int-list[1].available.ll[0]"), is(
559                 "Giga"));
560         assertThat(ctx.getAttribute(pre1 + "int-list[1].available.ll[1]"), is(
561                 "identity-types:Loopback"));
562         assertThat(ctx.getAttribute(pre1 + "int-list[1].available.ll[2]"), is(
563                 "identity-types-second:Ethernet"));
564         assertThat(ctx.getAttribute(pre1 + "int-list[1].available.leaf1"), is(
565                 "8888"));
566         assertThat(ctx.getAttribute(pre1 + "int-list[1].available.leaf2"), is(
567                 "identity-types-second:iden2"));
568     }
569
570     /**
571      * Verifies the attribute list for decoding from JSON or XML with
572      * container, grouping and augmented file.
573      *
574      * @param ctx service logic context
575      * @param pre prefix
576      */
577     private void verifyAttListYang(SvcLogicContext ctx, String pre) {
578         assertThat(ctx.getAttribute(pre + "cont3.leaf10"), is("abc"));
579         assertThat(ctx.getAttribute(pre + "list1[0].leaf1"), is("true"));
580         assertThat(ctx.getAttribute(pre + "list1[0].leaf2"), is("abc"));
581         assertThat(ctx.getAttribute(pre + "list1[0].leaf3"), is("abc"));
582         assertThat(ctx.getAttribute(pre + "list1[0].ll1[0]"), is("abc"));
583         assertThat(ctx.getAttribute(pre + "list1[0].ll1[1]"), is("abc"));
584         assertThat(ctx.getAttribute(pre + "list1[0].ll2[0]"), is("abc"));
585         assertThat(ctx.getAttribute(pre + "list1[0].ll2[1]"), is("abc"));
586         assertThat(ctx.getAttribute(pre + "list1[0].cont4.leaf11"), is("abc"));
587         assertThat(ctx.getAttribute(pre + "list1[0].list4[0].leaf8"),
588                    is("abc"));
589         assertThat(ctx.getAttribute(pre + "list1[0].list4[1].leaf8"),
590                    is("abc"));
591         assertThat(ctx.getAttribute(pre + "list1[0].list5[0].leaf9"),
592                    is("abc"));
593         assertThat(ctx.getAttribute(pre + "list1[0].list5[1].leaf9"),
594                    is("abc"));
595         assertThat(ctx.getAttribute(pre + "list1[1].leaf1"), is("true"));
596         assertThat(ctx.getAttribute(pre + "list1[1].leaf2"), is("abc"));
597         assertThat(ctx.getAttribute(pre + "list1[1].leaf3"), is("abc"));
598         assertThat(ctx.getAttribute(pre + "list1[1].ll1[0]"), is("abc"));
599         assertThat(ctx.getAttribute(pre + "list1[1].ll1[1]"), is("abc"));
600         assertThat(ctx.getAttribute(pre + "list1[1].ll2[0]"), is("abc"));
601         assertThat(ctx.getAttribute(pre + "list1[1].ll2[1]"), is("abc"));
602         assertThat(ctx.getAttribute(pre + "list1[1].cont4.leaf11"), is("abc"));
603         assertThat(ctx.getAttribute(pre + "list1[1].list4[0].leaf8"),
604                    is("abc"));
605         assertThat(ctx.getAttribute(pre + "list1[1].list4[1].leaf8"),
606                    is("abc"));
607         assertThat(ctx.getAttribute(pre + "list1[1].list5[0].leaf9"),
608                    is("abc"));
609         assertThat(ctx.getAttribute(pre + "list1[1].list5[1].leaf9"),
610                    is("abc"));
611         assertThat(ctx.getAttribute(pre + "list2[0].leaf4"), is("abc"));
612         assertThat(ctx.getAttribute(pre + "list2[1].leaf4"), is("abc"));
613         assertThat(ctx.getAttribute(pre + "leaf5"), is("abc"));
614         assertThat(ctx.getAttribute(pre + "leaf6"), is("abc"));
615         assertThat(ctx.getAttribute(pre + "ll3[0]"), is("abc"));
616         assertThat(ctx.getAttribute(pre + "ll3[1]"), is("abc"));
617         assertThat(ctx.getAttribute(pre + "ll4[0]"), is("abc"));
618         assertThat(ctx.getAttribute(pre + "ll4[1]"), is("abc"));
619         assertThat(ctx.getAttribute(pre + "cont4.leaf10"), is( "abc"));
620         assertThat(ctx.getAttribute(pre + "list6[0].leaf11"), is("abc"));
621         assertThat(ctx.getAttribute(pre + "list6[1].leaf11"), is("abc"));
622         assertThat(ctx.getAttribute(pre + "leaf12"), is("abc"));
623         assertThat(ctx.getAttribute(pre + "ll5[0]"), is("abc"));
624         assertThat(ctx.getAttribute(pre + "ll5[1]"), is("abc"));
625         assertThat(ctx.getAttribute(pre + "cont4.test-augment:cont5.leaf13"),
626                    is("true"));
627         assertThat(ctx.getAttribute(pre + "cont4.test-augment:list7[0].leaf14"),
628                    is("test"));
629         assertThat(ctx.getAttribute(pre + "cont4.test-augment:list7[1].leaf14"),
630                    is("create"));
631         assertThat(ctx.getAttribute(pre + "cont4.test-augment:leaf15"),
632                    is("abc"));
633         assertThat(ctx.getAttribute(pre + "cont4.test-augment:ll6[0]"),
634                    is("unbounded"));
635         assertThat(ctx.getAttribute(pre + "cont4.test-augment:ll6[1]"),
636                    is("8"));
637         assertThat(ctx.getAttribute(pre + "cont4.test-augment:cont13" +
638                                             ".cont12.leaf26"), is("abc"));
639         assertThat(ctx.getAttribute(pre + "cont4.test-augment:cont13.list9[0]" +
640                                             ".leaf27"), is("abc"));
641         assertThat(ctx.getAttribute(pre + "cont4.test-augment:cont13.list9[1]" +
642                                             ".leaf27"), is("abc"));
643         assertThat(ctx.getAttribute(pre + "cont4.test-augment:cont13.leaf28"),
644                    is("abc"));
645         assertThat(ctx.getAttribute(pre + "cont4.test-augment:cont13.ll9[0]"),
646                    is("abc"));
647         assertThat(ctx.getAttribute(pre + "cont4.test-augment:cont13.ll9[1]"),
648                    is("abc"));
649     }
650
651     /**
652      * Verifies the attribute list for decoding from JSON or XML with
653      * RPC YANG file.
654      *
655      * @param ctx service logic context
656      * @param pre prefix
657      */
658     private void verifyAttListRpc(SvcLogicContext ctx, String pre) {
659         assertThat(ctx.getAttribute(pre + "cont16.leaf32"), is("abc"));
660         assertThat(ctx.getAttribute(pre + "list11[0].leaf33"), is("abc"));
661         assertThat(ctx.getAttribute(pre + "list11[1].leaf33"), is("abc"));
662         assertThat(ctx.getAttribute(pre + "leaf34"), is("abc"));
663         assertThat(ctx.getAttribute(pre + "ll11[0]"), is("abc"));
664         assertThat(ctx.getAttribute(pre + "ll11[1]"), is("abc"));
665         assertThat(ctx.getAttribute(pre + "cont17.leaf35"), is("abc"));
666         assertThat(ctx.getAttribute(pre + "cont13.cont12.leaf26"), is("abc"));
667         assertThat(ctx.getAttribute(pre + "cont13.list9[0].leaf27"), is("abc"));
668         assertThat(ctx.getAttribute(pre + "cont13.list9[1].leaf27"), is("abc"));
669         assertThat(ctx.getAttribute(pre + "cont13.ll9[0]"), is("abc"));
670         assertThat(ctx.getAttribute(pre + "cont13.ll9[1]"), is("abc"));
671         assertThat(ctx.getAttribute(pre + "cont13.leaf28"), is("abc"));
672     }
673
674     /**
675      * Captures the data format messages by mocking it, which can be used in
676      * testing the value.
677      *
678      * @param <String> capturing data format
679      */
680     public class DfCaptor<String> implements Answer {
681
682         private String result;
683
684         /**
685          * Returns the captured data format message.
686          *
687          * @return data format message.
688          */
689         public String getResult() {
690             return result;
691         }
692
693         @Override
694         public String answer(InvocationOnMock invocationOnMock)
695                 throws Throwable {
696             result = (String) invocationOnMock.callRealMethod();
697             return result;
698         }
699     }
700
701 }