-
Miguel Angel Reina Ortega authored
Signed-off-by:
Miguel Angel Reina Ortega <miguelangel.reinaortega@etsi.org>
Miguel Angel Reina Ortega authoredSigned-off-by:
Miguel Angel Reina Ortega <miguelangel.reinaortega@etsi.org>
OneM2M_Functions.ttcn 19.11 KiB
/**
* Copyright Notification
* No part of this document may be reproduced, in an electronic retrieval system or otherwise, except as authorized by written permission.
* The copyright and the foregoing restriction extend to reproduction in all media.
* © 2016, oneM2M Partners Type 1 (ARIB, ATIS, CCSA, ETSI, TIA, TSDSI, TTA, TTC).
* All rights reserved.
*
* @author ETSI
* @version $URL: https://forge.etsi.org/svn/oneM2M/trunk/ttcn/OneM2M_Functions.ttcn $
* $Id: OneM2M_Functions.ttcn 99 2016-06-09 15:04:43Z reinaortega $
* @desc Module containing functions for oneM2M
*
*/
module OneM2M_Functions {
import from LibCommon_Time {modulepar all;}
import from XSD all;
import from OneM2M_Templates all;
import from OneM2M_Types all;//{type XSD.ID};
import from OneM2M_TypesAndValues all;
import from OneM2M_TestSystem all;
import from OneM2M_Pixits all;
// import from OneM2M_AdditionalTypes all;
group configFunctions {
/**
@desc
*/
function f_cf01Up() runs on M2M {
// Variables
// Map
map(self:mcaPort, system:mcaPort);
map(self:acPort, system:acPort);
activate(a_default());
// Connect
//Initialze the IUT
} // end f_cf01Up
}//end group configFunctions
group preambleFunctions {
function f_preamble_registerAe(in template (value) AccessControlOperations p_allowedOperations := int63) runs on M2M return integer{//c_CRUDNDi
var RequestPrimitive v_request;
var M2MResponsePrimitive v_response;
var integer v_aeAuxIndex := -1;
var integer v_acpAuxIndex := -1;
if(PX_ACP_SUPPORT){
v_acpAuxIndex := f_createAccessControlPolicyAux(p_allowedOperations := p_allowedOperations);
}
if(v_acpAuxIndex != -1) {
vc_resourcesIndexToBeDeleted := {v_acpAuxIndex};
v_request := valueof(m_createAeAux({f_getResourceId(vc_resourcesList[v_acpAuxIndex].resource)}));
//TODO Test, to be removed
v_request.to_ := f_addPrefix(f_getResourceAddress());
mcaPort.send(m_request(v_request));
//mcaPort.send(m_request(m_createAeAux(p_name, {PX_URI_CSE & PX_CSE_NAME & "/" & c_acpAuxName})));
} else {
mcaPort.send(m_request(m_createAeAux()));
}
tc_ac.start;
alt {
[] mcaPort.receive(mw_responseOK) -> value v_response {
tc_ac.stop;
log("Preamble: Application registered successfuly");
if(ischosen(v_response.responsePrimitive_.primitiveContent.any_1[0].AE_optional)) {
vc_aeAux := v_response.responsePrimitive_.primitiveContent.any_1[0].AE_optional;
v_aeAuxIndex := f_setResource(v_response.responsePrimitive_.primitiveContent);
vc_resourcesIndexToBeDeleted := vc_resourcesIndexToBeDeleted & {v_aeAuxIndex};
if(ispresent(vc_aeAux.aE_ID)){
f_sendAcPrimitive("AE-ID_changed", oct2char(unichar2oct(vc_aeAux.aE_ID)));
} else {
f_sendAcPrimitive("AE-ID_changed", "0");
}
}
}
[] mcaPort.receive(mw_responseKO) {
tc_ac.stop;
setverdict(inconc, "Preamble: Error while registering application");
stop;
}
[] mcaPort.receive {
tc_ac.stop;
setverdict(inconc, "Preamble: Unexpected message received");
stop;
}
[] tc_ac.timeout {
setverdict(inconc, "Preamble: No answer while registering resource");
stop;
}
}
return v_aeAuxIndex;
}
//Added by @Naum
function f_preamble_prepareCSE(in template ListOfM2MID p_allowedAEs, in template (value) AccessControlOperations p_allowedOperations := int63) runs on M2M return integer{//c_CRUDNDi
var M2MResponsePrimitive v_response;
var integer v_cseBaseAuxIndex := -1;
var integer v_acpAuxIndex := -1;
var ServiceSubscribedAppRule v_serviceSubscribedAppRule;
v_serviceSubscribedAppRule.applicableCredIDs := {"None"};
v_serviceSubscribedAppRule.allowedApp_IDs := {PX_APP_ID};
v_serviceSubscribedAppRule.allowedAEs := valueof(p_allowedAEs);
mcaPort.send(m_request(m_createCSEBase(v_serviceSubscribedAppRule)));
tc_ac.start;
alt {
[] mcaPort.receive(mw_response(int2001)) -> value v_response{
tc_ac.stop;
v_cseBaseAuxIndex := f_setResource(v_response.responsePrimitive_.primitiveContent);
vc_resourcesIndexToBeDeleted := vc_resourcesIndexToBeDeleted & {v_cseBaseAuxIndex};
}
[] mcaPort.receive(mw_responseKO) {
tc_ac.stop;
setverdict(inconc, "Preamble: Error while registering application");
stop;
}
[] mcaPort.receive {
tc_ac.stop;
setverdict(inconc, "Preamble: Unexpected message received");
stop;
}
[] tc_ac.timeout {
setverdict(inconc, "Preamble: No answer while registering resource");
stop;
}
}
return v_cseBaseAuxIndex;
}
}//end group preambleFunctions
group postambleFunctions {
function f_postamble_deleteResources() runs on M2M {
var integer i;
var XSD.ID v_resourceAddress;
var M2MResponsePrimitive v_response;
var RequestPrimitive v_request;
if (PX_RUN_POSTAMBLE) {
for(i := 0; i < lengthof(vc_resourcesIndexToBeDeleted); i := i + 1) {
v_resourceAddress := f_getResourceAddress(lengthof(vc_resourcesIndexToBeDeleted)-1 - i);
v_request := valueof(m_deleteRequest(v_resourceAddress));
if(PX_FROM_IS_AE_ID){
if(ischosen(vc_resourcesList[i].resource.any_1[0].AccessControlPolicy_optional)) {
v_request.from_ := PX_AE_ID_STEM;
} else {
v_request.from_ := vc_aeAux.aE_ID;
}
}
mcaPort.send(m_request(v_request));
tc_ac.start;
alt {
[] mcaPort.receive(mw_responseOK) {
tc_ac.stop;
log("Postamble: AE Resource deleted");
}
[] mcaPort.receive(mw_responseKO) {
tc_ac.stop;
log("Postamble: Error while deleting resource");
}
[] tc_ac.timeout {
log("Postamble: No answer while deleting resource");
}
}
}
}
f_postamble_default();
}
function f_postamble_default() runs on M2M {
unmap(self:mcaPort, system:mcaPort);
unmap(self:acPort, system:acPort);
//stop;
}
}//end group postambleFunctions
group altstepFunctions {
/**
* @desc Default altstep
*/
altstep a_default() runs on M2M {
[] mcaPort.receive {
log("a_default: WARNING: Unexpected message received");
repeat;
}
[] tc_wait.timeout {
setverdict(inconc,"a_default: ERROR: Timeout while awaiting reaction of the IUT prior to Upper Tester action");
}
[] tc_ac.timeout {
setverdict(inconc,"a_default: ERROR: Timeout while awaiting the reception of a message");
}
}
}//end group altstepFunctions
group getSetFunctions {
function f_getCreateRequestPrimitive(in ResourceType p_resourceType, in template (omit) AccessControlOperations p_allowedOperations, template RequestPrimitive p_request, integer p_parentIndex) runs on M2M return RequestPrimitive {
p_request.from_ := f_getOriginator(p_parentIndex);
p_request.to_ := f_addPrefix(f_getResourceAddress(p_parentIndex));
//p_request.name := p_name;
if (p_resourceType == int1) {//AccessControlPolicy
}
if (p_resourceType == int9) {//group
p_request.primitiveContent.any_1[0].Group_optional.memberIDs := {f_getResourceAddress(p_parentIndex)};
}
if (p_resourceType == int15) {//pollingChannel
p_request.from_ := vc_aeAux.aE_ID;
}
if (p_resourceType == int23) {//subscription
p_request.primitiveContent.any_1[0].Subscription_optional.notificationURI := {f_getResourceAddress(p_parentIndex)};
/*if(PX_FROM_IS_AE_ID) {
if(PX_UNSTRUCTURED){
p_request.primitiveContent.any_1[0].Subscription_optional.notificationURI := {vc_aeAux.aE_ID};
} else {
p_request.primitiveContent.any_1[0].Subscription_optional.notificationURI := {PX_CSE_ID & "/" & vc_aeAux.aE_ID};
}
} else {
p_request.primitiveContent.any_1[0].Subscription_optional.notificationURI := {"/" & PX_CSE_NAME & "/" & c_aeAuxName};
}*/
}
return valueof(p_request);
}
function f_getUpdateRequestPrimitive(in ResourceType p_resourceType, integer p_resourceIndex, template RequestPrimitive p_request) runs on M2M return RequestPrimitive {
p_request.from_ := f_getOriginator(p_resourceIndex);
p_request.to_ := f_addPrefix(f_getResourceAddress(p_resourceIndex));
//p_request.name := p_name;
if (p_resourceType == int3) {//Container
//TODO
}
if (p_resourceType == int9) {//group
//TODO
}
if (p_resourceType == int18) {//schedule
//TODO
}
if (p_resourceType == int15) {//pollingChannel
//TODO
}
if (p_resourceType == int23) {//subscription
//TODO
}
return valueof(p_request);
}
function f_getResourceId(PrimitiveContent p_contentResource) return XSD.ID {
if(ischosen(p_contentResource.any_1[0].AccessControlPolicy_optional)) {
return p_contentResource.any_1[0].AccessControlPolicy_optional.resourceID;
}
if(ischosen(p_contentResource.any_1[0].Container_optional)) {
return p_contentResource.any_1[0].Container_optional.resourceID;
}
if(ischosen(p_contentResource.any_1[0].Schedule_optional)) {
return p_contentResource.any_1[0].Schedule_optional.resourceID;
}
if(ischosen(p_contentResource.any_1[0].PollingChannel_optional)) {
return p_contentResource.any_1[0].PollingChannel_optional.resourceID;
}
if(ischosen(p_contentResource.any_1[0].Subscription_optional)) {
return p_contentResource.any_1[0].Subscription_optional.resourceID;
}
if(ischosen(p_contentResource.any_1[0].Group_optional)) {
return p_contentResource.any_1[0].Group_optional.resourceID;
}
if(ischosen(p_contentResource.any_1[0].AE_optional)) {
return p_contentResource.any_1[0].AE_optional.resourceID;
}
return "1";
}
function f_getResourceName(PrimitiveContent p_contentResource) return XSD.ID {
if(ischosen(p_contentResource.any_1[0].AccessControlPolicy_optional)) {
return p_contentResource.any_1[0].AccessControlPolicy_optional.resourceName;
}
if(ischosen(p_contentResource.any_1[0].Container_optional)) {
return p_contentResource.any_1[0].Container_optional.resourceName;
}
if(ischosen(p_contentResource.any_1[0].Schedule_optional)) {
return p_contentResource.any_1[0].Schedule_optional.resourceName;
}
if(ischosen(p_contentResource.any_1[0].PollingChannel_optional)) {
return p_contentResource.any_1[0].PollingChannel_optional.resourceName;
}
if(ischosen(p_contentResource.any_1[0].Subscription_optional)) {
return p_contentResource.any_1[0].Subscription_optional.resourceName;
}
if(ischosen(p_contentResource.any_1[0].Group_optional)) {
return p_contentResource.any_1[0].Group_optional.resourceName;
}
if(ischosen(p_contentResource.any_1[0].AE_optional)) {
return p_contentResource.any_1[0].AE_optional.resourceName;
}
return "1";
}
function f_getOriginator(integer p_targetResourceIndex := -1) runs on M2M return XSD.AnyURI {
if(p_targetResourceIndex == -1) {
return PX_AE_ID_STEM;
}
if(PX_FROM_IS_AE_ID) {
if(ischosen(vc_resourcesList[p_targetResourceIndex].resource.any_1[0].AE_optional)) {
return vc_resourcesList[p_targetResourceIndex].resource.any_1[0].AE_optional.aE_ID;
} else {
return f_getOriginator(vc_resourcesList[p_targetResourceIndex].parentIndex);
}
} else {
return PX_AE_ID_STEM;
}
}
function f_getAttribute(in AttributeList p_attributeList, in XSD.NCName p_attributeName) return integer {
var integer i;
var Attribute v_attribute := {-, -};
for (i:=0; i < lengthof(p_attributeList); i := i + 1){
if(p_attributeList[i] == p_attributeName){
return i;
}
}
return -1;
}
function f_getResourceAddress(integer p_targetResourceIndex := -1) runs on M2M return XSD.ID {
var XSD.ID v_resourceAddress;
if(PX_ADDRESSING_FORMAT == e_cseRelative) {
if(PX_UNSTRUCTURED) {
if(p_targetResourceIndex == -1) {
return "";
} else {
return f_getResourceId(vc_resourcesList[p_targetResourceIndex].resource);
}
} else {
if(p_targetResourceIndex == -1) {
return PX_CSE_NAME;
} else {
v_resourceAddress := f_getResourceAddress(vc_resourcesList[p_targetResourceIndex].parentIndex) & "/" & f_getResourceName(vc_resourcesList[p_targetResourceIndex].resource);
return v_resourceAddress;
}
}
} else if (PX_ADDRESSING_FORMAT == e_spRelative) {
if(PX_UNSTRUCTURED) {
if(p_targetResourceIndex == -1) {
return "/" & PX_CSE_ID;
} else {
v_resourceAddress := f_getResourceAddress() & "/" & f_getResourceId(vc_resourcesList[p_targetResourceIndex].resource);
return v_resourceAddress;
}
} else {
if(p_targetResourceIndex == -1) {
return "/" & PX_CSE_ID & "/" & PX_CSE_NAME;
} else {
v_resourceAddress := f_getResourceAddress(vc_resourcesList[p_targetResourceIndex].parentIndex) & "/" & f_getResourceName(vc_resourcesList[p_targetResourceIndex].resource);
return v_resourceAddress;
}
}
} else if (PX_ADDRESSING_FORMAT == e_absolute) {
if(PX_UNSTRUCTURED) {
if(p_targetResourceIndex == -1) {
return "";
} else {
return "";
}
} else {
if(p_targetResourceIndex == -1) {
return "";
} else {
return "";
}
}
} else {
return "";
}
}
function f_setResource(PrimitiveContent p_resource, integer p_parentIndex := -1) runs on M2M return integer {
if(isbound(vc_resourcesList)) {
vc_resourcesList[lengthof(vc_resourcesList)] := {p_parentIndex, p_resource};
} else {
vc_resourcesList[0] := {p_parentIndex, p_resource};
}
return lengthof(vc_resourcesList)-1;
}
}//end group getSetFunctions
group helpingFunctions {
function f_createResource(in ResourceType p_resourceType, template RequestPrimitive p_requestPrimitive, integer p_parentIndex := -1) runs on M2M return integer {
var M2MResponsePrimitive v_response;
var RequestPrimitive v_request;
var XSD.ID v_resourceId;
var integer v_resourceIndex := -1;
v_request := f_getCreateRequestPrimitive(p_resourceType, omit, p_requestPrimitive, p_parentIndex);
mcaPort.send(m_request(v_request));
tc_ac.start;
alt {
[] mcaPort.receive(mw_responseOK) -> value v_response {
tc_ac.stop;
setverdict(pass, "f_createResource: Resource type " & int2str(enum2int(p_resourceType)) & " created successfuly");
v_resourceIndex := f_setResource(v_response.responsePrimitive_.primitiveContent, p_parentIndex);
}
[] mcaPort.receive(mw_responseKO) {
tc_ac.stop;
setverdict(inconc, "f_createResource: Error while creating resource type " & int2str(enum2int(p_resourceType)));
}
[] mcaPort.receive {
tc_ac.stop;
setverdict(inconc, "f_createResource: Unexpected message received");
}
[] tc_ac.timeout {
setverdict(inconc, "f_createResource: No answer while creating resource type " & int2str(enum2int(p_resourceType)));
}
}
return v_resourceIndex;
}
function f_createAccessControlPolicyAux(in template (value) XSD.String p_acpName := "MyAcp", in template (value) AccessControlOperations p_allowedOperations := int63) runs on M2M return integer{
var RequestPrimitive v_request;
var M2MResponsePrimitive v_response;
var integer v_acpAuxIndex := -1;
v_request := valueof(m_createAcpAux(p_acpName := p_acpName, p_allowedOperations := p_allowedOperations));
v_request.to_ := f_addPrefix(f_getResourceAddress());
mcaPort.send(m_request(v_request));
tc_ac.start;
alt {
[] mcaPort.receive(mw_responseOK) -> value v_response {
tc_ac.stop;
setverdict(pass, "f_createAccessControlPolicy: Resource type " & int2str(1) & " created successfuly");
v_acpAuxIndex := f_setResource(v_response.responsePrimitive_.primitiveContent);
vc_acpAux := v_response.responsePrimitive_.primitiveContent.any_1[0].AccessControlPolicy_optional;//TODO To be removed
}
[] mcaPort.receive(mw_responseKO) {
tc_ac.stop;
setverdict(inconc, "f_createAccessControlPolicy: Error while creating resource type " & int2str(1));
}
[] mcaPort.receive {
tc_ac.stop;
setverdict(inconc, "f_createAccessControlPolicy: Unexpected message received");
}
[] tc_ac.timeout {
setverdict(inconc, "f_createAccessControlPolicy: No answer while creating resource type " & int2str(1));
}
}
return v_acpAuxIndex;
}
function f_createContainerResourceAux (XSD.ID p_parentResourceAddress, integer p_parentIndex := -1) runs on M2M return integer {
var M2MResponsePrimitive v_response;
var RequestPrimitive v_request;
var integer v_acpAuxIndex := -1;
var integer v_containerResourceIndex := -1;
v_acpAuxIndex := f_createAccessControlPolicyAux(p_acpName := "MyAcp_2");
v_request := valueof(m_createContainerBase);
v_request.primitiveContent.any_1[0].Container_optional.accessControlPolicyIDs := {f_getResourceId(vc_resourcesList[v_acpAuxIndex].resource)};
v_request.primitiveContent.any_1[0].Container_optional.resourceName := "MyContainerAux";
v_containerResourceIndex := f_createResource(int3, v_request, p_parentIndex);
return v_containerResourceIndex;
}
function f_updateAcpAuxResource (XSD.ID p_acpAddress, in template (value) AccessControlOperations p_allowedOperations) runs on M2M {
var RequestPrimitive v_request;
v_request := valueof(m_updateAcpBase);
v_request.to_ := f_addPrefix(p_acpAddress);
v_request.primitiveContent.any_1[0].AccessControlPolicy_optional.privileges.accessControlRule_list := {
{
accessControlOriginators := PX_ACOR, //{"admin:admin"}
accessControlOperations := valueof(p_allowedOperations),
accessControlContexts_list := omit
}
};
mcaPort.send(m_request(v_request));
tc_ac.start;
alt {
[] mcaPort.receive(mw_responseOK) {
tc_ac.stop;
setverdict(pass, "f_updateAcpAuxResource: " & p_acpAddress & " resource updated successfuly");
}
[] mcaPort.receive(mw_responseKO) {
tc_ac.stop;
setverdict(fail, "f_updateAcpAuxResource: Error while updating " & p_acpAddress & " resource");
}
[] tc_ac.timeout {
setverdict(inconc, "f_updateAcpAuxResource: No answer while updating " & p_acpAddress & " resource" );
}
}
}
function f_sendAcPrimitive(in charstring event, in charstring data) runs on M2M {
var charstring v_data := "" & data; // clear encoding rules (ttwb issue ?)
acPort.send(AcRequestPrimitive:{event, {charstring := v_data}});
}
}//end group helpingFunctions
} // end of module