blob: 9f2d7b8ae4ce07ca6a11a836d3e2bdb5fa92d50f [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.das.testsuite;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import org.eclipse.om2m.commons.constants.AccessControl;
import org.eclipse.om2m.commons.constants.Constants;
import org.eclipse.om2m.commons.constants.MimeMediaType;
import org.eclipse.om2m.commons.constants.Operation;
import org.eclipse.om2m.commons.constants.ResourceType;
import org.eclipse.om2m.commons.constants.ResponseStatusCode;
import org.eclipse.om2m.commons.resource.AE;
import org.eclipse.om2m.commons.resource.AEAnnc;
import org.eclipse.om2m.commons.resource.AccessControlPolicy;
import org.eclipse.om2m.commons.resource.AccessControlRule;
import org.eclipse.om2m.commons.resource.DynamicAuthorizationConsultation;
import org.eclipse.om2m.commons.resource.FlexContainer;
import org.eclipse.om2m.commons.resource.AbstractFlexContainerAnnc;
import org.eclipse.om2m.commons.resource.RemoteCSE;
import org.eclipse.om2m.commons.resource.RequestPrimitive;
import org.eclipse.om2m.commons.resource.ResponsePrimitive;
import org.eclipse.om2m.commons.resource.SetOfAcrs;
import org.eclipse.om2m.commons.resource.flexcontainerspec.BinarySwitchFlexContainerAnnc;
import org.eclipse.om2m.core.service.CseService;
public abstract class Test {
private final String name;
public enum State {
OK, KO
};
private State state = State.KO;
private String message;
private final CseService cseService;
protected Test(String pName, CseService pCseService) {
name = pName;
cseService = pCseService;
}
public String getName() {
return name;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public CseService getCseService() {
return cseService;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
/**
* Test to be performed
*/
public abstract void performTest();
public void cleanUp() {
}
public boolean checkNotNull(Object object, String objectName) {
if (object == null) {
setState(State.KO);
setMessage("object " + objectName + " must not be null ");
return false;
}
return true;
}
public boolean checkNull(Object object, String objectName) {
if (object != null) {
setState(State.KO);
setMessage("object " + objectName + " must be null ");
return false;
}
return true;
}
public boolean checkEmpty(List object, String objectName) {
if (object == null) {
setState(State.KO);
setMessage("object " + objectName + " must not be null");
return false;
}
if (!object.isEmpty()) {
setState(State.KO);
setMessage("object " + objectName + " must be empty ");
return false;
}
return true;
}
public boolean checkNotEmpty(String object, String objectName) {
if (!checkNotNull(object, objectName)) {
return false;
}
if (object.isEmpty()) {
setState(State.KO);
setMessage("object " + objectName + " must not be empty ");
return false;
}
return true;
}
public boolean checkEquals(int currentValue, int expectedValue, String objectName) {
if (currentValue != expectedValue) {
setState(State.KO);
setMessage("object " + objectName + ": expected=" + expectedValue + ", found=" + currentValue);
return false;
}
return true;
}
public boolean checkEquals(Object currentValue, Object expectedValue, String objectName) {
if (currentValue == null) {
if (expectedValue != null) {
setState(State.KO);
setMessage("object " + objectName + ": expected=" + expectedValue + ", found=" + currentValue);
return false;
} else {
return true;
}
}
if (!currentValue.equals(expectedValue)) {
setState(State.KO);
setMessage("object " + objectName + ": expected=" + expectedValue + ", found=" + currentValue);
return false;
}
return true;
}
public boolean checkEquals(List<?> currentList, List<?> expectedList, String objectName) {
if (currentList == null) {
if (expectedList != null) {
setState(State.KO);
setMessage("object " + objectName + ": expected=" + expectedList.toString() + ", found=" + currentList);
return false;
} else {
return true;
}
}
if (!currentList.equals(expectedList)) {
setState(State.KO);
setMessage("object " + objectName + ": expected=" + expectedList + ", found=" + currentList.toString());
return false;
}
return true;
}
public void printTestReport() {
System.out.println("\t - " + getName() + ", state=" + getState() + ", message=" + getMessage());
}
protected DynamicAuthorizationConsultation createDAS() {
return createDAS((String) null);
}
protected DynamicAuthorizationConsultation createDAS(String poA) {
List<String> poas = null;
if (poA != null) {
poas = new ArrayList<>();
poas.add(poA);
}
return createDAS(poas);
}
protected DynamicAuthorizationConsultation createDAS(List<String> poAs) {
// create request
RequestPrimitive request = new RequestPrimitive();
// das field
Boolean enabled = Boolean.TRUE;
List<String> poa = new ArrayList<>();
if (poAs == null) {
poa.add("poa1" + UUID.randomUUID());
poa.add("poa2" + UUID.randomUUID());
} else {
poa.addAll(poAs);
}
String dasName = "DAS" + UUID.randomUUID().toString();
// setup request
request.setOperation(Operation.CREATE);
request.setTo("/" + Constants.CSE_ID + "/" + Constants.CSE_NAME);
request.setFrom(Constants.ADMIN_REQUESTING_ENTITY);
request.setResourceType(ResourceType.DYNAMIC_AUTHORIZATION_CONSULTATION);
request.setRequestContentType(MimeMediaType.OBJ);
request.setReturnContentType(MimeMediaType.OBJ);
// set das
DynamicAuthorizationConsultation das = new DynamicAuthorizationConsultation();
das.setDynamicAuthorizationEnabled(enabled);
das.setDynamicAuthorisationPoA(poa);
das.setDynamicAuthorizationLifetime(new Date().toString());
das.setName(dasName);
request.setContent(das);
ResponsePrimitive response = getCseService().doRequest(request);
if (response != null) {
if (ResponseStatusCode.CREATED.equals(response.getResponseStatusCode())) {
// OK
return (DynamicAuthorizationConsultation) response.getContent();
}
}
// KO
return null;
}
protected RemoteCSE createRemoteCse() {
// create request
RequestPrimitive request = new RequestPrimitive();
String remoteCseName = "RemoteCse_" + UUID.randomUUID().toString();
// setup request
request.setOperation(Operation.CREATE);
request.setTo("/" + Constants.CSE_ID + "/" + Constants.CSE_NAME);
request.setFrom(Constants.ADMIN_REQUESTING_ENTITY);
request.setResourceType(ResourceType.REMOTE_CSE);
request.setRequestContentType(MimeMediaType.OBJ);
request.setReturnContentType(MimeMediaType.OBJ);
// set RemoteCse
RemoteCSE remoteCse = new RemoteCSE();
remoteCse.setCSEBase("/base/" + remoteCseName);
remoteCse.setCSEID(remoteCseName);
remoteCse.setRequestReachability(Boolean.FALSE);
remoteCse.setName(remoteCseName);
request.setContent(remoteCse);
ResponsePrimitive response = getCseService().doRequest(request);
if (response != null) {
if (ResponseStatusCode.CREATED.equals(response.getResponseStatusCode())) {
// OK
return (RemoteCSE) response.getContent();
}
}
// KO
return null;
}
protected AEAnnc createAeAnnc(String url) {
return createAeAnnc(url, null);
}
protected AEAnnc createAeAnnc(String url, List<String> dacis) {
AccessControlPolicy createdAcp = createAcp();
if (createdAcp == null) {
// something goes wrong
return null;
}
// create request
RequestPrimitive request = new RequestPrimitive();
String aeAnncCseName = "AeAnnc_" + UUID.randomUUID().toString();
// setup request
request.setOperation(Operation.CREATE);
request.setTo(url);
request.setFrom(Constants.ADMIN_REQUESTING_ENTITY);
request.setResourceType(ResourceType.AE_ANNC);
request.setRequestContentType(MimeMediaType.OBJ);
request.setReturnContentType(MimeMediaType.OBJ);
// set RemoteCse
AEAnnc aeAnnc = new AEAnnc();
aeAnnc.setName(aeAnncCseName);
aeAnnc.setAppID("AeAnncAppID_" + UUID.randomUUID());
aeAnnc.setLink("/" + aeAnnc.getAppID());
aeAnnc.getAccessControlPolicyIDs().add(createdAcp.getResourceID());
if (dacis != null) {
aeAnnc.getDynamicAuthorizationConsultationIDs().addAll(dacis);
}
request.setContent(aeAnnc);
ResponsePrimitive response = getCseService().doRequest(request);
if (response != null) {
if (ResponseStatusCode.CREATED.equals(response.getResponseStatusCode())) {
// OK
return (AEAnnc) response.getContent();
}
}
// KO
return null;
}
/**
* Create a fake AE.
*
* @return
*/
protected AE createAe() {
return createAE(null);
}
protected AccessControlPolicy createAcp() {
// create a specific acp for this entity
AccessControlPolicy acp = new AccessControlPolicy();
acp.setName("ACP" + UUID.randomUUID());
AccessControlRule acr = new AccessControlRule();
acr.getAccessControlOriginators().add(Constants.ADMIN_REQUESTING_ENTITY);
acr.setAccessControlOperations(AccessControl.ALL);
acp.setPrivileges(new SetOfAcrs());
acp.getPrivileges().getAccessControlRule().add(acr);
acp.setSelfPrivileges(new SetOfAcrs());
AccessControlRule selfAcr = new AccessControlRule();
selfAcr.setAccessControlOperations(AccessControl.ALL);
selfAcr.getAccessControlOriginators().add(Constants.ADMIN_REQUESTING_ENTITY);
acp.getSelfPrivileges().getAccessControlRule().add(selfAcr);
RequestPrimitive acpCreateRequest = new RequestPrimitive();
acpCreateRequest.setOperation(Operation.CREATE);
acpCreateRequest.setRequestContentType(MimeMediaType.OBJ);
acpCreateRequest.setReturnContentType(MimeMediaType.OBJ);
acpCreateRequest.setResourceType(ResourceType.ACCESS_CONTROL_POLICY);
acpCreateRequest.setTo("/" + Constants.CSE_ID + "/" + Constants.CSE_NAME);
acpCreateRequest.setFrom(Constants.ADMIN_REQUESTING_ENTITY);
acpCreateRequest.setContent(acp);
ResponsePrimitive acpCreateResponse = getCseService().doRequest(acpCreateRequest);
if (!ResponseStatusCode.CREATED.equals(acpCreateResponse.getResponseStatusCode())) {
// ko
return null;
}
return (AccessControlPolicy) acpCreateResponse.getContent();
}
/**
* Create a new Application entity
*
* @param dacis
* associated dynamicAuthorizationConsultation
* @return Ae or null
*/
protected AE createAE(List<String> dacis) {
AccessControlPolicy createdAcp = createAcp();
if (createdAcp == null) {
// something goes wrong
return null;
}
AE ae = new AE();
ae.setAppID("1234");
ae.setAppName("appName" + UUID.randomUUID());
ae.setName(ae.getAppName());
ae.setRequestReachability(Boolean.TRUE);
ae.getAccessControlPolicyIDs().add(createdAcp.getResourceID());
ae.getPointOfAccess().add("poa_" + UUID.randomUUID());
if (dacis != null) {
ae.getDynamicAuthorizationConsultationIDs().addAll(dacis);
}
RequestPrimitive request = new RequestPrimitive();
request.setOperation(Operation.CREATE);
request.setRequestContentType(MimeMediaType.OBJ);
request.setReturnContentType(MimeMediaType.OBJ);
request.setResourceType(ResourceType.AE);
request.setTo("/" + Constants.CSE_ID + "/" + Constants.CSE_NAME);
request.setFrom(Constants.ADMIN_REQUESTING_ENTITY);
request.setContent(ae);
// execute
ResponsePrimitive response = getCseService().doRequest(request);
if ((response != null) && (ResponseStatusCode.CREATED.equals(response.getResponseStatusCode()))) {
return (AE) response.getContent();
}
return null;
}
protected FlexContainer createFlexContainer(List<String> dacis) {
return createFlexContainer("/" + Constants.CSE_ID + "/" + Constants.CSE_NAME, dacis);
}
protected FlexContainer createFlexContainer(String resourceUrl, List<String> dacis) {
AccessControlPolicy createdAcp = createAcp();
if (createdAcp == null) {
// something goes wrong
return null;
}
FlexContainer flexContainer = new FlexContainer();
flexContainer.setName("FlexContainer_" + UUID.randomUUID());
flexContainer.setContainerDefinition("myDef");
flexContainer.getAccessControlPolicyIDs().add(createdAcp.getResourceID());
if (dacis != null) {
flexContainer.getDynamicAuthorizationConsultationIDs().addAll(dacis);
}
RequestPrimitive request = new RequestPrimitive();
request.setOperation(Operation.CREATE);
request.setRequestContentType(MimeMediaType.OBJ);
request.setReturnContentType(MimeMediaType.OBJ);
request.setResourceType(ResourceType.FLEXCONTAINER);
request.setTo(resourceUrl);
request.setFrom(Constants.ADMIN_REQUESTING_ENTITY);
request.setContent(flexContainer);
// execute
ResponsePrimitive response = getCseService().doRequest(request);
if ((response != null) && (ResponseStatusCode.CREATED.equals(response.getResponseStatusCode()))) {
return (FlexContainer) response.getContent();
}
return null;
}
protected BinarySwitchFlexContainerAnnc createFlexContainerAnnc(String resourceUrl, List<String> dacis) {
AccessControlPolicy createdAcp = createAcp();
if (createdAcp == null) {
// something goes wrong
return null;
}
BinarySwitchFlexContainerAnnc flexContainerAnnc = new BinarySwitchFlexContainerAnnc();
flexContainerAnnc.setName("FlexContainer_" + UUID.randomUUID());
flexContainerAnnc.getAccessControlPolicyIDs().add(createdAcp.getResourceID());
flexContainerAnnc.setLink("/link" + UUID.randomUUID());
if (dacis != null) {
flexContainerAnnc.getDynamicAuthorizationConsultationIDs().addAll(dacis);
}
RequestPrimitive request = new RequestPrimitive();
request.setOperation(Operation.CREATE);
request.setRequestContentType(MimeMediaType.OBJ);
request.setReturnContentType(MimeMediaType.OBJ);
request.setResourceType(ResourceType.FLEXCONTAINER_ANNC);
request.setTo(resourceUrl);
request.setFrom(Constants.ADMIN_REQUESTING_ENTITY);
request.setContent(flexContainerAnnc);
// execute
ResponsePrimitive response = getCseService().doRequest(request);
if ((response != null) && (ResponseStatusCode.CREATED.equals(response.getResponseStatusCode()))) {
return (BinarySwitchFlexContainerAnnc) response.getContent();
}
return null;
}
protected ResponsePrimitive retrieveEntity(String url) {
return retrieveEntity(url, Constants.ADMIN_REQUESTING_ENTITY);
}
protected ResponsePrimitive retrieveEntity(String url, String from) {
// create request
RequestPrimitive request = new RequestPrimitive();
// setup request
request.setOperation(Operation.RETRIEVE);
request.setTo(url);
request.setFrom(from);
request.setResourceType(ResourceType.DYNAMIC_AUTHORIZATION_CONSULTATION);
request.setReturnContentType(MimeMediaType.OBJ);
return getCseService().doRequest(request);
}
protected void deleteEntity(String url) {
RequestPrimitive request = new RequestPrimitive();
request.setOperation(Operation.DELETE);
request.setTo(url);
request.setFrom(Constants.ADMIN_REQUESTING_ENTITY);
getCseService().doRequest(request);
}
}