96100cbb5d2157cdb50a96dc10e65ba3a887a311
[netconf.git] / restconf / restconf-nb-bierman02 / src / test / java / org / opendaylight / controller / sal / restconf / impl / test / CnSnToXmlAndJsonInstanceIdentifierTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.sal.restconf.impl.test;
9
10 import static org.junit.Assert.assertNotNull;
11 import static org.junit.Assert.assertTrue;
12
13 import java.io.ByteArrayInputStream;
14 import java.io.FileNotFoundException;
15 import java.util.ArrayList;
16 import java.util.HashMap;
17 import java.util.Iterator;
18 import java.util.List;
19 import java.util.Map;
20 import javax.xml.stream.XMLEventReader;
21 import javax.xml.stream.XMLInputFactory;
22 import javax.xml.stream.XMLStreamException;
23 import javax.xml.stream.events.StartElement;
24 import javax.xml.stream.events.XMLEvent;
25 import org.junit.BeforeClass;
26 import org.opendaylight.yangtools.yang.common.QName;
27 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
28 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
29 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
30 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
31 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
32 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
33
34 public class CnSnToXmlAndJsonInstanceIdentifierTest extends YangAndXmlAndDataSchemaLoader {
35
36     @BeforeClass
37     public static void initialize() throws FileNotFoundException, ReactorException {
38         dataLoad("/instanceidentifier/yang", 4, "instance-identifier-module", "cont");
39     }
40
41
42     private static void validateXmlOutput(final String xml) throws XMLStreamException {
43         final XMLInputFactory xmlInFactory = XMLInputFactory.newInstance();
44         XMLEventReader eventReader;
45
46         eventReader = xmlInFactory.createXMLEventReader(new ByteArrayInputStream(xml.getBytes()));
47         String augmentAugmentModulePrefix = null;
48         String augmentModulePrefix = null;
49         String instanceIdentifierModulePrefix = null;
50         while (eventReader.hasNext()) {
51             final XMLEvent nextEvent = eventReader.nextEvent();
52             if (nextEvent.isStartElement()) {
53                 final StartElement startElement = (StartElement) nextEvent;
54                 if (startElement.getName().getLocalPart().equals("lf111")) {
55                     final Iterator<?> prefixes =
56                             startElement.getNamespaceContext().getPrefixes("augment:augment:module");
57
58                     while (prefixes.hasNext() && augmentAugmentModulePrefix == null) {
59                         final String prefix = (String) prefixes.next();
60                         if (!prefix.isEmpty()) {
61                             augmentAugmentModulePrefix = prefix;
62                         }
63                     }
64
65                     augmentModulePrefix = startElement.getNamespaceContext().getPrefix("augment:module");
66                     instanceIdentifierModulePrefix =
67                             startElement.getNamespaceContext().getPrefix("instance:identifier:module");
68                     break;
69                 }
70             }
71         }
72
73         assertNotNull(augmentAugmentModulePrefix);
74         assertNotNull(augmentModulePrefix);
75         assertNotNull(instanceIdentifierModulePrefix);
76
77         final String instanceIdentifierValue = "/" + instanceIdentifierModulePrefix + ":cont/"
78                 + instanceIdentifierModulePrefix + ":cont1/" + augmentModulePrefix + ":lst11[" + augmentModulePrefix
79                 + ":keyvalue111='value1'][" + augmentModulePrefix + ":keyvalue112='value2']/"
80                 + augmentAugmentModulePrefix + ":lf112";
81
82         assertTrue(xml.contains(instanceIdentifierValue));
83
84     }
85
86     private static void validateXmlOutputWithLeafList(final String xml) throws XMLStreamException {
87         final XMLInputFactory xmlInFactory = XMLInputFactory.newInstance();
88         XMLEventReader eventReader;
89
90         eventReader = xmlInFactory.createXMLEventReader(new ByteArrayInputStream(xml.getBytes()));
91         String augmentModuleLfLstPrefix = null;
92         String iiModulePrefix = null;
93         while (eventReader.hasNext()) {
94             final XMLEvent nextEvent = eventReader.nextEvent();
95             if (nextEvent.isStartElement()) {
96                 final StartElement startElement = (StartElement) nextEvent;
97                 if (startElement.getName().getLocalPart().equals("lf111")) {
98                     final Iterator<?> prefixes =
99                             startElement.getNamespaceContext().getPrefixes("augment:module:leaf:list");
100
101                     while (prefixes.hasNext() && augmentModuleLfLstPrefix == null) {
102                         final String prefix = (String) prefixes.next();
103                         if (!prefix.isEmpty()) {
104                             augmentModuleLfLstPrefix = prefix;
105                         }
106                     }
107                     iiModulePrefix = startElement.getNamespaceContext().getPrefix("instance:identifier:module");
108                     break;
109                 }
110             }
111         }
112
113         assertNotNull(augmentModuleLfLstPrefix);
114         assertNotNull(iiModulePrefix);
115
116         final String instanceIdentifierValue = "/" + iiModulePrefix + ":cont/" + iiModulePrefix + ":cont1/"
117                 + augmentModuleLfLstPrefix + ":lflst11[.='lflst11_1']";
118
119         assertTrue(xml.contains(instanceIdentifierValue));
120
121     }
122
123     private static YangInstanceIdentifier createInstanceIdentifier() {
124         final List<PathArgument> pathArguments = new ArrayList<>();
125         pathArguments.add(new NodeIdentifier(QName.create("instance:identifier:module", "cont")));
126         pathArguments.add(new NodeIdentifier(QName.create("instance:identifier:module", "cont1")));
127
128         final QName qName = QName.create("augment:module", "lst11");
129         final Map<QName, Object> keyValues = new HashMap<>();
130         keyValues.put(QName.create("augment:module", "keyvalue111"), "value1");
131         keyValues.put(QName.create("augment:module", "keyvalue112"), "value2");
132         final NodeIdentifierWithPredicates nodeIdentifierWithPredicates =
133                 NodeIdentifierWithPredicates.of(qName, keyValues);
134         pathArguments.add(nodeIdentifierWithPredicates);
135
136         pathArguments.add(new NodeIdentifier(QName.create("augment:augment:module", "lf112")));
137
138         return YangInstanceIdentifier.create(pathArguments);
139     }
140
141     private static YangInstanceIdentifier createInstanceIdentifierWithLeafList() {
142         final List<PathArgument> pathArguments = new ArrayList<>();
143         pathArguments.add(new NodeIdentifier(QName.create("instance:identifier:module", "cont")));
144         pathArguments.add(new NodeIdentifier(QName.create("instance:identifier:module", "cont1")));
145         pathArguments.add(new NodeWithValue<>(QName.create("augment:module:leaf:list", "lflst11"), "lflst11_1"));
146
147         return YangInstanceIdentifier.create(pathArguments);
148     }
149
150 }