2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.l2switch.addresstracker.addressobserver;
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;
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;
38 public class AddressObservationWriterTest {
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;
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());
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);
72 addrCapableNc = mock(AddressCapableNodeConnector.class);
73 when(nodeConnector.augmentation(AddressCapableNodeConnector.class)).thenReturn(addrCapableNc);
75 address = mock(Addresses.class);
76 List<Addresses> listAddr = new ArrayList<Addresses>();
77 listAddr.add(address);
78 when(addrCapableNc.getAddresses()).thenReturn(listAddr);
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);
87 writeTransaction = mock(WriteTransaction.class);
88 when(dataService.newWriteOnlyTransaction()).thenReturn(writeTransaction);
89 when(writeTransaction.submit()).thenReturn(mock(CheckedFuture.class));
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();
105 public void addAddressNullTest() throws Exception {
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();