blob: 00114ae81f3499b4be1ac10a915c463d27ddc929 [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 v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.om2m.ipe.sdt.testsuite.module;
import java.util.Arrays;
import java.util.List;
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.RunModeFlexContainer;
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.ipe.sdt.testsuite.module.exception.FlexContainerNotFound;
import org.eclipse.om2m.sdt.Module;
import org.eclipse.om2m.sdt.datapoints.ArrayDataPoint;
import org.eclipse.om2m.sdt.exceptions.AccessException;
import org.eclipse.om2m.sdt.exceptions.DataPointException;
import org.eclipse.om2m.sdt.home.types.DatapointType;
public class RunModeModuleTest extends AbstractModuleTest {
private String moduleUrl = null;
public RunModeModuleTest(CseService pCseService, Module pModule) {
super(pCseService, pModule);
try {
moduleUrl = getModuleFlexContainerUrl();
} catch (FlexContainerNotFound e) {
}
}
public TestReport testGetOperationMode() {
TestReport report = new TestReport("test " + getModule().getName() + ".getOperationMode");
if (moduleUrl == null) {
report.setState(State.KO);
report.setErrorMessage("unable to find out FlexContainer for module " + getModule().getName());
return report;
}
// at this point, we are sure the Module Flexcontainer exist
ResponsePrimitive response = CSEUtil.retrieveEntity(getCseService(), moduleUrl);
if (!ResponseStatusCode.OK.equals(response.getResponseStatusCode())) {
report.setErrorMessage("unable to retrieve FlexContainer for module " + getModule().getName() + " : "
+ response.getContent());
report.setState(State.KO);
return report;
}
RunModeFlexContainer retrievedFlexContainer = (RunModeFlexContainer) response.getContent();
// get operationMode customAttribute
CustomAttribute operationModeCA = retrievedFlexContainer.getCustomAttribute(DatapointType.operationMode.getShortName());
if (operationModeCA == null) {
report.setErrorMessage("operationMode customAttribute does not exist");
report.setState(State.KO);
return report;
}
// get operationMode value from customAttribute
List<String> operationModeFromFlexContainer = getListFromStringArray(operationModeCA.getCustomAttributeValue());
// get operationMode value from Datapoint
ArrayDataPoint<String> operationModeDP = (ArrayDataPoint<String>) getModule().getDataPoint(DatapointType.operationMode.getShortName());
List<String> operationModeFromDP = null;
try {
operationModeFromDP = operationModeDP.getValue();
} catch (DataPointException | AccessException e) {
report.setErrorMessage("unable to get operationMode value from Datapoint");
report.setState(State.KO);
return report;
}
// check value from flexContainer and from Datapoint
if (!checkObject(operationModeFromFlexContainer, operationModeFromDP, report, DatapointType.operationMode.getShortName())) {
return report;
}
report.setState(State.OK);
return report;
}
public TestReport testSetOperationMode() {
TestReport report = new TestReport("test " + getModule().getName() + ".setOperationMode");
if (moduleUrl == null) {
report.setState(State.KO);
report.setErrorMessage("unable to find out FlexContainer for module " + getModule().getName());
return report;
}
// at this point, we are sure the Module Flexcontainer exist
// get possible values from supportedMode datapoint
ArrayDataPoint<String> supportedModesDP = (ArrayDataPoint<String>) getModule().getDataPoint(DatapointType.supportedModes.getShortName());
List<String> supportedModesFromDP;
try {
supportedModesFromDP = supportedModesDP.getValue();
} catch (DataPointException | AccessException e1) {
report.setErrorMessage("unable to retrieve value of supportedModes Datapoint: " + e1.getMessage());
report.setState(State.KO);
return report;
}
// get current operationMode
ArrayDataPoint<String> operationModeDP = (ArrayDataPoint<String>) getModule().getDataPoint(DatapointType.operationMode.getShortName());
List<String> currentOperationModeValue = null;
try {
currentOperationModeValue = operationModeDP.getValue();
} catch (DataPointException | AccessException e) {
report.setState(State.KO);
report.setErrorMessage("unable to retrieve current value of operationMode datapoint");
return report;
}
// find a new value
String newOperationModeValue = "";
for (String supportedMode : supportedModesFromDP) {
if (!currentOperationModeValue.contains(supportedMode)) {
newOperationModeValue += supportedMode;
break;
}
}
newOperationModeValue += "";
// set operationMode value
RunModeFlexContainer toBeUpdated = new RunModeFlexContainer();
CustomAttribute customAttribute = new CustomAttribute();
customAttribute.setCustomAttributeName(DatapointType.operationMode.getShortName());
customAttribute.setCustomAttributeValue(newOperationModeValue.toString());
toBeUpdated.getCustomAttributes().add(customAttribute);
// perform UPDATE request
ResponsePrimitive response = CSEUtil.updateFlexContainerEntity(getCseService(), moduleUrl, toBeUpdated);
if (!ResponseStatusCode.UPDATED.equals(response.getResponseStatusCode())) {
report.setErrorMessage("unable to update FlexContainer for module " + getModule().getName() + " : "
+ response.getContent());
report.setState(State.KO);
return report;
}
// perform RETRIEVE request and check value
response = CSEUtil.retrieveEntity(getCseService(), moduleUrl);
RunModeFlexContainer retrievedFlexContainer = (RunModeFlexContainer) response.getContent();
// get operationMode customAttribute and value
CustomAttribute operationModeCA = retrievedFlexContainer.getCustomAttribute(DatapointType.operationMode.getShortName());
String operationModeFromFlexContainer = operationModeCA.getCustomAttributeValue();
// remove first character and last character "[]"
operationModeFromFlexContainer = operationModeFromFlexContainer.substring(1,
operationModeFromFlexContainer.length() - 1);
if (!checkObject(newOperationModeValue, operationModeFromFlexContainer, report, DatapointType.operationMode.getShortName())) {
return report;
}
// set an unknow value
String newOperationModeWrongValue = "unknownValue_" + System.currentTimeMillis();
toBeUpdated = new RunModeFlexContainer();
customAttribute.setCustomAttributeName(DatapointType.operationMode.getShortName());
customAttribute.setCustomAttributeValue(newOperationModeWrongValue);
toBeUpdated.getCustomAttributes().add(customAttribute);
// perform UPDATE request
response = CSEUtil.updateFlexContainerEntity(getCseService(), moduleUrl, toBeUpdated);
if (ResponseStatusCode.UPDATED.equals(response.getResponseStatusCode())) {
report.setErrorMessage("expected KO on UPDATE request as operationMode value is wrong");
report.setState(State.KO);
return report;
}
// perform RETRIEVE request and check value did not change
response = CSEUtil.retrieveEntity(getCseService(), moduleUrl);
retrievedFlexContainer = (RunModeFlexContainer) response.getContent();
// get operationMode customAttribute and value
operationModeCA = retrievedFlexContainer.getCustomAttribute(DatapointType.operationMode.getShortName());
operationModeFromFlexContainer = operationModeCA.getCustomAttributeValue();
// remove first character and last character "[]"
operationModeFromFlexContainer = operationModeFromFlexContainer.substring(1,
operationModeFromFlexContainer.length() - 1);
if (!checkObject(newOperationModeValue, operationModeFromFlexContainer, report, DatapointType.operationMode.getShortName())) {
return report;
}
report.setState(State.OK);
return report;
}
public TestReport testGetSupportedModes() {
TestReport report = new TestReport("test " + getModule().getName() + ".getSupportedModes");
if (moduleUrl == null) {
report.setState(State.KO);
report.setErrorMessage("unable to find out FlexContainer for module " + getModule().getName());
return report;
}
// at this point, we are sure the Module Flexcontainer exist
// perform RETRIEVE request on module FlexContainer
ResponsePrimitive response = CSEUtil.retrieveEntity(getCseService(), moduleUrl);
if (!ResponseStatusCode.OK.equals(response.getResponseStatusCode())) {
report.setErrorMessage("unable to retrieve FlexContainer of module " + getModule().getName());
report.setState(State.KO);
return report;
}
RunModeFlexContainer retrievedFlexContainer = (RunModeFlexContainer) response.getContent();
// check supportedModes customAttribute exist
CustomAttribute supportedModesCA = retrievedFlexContainer.getCustomAttribute(DatapointType.supportedModes.getShortName());
if (supportedModesCA == null) {
report.setErrorMessage("supportedModes customAttribute does not exist");
report.setState(State.KO);
return report;
}
// get value from customAttribute
List<String> supportedModesListFromFlexContainer = getListFromStringArray(
supportedModesCA.getCustomAttributeValue());
// get value from datapoint
ArrayDataPoint<String> supportedModesDP = (ArrayDataPoint<String>) getModule().getDataPoint(DatapointType.supportedModes.getShortName());
List<String> supportedModesListFromDP = null;
try {
supportedModesListFromDP = supportedModesDP.getValue();
} catch (DataPointException | AccessException e) {
report.setErrorMessage("unable to retrieve supportedModes Datapoint value: " + e.getMessage());
report.setState(State.KO);
return report;
}
// check values between flexContainer and dp
// first check list size
if (supportedModesListFromDP.size() != supportedModesListFromFlexContainer.size()) {
report.setErrorMessage("supportedModes size from Datapoint different from the list from flexContainer");
report.setState(State.KO);
return report;
}
for (String s : supportedModesListFromDP) {
if (!supportedModesListFromFlexContainer.contains(s)) {
report.setErrorMessage(s + " mode is not in FlexContainer list");
report.setState(State.KO);
return report;
}
}
report.setState(State.OK);
return report;
}
public TestReport testSetSupportedModes() {
TestReport report = new TestReport("test " + getModule().getName() + ".setSupportedModes");
if (moduleUrl == null) {
report.setState(State.KO);
report.setErrorMessage("unable to find out FlexContainer for module " + getModule().getName());
return report;
}
// at this point, we are sure the Module Flexcontainer exist
CustomAttribute supportedModesCA = new CustomAttribute();
supportedModesCA.setCustomAttributeName(DatapointType.supportedModes.getShortName());
supportedModesCA.setCustomAttributeValue("mode2,mode3,mode6,mode7");
RunModeFlexContainer toBeUpdated = new RunModeFlexContainer();
toBeUpdated.getCustomAttributes().add(supportedModesCA);
// perform UPDATE request
ResponsePrimitive response = CSEUtil.updateFlexContainerEntity(getCseService(), moduleUrl, toBeUpdated);
if (!ResponseStatusCode.UPDATED.equals(response.getResponseStatusCode())) {
report.setErrorMessage("unable to update supportedModes customAttribute:" + response.getContent());
report.setState(State.KO);
return report;
}
// retrieve value from datapoint
ArrayDataPoint<String> supportedModesDP = (ArrayDataPoint<String>) getModule().getDataPoint(DatapointType.supportedModes.getShortName());
List<String> supportedModesFromDP = null;
try {
supportedModesFromDP = supportedModesDP.getValue();
} catch (DataPointException | AccessException e) {
report.setErrorMessage("unable to retrieve supportedModes value from datapoint:" + e.getMessage());
report.setException(e);
report.setState(State.KO);
return report;
}
// convert customAttribute as a list
String[] supportedModesValueFromFlexContainer_array = supportedModesCA.getCustomAttributeValue().split(",");
List<String> supportedModesValueFromFlexContainer_list = Arrays.asList(supportedModesValueFromFlexContainer_array);
// check value
if (!checkObject(supportedModesValueFromFlexContainer_list, supportedModesFromDP, report, DatapointType.supportedModes.getShortName())) {
return report;
}
report.setState(State.OK);
return report;
}
}