blob: a7981ce87c08801753aa261bf2174eb2b8a28aa0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2016 Orange.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*******************************************************************************/
package org.eclipse.om2m.ipe.sdt.testsuite.module;
import org.eclipse.om2m.commons.constants.ResponseStatusCode;
import org.eclipse.om2m.commons.resource.CustomAttribute;
import org.eclipse.om2m.commons.resource.ResponsePrimitive;
import org.eclipse.om2m.commons.resource.flexcontainerspec.WaterSensorFlexContainer;
import org.eclipse.om2m.core.service.CseService;
import org.eclipse.om2m.ipe.sdt.testsuite.CSEUtil;
import org.eclipse.om2m.ipe.sdt.testsuite.TestReport;
import org.eclipse.om2m.ipe.sdt.testsuite.TestReport.State;
import org.eclipse.om2m.sdt.Module;
import org.eclipse.om2m.sdt.datapoints.BooleanDataPoint;
import org.eclipse.om2m.sdt.exceptions.AccessException;
import org.eclipse.om2m.sdt.exceptions.DataPointException;
import org.eclipse.om2m.sdt.home.types.DatapointType;
public class WaterSensorModuleTest extends AbstractModuleTest {
public WaterSensorModuleTest(CseService pCseService, Module pModule) {
super(pCseService, pModule);
}
public TestReport testGetAlarm() {
TestReport report = new TestReport("Test module " + getModule().getName() + ".getAlarm()");
if (!checkModuleUrl(report)) {
// module url is null
return report;
}
// at this point, we are sure the module flexContainer exists
// retrieve Flexcontainer
ResponsePrimitive response = CSEUtil.retrieveEntity(getCseService(), getModuleUrl());
if (!ResponseStatusCode.OK.equals(response.getResponseStatusCode())) {
report.setErrorMessage("unable to retrieve FlexContainer for module " + getModule() + " : " + response.getContent());
report.setState(State.KO);
return report;
}
WaterSensorFlexContainer retrievedFlexContainer = (WaterSensorFlexContainer) response.getContent();
// retrieve alarm customAttribute
CustomAttribute alarmCA = retrievedFlexContainer.getCustomAttribute(DatapointType.alarm.getShortName());
if (alarmCA == null) {
report.setErrorMessage("alarm customAttribute is missing but it is mandatory");
report.setState(State.KO);
return report;
}
// retrieve alarm value from flexContainer
Boolean alarmValueFromFlexContainer = null;
if (alarmCA.getValue() == null) {
report.setErrorMessage("alarm customAttribute value is null");
report.setState(State.KO);
return report;
}
try {
alarmValueFromFlexContainer = Boolean.valueOf(alarmCA.getValue());
} catch (ClassCastException e) {
report.setErrorMessage("alarm customAttribute value is not a Boolean value (" + alarmCA.getValue() + ")");
report.setState(State.KO);
return report;
}
// at this point, alarmValueFromFlexContainer contains the alarm value (as a boolean)
// retrieve alarm datapoint
BooleanDataPoint alarmDP = (BooleanDataPoint) getModule().getDataPoint(DatapointType.alarm.getShortName());
// retrieve alarm value from datapoint
Boolean alarmValueFromDP = null;
try {
alarmValueFromDP = alarmDP.getValue();
} catch (DataPointException | AccessException e) {
report.setErrorMessage("unable to retrieve alarm value from Datapoint : " + e.getMessage());
report.setState(State.KO);
return report;
}
// check value from datapoint and flexcontainer
if (!checkObject(alarmValueFromFlexContainer, alarmValueFromDP, report, DatapointType.alarm.getShortName())) {
return report;
}
report.setState(State.OK);
return report;
}
public TestReport testSetAlarm() {
TestReport report = new TestReport("Test module " + getModule().getName() + ".setAlarm()");
// alarm is not writable
if (!checkModuleUrl(report)) {
// module url is null
return report;
}
// at this point, we are sure the module flexContainer exists
// retrieve current value from datapoint
BooleanDataPoint alarmDP = (BooleanDataPoint) getModule().getDataPoint(DatapointType.alarm.getShortName());
Boolean alarmValueFromDP = null;
try {
alarmValueFromDP = alarmDP.getValue();
} catch (DataPointException | AccessException e) {
report.setErrorMessage("unable to retrieve alarm DataPoint value:" + e.getMessage());
report.setState(State.KO);
return report;
}
// prepare update
WaterSensorFlexContainer toBeUpdated = new WaterSensorFlexContainer();
CustomAttribute alarmCA = new CustomAttribute();
alarmCA.setShortName(DatapointType.alarm.getShortName());
alarmCA.setValue(Boolean.valueOf(!alarmValueFromDP.booleanValue()).toString());
toBeUpdated.getCustomAttributes().add(alarmCA);
// perform UPDATE request ==> expect KO
ResponsePrimitive response = CSEUtil.updateFlexContainerEntity(getCseService(), getModuleUrl(), toBeUpdated);
if (ResponseStatusCode.UPDATED.equals(response.getResponseStatusCode())) {
// expect KO as alarm is not writable
report.setErrorMessage("alarm is not writable, KO expected");
report.setState(State.KO);
return report;
}
// retrieve the current value from flexContainer
Boolean currentValueFromDP = null;
response = CSEUtil.retrieveEntity(getCseService(), getModuleUrl());
if (!ResponseStatusCode.OK.equals(response.getResponseStatusCode())) {
report.setErrorMessage("unable to retrieve FlexContainer: " + response.getContent());
report.setState(State.KO);
return report;
}
WaterSensorFlexContainer retrievedFlexContainer = (WaterSensorFlexContainer) response.getContent();
CustomAttribute ca = retrievedFlexContainer.getCustomAttribute(DatapointType.alarm.getShortName());
try {
currentValueFromDP = Boolean.parseBoolean(ca.getValue());
} catch (Exception e) {
report.setErrorMessage("unable to retrieve alarm customAttribute value:" + e.getMessage());
report.setState(State.KO);
return report;
}
// check current value is the same value as the value retrieved before UPDATE request
if (!checkObject(alarmValueFromDP, currentValueFromDP, report, DatapointType.alarm.getShortName())) {
return report;
}
report.setState(State.OK);
report.setErrorMessage("not implemented");
return report;
}
}