X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=inline;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fnode%2FNormalizedNodeToNodeCodecTest.java;fp=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fnode%2FNormalizedNodeToNodeCodecTest.java;h=1b85d46fc6ebdfa9b13de079db728b9dadf2beac;hb=6b9c0bb57b65343df31fd68d178821a22afd0fe2;hp=0000000000000000000000000000000000000000;hpb=cc6c063be5f143cd601208ef26604d90a25bd1a5;p=controller.git diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/NormalizedNodeToNodeCodecTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/NormalizedNodeToNodeCodecTest.java new file mode 100644 index 0000000000..1b85d46fc6 --- /dev/null +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/NormalizedNodeToNodeCodecTest.java @@ -0,0 +1,180 @@ +/* + * + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + * + */ + +package org.opendaylight.controller.cluster.datastore.node; + +import junit.framework.Assert; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.cluster.datastore.node.utils.NodeIdentifierFactory; +import org.opendaylight.controller.cluster.datastore.node.utils.NormalizedNodeGetter; +import org.opendaylight.controller.cluster.datastore.node.utils.NormalizedNodeNavigator; +import org.opendaylight.controller.cluster.datastore.util.TestModel; +import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages.Container; +import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages.Node; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; + +import java.util.ArrayList; +import java.util.List; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNotNull; + +public class NormalizedNodeToNodeCodecTest { + + + + private SchemaContext schemaContext; + + @Before + public void setUp() { + schemaContext = TestModel.createTestContext(); + assertNotNull("Schema context must not be null.", schemaContext); + } + + private YangInstanceIdentifier instanceIdentifierFromString(String s) { + + String[] ids = s.split("/"); + + List pathArguments = new ArrayList<>(); + for (String nodeId : ids) { + if (!"".equals(nodeId)) { + pathArguments.add(NodeIdentifierFactory.getArgument(nodeId)); + } + } + final YangInstanceIdentifier instanceIdentifier = + YangInstanceIdentifier.create(pathArguments); + return instanceIdentifier; + } + + + @Test + public void testNormalizeNodeAttributesToProtoBuffNode() { + final NormalizedNode documentOne = TestModel.createTestContainer(); + String id = + "/(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test?revision=2014-03-13)test" + + "/(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test?revision=2014-03-13)outer-list" + + "/(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test?revision=2014-03-13)outer-list[{(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test?revision=2014-03-13)id=2}]" + + "/(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test?revision=2014-03-13)id"; + + NormalizedNodeGetter normalizedNodeGetter = new NormalizedNodeGetter(id); + new NormalizedNodeNavigator(normalizedNodeGetter).navigate( + YangInstanceIdentifier.builder().build().toString(), documentOne); + + // Validate the value of id can be retrieved from the normalized node + NormalizedNode output = normalizedNodeGetter.getOutput(); + assertNotNull(output); + + + NormalizedNodeToNodeCodec codec = + new NormalizedNodeToNodeCodec(schemaContext); + Container container = + codec.encode(instanceIdentifierFromString(id), output); + + assertNotNull(container); + assertEquals(id, container.getParentPath() + "/" + + container.getNormalizedNode().getPath()); + + // Decode the normalized node from the ProtocolBuffer form + // first get the node representation of normalized node + final Node node = container.getNormalizedNode(); + + NormalizedNode normalizedNode = + codec.decode(instanceIdentifierFromString(id), node); + + assertEquals(normalizedNode.getValue().toString(), output.getValue() + .toString()); + } + + @Test + public void testThatANormalizedNodeToProtoBuffNodeEncodeDecode() + throws Exception { + final NormalizedNode documentOne = TestModel.createTestContainer(); + + final NormalizedNodeToNodeCodec normalizedNodeToNodeCodec = + new NormalizedNodeToNodeCodec(schemaContext); + + Container container = + normalizedNodeToNodeCodec.encode(YangInstanceIdentifier.builder() + .build(), documentOne); + + + final NormalizedNode decode = + normalizedNodeToNodeCodec + .decode( + instanceIdentifierFromString("/(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test?revision=2014-03-13)test"), + container.getNormalizedNode()); + assertNotNull(decode != null); + + // let us ensure that the return decode normalized node encode returns same container + Container containerResult = + normalizedNodeToNodeCodec.encode(YangInstanceIdentifier.builder() + .build(), decode); + + assertEquals(container.getParentPath(), containerResult.getParentPath()); + assertEquals(container.getNormalizedNode().getChildCount(), container + .getNormalizedNode().getChildCount()); + + Assert.assertEquals(containerResult.getNormalizedNode().getChildCount(), + container.getNormalizedNode().getChildCount()); + + // check first level children are proper + List childrenResult = + containerResult.getNormalizedNode().getChildList(); + List childrenOriginal = container.getNormalizedNode().getChildList(); + + System.out.println("-------------------------------------------------"); + + System.out.println(childrenOriginal.toString()); + + System.out.println("-------------------------------------------------"); + + System.out.println(childrenResult.toString()); + + boolean bFound; + for (Node resultChild : childrenResult) { + bFound = false; + for (Node originalChild : childrenOriginal) { + if (originalChild.getPath().equals(resultChild.getPath()) + && resultChild.getType().equals(resultChild.getType())) { + bFound = true; + break; + } + } + Assert.assertTrue(bFound); + } + + } + + @Test + public void addAugmentations() { + String stringId = + "/(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test?revision=2014-03-13)test" + + "/(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test?revision=2014-03-13)augmented-list" + + "/(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test?revision=2014-03-13)augmented-list[{(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test?revision=2014-03-13)id=1}]"; + + YangInstanceIdentifier identifier = instanceIdentifierFromString(stringId); + + MapEntryNode uno = TestModel.createAugmentedListEntry(1, "Uno"); + + NormalizedNodeToNodeCodec codec = + new NormalizedNodeToNodeCodec(schemaContext); + + Container encode = codec.encode(identifier, uno); + + System.out.println(encode.getNormalizedNode()); + + codec.decode(identifier, encode.getNormalizedNode()); + } + +}