Binding v2 - Eliminate suffix for the binding name of schema nodes in grouping
[mdsal.git] / binding2 / mdsal-binding2-dom-codec / src / test / java / org / opendaylight / mdsal / binding / javav2 / dom / codec / impl / NormalizedNodeSerializeDeserializeTest.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.mdsal.binding.javav2.dom.codec.impl;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes.leafNode;
12
13 import com.google.common.collect.ImmutableList;
14 import java.util.HashSet;
15 import java.util.Map;
16 import java.util.Map.Entry;
17 import java.util.Set;
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;
41
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");
49
50     @Before
51     public void setup() {
52         super.setup();
53         final JavassistUtils utils = JavassistUtils.forClassPool(ClassPool.getDefault());
54         registry = new BindingNormalizedNodeCodecRegistry(StreamWriterGenerator.create(utils));
55         registry.onBindingRuntimeContextUpdated(getRuntimeContext());
56     }
57
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"))
64             .setName("test")
65             .addAugmentation(TreeLeafOnlyUsesAugment.class,
66                 new TreeLeafOnlyUsesAugmentBuilder().setSimpleType(16).setSimpleValue("simple-value").build())
67             .build()))
68             .setAugmentedInt(32)
69             .setAugmentedString("aug-string");
70         return tb.build();
71     }
72
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"));
86
87         return new AugmentationIdentifier(qnames);
88     }
89
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))
103                         .build())
104                     .build())
105                 .build())
106             .withChild(leafNode(AUGMENTED_INT_QNAME, 32))
107             .withChild(leafNode(AUGMENTED_STRING_QNAME, "aug-string"))
108             .build();
109     }
110
111     @Test
112     public void topToNormalizedNode() {
113         final Map.Entry<YangInstanceIdentifier, NormalizedNode<?, ?>> entry =
114             registry.toNormalizedNode(InstanceIdentifier.create(Top.class), topBindingData());
115         assertEquals(topNormailziedData(), entry.getValue());
116     }
117
118     @Test
119     public void topFromNormalizedNode() {
120         final Entry<InstanceIdentifier<?>, TreeNode> entry =
121             registry.fromNormalizedNode(YangInstanceIdentifier.of(Top.QNAME), topNormailziedData());
122         assertEquals(topBindingData(), entry.getValue());
123     }
124
125 }