*/
package org.opendaylight.controller.cluster.datastore.node.utils.stream;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import com.google.common.collect.ImmutableSet;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutput;
import java.io.DataOutputStream;
+import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Set;
import javax.xml.transform.dom.DOMSource;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.XMLUnit;
-import org.junit.Assert;
import org.junit.Test;
import org.opendaylight.yangtools.util.xml.UntrustedXML;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode;
import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
+import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode;
import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode;
private static final QName CONTAINER_Q_NAME = QName.create("ns-1", "2017-03-17", "container1");
@Test
- public void testSerializeDeserializeNodes() {
+ public void testSerializeDeserializeNodes() throws IOException {
final NormalizedNode<?, ?> normalizedNode = createNormalizedNode();
- final byte[] bytes = SerializationUtils.serializeNormalizedNode(normalizedNode);
- Assert.assertEquals(normalizedNode, SerializationUtils.deserializeNormalizedNode(bytes));
-
+ final byte[] bytes = serializeNormalizedNode(normalizedNode);
+ assertEquals(10564, bytes.length);
+ assertEquals(normalizedNode, deserializeNormalizedNode(bytes));
}
@Test
final ByteArrayInputStream is =
new ByteArrayInputStream("<xml><data/></xml>".getBytes(Charset.defaultCharset()));
final Document parse = UntrustedXML.newDocumentBuilder().parse(is);
- final AnyXmlNode anyXmlNode = Builders.anyXmlBuilder()
+ final DOMSourceAnyxmlNode anyXmlNode = Builders.anyXmlBuilder()
.withNodeIdentifier(id("anyXmlNode"))
.withValue(new DOMSource(parse))
.build();
- final byte[] bytes = SerializationUtils.serializeNormalizedNode(anyXmlNode);
- final NormalizedNode<?, ?> deserialized = SerializationUtils.deserializeNormalizedNode(bytes);
+ final byte[] bytes = serializeNormalizedNode(anyXmlNode);
+ assertEquals(113, bytes.length);
+ final NormalizedNode<?, ?> deserialized = deserializeNormalizedNode(bytes);
final DOMSource value = (DOMSource) deserialized.getValue();
final Diff diff = XMLUnit.compareXML((Document) anyXmlNode.getValue().getNode(),
value.getNode().getOwnerDocument());
- Assert.assertTrue(diff.toString(), diff.similar());
+ assertTrue(diff.toString(), diff.similar());
}
@Test
- public void testSerializeDeserializePath() {
+ public void testSerializeDeserializePath() throws IOException {
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
final DataOutput out = new DataOutputStream(bos);
final YangInstanceIdentifier path = YangInstanceIdentifier.builder()
.node(listId("list1", "keyName1", "keyValue1"))
.node(leafSetId("leafSer1", "leafSetValue1"))
.build();
- SerializationUtils.serializePath(path, out);
+ SerializationUtils.writePath(out, path);
+
+ final byte[] bytes = bos.toByteArray();
+ assertEquals(119, bytes.length);
+
final YangInstanceIdentifier deserialized =
- SerializationUtils.deserializePath(new DataInputStream(new ByteArrayInputStream(bos.toByteArray())));
- Assert.assertEquals(path, deserialized);
+ SerializationUtils.readPath(new DataInputStream(new ByteArrayInputStream(bytes)));
+ assertEquals(path, deserialized);
}
@Test
- public void testSerializeDeserializePathAndNode() {
+ public void testSerializeDeserializePathAndNode() throws IOException {
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
final DataOutput out = new DataOutputStream(bos);
final NormalizedNode<?, ?> node = createNormalizedNode();
final YangInstanceIdentifier path = YangInstanceIdentifier.create(id("container1"));
- SerializationUtils.serializePathAndNode(path, node, out);
- final DataInputStream in = new DataInputStream(new ByteArrayInputStream(bos.toByteArray()));
+ SerializationUtils.writeNodeAndPath(out, path, node);
+
+ final byte[] bytes = bos.toByteArray();
+ assertEquals(10566, bytes.length);
+
+ final DataInputStream in = new DataInputStream(new ByteArrayInputStream(bytes));
final AtomicBoolean applierCalled = new AtomicBoolean(false);
- SerializationUtils.deserializePathAndNode(in, applierCalled, (instance, deserializedPath, deserializedNode) -> {
- Assert.assertEquals(path, deserializedPath);
- Assert.assertEquals(node, deserializedNode);
+ SerializationUtils.readNodeAndPath(in, applierCalled, (instance, deserializedPath, deserializedNode) -> {
+ assertEquals(path, deserializedPath);
+ assertEquals(node, deserializedNode);
applierCalled.set(true);
});
- Assert.assertTrue(applierCalled.get());
+ assertTrue(applierCalled.get());
+ }
+
+ @Test
+ public void testSerializeDeserializeAugmentNoref() throws IOException {
+ final YangInstanceIdentifier expected = YangInstanceIdentifier.create(
+ AugmentationIdentifier.create(ImmutableSet.of(
+ QName.create("foo", "leaf1"),
+ QName.create("bar", "leaf2"))));
+
+ final ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ final DataOutput out = new DataOutputStream(bos);
+ SerializationUtils.writePath(out, expected);
+
+ final byte[] bytes = bos.toByteArray();
+ assertEquals(37, bytes.length);
+
+ final DataInputStream in = new DataInputStream(new ByteArrayInputStream(bytes));
+ final YangInstanceIdentifier read = SerializationUtils.readPath(in);
+ assertEquals(expected, read);
+ }
+
+ private static NormalizedNode<?, ?> deserializeNormalizedNode(final byte[] bytes) throws IOException {
+ return SerializationUtils.readNormalizedNode(new DataInputStream(new ByteArrayInputStream(bytes))).get();
+ }
+
+ private static byte[] serializeNormalizedNode(final NormalizedNode<?, ?> node) throws IOException {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ SerializationUtils.writeNormalizedNode(new DataOutputStream(bos), node);
+ return bos.toByteArray();
}
private static NormalizedNode<?, ?> createNormalizedNode() {
final LeafNode<String> stringLeaf = createLeaf("stringLeaf", "stringValue");
final LeafNode<String> longStringLeaf = createLeaf("longStringLeaf", getLongString());
final LeafNode<QName> qNameLeaf = createLeaf("stringLeaf", QName.create("base", "qName"));
- final LeafNode<YangInstanceIdentifier> idLeaf = createLeaf("stringLeaf", YangInstanceIdentifier.EMPTY);
+ final LeafNode<YangInstanceIdentifier> idLeaf = createLeaf("stringLeaf", YangInstanceIdentifier.empty());
final MapEntryNode entry1 = Builders.mapEntryBuilder()
.withNodeIdentifier(listId("mapNode", "key", "key1"))
.withChild(stringLeaf)
private static YangInstanceIdentifier.NodeIdentifierWithPredicates listId(final String listName,
final String keyName,
final Object keyValue) {
- return new YangInstanceIdentifier.NodeIdentifierWithPredicates(QName.create(CONTAINER_Q_NAME, listName),
+ return YangInstanceIdentifier.NodeIdentifierWithPredicates.of(QName.create(CONTAINER_Q_NAME, listName),
QName.create(CONTAINER_Q_NAME, keyName), keyValue);
}
}
return builder.toString();
}
-}
\ No newline at end of file
+}