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;
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;
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;
36 public class CnSnToXmlAndJsonInstanceIdentifierTest extends YangAndXmlAndDataSchemaLoader {
39 public static void initialize() throws FileNotFoundException, ReactorException {
40 dataLoad("/instanceidentifier/yang", 4, "instance-identifier-module", "cont");
44 private static void validateXmlOutput(final String xml) throws XMLStreamException {
45 final XMLInputFactory xmlInFactory = XMLInputFactory.newInstance();
46 XMLEventReader eventReader;
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");
60 while (prefixes.hasNext() && augmentAugmentModulePrefix == null) {
61 final String prefix = (String) prefixes.next();
62 if (!prefix.isEmpty()) {
63 augmentAugmentModulePrefix = prefix;
67 augmentModulePrefix = startElement.getNamespaceContext().getPrefix("augment:module");
68 instanceIdentifierModulePrefix =
69 startElement.getNamespaceContext().getPrefix("instance:identifier:module");
75 assertNotNull(augmentAugmentModulePrefix);
76 assertNotNull(augmentModulePrefix);
77 assertNotNull(instanceIdentifierModulePrefix);
79 final String instanceIdentifierValue = "/" + instanceIdentifierModulePrefix + ":cont/"
80 + instanceIdentifierModulePrefix + ":cont1/" + augmentModulePrefix + ":lst11[" + augmentModulePrefix
81 + ":keyvalue111='value1'][" + augmentModulePrefix + ":keyvalue112='value2']/"
82 + augmentAugmentModulePrefix + ":lf112";
84 assertTrue(xml.contains(instanceIdentifierValue));
88 private static void validateXmlOutputWithLeafList(final String xml) throws XMLStreamException {
89 final XMLInputFactory xmlInFactory = XMLInputFactory.newInstance();
90 XMLEventReader eventReader;
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");
103 while (prefixes.hasNext() && augmentModuleLfLstPrefix == null) {
104 final String prefix = (String) prefixes.next();
105 if (!prefix.isEmpty()) {
106 augmentModuleLfLstPrefix = prefix;
109 iiModulePrefix = startElement.getNamespaceContext().getPrefix("instance:identifier:module");
115 assertNotNull(augmentModuleLfLstPrefix);
116 assertNotNull(iiModulePrefix);
118 final String instanceIdentifierValue = "/" + iiModulePrefix + ":cont/" + iiModulePrefix + ":cont1/"
119 + augmentModuleLfLstPrefix + ":lflst11[.='lflst11_1']";
121 assertTrue(xml.contains(instanceIdentifierValue));
125 private static YangInstanceIdentifier createInstanceIdentifier() throws URISyntaxException {
126 final List<PathArgument> pathArguments = new ArrayList<>();
127 pathArguments.add(new NodeIdentifier(QName.create(new URI("instance:identifier:module"), "cont")));
128 pathArguments.add(new NodeIdentifier(QName.create(new URI("instance:identifier:module"), "cont1")));
130 final QName qName = QName.create(new URI("augment:module"), "lst11");
131 final Map<QName, Object> keyValues = new HashMap<>();
132 keyValues.put(QName.create(new URI("augment:module"), "keyvalue111"), "value1");
133 keyValues.put(QName.create(new URI("augment:module"), "keyvalue112"), "value2");
134 final NodeIdentifierWithPredicates nodeIdentifierWithPredicates =
135 new NodeIdentifierWithPredicates(qName, keyValues);
136 pathArguments.add(nodeIdentifierWithPredicates);
138 pathArguments.add(new NodeIdentifier(QName.create(new URI("augment:augment:module"), "lf112")));
140 return YangInstanceIdentifier.create(pathArguments);
143 private static YangInstanceIdentifier createInstanceIdentifierWithLeafList() throws URISyntaxException {
144 final List<PathArgument> pathArguments = new ArrayList<>();
145 pathArguments.add(new NodeIdentifier(QName.create(new URI("instance:identifier:module"), "cont")));
146 pathArguments.add(new NodeIdentifier(QName.create(new URI("instance:identifier:module"), "cont1")));
147 pathArguments.add(new NodeWithValue<>(QName.create(new URI("augment:module:leaf:list"), "lflst11"),
150 return YangInstanceIdentifier.create(pathArguments);