2 * Copyright (c) 2016 CableLabs 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.unimgr.command;
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;
19 import java.util.ArrayList;
20 import java.util.HashSet;
21 import java.util.List;
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;
62 import com.google.common.base.Optional;
64 @RunWith(PowerMockRunner.class)
65 @PrepareForTest({UniUtils.class, OvsdbUtils.class, MdsalUtils.class,
67 public class UniDeleteCommandTest {
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";
72 private UniDeleteCommand uniDeleteCommand;
73 private AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes;
74 private DataBroker dataBroker;
76 @SuppressWarnings("unchecked")
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);
89 * Test method for {@link org.opendaylight.unimgr.command.UniDeleteCommand#execute()}.
91 @SuppressWarnings({ "unchecked", "rawtypes"})
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);
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();
143 PowerMockito.verifyStatic(times(5));
144 MdsalUtils.deleteNode(any(DataBroker.class), any(InstanceIdentifier.class),
145 any(LogicalDatastoreType.class));