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.Top;
29 import org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.data.top.TopLevelList;
30 import org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.dto.TopBuilder;
31 import org.opendaylight.yangtools.yang.common.QName;
32 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
33 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
34 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
35 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
36 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
37 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAugmentationNodeBuilder;
38 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
39 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder;
40 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapNodeBuilder;
42 public class NormalizedNodeSerializeDeserializeTest extends AbstractBindingRuntimeTest {
43 private BindingNormalizedNodeCodecRegistry registry;
44 private static final QName TOP_LEVEL_LIST_NAME_QNAME = QName.create(TopLevelList.QNAME, "name");
45 private static final QName AUGMENTED_STRING_QNAME = QName.create(TopLevelList.QNAME, "augmented-string");
46 private static final QName AUGMENTED_INT_QNAME = QName.create(TopLevelList.QNAME, "augmented-int");
47 private static final QName SIMPLE_VALUE_QNAME = QName.create(LeafFromGrouping.QNAME, "simple-value");
48 private static final QName SIMPLE_TYPE_QNAME = QName.create(LeafFromGrouping.QNAME, "simple-type");
53 final JavassistUtils utils = JavassistUtils.forClassPool(ClassPool.getDefault());
54 registry = new BindingNormalizedNodeCodecRegistry(StreamWriterGenerator.create(utils));
55 registry.onBindingRuntimeContextUpdated(getRuntimeContext());
58 private static Top topBindingData() {
59 final TopBuilder tb = new TopBuilder();
60 tb.setTopLevelList(ImmutableList.of(new org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang
61 .mdsal.test.binding.rev140701.dto.top.TopLevelListBuilder()
62 .setIdentifier(new org.opendaylight.mdsal.gen.javav2.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding
63 .rev140701.key.top.top_level_list.TopLevelListKey("test"))
65 .addAugmentation(TreeLeafOnlyUsesAugment.class,
66 new TreeLeafOnlyUsesAugmentBuilder().setSimpleType(16).setSimpleValue("simple-value").build())
69 .setAugmentedString("aug-string");
73 private static AugmentationIdentifier getTopLevelListAugId() {
74 Set<QName> qnames = new HashSet<>();
75 qnames.add(QName.create(LeafFromGrouping.QNAME, "simple-value"));
76 qnames.add(QName.create(LeafFromGrouping.QNAME, "simple-type"));
77 qnames.add(QName.create(LeafFromGrouping.QNAME, "second-simple-value"));
78 qnames.add(QName.create(LeafFromGrouping.QNAME, "list-via-uses"));
79 qnames.add(QName.create(LeafFromGrouping.QNAME, "container-with-uses"));
80 qnames.add(QName.create(LeafFromGrouping.QNAME, "leaf-from-grouping"));
81 qnames.add(QName.create(LeafFromGrouping.QNAME, "identity"));
82 qnames.add(QName.create(LeafFromGrouping.QNAME, "schema-unaware-union"));
83 qnames.add(QName.create(LeafFromGrouping.QNAME, "simple-type-ref"));
84 qnames.add(QName.create(LeafFromGrouping.QNAME, "identity-ref"));
85 qnames.add(QName.create(LeafFromGrouping.QNAME, "schema-unaware-union-ref"));
87 return new AugmentationIdentifier(qnames);
90 private static ContainerNode topNormailziedData() {
91 return ImmutableContainerNodeBuilder.create()
92 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(Top.QNAME))
93 .withChild(ImmutableMapNodeBuilder.create()
94 .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(TopLevelList.QNAME))
95 .withChild(ImmutableMapEntryNodeBuilder.create()
96 .withNodeIdentifier(new NodeIdentifierWithPredicates(TopLevelList.QNAME,
97 TOP_LEVEL_LIST_NAME_QNAME, "test"))
98 .withChild(leafNode(TOP_LEVEL_LIST_NAME_QNAME, "test"))
99 .withChild(ImmutableAugmentationNodeBuilder.create()
100 .withNodeIdentifier(getTopLevelListAugId())
101 .withChild(leafNode(SIMPLE_VALUE_QNAME, "simple-value"))
102 .withChild(leafNode(SIMPLE_TYPE_QNAME, 16))
106 .withChild(leafNode(AUGMENTED_INT_QNAME, 32))
107 .withChild(leafNode(AUGMENTED_STRING_QNAME, "aug-string"))
112 public void topToNormalizedNode() {
113 final Map.Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> entry =
114 registry.toNormalizedNode(InstanceIdentifier.create(Top.class), topBindingData());
115 assertEquals(topNormailziedData(), entry.getValue());
119 public void topFromNormalizedNode() {
120 final Entry<InstanceIdentifier<?>, TreeNode> entry =
121 registry.fromNormalizedNode(YangInstanceIdentifier.of(Top.QNAME), topNormailziedData());
122 assertEquals(topBindingData(), entry.getValue());