Added TC for ControllerManager class. issue 28
This commit is contained in:
parent
814c40afca
commit
89c65fb61f
3 changed files with 372 additions and 2 deletions
|
|
@ -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<? extends HalSensorConfig> sensorClass) {
|
||||
if ( ! availableSensors.contains(sensorClass))
|
||||
availableSensors.add(sensorClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a List of all available Sensors that can be registered to this manager
|
||||
*/
|
||||
public List<Class<? extends HalSensorConfig>> getAvailableSensors(){
|
||||
return availableSensors;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a List of Sensor instances that have been registered to this manager
|
||||
*/
|
||||
public List<Sensor> getRegisteredSensors(){
|
||||
return registeredSensors;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return a List of Sensor instances that have been reported but not registered on the manager
|
||||
*/
|
||||
public List<Sensor> 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<? extends HalEventConfig> eventClass) {
|
||||
if ( ! availableEvents.contains(eventClass))
|
||||
availableEvents.add(eventClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a List of all available Events that can be registered to this manager
|
||||
*/
|
||||
public List<Class<? extends HalEventConfig>> getAvailableEvents(){
|
||||
return availableEvents;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a List of Sensor instances that have been registered to this manager
|
||||
*/
|
||||
public List<Event> getRegisteredEvents(){
|
||||
return registeredEvents;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a List of Event instances that have been reported but not registered on the manager
|
||||
*/
|
||||
public List<Event> 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<Class<? extends HalSensorConfig>> it = pluginManager.getClassIterator(HalSensorConfig.class);
|
||||
it.hasNext(); ){
|
||||
manager.availableSensors.add(it.next());
|
||||
manager.addAvailableSensor(it.next());
|
||||
}
|
||||
|
||||
for (Iterator<Class<? extends HalEventConfig>> it = pluginManager.getClassIterator(HalEventConfig.class);
|
||||
it.hasNext(); ){
|
||||
manager.availableEvents.add(it.next());
|
||||
manager.addAvailableEvent(it.next());
|
||||
}
|
||||
|
||||
for (Iterator<Class<? extends HalAutoScannableController>> it=
|
||||
|
|
@ -362,6 +429,7 @@ public class ControllerManager implements HalSensorReportListener,
|
|||
instance = manager;
|
||||
}
|
||||
|
||||
|
||||
public static ControllerManager getInstance(){
|
||||
return instance;
|
||||
}
|
||||
|
|
|
|||
142
test/se/hal/EventControllerManagerTest.java
Executable file
142
test/se/hal/EventControllerManagerTest.java
Executable file
|
|
@ -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<? extends HalEventController> getEventControllerClass() {
|
||||
return TestController.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends HalEventData> getEventDataClass() {
|
||||
return SwitchEventData.class;
|
||||
}
|
||||
}
|
||||
|
||||
public static class TestEvent2 implements HalEventConfig {
|
||||
|
||||
@Override
|
||||
public Class<? extends HalEventController> getEventControllerClass() {
|
||||
return TestController.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends HalEventData> 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() { }
|
||||
}
|
||||
}
|
||||
160
test/se/hal/SensorControllerManagerTest.java
Executable file
160
test/se/hal/SensorControllerManagerTest.java
Executable file
|
|
@ -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<? extends HalSensorController> getSensorControllerClass() {
|
||||
return TestController.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends HalSensorData> 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<? extends HalSensorController> getSensorControllerClass() {
|
||||
return TestController.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends HalSensorData> 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() { }
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue