From 89c65fb61f0f61b42130fa4680eccd5a1d8443b3 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Tue, 3 Jan 2017 16:29:19 +0100 Subject: [PATCH] Added TC for ControllerManager class. issue 28 --- src/se/hal/ControllerManager.java | 72 ++++++++- test/se/hal/EventControllerManagerTest.java | 142 ++++++++++++++++ test/se/hal/SensorControllerManagerTest.java | 160 +++++++++++++++++++ 3 files changed, 372 insertions(+), 2 deletions(-) create mode 100755 test/se/hal/EventControllerManagerTest.java create mode 100755 test/se/hal/SensorControllerManagerTest.java diff --git a/src/se/hal/ControllerManager.java b/src/se/hal/ControllerManager.java index 0165d562..cbef3ca8 100755 --- a/src/se/hal/ControllerManager.java +++ b/src/se/hal/ControllerManager.java @@ -55,6 +55,10 @@ public class ControllerManager implements HalSensorReportListener, /////////////////////////////// SENSORS /////////////////////////////////// + /** + * Register a Sensor instance on the manager. + * The manager will start to save reported data for the registered Sensor. + */ public void register(Sensor sensor) { if(sensor.getDeviceConfig() == null) { logger.warning("Sensor config is null: "+ sensor); @@ -75,6 +79,11 @@ public class ControllerManager implements HalSensorReportListener, detectedSensors.remove(findSensor(sensor.getDeviceConfig(), detectedSensors)); // Remove if this device was detected } + /** + * Deregisters a Sensor from the manager. + * Data reported on the Sensor will no longer be saved but already saved data will not be modified. + * The Controller that owns the Sensor will be deallocated if it has no more registered devices. + */ public void deregister(Sensor sensor){ if(sensor.getDeviceConfig() == null) { logger.warning("Sensor config is null: "+ sensor); @@ -93,14 +102,39 @@ public class ControllerManager implements HalSensorReportListener, } } + /** + * Registers a Sensor class type as usable by the manager + */ + public void addAvailableSensor(Class sensorClass) { + if ( ! availableSensors.contains(sensorClass)) + availableSensors.add(sensorClass); + } + + /** + * @return a List of all available Sensors that can be registered to this manager + */ public List> getAvailableSensors(){ return availableSensors; } + /** + * @return a List of Sensor instances that have been registered to this manager + */ + public List getRegisteredSensors(){ + return registeredSensors; + } + + + /** + * @return a List of Sensor instances that have been reported but not registered on the manager + */ public List getDetectedSensors(){ return detectedSensors; } + /** + * Called by Controllers to report received Sensor data + */ @Override public void reportReceived(HalSensorConfig sensorConfig, HalSensorData sensorData) { try{ @@ -145,6 +179,10 @@ public class ControllerManager implements HalSensorReportListener, //////////////////////////////// EVENTS /////////////////////////////////// + /** + * Register a Event instance on the manager. + * The manager will start to save reported data for the registered Event. + */ public void register(Event event) { if(event.getDeviceConfig() == null) { logger.warning("Event config is null: "+ event); @@ -165,6 +203,11 @@ public class ControllerManager implements HalSensorReportListener, detectedEvents.remove(findEvent(event.getDeviceConfig(), detectedEvents)); // Remove if this device was detected } + /** + * Deregisters a Event from the manager. + * Data reported on the Event will no longer be saved but already saved data will not be modified. + * The Controller that owns the Event will be deallocated if it has no more registered devices. + */ public void deregister(Event event){ if(event.getDeviceConfig() == null) { logger.warning("Event config is null: "+ event); @@ -183,14 +226,38 @@ public class ControllerManager implements HalSensorReportListener, } } + /** + * Registers a Event class type as usable by the manager + */ + public void addAvailableEvent(Class eventClass) { + if ( ! availableEvents.contains(eventClass)) + availableEvents.add(eventClass); + } + + /** + * @return a List of all available Events that can be registered to this manager + */ public List> getAvailableEvents(){ return availableEvents; } + /** + * @return a List of Sensor instances that have been registered to this manager + */ + public List getRegisteredEvents(){ + return registeredEvents; + } + + /** + * @return a List of Event instances that have been reported but not registered on the manager + */ public List getDetectedEvents(){ return detectedEvents; } + /** + * Called by Controllers to report received Event data + */ @Override public void reportReceived(HalEventConfig eventConfig, HalEventData eventData) { try { @@ -345,12 +412,12 @@ public class ControllerManager implements HalSensorReportListener, for (Iterator> it = pluginManager.getClassIterator(HalSensorConfig.class); it.hasNext(); ){ - manager.availableSensors.add(it.next()); + manager.addAvailableSensor(it.next()); } for (Iterator> it = pluginManager.getClassIterator(HalEventConfig.class); it.hasNext(); ){ - manager.availableEvents.add(it.next()); + manager.addAvailableEvent(it.next()); } for (Iterator> it= @@ -362,6 +429,7 @@ public class ControllerManager implements HalSensorReportListener, instance = manager; } + public static ControllerManager getInstance(){ return instance; } diff --git a/test/se/hal/EventControllerManagerTest.java b/test/se/hal/EventControllerManagerTest.java new file mode 100755 index 00000000..4189033a --- /dev/null +++ b/test/se/hal/EventControllerManagerTest.java @@ -0,0 +1,142 @@ +package se.hal; + +import org.junit.Test; +import se.hal.intf.*; +import se.hal.struct.Event; +import se.hal.struct.devicedata.SwitchEventData; + +import java.util.Collections; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + + +public class EventControllerManagerTest { + + private ControllerManager manager = new ControllerManager(); + + + @Test + public void addAvailableEvent(){ + assertEquals(0, manager.getAvailableEvents().size()); + + manager.addAvailableEvent(TestEvent1.class); + assertEquals(1, manager.getAvailableEvents().size()); + assertTrue(manager.getAvailableEvents().contains(TestEvent1.class)); + + manager.addAvailableEvent(TestEvent2.class); + assertEquals(2, manager.getAvailableEvents().size()); + assertTrue(manager.getAvailableEvents().contains(TestEvent1.class)); + assertTrue(manager.getAvailableEvents().contains(TestEvent2.class)); + + // Add duplicate Event + manager.addAvailableEvent(TestEvent1.class); + assertEquals("No duplicate check",2, manager.getAvailableEvents().size()); + } + + + @Test + public void registerUnavailableEvent(){ + assertEquals(Collections.EMPTY_LIST, manager.getAvailableEvents()); + + Event Event = new Event(); + Event.setDeviceConfig(new TestEvent1()); + manager.register(Event); + assertEquals("No Event registered", Collections.EMPTY_LIST, manager.getRegisteredEvents()); + } + + + @Test + public void registerOneEvent() { + Event Event1 = registerEvent(new TestEvent1()); + assertEquals(1, manager.getRegisteredEvents().size()); + assertTrue(manager.getRegisteredEvents().contains(Event1)); + } + public void registerTwoEvents(){ + Event Event1 = registerEvent(new TestEvent1()); + Event Event2 = registerEvent(new TestEvent2()); + assertEquals(2, manager.getRegisteredEvents().size()); + assertTrue(manager.getRegisteredEvents().contains(Event1)); + assertTrue(manager.getRegisteredEvents().contains(Event2)); + } + + + @Test + public void deregisterEvent(){ + Event Event1 = registerEvent(new TestEvent1()); + manager.deregister(Event1); + assertEquals(Collections.EMPTY_LIST, manager.getRegisteredEvents()); + } + + + // TODO: TC for reportReceived + + + ////////////////////////////////////////////////////////// + private Event registerEvent(HalEventConfig config){ + Event Event = new Event(); + Event.setDeviceConfig(config); + manager.addAvailableEvent(config.getClass()); + manager.register(Event); + return Event; + } + + public static class TestEvent1 implements HalEventConfig { + + @Override + public Class getEventControllerClass() { + return TestController.class; + } + + @Override + public Class getEventDataClass() { + return SwitchEventData.class; + } + } + + public static class TestEvent2 implements HalEventConfig { + + @Override + public Class getEventControllerClass() { + return TestController.class; + } + + @Override + public Class getEventDataClass() { + return SwitchEventData.class; + } + } + + public static class TestController implements HalEventController{ + int size; + + @Override + public void initialize() throws Exception { } + + @Override + public void register(HalEventConfig event) { + size++; + } + + @Override + public void deregister(HalEventConfig event) { + size--; + } + + @Override + public void send(HalEventConfig eventConfig, HalEventData eventData) { + + } + + @Override + public int size() { + return size; + } + + @Override + public void setListener(HalEventReportListener listener) { } + + @Override + public void close() { } + } +} \ No newline at end of file diff --git a/test/se/hal/SensorControllerManagerTest.java b/test/se/hal/SensorControllerManagerTest.java new file mode 100755 index 00000000..923206f1 --- /dev/null +++ b/test/se/hal/SensorControllerManagerTest.java @@ -0,0 +1,160 @@ +package se.hal; + +import org.junit.Test; +import se.hal.intf.HalSensorConfig; +import se.hal.intf.HalSensorController; +import se.hal.intf.HalSensorData; +import se.hal.intf.HalSensorReportListener; +import se.hal.struct.Sensor; +import se.hal.struct.devicedata.HumiditySensorData; +import se.hal.struct.devicedata.TemperatureSensorData; + +import java.util.Collections; + +import static org.junit.Assert.*; + + +public class SensorControllerManagerTest { + + private ControllerManager manager = new ControllerManager(); + + + @Test + public void addAvailableSensor(){ + assertEquals(Collections.EMPTY_LIST, manager.getAvailableSensors()); + + manager.addAvailableSensor(TestSensor1.class); + assertEquals(1, manager.getAvailableSensors().size()); + assertTrue(manager.getAvailableSensors().contains(TestSensor1.class)); + + manager.addAvailableSensor(TestSensor2.class); + assertEquals(2, manager.getAvailableSensors().size()); + assertTrue(manager.getAvailableSensors().contains(TestSensor1.class)); + assertTrue(manager.getAvailableSensors().contains(TestSensor2.class)); + + // Add duplicate sensor + manager.addAvailableSensor(TestSensor1.class); + assertEquals("No duplicate check",2, manager.getAvailableSensors().size()); + } + + + @Test + public void registerUnavailableSensor(){ + assertEquals(Collections.EMPTY_LIST, manager.getAvailableSensors()); + + Sensor sensor = new Sensor(); + sensor.setDeviceConfig(new TestSensor1()); + manager.register(sensor); + assertEquals("No Sensor registered", Collections.EMPTY_LIST, manager.getRegisteredSensors()); + } + + + @Test + public void registerOneSensor() { + Sensor sensor1 = registerSensor(new TestSensor1()); + assertEquals(1, manager.getRegisteredSensors().size()); + assertTrue(manager.getRegisteredSensors().contains(sensor1)); + } + @Test + public void registerTwoSensors(){ + Sensor sensor1 = registerSensor(new TestSensor1()); + Sensor sensor2 = registerSensor(new TestSensor2()); + assertEquals(2, manager.getRegisteredSensors().size()); + assertTrue(manager.getRegisteredSensors().contains(sensor1)); + assertTrue(manager.getRegisteredSensors().contains(sensor2)); + } + + + @Test + public void deregisterSensor(){ + Sensor sensor1 = registerSensor(new TestSensor1()); + manager.deregister(sensor1); + assertEquals(Collections.EMPTY_LIST, manager.getRegisteredEvents()); + } + + + // TODO: TC for reportReceived + + + ////////////////////////////////////////////////////////// + private Sensor registerSensor(HalSensorConfig config){ + Sensor sensor = new Sensor(); + sensor.setDeviceConfig(config); + manager.addAvailableSensor(config.getClass()); + manager.register(sensor); + return sensor; + } + + + public static class TestSensor1 implements HalSensorConfig { + + @Override + public long getDataInterval() { + return 0; + } + + @Override + public AggregationMethod getAggregationMethod() { + return AggregationMethod.AVERAGE; + } + + @Override + public Class getSensorControllerClass() { + return TestController.class; + } + + @Override + public Class getSensorDataClass() { + return TemperatureSensorData.class; + } + } + + public static class TestSensor2 implements HalSensorConfig { + + @Override + public long getDataInterval() { + return 0; + } + + @Override + public AggregationMethod getAggregationMethod() { + return AggregationMethod.SUM; + } + + @Override + public Class getSensorControllerClass() { + return TestController.class; + } + + @Override + public Class getSensorDataClass() { + return HumiditySensorData.class; + } + } + + public static class TestController implements HalSensorController{ + int size; + + @Override + public void initialize() throws Exception { } + + @Override + public void register(HalSensorConfig sensor) { + size++; + } + @Override + public void deregister(HalSensorConfig sensor) { + size--; + } + @Override + public int size() { + return size; + } + + @Override + public void setListener(HalSensorReportListener listener) { } + + @Override + public void close() { } + } +} \ No newline at end of file