Merge changes Id68de4e3,Id4b3c97f
[yangtools.git] / integration-test / yang-runtime-tests / src / test / java / org / opendaylight / yangtools / it / yang / runtime / tests / BindingReadingTest.java
1 package org.opendaylight.yangtools.it.yang.runtime.tests;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertNotNull;
6 import static org.junit.Assert.assertTrue;
7
8 import java.util.HashSet;
9 import java.util.Map;
10
11 import org.junit.Before;
12 import org.junit.Test;
13 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.LinkId;
14 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
15 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopologyBuilder;
16 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
17 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
18 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
19 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.link.attributes.Source;
20 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.link.attributes.SourceBuilder;
21 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
22 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyBuilder;
23 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
24 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link;
25 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.LinkBuilder;
26 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.LinkKey;
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
28 import org.opendaylight.yangtools.yang.binding.util.DataObjectReadingUtil;
29
30 import com.google.common.base.Optional;
31 import com.google.common.collect.ImmutableList;
32
33 public class BindingReadingTest {
34
35     private static final TopologyId TOPOLOGY_FOO_ID = new TopologyId("foo:topo");
36     private static final TopologyId TOPOLOGY_BAR_ID = new TopologyId("bar:topo");
37     private static final TopologyId TOPOLOGY_BAZ_ID = new TopologyId("baz:topo");
38     private static final LinkId LINK_BAR_ID = new LinkId("bar:link:1");
39     private static final NodeId SOURCE_NODE_ID = new NodeId("node:id");
40     private static final TpId SOURCE_TP_ID = new TpId("source:tp");
41     private static final InstanceIdentifier<NetworkTopology> NETWORK_TOPOLOGY_PATH = InstanceIdentifier.builder(
42             NetworkTopology.class).toInstance();
43     private NetworkTopology networkModel;
44     private Link linkModel;
45
46     private static final InstanceIdentifier<Topology> TOPOLOGY_BAR_PATH = InstanceIdentifier.builder(NETWORK_TOPOLOGY_PATH) //
47             .child(Topology.class, new TopologyKey(TOPOLOGY_BAR_ID)) //
48             .build();
49
50     private static final InstanceIdentifier<Link> LINK_BAR_PATH = InstanceIdentifier.builder(NETWORK_TOPOLOGY_PATH) //
51             .child(Topology.class, new TopologyKey(TOPOLOGY_BAR_ID)) //
52             .child(Link.class, new LinkKey(LINK_BAR_ID)) //
53             .build();
54
55     private static final InstanceIdentifier<Link> WILDCARDED_LINK_PATH = InstanceIdentifier
56             .builder(NETWORK_TOPOLOGY_PATH) //
57             .child(Topology.class) //
58             .child(Link.class) //
59             .build();
60
61     private static final InstanceIdentifier<Source> ABSOLUTE_SOURCE_PATH = InstanceIdentifier.builder(TOPOLOGY_BAR_PATH)
62             .child(Link.class, new LinkKey(LINK_BAR_ID)) //
63             .child(Source.class) //
64             .build();
65
66     private static final InstanceIdentifier<Source> WILDCARDED_SOURCE_PATH = InstanceIdentifier
67             .builder(NETWORK_TOPOLOGY_PATH).child(Topology.class) //
68             .child(Link.class, new LinkKey(LINK_BAR_ID)) //
69             .child(Source.class) //
70             .build();
71
72     /**
73      *
74      * Creates network topology model with three topologies:
75      * foo,bar and baz.
76      * Where bar has 1 link, and baz has 2 links.
77      *
78      */
79     @Before
80     public void createTopology() {
81         linkModel = new LinkBuilder() //
82                 .setLinkId(LINK_BAR_ID) //
83                 .setSource(new SourceBuilder() //
84                         .setSourceNode(SOURCE_NODE_ID) //
85                         .setSourceTp(SOURCE_TP_ID) //
86                         .build()) //
87                 .build();
88         networkModel = new NetworkTopologyBuilder().setTopology(ImmutableList.<Topology> builder() //
89                 .add(new TopologyBuilder() //
90                         .setTopologyId(TOPOLOGY_FOO_ID) //
91                         .setServerProvided(true) //
92                         .build()) //
93                 .add(new TopologyBuilder() //
94                         .setTopologyId(TOPOLOGY_BAR_ID) //
95                         .setServerProvided(false) //
96                         .setLink(ImmutableList.<Link> builder() //
97                                 .add(linkModel) //
98                                 .build()) //
99                         .build()) //
100                 .add(new TopologyBuilder() //
101                         .build())//
102                 .add(new TopologyBuilder() //
103                         .setTopologyId(TOPOLOGY_BAZ_ID)//
104                         .setLink(ImmutableList.<Link> builder() //
105                                 .add(new LinkBuilder().setLinkId(new LinkId("link:2")).build()) //
106                                 .add(new LinkBuilder().setLinkId(new LinkId("link:3")).build()) //
107                                 .build()) //
108                         .build()) //
109                 .build()) //
110                 .build(); //
111     }
112
113     @Test
114     public void testContainerRead() {
115         Optional<Source> source = DataObjectReadingUtil.readData(linkModel, Source.class);
116         assertNotNull(source);
117         assertEquals(linkModel.getSource(), source.get());
118     }
119
120     @Test
121     public void testInstanceIdentifierRead() {
122         Map<InstanceIdentifier<Source>, Source> source = DataObjectReadingUtil.readData(networkModel,
123                 NETWORK_TOPOLOGY_PATH, ABSOLUTE_SOURCE_PATH);
124         assertNotNull(source);
125         Source potentialSource = source.get(ABSOLUTE_SOURCE_PATH);
126         assertEquals(linkModel.getSource(), potentialSource);
127     }
128
129     @Test
130     public void testInstanceIdentifierReadWildcarded() {
131         Topology topology = DataObjectReadingUtil.readData(networkModel, NETWORK_TOPOLOGY_PATH, TOPOLOGY_BAR_PATH).get(
132                 TOPOLOGY_BAR_PATH);
133         Map<InstanceIdentifier<Source>, Source> source = DataObjectReadingUtil.readData(topology, TOPOLOGY_BAR_PATH,
134                 WILDCARDED_SOURCE_PATH);
135         assertNotNull(source);
136         Source potentialSource = source.get(ABSOLUTE_SOURCE_PATH);
137         assertEquals(linkModel.getSource(), potentialSource);
138     }
139
140     @Test
141     public void testInstanceIdentifierReadNonExistingValue() {
142         InstanceIdentifier<Source> sourcePath = InstanceIdentifier.builder(NETWORK_TOPOLOGY_PATH) //
143                 .child(Topology.class, new TopologyKey(TOPOLOGY_BAZ_ID)) //
144                 .child(Link.class, new LinkKey(LINK_BAR_ID)) //
145                 .child(Source.class) //
146                 .build();
147         Map<InstanceIdentifier<Source>, Source> source = DataObjectReadingUtil.readData(networkModel,
148                 NETWORK_TOPOLOGY_PATH, sourcePath);
149         assertNotNull(source);
150         assertTrue(source.isEmpty());
151     }
152
153     @Test
154     public void testWildcardedListRead() {
155         Topology topology = DataObjectReadingUtil.readData(networkModel, NETWORK_TOPOLOGY_PATH, TOPOLOGY_BAR_PATH).get(TOPOLOGY_BAR_PATH);
156
157         Map<InstanceIdentifier<Link>, Link> potentialLinks = DataObjectReadingUtil.readData(topology, TOPOLOGY_BAR_PATH, WILDCARDED_LINK_PATH);
158         assertFalse(potentialLinks.isEmpty());
159         assertEquals(1, potentialLinks.size());
160         assertEquals(linkModel, potentialLinks.get(LINK_BAR_PATH));
161     }
162
163     @Test
164     public void testTwoWildcardsListRead() {
165
166         Map<InstanceIdentifier<Link>, Link> potentialLinks = DataObjectReadingUtil.readData(networkModel, NETWORK_TOPOLOGY_PATH, WILDCARDED_LINK_PATH);
167         assertFalse(potentialLinks.isEmpty());
168         assertEquals(3, potentialLinks.size());
169         assertEquals(linkModel, potentialLinks.get(LINK_BAR_PATH));
170         HashSet<Link> allLinks = new HashSet<>(potentialLinks.values());
171         assertEquals(3, allLinks.size());
172         for(InstanceIdentifier<Link> key : potentialLinks.keySet()) {
173             assertFalse("Returned instance identifier must not be wildcarded.", key.isWildcarded());
174         }
175
176     }
177
178 }