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 aaModulePrefix = null;
50 String aModulePrefix = null;
51 String iiModulePrefix = 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 = startElement.getNamespaceContext().getPrefixes("augment:augment:module");
59 while (prefixes.hasNext() && (aaModulePrefix == null)) {
60 final String prefix = (String) prefixes.next();
61 if (!prefix.isEmpty()) {
62 aaModulePrefix = prefix;
66 aModulePrefix = startElement.getNamespaceContext().getPrefix("augment:module");
67 iiModulePrefix = startElement.getNamespaceContext().getPrefix("instance:identifier:module");
73 assertNotNull(aaModulePrefix);
74 assertNotNull(aModulePrefix);
75 assertNotNull(iiModulePrefix);
77 final String instanceIdentifierValue = "/" + iiModulePrefix + ":cont/" + iiModulePrefix + ":cont1/" + aModulePrefix
78 + ":lst11[" + aModulePrefix + ":keyvalue111='value1'][" + aModulePrefix + ":keyvalue112='value2']/"
79 + aaModulePrefix + ":lf112";
81 assertTrue(xml.contains(instanceIdentifierValue));
85 private static void validateXmlOutputWithLeafList(final String xml) throws XMLStreamException {
86 final XMLInputFactory xmlInFactory = XMLInputFactory.newInstance();
87 XMLEventReader eventReader;
89 eventReader = xmlInFactory.createXMLEventReader(new ByteArrayInputStream(xml.getBytes()));
90 String aModuleLfLstPrefix = null;
91 String iiModulePrefix = null;
92 while (eventReader.hasNext()) {
93 final XMLEvent nextEvent = eventReader.nextEvent();
94 if (nextEvent.isStartElement()) {
95 final StartElement startElement = (StartElement) nextEvent;
96 if (startElement.getName().getLocalPart().equals("lf111")) {
97 final Iterator<?> prefixes = startElement.getNamespaceContext().getPrefixes("augment:module:leaf:list");
99 while (prefixes.hasNext() && (aModuleLfLstPrefix == null)) {
100 final String prefix = (String) prefixes.next();
101 if (!prefix.isEmpty()) {
102 aModuleLfLstPrefix = prefix;
105 iiModulePrefix = startElement.getNamespaceContext().getPrefix("instance:identifier:module");
111 assertNotNull(aModuleLfLstPrefix);
112 assertNotNull(iiModulePrefix);
114 final String instanceIdentifierValue = "/" + iiModulePrefix + ":cont/" + iiModulePrefix + ":cont1/"
115 + aModuleLfLstPrefix + ":lflst11[.='lflst11_1']";
117 assertTrue(xml.contains(instanceIdentifierValue));
121 private static YangInstanceIdentifier createInstanceIdentifier() throws URISyntaxException {
122 final List<PathArgument> pathArguments = new ArrayList<>();
123 pathArguments.add(new NodeIdentifier(new QName(new URI("instance:identifier:module"), "cont")));
124 pathArguments.add(new NodeIdentifier(new QName(new URI("instance:identifier:module"), "cont1")));
126 final QName qName = new QName(new URI("augment:module"), "lst11");
127 final Map<QName, Object> keyValues = new HashMap<>();
128 keyValues.put(new QName(new URI("augment:module"), "keyvalue111"), "value1");
129 keyValues.put(new QName(new URI("augment:module"), "keyvalue112"), "value2");
130 final NodeIdentifierWithPredicates nodeIdentifierWithPredicates = new NodeIdentifierWithPredicates(qName, keyValues);
131 pathArguments.add(nodeIdentifierWithPredicates);
133 pathArguments.add(new NodeIdentifier(new QName(new URI("augment:augment:module"), "lf112")));
135 return YangInstanceIdentifier.create(pathArguments);
138 private static YangInstanceIdentifier createInstanceIdentifierWithLeafList() throws URISyntaxException {
139 final List<PathArgument> pathArguments = new ArrayList<>();
140 pathArguments.add(new NodeIdentifier(new QName(new URI("instance:identifier:module"), "cont")));
141 pathArguments.add(new NodeIdentifier(new QName(new URI("instance:identifier:module"), "cont1")));
142 pathArguments.add(new NodeWithValue(new QName(new URI("augment:module:leaf:list"), "lflst11"), "lflst11_1"));
144 return YangInstanceIdentifier.create(pathArguments);