Bug 5386: Delete QoS and Queues entries from ovsdb on UNI deletion
[unimgr.git] / impl / src / test / java / org / opendaylight / unimgr / command / UniDeleteCommandTest.java
1 /*
2  * Copyright (c) 2016 CableLabs 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.unimgr.command;
9
10 import static org.junit.Assert.*;
11 import static org.mockito.Mockito.any;
12 import static org.mockito.Mockito.doNothing;
13 import static org.mockito.Mockito.mock;
14 import static org.mockito.Mockito.times;
15 import static org.mockito.Mockito.verify;
16 import static org.mockito.Mockito.when;
17 import static org.powermock.api.support.membermodification.MemberMatcher.method;
18
19 import java.util.ArrayList;
20 import java.util.HashSet;
21 import java.util.List;
22 import java.util.Set;
23
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.junit.runner.RunWith;
27 import org.mockito.Mockito;
28 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
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.unimgr.impl.UnimgrConstants;
32 import org.opendaylight.unimgr.impl.UnimgrMapper;
33 import org.opendaylight.unimgr.utils.MdsalUtils;
34 import org.opendaylight.unimgr.utils.OvsdbUtils;
35 import org.opendaylight.unimgr.utils.UniUtils;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntries;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QosEntriesKey;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.Queues;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.QueuesKey;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentation;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.UniAugmentationBuilder;
46 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
47 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
48 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
49 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
50 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
51 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
52 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
53 import org.opendaylight.yangtools.yang.binding.DataObject;
54 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
55 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
56 import org.powermock.api.mockito.PowerMockito;
57 import org.powermock.api.support.membermodification.MemberMatcher;
58 import org.powermock.api.support.membermodification.MemberModifier;
59 import org.powermock.core.classloader.annotations.PrepareForTest;
60 import org.powermock.modules.junit4.PowerMockRunner;
61
62 import com.google.common.base.Optional;
63
64 @RunWith(PowerMockRunner.class)
65 @PrepareForTest({UniUtils.class, OvsdbUtils.class, MdsalUtils.class,
66         UnimgrMapper.class})
67 public class UniDeleteCommandTest {
68
69     private static final NodeId OVSDB_NODE_ID = new NodeId("ovsdb://7011db35-f44b-4aab-90f6-d89088caf9d8");
70     private static final String NODE_ID = "uni://10.0.0.1";
71
72     private UniDeleteCommand uniDeleteCommand;
73     private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes;
74     private DataBroker dataBroker;
75
76     @SuppressWarnings("unchecked")
77     @Before
78     public void setUp(){
79         PowerMockito.mockStatic(UniUtils.class);
80         PowerMockito.mockStatic(OvsdbUtils.class);
81         PowerMockito.mockStatic(MdsalUtils.class);
82         PowerMockito.mockStatic(UnimgrMapper.class);
83         changes = mock(AsyncDataChangeEvent.class);
84         dataBroker = mock(DataBroker.class);
85         uniDeleteCommand = new UniDeleteCommand(dataBroker, changes);
86     }
87
88     /**
89      * Test method for {@link org.opendaylight.unimgr.command.UniDeleteCommand#execute()}.
90      */
91     @SuppressWarnings({ "unchecked", "rawtypes"})
92     @Test
93     public void testExecute() {
94         final Set<InstanceIdentifier<UniAugmentation>> removedUnis =
95                 new HashSet<InstanceIdentifier<UniAugmentation>>();
96         removedUnis.add(mock(InstanceIdentifier.class));
97         final UniAugmentation uniAugmentation = mock(UniAugmentation.class);
98         final OvsdbNodeRef ovsNodedRef = mock(OvsdbNodeRef.class);
99         final Optional<Node> optionalNode = mock(Optional.class);
100         final InstanceIdentifier instanceOfNode = mock(InstanceIdentifier.class);
101         final InstanceIdentifier uniKey = InstanceIdentifier
102                 .create(NetworkTopology.class)
103                 .child(Topology.class, new TopologyKey(UnimgrConstants.UNI_TOPOLOGY_ID))
104                 .child(Node.class,  new NodeKey(OVSDB_NODE_ID));
105         final Node ovsdbNode = mock(Node.class);
106         final OvsdbNodeAugmentation ovsdbNodeAugmentation = mock(OvsdbNodeAugmentation.class);
107         final QosEntries qosEntries = mock(QosEntries.class);
108         final Queues queues = mock(Queues.class);
109
110         when(uniAugmentation.getIpAddress()).thenReturn(mock(IpAddress.class));
111         when(uniAugmentation.getOvsdbNodeRef()).thenReturn(ovsNodedRef);
112         when(ovsNodedRef.getValue()).thenReturn(uniKey);
113         when(optionalNode.isPresent()).thenReturn(true);
114         when(optionalNode.get()).thenReturn(ovsdbNode);
115         when(ovsdbNode.getAugmentation(OvsdbNodeAugmentation.class)).thenReturn(ovsdbNodeAugmentation);
116         List<QosEntries> qosEntriesList = new ArrayList<>();
117         when(qosEntries.getKey()).thenReturn(mock(QosEntriesKey.class));
118         qosEntriesList.add(qosEntries);
119         when(ovsdbNodeAugmentation.getQosEntries()).thenReturn(qosEntriesList);
120         List<Queues> queuesList = new ArrayList<>();
121         when(queues.getKey()).thenReturn(mock(QueuesKey.class));
122         queuesList.add(queues);
123         when(ovsdbNodeAugmentation.getQueues()).thenReturn(queuesList);
124         when(OvsdbUtils.extractRemoved(any(AsyncDataChangeEvent.class), any(Class.class)))
125                 .thenReturn(removedUnis);
126         when(MdsalUtils.read(any(DataBroker.class), any(LogicalDatastoreType.class),
127                 any(InstanceIdentifier.class))).thenReturn(uniAugmentation);
128         when(MdsalUtils.readNode(any(DataBroker.class), any(LogicalDatastoreType.class),
129                 any(InstanceIdentifier.class))).thenReturn(optionalNode);
130         when(MdsalUtils.readNode(any(DataBroker.class), any(InstanceIdentifier.class)))
131                 .thenReturn(optionalNode);
132         when(UnimgrMapper.getOvsdbBridgeNodeIid(any(Node.class))).thenReturn(instanceOfNode);
133         when(UnimgrMapper.getTerminationPointIid(any(Node.class), any(String.class)))
134                 .thenReturn(instanceOfNode);
135         when(UnimgrMapper.getUniIid(any(DataBroker.class), any(IpAddress.class),
136                 any(LogicalDatastoreType.class))).thenReturn(instanceOfNode);
137         when(UnimgrMapper.getOvsdbQoSEntriesIid(any(Node.class), any(QosEntriesKey.class))).thenReturn(instanceOfNode);
138         when(UnimgrMapper.getOvsdbQueuesIid(any(Node.class), any(QueuesKey.class))).thenReturn(instanceOfNode);
139         when(MdsalUtils.deleteNode(any(DataBroker.class), any(InstanceIdentifier.class),
140                 any(LogicalDatastoreType.class))).thenReturn(true);
141         uniDeleteCommand.execute();
142
143         PowerMockito.verifyStatic(times(5));
144         MdsalUtils.deleteNode(any(DataBroker.class), any(InstanceIdentifier.class),
145                 any(LogicalDatastoreType.class));
146     }
147
148 }