2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.sal.restconf.impl.test;
10 import static org.junit.Assert.assertNotNull;
11 import static org.junit.Assert.assertTrue;
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;
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;
34 public class CnSnToXmlAndJsonInstanceIdentifierTest extends YangAndXmlAndDataSchemaLoader {
37 public static void initialize() throws FileNotFoundException, ReactorException {
38 dataLoad("/instanceidentifier/yang", 4, "instance-identifier-module", "cont");
42 private static void validateXmlOutput(final String xml) throws XMLStreamException {
43 final XMLInputFactory xmlInFactory = XMLInputFactory.newInstance();
44 XMLEventReader eventReader;
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");
58 while (prefixes.hasNext() && augmentAugmentModulePrefix == null) {
59 final String prefix = (String) prefixes.next();
60 if (!prefix.isEmpty()) {
61 augmentAugmentModulePrefix = prefix;
65 augmentModulePrefix = startElement.getNamespaceContext().getPrefix("augment:module");
66 instanceIdentifierModulePrefix =
67 startElement.getNamespaceContext().getPrefix("instance:identifier:module");
73 assertNotNull(augmentAugmentModulePrefix);
74 assertNotNull(augmentModulePrefix);
75 assertNotNull(instanceIdentifierModulePrefix);
77 final String instanceIdentifierValue = "/" + instanceIdentifierModulePrefix + ":cont/"
78 + instanceIdentifierModulePrefix + ":cont1/" + augmentModulePrefix + ":lst11[" + augmentModulePrefix
79 + ":keyvalue111='value1'][" + augmentModulePrefix + ":keyvalue112='value2']/"
80 + augmentAugmentModulePrefix + ":lf112";
82 assertTrue(xml.contains(instanceIdentifierValue));
86 private static void validateXmlOutputWithLeafList(final String xml) throws XMLStreamException {
87 final XMLInputFactory xmlInFactory = XMLInputFactory.newInstance();
88 XMLEventReader eventReader;
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");
101 while (prefixes.hasNext() && augmentModuleLfLstPrefix == null) {
102 final String prefix = (String) prefixes.next();
103 if (!prefix.isEmpty()) {
104 augmentModuleLfLstPrefix = prefix;
107 iiModulePrefix = startElement.getNamespaceContext().getPrefix("instance:identifier:module");
113 assertNotNull(augmentModuleLfLstPrefix);
114 assertNotNull(iiModulePrefix);
116 final String instanceIdentifierValue = "/" + iiModulePrefix + ":cont/" + iiModulePrefix + ":cont1/"
117 + augmentModuleLfLstPrefix + ":lflst11[.='lflst11_1']";
119 assertTrue(xml.contains(instanceIdentifierValue));
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")));
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);
136 pathArguments.add(new NodeIdentifier(QName.create("augment:augment:module", "lf112")));
138 return YangInstanceIdentifier.create(pathArguments);
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"));
147 return YangInstanceIdentifier.create(pathArguments);