e88d03b3b1d08e6f0bbb5efc68a3785159152455
[groupbasedpolicy.git] / renderers / ofoverlay / src / test / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / node / FlowCapableNodeConnectorListenerTest.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
9 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.node;
10
11 import static org.mockito.Matchers.any;
12 import static org.mockito.Mockito.mock;
13 import static org.mockito.Mockito.verify;
14 import static org.mockito.Mockito.when;
15
16 import java.util.Arrays;
17 import java.util.HashMap;
18 import java.util.HashSet;
19 import java.util.List;
20 import java.util.Map;
21 import java.util.Set;
22
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
26 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
27 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
28 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
29 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
30 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
31 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Name;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.Endpoints;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.Endpoint;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointKey;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.ofoverlay.rev140528.OfOverlayContext;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
45 import org.opendaylight.yangtools.concepts.ListenerRegistration;
46 import org.opendaylight.yangtools.yang.binding.DataObject;
47 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
48
49 import com.google.common.base.Optional;
50 import com.google.common.util.concurrent.CheckedFuture;
51
52 public class FlowCapableNodeConnectorListenerTest {
53
54     private FlowCapableNodeConnectorListener listener;
55
56     private DataBroker dataProvider;
57     private SwitchManager switchManager;
58     private ListenerRegistration<DataChangeListener> listenerRegistration;
59     private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> asyncDataChangeEvent;
60     private FlowCapableNodeConnector entryValue;
61     private String portName;
62     private NodeId childNodeId;
63     private NodeConnectorId childNodeConnectorId;
64     private InstanceIdentifier<FlowCapableNodeConnector> entryKey;
65     private ReadWriteTransaction rwTx;
66     private CheckedFuture<Optional<Endpoints>, ReadFailedException> checkedFuture;
67     private Optional<Endpoints> potentialEps;
68     private OfOverlayContext ofOverlayEp;
69     private EndpointKey endpointKey;
70     private Name name;
71
72     @SuppressWarnings("unchecked")
73     @Before
74     public void initialisation() throws Exception {
75         dataProvider = mock(DataBroker.class);
76         switchManager = mock(SwitchManager.class);
77         listenerRegistration = mock(ListenerRegistration.class);
78         when(
79                 dataProvider.registerDataChangeListener(any(LogicalDatastoreType.class), any(InstanceIdentifier.class),
80                         any(DataChangeListener.class), any(DataChangeScope.class))).thenReturn(listenerRegistration);
81         asyncDataChangeEvent = mock(AsyncDataChangeEvent.class);
82         entryValue = mock(FlowCapableNodeConnector.class);
83         portName = "portName";
84         when(entryValue.getName()).thenReturn(portName);
85         childNodeId = mock(NodeId.class);
86         childNodeConnectorId = mock(NodeConnectorId.class);
87         entryKey = InstanceIdentifier.builder(Nodes.class)
88             .child(Node.class, new NodeKey(childNodeId))
89             .child(NodeConnector.class, new NodeConnectorKey(childNodeConnectorId))
90             .augmentation(FlowCapableNodeConnector.class)
91             .build();
92         rwTx = mock(ReadWriteTransaction.class);
93         when(dataProvider.newReadWriteTransaction()).thenReturn(rwTx);
94         checkedFuture = mock(CheckedFuture.class);
95         when(rwTx.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class))).thenReturn(checkedFuture);
96         potentialEps = mock(Optional.class);
97         when(checkedFuture.get()).thenReturn(potentialEps);
98
99         when(potentialEps.isPresent()).thenReturn(true);
100         Endpoints endpoints = mock(Endpoints.class);
101         when(potentialEps.get()).thenReturn(endpoints);
102         Endpoint ep = mock(Endpoint.class);
103         List<Endpoint> endpointArray = Arrays.asList(ep);
104         when(endpoints.getEndpoint()).thenReturn(endpointArray);
105         endpointKey = mock(EndpointKey.class);
106         when(ep.getKey()).thenReturn(endpointKey);
107
108         ofOverlayEp = mock(OfOverlayContext.class);
109         when(ep.getAugmentation(OfOverlayContext.class)).thenReturn(ofOverlayEp);
110         name = new Name(portName);
111         when(ofOverlayEp.getPortName()).thenReturn(name);
112
113         listener = new FlowCapableNodeConnectorListener(dataProvider, switchManager);
114     }
115
116     @Test
117     public void constructorTest() throws Exception {
118         listener.close();
119         verify(listenerRegistration).close();
120     }
121
122     @Test
123     public void onDataChangeTestCreatedDataSubmit() {
124         Map<InstanceIdentifier<?>, DataObject> entrySet = new HashMap<InstanceIdentifier<?>, DataObject>();
125         entrySet.put(entryKey, entryValue);
126         when(asyncDataChangeEvent.getCreatedData()).thenReturn(entrySet);
127
128         listener.onDataChanged(asyncDataChangeEvent);
129         verify(rwTx).submit();
130     }
131
132     @Test
133     public void onDataChangeTestUpdatedDataSubmit() {
134         Map<InstanceIdentifier<?>, DataObject> entrySet = new HashMap<InstanceIdentifier<?>, DataObject>();
135         entrySet.put(entryKey, entryValue);
136         when(asyncDataChangeEvent.getUpdatedData()).thenReturn(entrySet);
137         when(asyncDataChangeEvent.getOriginalData()).thenReturn(entrySet);
138
139         listener.onDataChanged(asyncDataChangeEvent);
140         verify(rwTx).submit();
141     }
142
143     @Test
144     public void onDataChangeTestRemovedPaths() {
145         Set<InstanceIdentifier<?>> removedPaths = new HashSet<InstanceIdentifier<?>>();
146         removedPaths.add(entryKey);
147         when(asyncDataChangeEvent.getRemovedPaths()).thenReturn(removedPaths);
148
149         Map<InstanceIdentifier<?>, DataObject> entrySet = new HashMap<InstanceIdentifier<?>, DataObject>();
150         entrySet.put(entryKey, entryValue);
151         when(asyncDataChangeEvent.getOriginalData()).thenReturn(entrySet);
152         when(ofOverlayEp.getNodeConnectorId()).thenReturn(childNodeConnectorId);
153
154         listener.onDataChanged(asyncDataChangeEvent);
155         verify(rwTx).submit();
156     }
157 }