dd0ea449a1d0d6722623c9016f27382e109303e3
[netconf.git] / restconf / sal-rest-connector / 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.net.URI;
16 import java.net.URISyntaxException;
17 import java.util.ArrayList;
18 import java.util.HashMap;
19 import java.util.Iterator;
20 import java.util.List;
21 import java.util.Map;
22 import javax.xml.stream.XMLEventReader;
23 import javax.xml.stream.XMLInputFactory;
24 import javax.xml.stream.XMLStreamException;
25 import javax.xml.stream.events.StartElement;
26 import javax.xml.stream.events.XMLEvent;
27 import org.junit.BeforeClass;
28 import org.opendaylight.yangtools.yang.common.QName;
29 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
30 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
31 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
32 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
33 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
34 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
35
36 public class CnSnToXmlAndJsonInstanceIdentifierTest extends YangAndXmlAndDataSchemaLoader {
37
38     @BeforeClass
39     public static void initialize() throws FileNotFoundException, ReactorException {
40         dataLoad("/instanceidentifier/yang", 4, "instance-identifier-module", "cont");
41     }
42
43
44     private static void validateXmlOutput(final String xml) throws XMLStreamException {
45         final XMLInputFactory xmlInFactory = XMLInputFactory.newInstance();
46         XMLEventReader eventReader;
47
48         eventReader = xmlInFactory.createXMLEventReader(new ByteArrayInputStream(xml.getBytes()));
49         String augmentAugmentModulePrefix = null;
50         String augmentModulePrefix = null;
51         String instanceIdentifierModulePrefix = null;
52         while (eventReader.hasNext()) {
53             final XMLEvent nextEvent = eventReader.nextEvent();
54             if (nextEvent.isStartElement()) {
55                 final StartElement startElement = (StartElement) nextEvent;
56                 if (startElement.getName().getLocalPart().equals("lf111")) {
57                     final Iterator<?> prefixes =
58                             startElement.getNamespaceContext().getPrefixes("augment:augment:module");
59
60                     while (prefixes.hasNext() && augmentAugmentModulePrefix == null) {
61                         final String prefix = (String) prefixes.next();
62                         if (!prefix.isEmpty()) {
63                             augmentAugmentModulePrefix = prefix;
64                         }
65                     }
66
67                     augmentModulePrefix = startElement.getNamespaceContext().getPrefix("augment:module");
68                     instanceIdentifierModulePrefix =
69                             startElement.getNamespaceContext().getPrefix("instance:identifier:module");
70                     break;
71                 }
72             }
73         }
74
75         assertNotNull(augmentAugmentModulePrefix);
76         assertNotNull(augmentModulePrefix);
77         assertNotNull(instanceIdentifierModulePrefix);
78
79         final String instanceIdentifierValue = "/" + instanceIdentifierModulePrefix + ":cont/"
80                 + instanceIdentifierModulePrefix + ":cont1/" + augmentModulePrefix + ":lst11[" + augmentModulePrefix
81                 + ":keyvalue111='value1'][" + augmentModulePrefix + ":keyvalue112='value2']/"
82                 + augmentAugmentModulePrefix + ":lf112";
83
84         assertTrue(xml.contains(instanceIdentifierValue));
85
86     }
87
88     private static void validateXmlOutputWithLeafList(final String xml) throws XMLStreamException {
89         final XMLInputFactory xmlInFactory = XMLInputFactory.newInstance();
90         XMLEventReader eventReader;
91
92         eventReader = xmlInFactory.createXMLEventReader(new ByteArrayInputStream(xml.getBytes()));
93         String augmentModuleLfLstPrefix = null;
94         String iiModulePrefix = null;
95         while (eventReader.hasNext()) {
96             final XMLEvent nextEvent = eventReader.nextEvent();
97             if (nextEvent.isStartElement()) {
98                 final StartElement startElement = (StartElement) nextEvent;
99                 if (startElement.getName().getLocalPart().equals("lf111")) {
100                     final Iterator<?> prefixes =
101                             startElement.getNamespaceContext().getPrefixes("augment:module:leaf:list");
102
103                     while (prefixes.hasNext() && augmentModuleLfLstPrefix == null) {
104                         final String prefix = (String) prefixes.next();
105                         if (!prefix.isEmpty()) {
106                             augmentModuleLfLstPrefix = prefix;
107                         }
108                     }
109                     iiModulePrefix = startElement.getNamespaceContext().getPrefix("instance:identifier:module");
110                     break;
111                 }
112             }
113         }
114
115         assertNotNull(augmentModuleLfLstPrefix);
116         assertNotNull(iiModulePrefix);
117
118         final String instanceIdentifierValue = "/" + iiModulePrefix + ":cont/" + iiModulePrefix + ":cont1/"
119                 + augmentModuleLfLstPrefix + ":lflst11[.='lflst11_1']";
120
121         assertTrue(xml.contains(instanceIdentifierValue));
122
123     }
124
125     private static YangInstanceIdentifier createInstanceIdentifier() throws URISyntaxException {
126         final List<PathArgument> pathArguments = new ArrayList<>();
127         pathArguments.add(new NodeIdentifier(new QName(new URI("instance:identifier:module"), "cont")));
128         pathArguments.add(new NodeIdentifier(new QName(new URI("instance:identifier:module"), "cont1")));
129
130         final QName qName = new QName(new URI("augment:module"), "lst11");
131         final Map<QName, Object> keyValues = new HashMap<>();
132         keyValues.put(new QName(new URI("augment:module"), "keyvalue111"), "value1");
133         keyValues.put(new QName(new URI("augment:module"), "keyvalue112"), "value2");
134         final NodeIdentifierWithPredicates nodeIdentifierWithPredicates =
135                 new NodeIdentifierWithPredicates(qName, keyValues);
136         pathArguments.add(nodeIdentifierWithPredicates);
137
138         pathArguments.add(new NodeIdentifier(new QName(new URI("augment:augment:module"), "lf112")));
139
140         return YangInstanceIdentifier.create(pathArguments);
141     }
142
143     private static YangInstanceIdentifier createInstanceIdentifierWithLeafList() throws URISyntaxException {
144         final List<PathArgument> pathArguments = new ArrayList<>();
145         pathArguments.add(new NodeIdentifier(new QName(new URI("instance:identifier:module"), "cont")));
146         pathArguments.add(new NodeIdentifier(new QName(new URI("instance:identifier:module"), "cont1")));
147         pathArguments.add(new NodeWithValue<>(new QName(new URI("augment:module:leaf:list"), "lflst11"), "lflst11_1"));
148
149         return YangInstanceIdentifier.create(pathArguments);
150     }
151
152 }