package net.floodlightcontroller.devicemanager.test; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Set; import net.floodlightcontroller.devicemanager.IDevice; import net.floodlightcontroller.devicemanager.IDeviceListener; import net.floodlightcontroller.devicemanager.IEntityClass; import net.floodlightcontroller.devicemanager.IEntityClassifierService; import net.floodlightcontroller.devicemanager.internal.AttachmentPoint; import net.floodlightcontroller.devicemanager.internal.Device; import net.floodlightcontroller.devicemanager.internal.DeviceManagerImpl; import net.floodlightcontroller.devicemanager.internal.Entity; /** * Mock device manager useful for unit tests * @author readams */ public class MockDeviceManager extends DeviceManagerImpl { /** * Set a new IEntityClassifier * Use this as a quick way to use a particular entity classifier in a * single test without having to setup the full FloodlightModuleContext * again. * @param ecs */ public void setEntityClassifier(IEntityClassifierService ecs) { this.entityClassifier = ecs; this.startUp(null); } /** * Learn a device using the given characteristics. * @param macAddress the MAC * @param vlan the VLAN (can be null) * @param ipv4Address the IP (can be null) * @param switchDPID the attachment point switch DPID (can be null) * @param switchPort the attachment point switch port (can be null) * @param processUpdates if false, will not send updates. Note that this * method is not thread safe if this is false * @return the device, either new or not */ public IDevice learnEntity(long macAddress, Short vlan, Integer ipv4Address, Long switchDPID, Integer switchPort, boolean processUpdates) { Set<IDeviceListener> listeners = deviceListeners; if (!processUpdates) { deviceListeners = Collections.<IDeviceListener>emptySet(); } if (vlan != null && vlan.shortValue() <= 0) vlan = null; if (ipv4Address != null && ipv4Address == 0) ipv4Address = null; IDevice res = learnDeviceByEntity(new Entity(macAddress, vlan, ipv4Address, switchDPID, switchPort, new Date())); deviceListeners = listeners; return res; } /** * Learn a device using the given characteristics. * @param macAddress the MAC * @param vlan the VLAN (can be null) * @param ipv4Address the IP (can be null) * @param switchDPID the attachment point switch DPID (can be null) * @param switchPort the attachment point switch port (can be null) * @return the device, either new or not */ public IDevice learnEntity(long macAddress, Short vlan, Integer ipv4Address, Long switchDPID, Integer switchPort) { return learnEntity(macAddress, vlan, ipv4Address, switchDPID, switchPort, true); } @Override protected Device allocateDevice(Long deviceKey, Entity entity, IEntityClass entityClass) { return new MockDevice(this, deviceKey, entity, entityClass); } @Override protected Device allocateDevice(Long deviceKey, List<AttachmentPoint> aps, List<AttachmentPoint> trueAPs, Collection<Entity> entities, IEntityClass entityClass) { return new MockDevice(this, deviceKey, aps, trueAPs, entities, entityClass); } @Override protected Device allocateDevice(Device device, Entity entity) { return new MockDevice(device, entity); } }