diff --git a/src/main/java/net/floodlightcontroller/devicemanager/Device.java b/src/main/java/net/floodlightcontroller/devicemanager/Device.java index d25d61963f67f17b0009f2d368f4584c10546b59..69bd9b6ff466e65b0d059f9c6ff27da83c05f754 100755 --- a/src/main/java/net/floodlightcontroller/devicemanager/Device.java +++ b/src/main/java/net/floodlightcontroller/devicemanager/Device.java @@ -366,7 +366,7 @@ public class Device { return "Device [dataLayerAddress=" + dlAddrString + ", attachmentPoints=" + attachmentPoints + ", networkAddresses=" - + IPv4.fromIPv4AddressCollection(networkAddresses.keySet()) + "]"; + + "[" + IPv4.fromIPv4AddressCollection(networkAddresses.keySet()) + "]"; } public Date getLastSeenInStorage() { diff --git a/src/test/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImplTest.java b/src/test/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImplTest.java index 6fbc303771ff6f983f92fcdee5646f064c0cdabf..fec599bf3db5932043238bd98362842883b82ab0 100644 --- a/src/test/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImplTest.java +++ b/src/test/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImplTest.java @@ -333,9 +333,13 @@ public class DeviceManagerImplTest extends FloodlightTestCase { assertEquals(2, rdevice.getAttachmentPoints().size()); assertEquals(2, rdevice.getNetworkAddresses().size()); - // Sleep to make sure the aging thread has run - Thread.sleep(Math.max(DeviceManagerImpl.DEVICE_NA_MAX_AGE, DeviceManagerImpl.DEVICE_AP_MAX_AGE)*1000); - deviceManager.removeAgedDevices(new Date()); + // Wait until device's network address expired. + Date boundaryTime = new Date(new Date().getTime() + DeviceManagerImpl.DEVICE_MAX_AGE*1000); + while (deviceManager.getDeviceByDataLayerAddress(dataLayerSource).getNetworkAddresses().size() != 0) { + Date curTime = new Date(); + assertFalse(curTime.after(boundaryTime)); + deviceManager.removeAgedDevices(curTime); + } rdevice = deviceManager.getDeviceByDataLayerAddress(dataLayerSource); assertEquals(0, rdevice.getNetworkAddresses().size()); @@ -346,13 +350,14 @@ public class DeviceManagerImplTest extends FloodlightTestCase { assertEquals(0, rdevice.getAttachmentPoints().size()); assertEquals(0, rdevice.getNetworkAddresses().size()); - // Sleep a bit longer seconds to allow device age - Thread.sleep((DeviceManagerImpl.DEVICE_MAX_AGE - - Math.max(DeviceManagerImpl.DEVICE_NA_MAX_AGE, DeviceManagerImpl.DEVICE_AP_MAX_AGE))*1000); - deviceManager.removeAgedDevices(new Date()); - - assertNull(deviceManager.getDeviceByDataLayerAddress(dataLayerSource)); - + // Wait until device expired. + boundaryTime = new Date(new Date().getTime() + DeviceManagerImpl.DEVICE_MAX_AGE*1000); + while (deviceManager.getDeviceByDataLayerAddress(dataLayerSource) != null) { + Date curTime = new Date(); + assertFalse(curTime.after(boundaryTime)); + deviceManager.removeAgedDevices(curTime); + } + // Make sure the device's AP and NA were removed from storage deviceManager.readAllDeviceStateFromStorage(); assertNull(deviceManager.getDeviceByDataLayerAddress(dataLayerSource));