*/
package org.opendaylight.netconf.util;
-import static com.google.common.base.Preconditions.checkState;
-
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Iterator;
import javax.xml.transform.dom.DOMSource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.netconf.api.DocumentedException;
-import org.opendaylight.netconf.api.xml.XmlElement;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
import org.opendaylight.netconf.api.xml.XmlUtil;
import org.opendaylight.yangtools.rfc7952.data.api.NormalizedMetadata;
import org.opendaylight.yangtools.rfc7952.data.api.StreamWriterMetadataExtension;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
// No-op
}
- public static Document checkIsMessageOk(final Document response) throws DocumentedException {
- final XmlElement docElement = XmlElement.fromDomDocument(response);
- // FIXME: we should throw DocumentedException here
- checkState(XmlNetconfConstants.RPC_REPLY_KEY.equals(docElement.getName()));
- final XmlElement element = docElement.getOnlyChildElement();
- if (XmlNetconfConstants.OK.equals(element.getName())) {
- return response;
- }
-
- LOG.warn("Can not load last configuration. Operation failed.");
- // FIXME: we should be throwing a DocumentedException here
- throw new IllegalStateException("Can not load last configuration. Operation failed: "
- + XmlUtil.toString(response));
- }
-
/**
* Write {@code normalized} data into {@link DOMResult}.
*
*/
package org.opendaylight.netconf.util;
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
-import java.util.Collections;
+import java.util.List;
import javax.xml.transform.dom.DOMResult;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.XMLUnit;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
-import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
-import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
-import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
-import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
import org.w3c.dom.Document;
public class NetconfUtilTest {
-
@BeforeClass
public static void classSetUp() {
XMLUnit.setIgnoreWhitespace(true);
}
- @Test
- public void testConflictingVersionDetection() throws Exception {
- final Document document = XmlUtil.readXmlToDocument(getClass()
- .getResourceAsStream("/netconfMessages/conflictingversion/conflictingVersionResponse.xml"));
-
- final IllegalStateException e = assertThrows(IllegalStateException.class,
- () -> NetconfUtil.checkIsMessageOk(document));
- assertThat(e.getMessage(), containsString("Optimistic lock failed. Expected parent version 21, was 18"));
- }
-
@Test
public void testWriteNormalizedNode() throws Exception {
- final EffectiveModelContext context = BindingRuntimeHelpers.createEffectiveModel(
- Collections.singletonList($YangModuleInfoImpl.getInstance()));
- final LeafNode<?> username = Builders.leafBuilder()
- .withNodeIdentifier(new NodeIdentifier(QName.create(Session.QNAME, "username")))
- .withValue("admin")
- .build();
- final MapEntryNode session1 = Builders.mapEntryBuilder()
- .withNodeIdentifier(
- NodeIdentifierWithPredicates.of(Session.QNAME, QName.create(Session.QNAME, "session-id"), 1L))
- .withChild(username)
- .build();
- final MapNode sessionList = Builders.mapBuilder()
+ final var context = BindingRuntimeHelpers.createEffectiveModel(List.of($YangModuleInfoImpl.getInstance()));
+ final var result = new DOMResult(XmlUtil.newDocument());
+ NetconfUtil.writeNormalizedNode(Builders.containerBuilder()
+ .withNodeIdentifier(new NodeIdentifier(Sessions.QNAME))
+ .withChild(Builders.mapBuilder()
.withNodeIdentifier(new NodeIdentifier(Session.QNAME))
- .withChild(session1)
- .build();
- final ContainerNode sessions = Builders.containerBuilder()
- .withNodeIdentifier(new NodeIdentifier(Sessions.QNAME))
- .withChild(sessionList)
- .build();
- final DOMResult result = new DOMResult(XmlUtil.newDocument());
- NetconfUtil.writeNormalizedNode(sessions, result, context, Absolute.of(NetconfState.QNAME));
- final Document actual = (Document) result.getNode();
- final Document expected = XmlUtil.readXmlToDocument(getClass().getResourceAsStream("/sessions.xml"));
+ .withChild(Builders.mapEntryBuilder()
+ .withNodeIdentifier(
+ NodeIdentifierWithPredicates.of(Session.QNAME, QName.create(Session.QNAME, "session-id"), 1L))
+ .withChild(ImmutableNodes.leafNode(QName.create(Session.QNAME, "username"), "admin"))
+ .build())
+ .build())
+ .build(), result, context, Absolute.of(NetconfState.QNAME));
+ final var actual = (Document) result.getNode();
+ final var expected = XmlUtil.readXmlToDocument(getClass().getResourceAsStream("/sessions.xml"));
final Diff diff = XMLUnit.compareXML(expected, actual);
assertTrue(diff.toString(), diff.similar());
}