Add InstanceNotification(Publish)ServiceAdapter
[mdsal.git] / binding / mdsal-binding-dom-codec / src / test / java / org / opendaylight / mdsal / binding / dom / codec / impl / NotificationProcessingTest.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. 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.dom.codec.impl;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertSame;
12 import static org.junit.Assert.assertTrue;
13
14 import com.google.common.collect.ImmutableMap;
15 import java.time.Instant;
16 import org.junit.Test;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.TwoLevelListChanged;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.TwoLevelListChangedBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.two.level.list.TopLevelList;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.two.level.list.TopLevelListBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.two.level.list.TopLevelListKey;
22 import org.opendaylight.yangtools.yang.binding.EventInstantAware;
23 import org.opendaylight.yangtools.yang.common.QName;
24 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
25 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
26 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
27 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
28 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
29
30 public class NotificationProcessingTest extends AbstractBindingCodecTest {
31     private static final QName NAME = QName.create(TopLevelList.QNAME, "name");
32
33     private static TwoLevelListChanged createTestBindingData() {
34         final TopLevelListKey key = new TopLevelListKey("test");
35         return new TwoLevelListChangedBuilder()
36                 .setTopLevelList(ImmutableMap.of(key, new TopLevelListBuilder().withKey(key).build()))
37                 .build();
38     }
39
40     private static ContainerNode createTestDomData() {
41         return Builders.containerBuilder()
42                 .withNodeIdentifier(NodeIdentifier.create(TwoLevelListChanged.QNAME))
43                 .withChild(Builders.mapBuilder()
44                     .withNodeIdentifier(NodeIdentifier.create(TopLevelList.QNAME))
45                     .withChild(Builders.mapEntryBuilder()
46                         .withNodeIdentifier(NodeIdentifierWithPredicates.of(TopLevelList.QNAME, NAME, "test"))
47                         .build())
48                     .build())
49                 .build();
50     }
51
52
53     @Test
54     public void testNotificationToNormalized() {
55         final ContainerNode dom = codecContext.toNormalizedNodeNotification(createTestBindingData());
56         assertEquals(createTestDomData(), dom);
57     }
58
59     @Test
60     public void testNormalizedToNotification() {
61         final var bindingDeserialized = codecContext.fromNormalizedNodeNotification(
62             Absolute.of(TwoLevelListChanged.QNAME), createTestDomData());
63         assertTrue(bindingDeserialized instanceof TwoLevelListChanged);
64         assertEquals(createTestBindingData(), bindingDeserialized);
65     }
66
67     @Test
68     public void testNormalizedToNotificationWithInstant() {
69         final Instant instant = Instant.now();
70         final var bindingDeserialized = codecContext.fromNormalizedNodeNotification(
71             Absolute.of(TwoLevelListChanged.QNAME), createTestDomData(), instant);
72         assertTrue(bindingDeserialized instanceof TwoLevelListChanged);
73         assertEquals(createTestBindingData(), bindingDeserialized);
74         assertTrue(bindingDeserialized instanceof EventInstantAware);
75         assertSame(instant, ((EventInstantAware) bindingDeserialized).eventInstant());
76     }
77
78     @Test
79     public void testNormalizedToNotificationWithNull() {
80         final var bindingDeserialized = codecContext.fromNormalizedNodeNotification(
81             Absolute.of(TwoLevelListChanged.QNAME), createTestDomData(), null);
82         assertTrue(bindingDeserialized instanceof TwoLevelListChanged);
83         assertEquals(createTestBindingData(), bindingDeserialized);
84     }
85 }