2 * Copyright (c) 2017 Pantheon Technologies s.r.o. 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.mdsal.binding.javav2.dom.codec.impl;
10 import static org.junit.Assert.assertEquals;
11 import static org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes.leafNode;
13 import com.google.common.collect.ImmutableList;
14 import java.util.HashSet;
16 import java.util.Map.Entry;
18 import javassist.ClassPool;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.opendaylight.mdsal.binding.javav2.dom.codec.generator.impl.StreamWriterGenerator;
22 import org.opendaylight.mdsal.binding.javav2.runtime.javassist.JavassistUtils;
23 import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier;
24 import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode;
25 import org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.data.TreeLeafOnlyUsesAugment;
26 import org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.dto.TreeLeafOnlyUsesAugmentBuilder;
27 import org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.augment.rev140709.grp.LeafFromGrouping;
28 import org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.data.ChoiceContainer;
29 import org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.data.Top;
30 import org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.data.choice_container.identifier.simple.SimpleId;
31 import org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.data.top.TopLevelList;
32 import org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.dto.TopBuilder;
33 import org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.dto.choice_container.identifier.simple.SimpleIdBuilder;
34 import org.opendaylight.yangtools.yang.common.QName;
35 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
36 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
37 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
38 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
39 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
40 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAugmentationNodeBuilder;
41 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
42 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder;
43 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeBuilder;
45 public class NormalizedNodeSerializeDeserializeTest extends AbstractBindingRuntimeTest {
46 private BindingNormalizedNodeCodecRegistry registry;
47 private static final QName TOP_LEVEL_LIST_NAME_QNAME = QName.create(TopLevelList.QNAME, "name");
48 private static final QName AUGMENTED_STRING_QNAME = QName.create(TopLevelList.QNAME, "augmented-string");
49 private static final QName AUGMENTED_INT_QNAME = QName.create(TopLevelList.QNAME, "augmented-int");
50 private static final QName SIMPLE_VALUE_QNAME = QName.create(LeafFromGrouping.QNAME, "simple-value");
51 private static final QName SIMPLE_TYPE_QNAME = QName.create(LeafFromGrouping.QNAME, "simple-type");
52 private static final QName CHOICE_CONTAINER_QNAME = ChoiceContainer.QNAME;
53 private static final QName SIMPLE_ID_QNAME = SimpleId.QNAME;
54 private static final QName SIMPLE_LEAF_ID_QNAME = QName.create(SimpleId.QNAME, "id");
56 private static final InstanceIdentifier<SimpleId> BA_SIMPLE_ID = InstanceIdentifier
57 .builder(ChoiceContainer.class).child(SimpleId.class).build();
58 private static final YangInstanceIdentifier BI_SIMPLE_ID_PATH = YangInstanceIdentifier
59 .of(CHOICE_CONTAINER_QNAME).node(SIMPLE_ID_QNAME);
64 final JavassistUtils utils = JavassistUtils.forClassPool(ClassPool.getDefault());
65 registry = new BindingNormalizedNodeCodecRegistry(StreamWriterGenerator.create(utils));
66 registry.onBindingRuntimeContextUpdated(getRuntimeContext());
69 private static Top topBindingData() {
70 final TopBuilder tb = new TopBuilder();
71 tb.setTopLevelList(ImmutableList.of(new org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang
72 .mdsal.test.binding.rev140701.dto.top.TopLevelListBuilder()
73 .setIdentifier(new org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding
74 .rev140701.key.top.top_level_list.TopLevelListKey("test"))
76 .addAugmentation(TreeLeafOnlyUsesAugment.class,
77 new TreeLeafOnlyUsesAugmentBuilder().setSimpleType(16).setSimpleValue("simple-value").build())
80 .setAugmentedString("aug-string");
84 private static AugmentationIdentifier getTopLevelListAugId() {
85 Set<QName> qnames = new HashSet<>();
86 qnames.add(QName.create(LeafFromGrouping.QNAME, "simple-value"));
87 qnames.add(QName.create(LeafFromGrouping.QNAME, "simple-type"));
88 qnames.add(QName.create(LeafFromGrouping.QNAME, "second-simple-value"));
89 qnames.add(QName.create(LeafFromGrouping.QNAME, "list-via-uses"));
90 qnames.add(QName.create(LeafFromGrouping.QNAME, "container-with-uses"));
91 qnames.add(QName.create(LeafFromGrouping.QNAME, "leaf-from-grouping"));
92 qnames.add(QName.create(LeafFromGrouping.QNAME, "identity"));
93 qnames.add(QName.create(LeafFromGrouping.QNAME, "schema-unaware-union"));
94 qnames.add(QName.create(LeafFromGrouping.QNAME, "simple-type-ref"));
95 qnames.add(QName.create(LeafFromGrouping.QNAME, "identity-ref"));
96 qnames.add(QName.create(LeafFromGrouping.QNAME, "schema-unaware-union-ref"));
98 return new AugmentationIdentifier(qnames);
101 private static ContainerNode topNormailziedData() {
102 return ImmutableContainerNodeBuilder.create()
103 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(Top.QNAME))
104 .withChild(ImmutableMapNodeBuilder.create()
105 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(TopLevelList.QNAME))
106 .withChild(ImmutableMapEntryNodeBuilder.create()
107 .withNodeIdentifier(new NodeIdentifierWithPredicates(TopLevelList.QNAME,
108 TOP_LEVEL_LIST_NAME_QNAME, "test"))
109 .withChild(leafNode(TOP_LEVEL_LIST_NAME_QNAME, "test"))
110 .withChild(ImmutableAugmentationNodeBuilder.create()
111 .withNodeIdentifier(getTopLevelListAugId())
112 .withChild(leafNode(SIMPLE_VALUE_QNAME, "simple-value"))
113 .withChild(leafNode(SIMPLE_TYPE_QNAME, 16))
117 .withChild(leafNode(AUGMENTED_INT_QNAME, 32))
118 .withChild(leafNode(AUGMENTED_STRING_QNAME, "aug-string"))
123 public void topToNormalizedNode() {
124 final Map.Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> entry =
125 registry.toNormalizedNode(InstanceIdentifier.create(Top.class), topBindingData());
126 assertEquals(topNormailziedData(), entry.getValue());
130 public void topFromNormalizedNode() {
131 final Entry<InstanceIdentifier<?>, TreeNode> entry =
132 registry.fromNormalizedNode(YangInstanceIdentifier.of(Top.QNAME), topNormailziedData());
133 assertEquals(topBindingData(), entry.getValue());
136 private static SimpleId simpleIdBindingData() {
137 return new SimpleIdBuilder().setId(10).build();
140 private static ContainerNode simpleIdNormailziedData() {
141 return ImmutableContainerNodeBuilder.create()
142 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(SIMPLE_ID_QNAME))
143 .withChild(leafNode(SIMPLE_LEAF_ID_QNAME, 10))
148 public void testChoiceDataToNormalizedNode() {
149 final Map.Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> entry =
150 registry.toNormalizedNode(BA_SIMPLE_ID, simpleIdBindingData());
151 assertEquals(simpleIdNormailziedData(), entry.getValue());
155 public void testChoiceDataFromNormalizedNode() {
156 final Entry<InstanceIdentifier<?>, TreeNode> entry =
157 registry.fromNormalizedNode(BI_SIMPLE_ID_PATH, simpleIdNormailziedData());
158 assertEquals(simpleIdBindingData(), entry.getValue());