Update to work on Sodium SR1
[l2switch.git] / addresstracker / implementation / src / test / java / org / opendaylight / l2switch / addresstracker / addressobserver / AddressObservationWriterTest.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.addresstracker.addressobserver;
9
10 import static org.mockito.ArgumentMatchers.any;
11 import static org.mockito.Mockito.mock;
12 import static org.mockito.Mockito.times;
13 import static org.mockito.Mockito.verify;
14 import static org.mockito.Mockito.when;
15
16 import com.google.common.base.Optional;
17 import com.google.common.util.concurrent.CheckedFuture;
18 import java.util.ArrayList;
19 import java.util.List;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
23 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
24 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
25 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.AddressCapableNodeConnector;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.address.node.connector.Addresses;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.address.tracker.rev140617.address.node.connector.AddressesKey;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
36 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
37
38 public class AddressObservationWriterTest {
39
40     private AddressCapableNodeConnector addrCapableNc;
41     private ReadOnlyTransaction readTransaction;
42     private WriteTransaction writeTransaction;
43     private DataBroker dataService;
44     private Optional<NodeConnector> dataObjectOptional;
45     private CheckedFuture checkedFuture;
46     private NodeConnector nodeConnector;
47     private Addresses address;
48     private AddressesKey addrKey;
49     private MacAddress macAddress;
50     private IpAddress ipAddress;
51     private NodeConnectorRef realNcRef;
52
53     @Before
54     public void init() throws Exception {
55         macAddress = new MacAddress("ba:43:52:ce:09:f4");
56         ipAddress = new IpAddress(new Ipv4Address("10.0.0.1"));
57         realNcRef = new NodeConnectorRef(
58                 InstanceIdentifier.builder(Nodes.class).child(Node.class).child(NodeConnector.class).build());
59
60         readTransaction = mock(ReadOnlyTransaction.class);
61         dataService = mock(DataBroker.class);
62         when(dataService.newReadOnlyTransaction()).thenReturn(readTransaction);
63         checkedFuture = mock(CheckedFuture.class);
64         when(readTransaction.read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)))
65                 .thenReturn(checkedFuture);
66         dataObjectOptional = mock(Optional.class);
67         when(checkedFuture.get()).thenReturn(dataObjectOptional);
68         nodeConnector = mock(NodeConnector.class);
69         when(dataObjectOptional.isPresent()).thenReturn(true);
70         when(dataObjectOptional.get()).thenReturn(nodeConnector);
71
72         addrCapableNc = mock(AddressCapableNodeConnector.class);
73         when(nodeConnector.augmentation(AddressCapableNodeConnector.class)).thenReturn(addrCapableNc);
74
75         address = mock(Addresses.class);
76         List<Addresses> listAddr = new ArrayList<Addresses>();
77         listAddr.add(address);
78         when(addrCapableNc.getAddresses()).thenReturn(listAddr);
79
80         when(address.getIp()).thenReturn(ipAddress);
81         when(address.getMac()).thenReturn(macAddress);
82         when(address.getLastSeen()).thenReturn(1410350400L);
83         when(address.getFirstSeen()).thenReturn(1410350400L);
84         addrKey = mock(AddressesKey.class);
85         when(address.key()).thenReturn(addrKey);
86
87         writeTransaction = mock(WriteTransaction.class);
88         when(dataService.newWriteOnlyTransaction()).thenReturn(writeTransaction);
89         when(writeTransaction.submit()).thenReturn(mock(CheckedFuture.class));
90     }
91
92     @Test
93     public void addAddressTest() throws Exception {
94         AddressObservationWriter addressObservationWriter = new AddressObservationWriter(dataService);
95         addressObservationWriter.setTimestampUpdateInterval(20L);
96         addressObservationWriter.addAddress(macAddress, ipAddress, realNcRef);
97         verify(readTransaction, times(1)).read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
98         verify(readTransaction, times(1)).close();
99         verify(writeTransaction, times(1)).merge(any(LogicalDatastoreType.class), any(InstanceIdentifier.class),
100                 any(AddressCapableNodeConnector.class));
101         verify(writeTransaction, times(1)).submit();
102     }
103
104     @Test
105     public void addAddressNullTest() throws Exception {
106
107         AddressObservationWriter addressObservationWriter = new AddressObservationWriter(dataService);
108         addressObservationWriter.setTimestampUpdateInterval(20L);
109         addressObservationWriter.addAddress(macAddress, null, realNcRef);
110         verify(readTransaction, times(0)).read(any(LogicalDatastoreType.class), any(InstanceIdentifier.class));
111         verify(readTransaction, times(0)).close();
112         verify(writeTransaction, times(0)).merge(any(LogicalDatastoreType.class), any(InstanceIdentifier.class),
113                 any(AddressCapableNodeConnector.class));
114         verify(writeTransaction, times(0)).submit();
115     }
116 }