Add blueprint wiring for address tracker
[l2switch.git] / arphandler / implementation / src / test / java / org / opendaylight / l2switch / arphandler / inventory / InventoryReaderTest.java
1 /*
2  * Copyright (c) 2014 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.l2switch.arphandler.inventory;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertNull;
13 import static org.mockito.Matchers.any;
14 import static org.mockito.Mockito.times;
15 import static org.mockito.Mockito.verify;
16 import static org.mockito.Mockito.when;
17
18 import com.google.common.base.Optional;
19 import com.google.common.util.concurrent.CheckedFuture;
20 import java.util.ArrayList;
21 import java.util.List;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.mockito.Mockito;
25 import org.mockito.MockitoAnnotations;
26 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
27 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
28 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.AddressCapableNodeConnector;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.AddressCapableNodeConnectorBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.address.node.connector.Addresses;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.address.node.connector.AddressesBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodesBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2switch.loopremover.rev140714.StpStatus;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2switch.loopremover.rev140714.StpStatusAwareNodeConnector;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2switch.loopremover.rev140714.StpStatusAwareNodeConnectorBuilder;
47 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
48
49 public class InventoryReaderTest {
50
51     @MockitoAnnotations.Mock
52     private DataBroker dataBroker;
53     private InventoryReader inventoryReader;
54
55     @Before
56     public void initMocks() {
57         MockitoAnnotations.initMocks(this);
58         inventoryReader = new InventoryReader(dataBroker);
59     }
60
61     @Test
62     public void testGetControllerSwitchConnectors() throws Exception {
63         assertEquals(0, inventoryReader.getControllerSwitchConnectors().size());
64     }
65
66     @Test
67     public void testGetSwitchNodeConnectors() throws Exception {
68         assertEquals(0, inventoryReader.getSwitchNodeConnectors().size());
69     }
70
71     @Test
72     public void testGetNodeConnector() throws Exception {
73         List<Addresses> addressesList = new ArrayList<Addresses>();
74         addressesList.add(new AddressesBuilder().setLastSeen(0L).setMac(new MacAddress("aa:bb:cc:dd:ee:ff")).build());
75         AddressCapableNodeConnector addressCapableNodeConnector = new AddressCapableNodeConnectorBuilder()
76                 .setAddresses(addressesList).build();
77         StpStatusAwareNodeConnector stpStatusAwareNodeConnector = new StpStatusAwareNodeConnectorBuilder()
78                 .setStatus(StpStatus.Forwarding).build();
79         NodeConnector nodeConnector = new NodeConnectorBuilder()
80                 .addAugmentation(StpStatusAwareNodeConnector.class, stpStatusAwareNodeConnector)
81                 .addAugmentation(AddressCapableNodeConnector.class, addressCapableNodeConnector).build();
82
83         List<NodeConnector> nodeConnectors = new ArrayList<NodeConnector>();
84         nodeConnectors.add(nodeConnector);
85         Node node = new NodeBuilder().setNodeConnector(nodeConnectors).build();
86         Optional<Node> optionalNode = Optional.of(node);
87
88         ReadOnlyTransaction readOnlyTransaction = Mockito.mock(ReadOnlyTransaction.class);
89         CheckedFuture checkedFuture = Mockito.mock(CheckedFuture.class);
90         when(checkedFuture.get()).thenReturn(optionalNode);
91         when(readOnlyTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
92                 .thenReturn(checkedFuture);
93         when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);
94
95         assertNotNull(
96                 inventoryReader
97                         .getNodeConnector(
98                                 InstanceIdentifier.builder(Nodes.class)
99                                         .child(Node.class, new NodeKey(new NodeId("openflow:1"))).build(),
100                                 new MacAddress("aa:bb:cc:dd:ee:ff")));
101         verify(readOnlyTransaction, times(1)).close();
102     }
103
104     @Test
105     public void testGetNodeConnector_NullNodeInsId() throws Exception {
106         assertNull(inventoryReader.getNodeConnector(null, Mockito.mock(MacAddress.class)));
107         verify(dataBroker, times(0)).newReadOnlyTransaction();
108     }
109
110     @Test
111     public void testGetNodeConnector_NullMacAddress() throws Exception {
112         assertNull(inventoryReader.getNodeConnector(Mockito.mock(InstanceIdentifier.class), null));
113         verify(dataBroker, times(0)).newReadOnlyTransaction();
114     }
115
116     @Test
117     public void testReadInventory_NoRefresh() throws Exception {
118         inventoryReader.setRefreshData(false);
119         inventoryReader.readInventory();
120         verify(dataBroker, times(0)).newReadOnlyTransaction();
121     }
122
123     @Test
124     public void testReadInventory_Refresh() throws Exception {
125         StpStatusAwareNodeConnector stpStatusAwareNodeConnector = new StpStatusAwareNodeConnectorBuilder()
126                 .setStatus(StpStatus.Discarding).build();
127         NodeConnector nc1 = new NodeConnectorBuilder().setKey(new NodeConnectorKey(new NodeConnectorId("1"))).build();
128         NodeConnector nc2 = new NodeConnectorBuilder().setKey(new NodeConnectorKey(new NodeConnectorId("2"))).build();
129         NodeConnector nc3 = new NodeConnectorBuilder().setKey(new NodeConnectorKey(new NodeConnectorId("3")))
130                 .addAugmentation(StpStatusAwareNodeConnector.class, stpStatusAwareNodeConnector).build();
131         NodeConnector ncLocal = new NodeConnectorBuilder().setKey(new NodeConnectorKey(new NodeConnectorId("LOCAL")))
132                 .addAugmentation(StpStatusAwareNodeConnector.class, stpStatusAwareNodeConnector).build();
133
134         List<NodeConnector> nodeConnectors = new ArrayList<NodeConnector>();
135         nodeConnectors.add(nc1);
136         nodeConnectors.add(nc2);
137         nodeConnectors.add(nc3);
138         nodeConnectors.add(ncLocal);
139         Node node = new NodeBuilder().setId(new NodeId("1")).setNodeConnector(nodeConnectors).build();
140
141         List<Node> nodeList = new ArrayList<Node>();
142         nodeList.add(node);
143         Nodes nodes = new NodesBuilder().setNode(nodeList).build();
144         Optional<Nodes> optionalNodes = Optional.of(nodes);
145
146         ReadOnlyTransaction readOnlyTransaction = Mockito.mock(ReadOnlyTransaction.class);
147         CheckedFuture checkedFuture = Mockito.mock(CheckedFuture.class);
148         when(checkedFuture.get()).thenReturn(optionalNodes);
149         when(readOnlyTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
150                 .thenReturn(checkedFuture);
151         when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);
152
153         inventoryReader.setRefreshData(true);
154         inventoryReader.readInventory();
155         verify(dataBroker, times(1)).newReadOnlyTransaction();
156         assertEquals(1, inventoryReader.getControllerSwitchConnectors().size());
157         assertEquals(1, inventoryReader.getSwitchNodeConnectors().size());
158         assertEquals(2, inventoryReader.getSwitchNodeConnectors().get("1").size());
159         // Ensure that refreshData is set to false
160         inventoryReader.readInventory();
161         verify(dataBroker, times(1)).newReadOnlyTransaction();
162     }
163 }