ONOS-6382 fail removal of non-existent virtual network with IllegalStateException
Change-Id: I50a81f79660ff6fc63a5426368f2edbcec993155
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
index 44395ef..202046e 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
@@ -189,6 +189,18 @@
}
/**
+ * Tests removal of a virtual network twice.
+ */
+ @Test(expected = IllegalStateException.class)
+ public void testRemoveVnetTwice() {
+ manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
+ VirtualNetwork virtualNetwork =
+ manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
+ manager.removeVirtualNetwork(virtualNetwork.id());
+ manager.removeVirtualNetwork(virtualNetwork.id());
+ }
+
+ /**
* Tests add and remove of virtual networks.
*/
@Test
@@ -205,10 +217,6 @@
manager.removeVirtualNetwork(virtualNetwork.id());
assertEquals("The expected virtual network size does not match",
--remaining, manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1)).size());
- // attempt to remove the same virtual network again.
- manager.removeVirtualNetwork(virtualNetwork.id());
- assertEquals("The expected virtual network size does not match",
- remaining, manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1)).size());
}
virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
assertTrue("The virtual network set should be empty.", virtualNetworks.isEmpty());
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java
index 81a9a3c..529a0cd 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java
@@ -353,35 +353,35 @@
@Override
public void removeNetwork(NetworkId networkId) {
// Make sure that the virtual network exists before attempting to remove it.
- if (networkExists(networkId)) {
- //Remove all the devices of this network
- Set<VirtualDevice> deviceSet = getDevices(networkId);
- if (deviceSet != null) {
- deviceSet.forEach(virtualDevice -> removeDevice(networkId, virtualDevice.id()));
- }
- //TODO update both maps in one transaction.
+ checkState(networkExists(networkId), "The network does not exist.");
- VirtualNetwork virtualNetwork = networkIdVirtualNetworkMap.remove(networkId);
- if (virtualNetwork == null) {
- return;
- }
- TenantId tenantId = virtualNetwork.tenantId();
-
- Set<NetworkId> networkIdSet = new HashSet<>();
- tenantIdNetworkIdSetMap.get(tenantId).forEach(networkId1 -> {
- if (networkId1.id().equals(networkId.id())) {
- networkIdSet.add(networkId1);
- }
- });
-
- tenantIdNetworkIdSetMap.compute(virtualNetwork.tenantId(), (id, existingNetworkIds) -> {
- if (existingNetworkIds == null || existingNetworkIds.isEmpty()) {
- return new HashSet<>();
- } else {
- return new HashSet<>(Sets.difference(existingNetworkIds, networkIdSet));
- }
- });
+ //Remove all the devices of this network
+ Set<VirtualDevice> deviceSet = getDevices(networkId);
+ if (deviceSet != null) {
+ deviceSet.forEach(virtualDevice -> removeDevice(networkId, virtualDevice.id()));
}
+ //TODO update both maps in one transaction.
+
+ VirtualNetwork virtualNetwork = networkIdVirtualNetworkMap.remove(networkId);
+ if (virtualNetwork == null) {
+ return;
+ }
+ TenantId tenantId = virtualNetwork.tenantId();
+
+ Set<NetworkId> networkIdSet = new HashSet<>();
+ tenantIdNetworkIdSetMap.get(tenantId).forEach(networkId1 -> {
+ if (networkId1.id().equals(networkId.id())) {
+ networkIdSet.add(networkId1);
+ }
+ });
+
+ tenantIdNetworkIdSetMap.compute(virtualNetwork.tenantId(), (id, existingNetworkIds) -> {
+ if (existingNetworkIds == null || existingNetworkIds.isEmpty()) {
+ return new HashSet<>();
+ } else {
+ return new HashSet<>(Sets.difference(existingNetworkIds, networkIdSet));
+ }
+ });
}
/**
@@ -395,6 +395,7 @@
return (networkIdVirtualNetworkMap.containsKey(networkId));
}
+
@Override
public VirtualDevice addDevice(NetworkId networkId, DeviceId deviceId) {
checkState(networkExists(networkId), "The network has not been added.");