-
Miguel Angel Reina Ortega authored
correct compiling errors generated by Eclipse Titan v6.1.0 See merge request !10
Miguel Angel Reina Ortega authoredcorrect compiling errors generated by Eclipse Titan v6.1.0 See merge request !10
OneM2M_Functions.ttcn 65.07 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/LibOneM2M/OneM2M_Functions.ttcn $
* $Id: OneM2M_Functions.ttcn 229 2017-03-16 08:00:30Z 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_Pics all;
// import from OneM2M_AdditionalTypes all;
group ConfigFunctions {
/**
@desc Ports mapping and default behaviour activation for Config 1
*/
function f_cf01Up() runs on CseTester {
// Variables
vc_config := e_cf01;
// Map
map(self:mcaPort, system:mcaPort);
map(self:acPort, system:acPort);
activate(a_default());
activate(a_cse_cf01());
// Connect
//Initialze the IUT
} // end f_cf01Up
function f_cf02Up() runs on CseTester {
// Variables
vc_config := e_cf02;
// Map
map(self:mcaPort, system:mcaPort);
map(self:mccPort, system:mccPort);
map(self:acPort, system:acPort);
activate(a_default());
activate(a_cse_cf02());
// Connect
//Initialze the IUT
} // end f_cf02Up
/**
* @desc Ports mapping and default behaviour activation for Config 03
*/
function f_cf03Up() runs on AeTester {
// Variables
vc_config := e_cf03;
// Map
map(self:mcaPort, system:mcaPort);
map(self:acPort, system:acPort);
activate(a_default());
activate(a_ae_cf03());
// Connect
//Initialze the IUT
} // end f_cf03Up
/**
* @desc Ports unmapping
* @verdict
*/
function f_cfCseTesterDown() runs on CseTester {
if(vc_config == e_cf01) {
f_cf01Down()
} else if (vc_config == e_cf02){
f_cf02Down()
}
}
/**
* @desc Ports unmapping
* @verdict
*/
function f_cfAeTesterDown() runs on AeTester {
if(vc_config == e_cf03) {
f_cf03Down()
}
}
/**
* @desc Ports unmapping
* @verdict
*/
function f_cf01Down() runs on CseTester {
unmap(self:mcaPort, system:mcaPort);
unmap(self:acPort, system:acPort);
stop;
}
/**
* @desc Ports unmapping
* @verdict
*/
function f_cf02Down() runs on CseTester {
unmap(self:mcaPort, system:mcaPort);
unmap(self:mccPort, system:mccPort);
unmap(self:acPort, system:acPort);
stop;
}
/**
* @desc Ports unmapping for Config 03
*/
function f_cf03Down() runs on AeTester {
unmap(self:mcaPort, system:mcaPort);
unmap(self:acPort, system:acPort);
stop;
}
}//end group configFunctions
group CseFunctions {
group PreambleFunctions {
/**
* @desc Creation of auxiliar resources ACP for correct execution of the test case
* @param p_allowedOperations Allowed operations for the auxiliar AE resource
* @return Internal ACP resource index
* @verdict
*/
function f_cse_preamble_createAcpAux(in template (value) XSD.String p_acpName := c_acpAuxName, in template (value) AccessControlOperations p_allowedOperations := int63) runs on CseTester return integer {//c_CRUDNDi
return f_cse_createAccessControlPolicyAux(p_acpName, p_allowedOperations);
}
/**
* @desc Creation of auxiliar resources ACP and AE for correct execution of the test case
* @param p_allowedOperations Allowed operations for the auxiliar AE resource
* @return Internal AE resource index
* @verdict
*/
function f_cse_preamble_registerAe(template (omit) AcpType p_accessControlPolicyIDs := omit, in template (omit) PoaList p_poaList := omit) runs on CseTester return integer {//c_CRUDNDi
var RequestPrimitive v_request;
var MsgIn v_response;
var integer v_aeAuxIndex := -1;
v_request := valueof(m_createAeAux(p_accessControlPolicyIDs, p_poaList));
v_request.to_ := f_getResourceAddress();
mcaPort.send(m_request(v_request));
tc_ac.start;
alt {
[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response {
tc_ac.stop;
log(__SCOPE__&":INFO: Application registered successfuly");
if(ischosen(v_response.primitive.responsePrimitive.primitiveContent.any_1[0].AE_optional)) {
vc_aeAux := v_response.primitive.responsePrimitive.primitiveContent.any_1[0].AE_optional;
f_checkAttributesToBeSaved(int2, v_request, v_response.primitive.responsePrimitive);
v_aeAuxIndex := f_setResource(v_response.primitive.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_response(mw_responsePrimitiveKO)) {
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;
}
}
f_checkCseTesterStatus();
return v_aeAuxIndex;
}
/**
* @desc Creation of auxiliar resources ACP and AE for correct execution of the test case
* @param p_allowedOperations Allowed operations for the auxiliar AE resource
* @return Internal AE resource index
* @verdict
*/
function f_cse_preamble_registerAeWithId(XSD.ID p_appId, in template (value) AccessControlOperations p_allowedOperations := int63) runs on CseTester return integer {//c_CRUDNDi
var RequestPrimitive v_request;
var MsgIn v_response;
var integer v_aeAuxIndex := -1;
var integer v_acpAuxIndex := -1;
if(PICS_ACP_SUPPORT){
v_acpAuxIndex := f_cse_createAccessControlPolicyAux(p_allowedOperations := p_allowedOperations);
vc_acpAuxIndex := v_acpAuxIndex;
}
if(v_acpAuxIndex != -1) {
vc_resourcesIndexToBeDeleted := {v_acpAuxIndex};
v_request := valueof(m_createAe(p_appId, {f_getResourceId(vc_resourcesList[v_acpAuxIndex].resource)}, -));
//TODO Test, to be removed
v_request.to_ := f_getResourceAddress();
mcaPort.send(m_request(v_request));
//mcaPort.send(m_request(m_createAeAux(p_name, {PX_URI_CSE & PX_CSE_NAME & "/" & PX_ACPAUX_NAME})));
} else {
mcaPort.send(m_request(m_createAe(p_appId)));
}
tc_ac.start;
alt {
[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response {
tc_ac.stop;
log(__SCOPE__&": INFO: Application registered successfuly");
if(ischosen(v_response.primitive.responsePrimitive.primitiveContent.any_1[0].AE_optional)) {
vc_aeAux := v_response.primitive.responsePrimitive.primitiveContent.any_1[0].AE_optional;
v_aeAuxIndex := f_setResource(v_response.primitive.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_response(mw_responsePrimitiveKO))
{
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;
}
}
f_checkCseTesterStatus();
return v_aeAuxIndex;
}
//Added by @Naum
function f_cse_preamble_createServiceSubscribedAppRule(in template ListOfM2MID p_allowedAEs := {""}) runs on CseTester return integer {//c_CRUDNDi
var integer v_serviceSubscribedAppRuleIndex := -1;
v_serviceSubscribedAppRuleIndex := f_cse_createResource(int19, m_createServiceSubscribedAppRule({"None"}, {PX_APP_ID}, valueof(p_allowedAEs)));
return v_serviceSubscribedAppRuleIndex;
}
function f_cse_preamble_subscriptionVerification(out CseTester p_notifyHandler,in integer p_aeIndex, inout integer p_ae2Index, inout template RequestPrimitive p_createRequestPrimitive,in ResourceType p_resourceType ) runs on CseTester {
if(p_resourceType == int23){
p_notifyHandler := CseTester.create("NotifyHandler") alive;
p_ae2Index := f_cse_createResource(int2, m_createAe(PX_APP_ID, -, PX_AE_ID_STEM, "MyAe2", {"http://" & PX_TESTER_ADDRESS & "/"}), -1); // AE2 is registred
if(ischosen(p_createRequestPrimitive.primitiveContent.any_1[0].Subscription_optional)){ //this condition is necessary for Subscription TCs where notification URI is set in m_createSubscriptionAdvanced
p_createRequestPrimitive.primitiveContent.any_1[0].Subscription_optional.notificationURI := {f_getResourceAddress(p_ae2Index)};
}
p_notifyHandler.start(f_subscriptionVerificationHandler(f_getResourceAddress(p_aeIndex)));
}
}
}//end group preambleFunctions
group PostambleFunctions {
/**
* @desc Deletion of all resources created during the test case execution. IUT gets clean and ready for next execution
* @verdict
*/
function f_cse_postamble_deleteResources() runs on CseTester {
var integer i;
var XSD.ID v_resourceAddress;
var RequestPrimitive v_request;
if (PX_RUN_POSTAMBLE) {
for(i := lengthof(vc_resourcesIndexToBeDeleted) -1; i >=0; i := i - 1) {
v_resourceAddress := f_getResourceAddress(vc_resourcesIndexToBeDeleted[i]);
v_request := valueof(m_deleteRequest(v_resourceAddress));
//Not needed any longer: PX_SUPER_USER should be able to do all operations
// if(PX_FROM_IS_AE_ID){
// if(ischosen(vc_resourcesList[vc_resourcesIndexToBeDeleted[i]].resource.any_1[0].AE_optional)) {
// v_request.from_ := vc_resourcesList[vc_resourcesIndexToBeDeleted[i]].resource.any_1[0].AE_optional.aE_ID;
// }
// }
f_cse_deleteResource(v_request);
}
}
f_cse_postamble_default();
}
/**
* @desc Default postamble
* @verdict
*/
function f_cse_postamble_default() runs on CseTester {
}
function f_is_component_done(in CseTester p_notifyHandler) runs on CseTester {
tc_ac.start(10.0);
alt {
[] p_notifyHandler.done {
tc_ac.stop;
}
[] tc_ac.timeout {
setverdict(inconc, testcasename() & ": Notify verification not received");
}
}
} //end f_is_component_done
}//end group postambleFunctions
group HelpingFunctions {
/**
* @desc Creation of a resource
* @param p_resourceType Resource type of the resource to be created
* @param p_requestPrimitive Template request primitive
* @param p_parentIndex Internal resource index which indicates the parent of the resource to be created
* @return Internal resource index of the created resource
* @verdict
*/
function f_cse_createResource(in ResourceType p_resourceType, template RequestPrimitive p_requestPrimitive := m_create, integer p_parentIndex := -1) runs on CseTester return integer {
var MsgIn v_response;
var RequestPrimitive v_request;
var integer v_resourceIndex := -1;
v_request := f_getCreateRequestPrimitive(p_resourceType, p_requestPrimitive, p_parentIndex);
mcaPort.send(m_request(v_request));
tc_ac.start;
alt {
[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response {
tc_ac.stop;
setverdict(pass, "f_createResource: Resource type " & int2str(enum2int(p_resourceType)) & " created successfuly");
f_checkAttributesToBeSaved(p_resourceType, v_request, v_response.primitive.responsePrimitive);
v_resourceIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent, p_parentIndex);
if(match(int2, p_resourceType) or match(-1, p_parentIndex)) {//If created resource is an AE or created under CSEBase, it needs to be added to the resourceToBeDeleted list
vc_resourcesIndexToBeDeleted := vc_resourcesIndexToBeDeleted & {v_resourceIndex};
}
}
[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
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)));
}
}
f_checkCseTesterStatus();
return v_resourceIndex;
}
/**
* @desc Creation of the auxiliar ACP resource
* @param p_acpName ACP name
* @param p_allowedOperations Allowed operations
* @return Internal resource index of the created auxiliar ACP resource
* @verdict
*/
function f_cse_createAccessControlPolicyAux(in template (value) XSD.String p_acpName := c_acpAuxName, in template (value) AccessControlOperations p_allowedOperations := int63) runs on CseTester return integer{
var RequestPrimitive v_request;
var MsgIn v_response;
var integer v_acpAuxIndex := -1;
v_request := valueof(m_createAcpAux(p_acpName := p_acpName, p_allowedOperations := p_allowedOperations));
v_request.to_ := f_getResourceAddress();
mcaPort.send(m_request(v_request));
tc_ac.start;
alt {
[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response {
tc_ac.stop;
setverdict(pass, "f_createAccessControlPolicy: Resource type " & int2str(1) & " created successfuly");
f_checkAttributesToBeSaved(int1, v_request, v_response.primitive.responsePrimitive);
v_acpAuxIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent);
vc_acpAuxIndex := v_acpAuxIndex;
vc_resourcesIndexToBeDeleted := vc_resourcesIndexToBeDeleted & {v_acpAuxIndex};
}
[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
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));
}
}
f_checkCseTesterStatus();
return v_acpAuxIndex;
}
/**
* @desc Creation of the auxiliar Container resource
* @param p_parentIndex Internal resource index which indicates the parent of the Container resource to be created
* @return Internal resource index of the created Container resource
* @verdict
*/
function f_cse_createContainerResourceAux (integer p_parentIndex := -1) runs on CseTester return integer {
var RequestPrimitive v_request;
var integer v_acpAuxIndex := -1;
var integer v_containerResourceIndex := -1;
v_acpAuxIndex := f_cse_createAccessControlPolicyAux(p_acpName := c_acpAuxName);//"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_cse_createResource(int3, v_request, p_parentIndex);
return v_containerResourceIndex;
}
/**
* @desc
* @param p_requestPrimitive
* @verdict
*/
function f_cse_updateResource(in RequestPrimitive p_requestPrimitive) runs on CseTester {
var MsgIn v_response;
mcaPort.send(m_request(p_requestPrimitive));
tc_ac.start;
alt {
[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response {
tc_ac.stop;
setverdict(pass, testcasename() & ": Attribute of resource updated successfuly");
}
[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response {
tc_ac.stop;
setverdict(fail, testcasename() & ": Error while updating resource");
}
[] mcaPort.receive{
tc_ac.stop;
setverdict(fail, testcasename() & ": Error, unexpected message received");
}
[] tc_ac.timeout {
setverdict(inconc, testcasename() & ": No answer while updating resource");
}
}
f_checkCseTesterStatus();
}// end f_cse_updateResource
/**
* @desc
* @param p_requestPrimitive
* @verdict
*/
function f_cse_deleteResource(in RequestPrimitive p_requestPrimitive) runs on CseTester {
var MsgIn v_response;
mcaPort.send(m_request(p_requestPrimitive));
tc_ac.start;
alt {
[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) {
tc_ac.stop;
log(__SCOPE__&"INFO: Resource" & p_requestPrimitive.to_ & " deleted");
}
[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
tc_ac.stop;
log(__SCOPE__&"INFO: Error while deleting resource " & p_requestPrimitive.to_);
}
[] tc_ac.timeout {
log(__SCOPE__&"INFO: No answer while deleting resource " & p_requestPrimitive.to_);
}
}
}// end f_cse_deleteResource
/**
* @desc Update of the auxiliar ACP resource
* @param p_allowedOperations New allowed operations
* @verdict
*/
function f_cse_updateAcpAuxResource (in template (value) AccessControlOperations p_allowedOperations) runs on CseTester {
var RequestPrimitive v_request;
v_request := valueof(m_updateAcpBase);
v_request.to_ := f_getResourceAddress(vc_acpAuxIndex);
v_request.from_ := f_getOriginator(vc_acpAuxIndex);
v_request.primitiveContent.any_1[0].AccessControlPolicy_optional.privileges.accessControlRule_list := {
{
accessControlOriginators := PX_ACOR, //{"admin:admin"}
accessControlOperations := valueof(p_allowedOperations),
accessControlContexts_list := {},
accessControlAuthenticationFlag := omit,
accessControlObjectDetails_list := {}
}
};
mcaPort.send(m_request(v_request));
tc_ac.start;
alt {
[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) {
tc_ac.stop;
setverdict(pass, "f_updateAcpAuxResource: " & v_request.to_ & " resource updated successfuly");
}
[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
tc_ac.stop;
setverdict(fail, "f_updateAcpAuxResource: Error while updating " & v_request.to_ & " resource");
}
[] tc_ac.timeout {
setverdict(inconc, "f_updateAcpAuxResource: No answer while updating " & v_request.to_ & " resource" );
}
}
f_checkCseTesterStatus();
}
function f_subscriptionVerificationHandler(in XSD.ID p_creator, in ResponseStatusCode p_responseStatusCode := int2001) runs on CseTester {
// Local variables
var MsgIn v_response;
var ResponsePrimitive v_responsePrimitive;
var template Notification v_notificationRequest := mw_contentNotificationBase;
var PrimitiveContent v_notificationResponse; // TODO Need to see if this parameter is required however there is a problem if it s omitted during the verification
map(self:mcaPort, system:mcaPort);
map(self:acPort, system:acPort);
v_notificationResponse.any_1 := {{Notification := valueof(m_contentNotification_allOmit)}};
v_notificationRequest.verificationRequest := true;
//v_notificationRequest.creator := p_creator; TODO To check what address format is to be expected
//Some participants use SP relative UNSTRUCTURED
//v_notificationRequest.subscriptionReference := "I Don't know which URI is expected"; // TODO mandatory parameter
v_responsePrimitive := valueof(m_responseNotification(p_responseStatusCode,v_notificationResponse));//TODO No PrimitiveContent is expected
if(p_responseStatusCode != int2001){
v_responsePrimitive.primitiveContent := omit;
}
tc_ac.start;
alt {
[] mcaPort.receive(mw_request(mw_notify(v_notificationRequest))) -> value v_response {
tc_ac.stop;
setverdict(pass, testcasename() & ": Notification received");
mcaPort.send(m_response(v_responsePrimitive));
}
[] mcaPort.receive(mw_request(mw_notify(mw_contentNotification(?)))) -> value v_response {
tc_ac.stop;
setverdict(fail, testcasename() & ": Notification received but verificationRequest isn't set to TRUE");
}
[] mcaPort.receive{
tc_ac.stop;
setverdict(fail, testcasename() & ": Error, unexpected message received");
}
[] tc_ac.timeout {
setverdict(inconc, testcasename() & ": No notification received");
}
}
//mcaPort.send(m_response(v_responsePrimitive)); // TODO have to be deleted
unmap(self:mcaPort, system:mcaPort);
unmap(self:acPort, system:acPort);
} //end f_subscriptionVerificationHandler
function f_checkAttributesToBeSaved (ResourceType p_resourceType, RequestPrimitive p_request, inout ResponsePrimitive p_response) {
select (p_resourceType) {
case (int1) {
if(isvalue(p_response.primitiveContent.any_1[0].AccessControlPolicy_optional) and
not(ispresent(p_response.primitiveContent.any_1[0].AccessControlPolicy_optional.resourceName))) {
p_response.primitiveContent.any_1[0].AccessControlPolicy_optional.resourceName := p_request.primitiveContent.any_1[0].AccessControlPolicy_optional.resourceName;
}
}
case (int2) {
if(isvalue(p_response.primitiveContent.any_1[0].AE_optional) and
not(ispresent(p_response.primitiveContent.any_1[0].AE_optional.resourceName))) {
p_response.primitiveContent.any_1[0].AE_optional.resourceName := p_request.primitiveContent.any_1[0].AE_optional.resourceName;
}
}
case (int3) {
if(isvalue(p_response.primitiveContent.any_1[0].Container_optional) and
not(ispresent(p_response.primitiveContent.any_1[0].Container_optional.resourceName))) {
p_response.primitiveContent.any_1[0].Container_optional.resourceName := p_request.primitiveContent.any_1[0].Container_optional.resourceName;
}
}
case (int15) {
if (isvalue(p_response.primitiveContent.any_1[0].PollingChannel_optional) and
not(ispresent(p_response.primitiveContent.any_1[0].PollingChannel_optional.resourceName))) {
p_response.primitiveContent.any_1[0].PollingChannel_optional.resourceName := p_request.primitiveContent.any_1[0].PollingChannel_optional.resourceName;
}
}
case (int18) {
if (isvalue(p_response.primitiveContent.any_1[0].Schedule_optional) and
not(ispresent(p_response.primitiveContent.any_1[0].Schedule_optional.resourceName))) {
p_response.primitiveContent.any_1[0].Schedule_optional.resourceName := p_request.primitiveContent.any_1[0].Schedule_optional.resourceName;
}
}
case (int23) {
if (isvalue(p_response.primitiveContent.any_1[0].Subscription_optional) and
not(ispresent(p_response.primitiveContent.any_1[0].Subscription_optional.resourceName))) {
p_response.primitiveContent.any_1[0].Subscription_optional.resourceName := p_request.primitiveContent.any_1[0].Subscription_optional.resourceName;
}
}
case (int9) {
if (isvalue(p_response.primitiveContent.any_1[0].Group_optional) and
not(ispresent(p_response.primitiveContent.any_1[0].Group_optional.resourceName))) {
p_response.primitiveContent.any_1[0].Group_optional.resourceName := p_request.primitiveContent.any_1[0].Group_optional.resourceName;
}
}
case else {
log(__SCOPE__&":WARNING: Resource Type "&int2str(enum2int(p_resourceType))&" not implemented");
if (not PX_DISABLE_STOP_ON_ERROR) {
testcase.stop;
}
}
}
// TODO test that if the resource name is returned is the same resource name as used in the create message
}
function f_check_notificationContent(in RequestPrimitive p_requestPrimitive, template PrimitiveContent p_primitiveContent) runs on CseTester return boolean{
// Local variables
var boolean v_matchResult := false;
var integer i;
var integer v_numberOfAggregatedNotification;
if (ischosen(p_primitiveContent.any_1[0].AE_optional)){
if(ischosen(p_requestPrimitive.primitiveContent.any_1[0].Notification.notificationEvent.representation.resource)) {
v_matchResult := match(p_requestPrimitive.primitiveContent.any_1[0].Notification.notificationEvent.representation.resource.AE_optional, p_primitiveContent.any_1[0].AE_optional)
}
else if(ischosen(p_requestPrimitive.primitiveContent.any_1[0].Notification.notificationEvent.representation.responsePrimitive)) {
v_matchResult :=match(p_requestPrimitive.primitiveContent.any_1[0].Notification.notificationEvent.representation.responsePrimitive.primitiveContent.any_1[0].AE_optional, p_primitiveContent.any_1[0].AE_optional)
}
else if (ischosen(p_requestPrimitive.primitiveContent.any_1[0].AggregatedNotification)) {
v_matchResult := true;
v_numberOfAggregatedNotification := lengthof(p_requestPrimitive.primitiveContent.any_1[0].AggregatedNotification.notification_list);
for(i := 0; i< v_numberOfAggregatedNotification; i := i + 1){
if(ischosen(p_requestPrimitive.primitiveContent.any_1[0].AggregatedNotification.notification_list[i].notificationEvent.representation.resource)) {
if(not (match(p_requestPrimitive.primitiveContent.any_1[0].AggregatedNotification.notification_list[i].notificationEvent.representation.resource.AE_optional, p_primitiveContent.any_1[0].AE_optional))){
v_matchResult := false;
}
}
else if(ischosen(p_requestPrimitive.primitiveContent.any_1[0].AggregatedNotification.notification_list[i].notificationEvent.representation.responsePrimitive)) {
if(not (match(p_requestPrimitive.primitiveContent.any_1[0].AggregatedNotification.notification_list[i].notificationEvent.representation.responsePrimitive.primitiveContent.any_1[0].AE_optional, p_primitiveContent.any_1[0].AE_optional))){
v_matchResult := false;
}
}
}
if (i == 0){
v_matchResult := false;
}
}
}
if (ischosen(p_primitiveContent.any_1[0].Container_optional)){
if(ischosen(p_requestPrimitive.primitiveContent.any_1[0].Notification.notificationEvent.representation.resource)) {
v_matchResult := match(p_requestPrimitive.primitiveContent.any_1[0].Notification.notificationEvent.representation.resource.Container_optional, p_primitiveContent.any_1[0].Container_optional)
}
else if(ischosen(p_requestPrimitive.primitiveContent.any_1[0].Notification.notificationEvent.representation.responsePrimitive)) {
v_matchResult := match(p_requestPrimitive.primitiveContent.any_1[0].Notification.notificationEvent.representation.responsePrimitive.primitiveContent.any_1[0].Container_optional, p_primitiveContent.any_1[0].Container_optional)
}
}
return v_matchResult;
} //end f_check_notificationContent
function f_cse_notifyProcedure(template PrimitiveContent p_primitiveContent) runs on CseTester {
// Local variables
var MsgIn v_response;
map(self:mcaPort, system:mcaPort);
map(self:acPort, system:acPort);
tc_ac.start;
alt {
[] mcaPort.receive(mw_request(mw_notify(mw_contentNotification(?)))) -> value v_response {
tc_ac.stop;
if(f_check_notificationContent(v_response.primitive.requestPrimitive, p_primitiveContent)){
setverdict(pass, testcasename() & ": Notification received");
mcaPort.send(m_response(valueof(m_responseNotification(int2001))));
}
else{
setverdict(fail, testcasename() & ": Notification received but the content doesn't match");
}
}
[] mcaPort.receive{
tc_ac.stop;
setverdict(fail, testcasename() & ": Error, unexpected message received");
}
[] tc_ac.timeout {
setverdict(inconc, testcasename() & ": No notification received");
}
}
unmap(self:mcaPort, system:mcaPort);
unmap(self:acPort, system:acPort);
} //end f_cse_notifyProcedure
}//end group helpingFunctions
group CseAltstepFunctions {
/**
* @desc Cse altstep for config 01
*/
altstep a_cse_cf01() runs on CseTester {
[] mcaPort.receive {
log(__SCOPE__&": WARNING: Unexpected message received");
repeat;
}
}
/**
* @desc Cse altstep for config 02
*/
altstep a_cse_cf02() runs on CseTester {
[] mcaPort.receive {
log(__SCOPE__&": WARNING: Unexpected message received");
repeat;
}
[] mccPort.receive {
log(__SCOPE__&": WARNING: Unexpected message received");
repeat;
}
}
}//end group altstepFunctions
}//end cseFunctions
group AeFunctions {
group preambleFunctions {
/**
* @desc Waits for AE registration request and process it
* @return Internal resource index of AE or -1 in case of failure
* @verdict inconc if no AE registration request is received
*/
function f_ae_preamble_registerAe() runs on AeTester return integer {
var MsgIn v_request;
var Contents[-] v_modifiedResource;
var integer v_resourceIndex, v_parentIndex;
var RequestPrimitive v_rp;
tc_ac.start;
alt {
[] mcaPort.receive(mw_request(mw_createAe)) -> value v_request {
tc_ac.stop;
v_rp := v_request.primitive.requestPrimitive;
v_parentIndex := f_getResourceIndex(v_rp.to_);
v_resourceIndex := f_ae_createResource(v_rp.primitiveContent, v_parentIndex, v_rp.resourceType, v_modifiedResource);
if(v_resourceIndex != -1) {
mcaPort.send(m_response(m_responsePrimitive_content(int2001, v_rp.requestIdentifier, {any_1 := {v_modifiedResource}})));
log("Preamble: Application registered successfuly");
}
else {
mcaPort.send(m_response(m_responsePrimitive(int5000, v_request.primitive.requestPrimitive.requestIdentifier)));
setverdict(inconc, testcasename() & ": AE registration failed");
}
}
[] tc_ac.timeout {
setverdict(inconc, testcasename() & ": AE registration request not received");
stop;
}
}
f_checkAeTesterStatus();
return v_resourceIndex;
}
} // end preambleFunctions
group helpingFunctions {
/**
* @desc Creates specified resource
* @param p_resource Resource to be created
* @param p_parentIndex Parent index of resource to be saved
* @param p_resourceType Type of the resource to be created
* @param p_modifiedResource Assigned and/or modified fields
* @return Internal resource index of the saved resource or -1
*/
function f_ae_createResource(in PrimitiveContent p_resource, in integer p_parentIndex, in ResourceType p_resourceType, out Contents[-] p_modifiedResource) runs on AeTester return integer {
var integer v_resourceIndex;
// AE TODO To review the code (use of indexes, generation of value for certain attributes, etc..)
if(p_resourceType == int2 and ispresent(p_resource)) {
if(ischosen(p_resource.any_1[0].AE_optional)){
var AE_optional v_ae := p_resource.any_1[0].AE_optional;
var AE_optional v_aeModified;
v_resourceIndex := lengthof(vc_resourcesList) - 1;
v_ae.resourceType := p_resourceType;
v_ae.parentID := int2str(p_parentIndex);
v_ae.creationTime := fx_generateTimestamp();
v_ae.lastModifiedTime := v_ae.creationTime;
v_ae.resourceID := "ae" & int2char(v_resourceIndex);
v_ae.aE_ID := "ae" & int2char(v_resourceIndex);
v_ae.resourceName := "ae" & int2char(v_resourceIndex);
v_aeModified.parentID := v_ae.parentID;
v_aeModified.creationTime := v_ae.creationTime;
v_aeModified.lastModifiedTime := v_ae.lastModifiedTime;
v_aeModified.resourceID := v_ae.resourceID;
v_aeModified.aE_ID := v_ae.aE_ID;
v_aeModified.resourceName := v_ae.resourceName;
p_resource.any_1[0].AE_optional := v_ae;
p_modifiedResource.AE_optional := v_aeModified;
return f_setResource(p_resource, p_parentIndex);
}
}
// TODO: implement other resource types
// Error
return -1;
}
} // end helpingFunctions
group altstepFunctions {
/**
* @desc Ae altstep
*/
altstep a_ae_default() runs on AeTester {
var MsgIn v_request;
[] mcaPort.receive(mw_request(?)) -> value v_request {
log("a_default: WARNING: Unexpected request received");
mcaPort.send(m_response(m_responsePrimitive(int5000, v_request.primitive.requestPrimitive.requestIdentifier)));
repeat;
}
[] mcaPort.receive {
log("a_ae_default: WARNING: Unexpected message received");
repeat;
}
}
/**
* @desc Waits for CREATE request, stores resource and replies to request
* @remark This altstep includes a_ae_default
* @see a_ae_default
*/
altstep a_ae_cf03() runs on AeTester {
var MsgIn v_request;
var Contents[-] v_modifiedResource;
var integer v_resourceIndex, v_parentIndex;
var RequestPrimitive v_rp;
[] mcaPort.receive(mw_request(mw_create)) -> value v_request {
v_rp := v_request.primitive.requestPrimitive;
v_parentIndex := f_getResourceIndex(v_rp.to_);
v_resourceIndex := f_ae_createResource(v_rp.primitiveContent, v_parentIndex, v_rp.resourceType, v_modifiedResource);
if(v_resourceIndex != -1) {
mcaPort.send(m_response(m_responsePrimitive_content(int2001, v_rp.requestIdentifier, {any_1 := {v_modifiedResource}})));
}
else {
mcaPort.send(m_response(m_responsePrimitive(int5000, v_request.primitive.requestPrimitive.requestIdentifier)));
}
repeat;
}
[] a_ae_default();
}
}//end group altstepFunctions
}//end of aeFunctions
group GetSetFunctions {
/**
* @desc Creation of a CREATE request primitive from a template request primitive
* @param p_resourceType Type of resource to be created
* @param p_request Template request primitive
* @param p_parentIndex Internal resource index which indicates the parent of the resource to be created
* @return Created CREATE request primitive
* @verdict
*/
function f_getCreateRequestPrimitive(in ResourceType p_resourceType, template RequestPrimitive p_request := m_create, integer p_parentIndex) runs on CseTester return RequestPrimitive {
var template ListOfURIs v_defaultListOfURIs := {"NotInitialized"};
var template AcpType v_defaultAcpIDs := {"NotInitialized"};
if(p_resourceType != int2) {
p_request.from_ := f_getOriginator(p_parentIndex);
}
p_request.to_ := f_getResourceAddress(p_parentIndex);
if (p_resourceType == int1) {//AccessControlPolicy
}
if (p_resourceType == int9) {//group
if(match(valueof(p_request.primitiveContent.any_1[0].Group_optional.memberIDs), v_defaultListOfURIs )){
p_request.primitiveContent.any_1[0].Group_optional.memberIDs := {f_getResourceAddress(p_parentIndex)};
}
}
if(p_resourceType == int3){//container
//when a container is created by hosting cse for storing location information, the container is seen as a location container
if(PX_IS_LOC_CONTAINER){
p_request.primitiveContent.any_1[0].Container_optional.locationID := f_getResourceId(vc_resourcesList[p_parentIndex].resource);//resourceID of the locationPolicy
}
if(match(valueof(p_request.primitiveContent.any_1[0].Container_optional.accessControlPolicyIDs), v_defaultAcpIDs )){
p_request.primitiveContent.any_1[0].Container_optional.accessControlPolicyIDs := {f_getResourceId(vc_resourcesList[vc_acpAuxIndex].resource)};
}
}
if (p_resourceType == int15) {//pollingChannel
if(ischosen(vc_resourcesList[p_parentIndex].resource.any_1[0].AE_optional)) {
p_request.from_ := vc_resourcesList[p_parentIndex].resource.any_1[0].AE_optional.aE_ID;
}
}
if (p_resourceType == int18) {//schedule
}
if (p_resourceType == int23) {//subscription
if(match(valueof(p_request.primitiveContent.any_1[0].Subscription_optional.notificationURI), v_defaultListOfURIs )){
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 & "/" & PX_AEAUX_NAME};//c_aeAuxName
}*/
}
return valueof(p_request);
}
/**
* @desc Creation of an UPDATE request primitive from a template request primitive
* @param p_resourceType Type of resource to be created
* @param p_resourceIndex Internal resource index which indicates the resource to be updated
* @param p_request Template request primitive
* @return Created UPDATE request primitive
* @verdict
*/
function f_getUpdateRequestPrimitive(in ResourceType p_resourceType, integer p_resourceIndex, template RequestPrimitive p_request) runs on CseTester return RequestPrimitive {
p_request.from_ := f_getOriginator(p_resourceIndex);
p_request.to_ := f_getResourceAddress(p_resourceIndex);
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);
}
/**
* @desc Extraction from a primitiveContent field the resourceID attribute
* @param p_contentResource primitiveContent field
* @return resourceID attribute
* @verdict
*/
function f_getResourceId(PrimitiveContent p_contentResource) return XSD.ID {
if(ischosen(p_contentResource.any_1[0].AccessControlPolicy_optional)) {
return f_resourceIdCleaner(p_contentResource.any_1[0].AccessControlPolicy_optional.resourceID);
}
if(ischosen(p_contentResource.any_1[0].Container_optional)) {
return f_resourceIdCleaner(p_contentResource.any_1[0].Container_optional.resourceID);
}
if(ischosen(p_contentResource.any_1[0].Schedule_optional)) {
return f_resourceIdCleaner(p_contentResource.any_1[0].Schedule_optional.resourceID);
}
if(ischosen(p_contentResource.any_1[0].PollingChannel_optional)) {
return f_resourceIdCleaner(p_contentResource.any_1[0].PollingChannel_optional.resourceID);
}
if(ischosen(p_contentResource.any_1[0].Subscription_optional)) {
return f_resourceIdCleaner(p_contentResource.any_1[0].Subscription_optional.resourceID);
}
if(ischosen(p_contentResource.any_1[0].Group_optional)) {
return f_resourceIdCleaner(p_contentResource.any_1[0].Group_optional.resourceID);
}
if(ischosen(p_contentResource.any_1[0].AE_optional)) {
return f_resourceIdCleaner(p_contentResource.any_1[0].AE_optional.resourceID);
}
if(ischosen(p_contentResource.any_1[0].ServiceSubscribedAppRule_optional)) {
return f_resourceIdCleaner(p_contentResource.any_1[0].ServiceSubscribedAppRule_optional.resourceID);
}
log(""&__SCOPE__&":WARNING: Primitive Content Kind not implemented");
if (PX_DISABLE_STOP_ON_ERROR) {
return "1";
} else {
testcase.stop;
return "1";
}
}
/**
* @desc Extraction from a primitiveContent field the resourceName attribute
* @param p_contentResource primitiveContent field
* @return resourceName attribute
* @verdict
*/
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;
}
if(ischosen(p_contentResource.any_1[0].ServiceSubscribedAppRule_optional)) {
return p_contentResource.any_1[0].ServiceSubscribedAppRule_optional.resourceName;
}
log(__SCOPE__&":WARNING: Primitive Content Kind not implemented");
if (PX_DISABLE_STOP_ON_ERROR) {
return "1";
} else {
testcase.stop;
return "1";
}
}
/**
* @desc Resolution of the originator field (from) for a given resource
* @param p_targetResourceIndex Internal resource index of the given resource
* @return Originator for a given resource
* @verdict
*/
function f_getOriginator(integer p_targetResourceIndex := -1) runs on CseTester return XSD.AnyURI {
if(p_targetResourceIndex == -1) {
return PX_SUPER_USER;
}
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_SUPER_USER;
}
}
/**
* @desc Return of a index of a specific attribute from an attributeList by attributeName
* @param p_attributeList Target attributeList
* @param p_attributeName attributeName to be searched
* @return Index of the attribute in the attributeList
* @verdict
*/
function f_getAttribute(in AttributeList p_attributeList, in XSD.NCName p_attributeName) return integer {
var integer i;
for (i:=0; i < lengthof(p_attributeList); i := i + 1){
if(p_attributeList[i] == p_attributeName){
return i;
}
}
return -1;
}
/**
* @desc Resolution of the resource index for a given resource address (URI)
* @param p_address Resource URI (can be structured/unstructured cseRelative/spRelative/absolute)
* @return Internal resource index of the given resource or -1 in case of error
*/
function f_getResourceIndex(in XSD.AnyURI p_address) return integer {
return -1; //TODO
}
/**
* @desc Resolution of the resource address field (to) for a given resource depending on addressing and hierarchical format
* @param p_targetResourceIndex Internal resource index of the given resource
* @return Resource address for the given resource
* @verdict
*/
function f_getResourceAddress(integer p_targetResourceIndex := -1) runs on Tester return XSD.ID {
var XSD.ID v_resourceAddress;
if(PX_ADDRESSING_FORMAT == e_cseRelative) {
if(PX_UNSTRUCTURED) {
if(p_targetResourceIndex == -1) {
return PX_CSE_RESOURCE_ID;
} 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 "//" &"SpId" & "/" & PX_CSE_ID;
} else {
v_resourceAddress := f_getResourceAddress() & "/" & f_getResourceId(vc_resourcesList[p_targetResourceIndex].resource);
return v_resourceAddress;
}
} else {
if(p_targetResourceIndex == -1) {
return "//" &"SpId" & "/" & 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 {
return "";
}
}
/**
* @desc Saving of a resource and its parent index in the internal resource list
* @param p_resource Resource to be saved
* @param p_parentIndex Parent index of resource to be saved
* @return Internal resource index of the saved resource
* @verdict
*/
function f_setResource(PrimitiveContent p_resource, integer p_parentIndex := -1) runs on Tester 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;
}
/**
* @desc Set Acpid into the requestPrimitive
* @param p_requestPrimitive RequestPrimitive to be modified
* @param p_accessControlPolicyIDs AcpId to be set
* @return
* @verdict
*/
function f_setAcpId(template RequestPrimitive p_requestPrimitive, template AcpType p_accessControlPolicyIDs) runs on CseTester return RequestPrimitive{
if (ischosen(p_requestPrimitive.primitiveContent.any_1[0].AE_optional)){
p_requestPrimitive.primitiveContent.any_1[0].AE_optional.accessControlPolicyIDs := p_accessControlPolicyIDs;
}
else if (ischosen(p_requestPrimitive.primitiveContent.any_1[0].Container_optional)){
p_requestPrimitive.primitiveContent.any_1[0].Container_optional.accessControlPolicyIDs := p_accessControlPolicyIDs;
}
else if (ischosen(p_requestPrimitive.primitiveContent.any_1[0].Group_optional)){
p_requestPrimitive.primitiveContent.any_1[0].Group_optional.accessControlPolicyIDs := p_accessControlPolicyIDs;
}
else if (ischosen(p_requestPrimitive.primitiveContent.any_1[0].ServiceSubscribedAppRule_optional)){
p_requestPrimitive.primitiveContent.any_1[0].ServiceSubscribedAppRule_optional.accessControlPolicyIDs := p_accessControlPolicyIDs;
}
else if (ischosen(p_requestPrimitive.primitiveContent.any_1[0].Subscription_optional)){
p_requestPrimitive.primitiveContent.any_1[0].Subscription_optional.accessControlPolicyIDs := p_accessControlPolicyIDs;
}
else if (ischosen(p_requestPrimitive.primitiveContent.any_1[0].LocationPolicy_optional)){
p_requestPrimitive.primitiveContent.any_1[0].LocationPolicy_optional.accessControlPolicyIDs := p_accessControlPolicyIDs;
}
return valueof(p_requestPrimitive);
}
/**
* @desc Retrieve AE_ID for a given AE resource
* @param p_targetResourceIndex Internal resource index of the given resource
* @return AE_ID of the given resource
*/
function f_getAeId(integer p_targetResourceIndex := -1) runs on AeTester return XSD.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;
}
log("f_getAeId: WARNING: p_targetResourceIndex does not refer to AE resource");
return "";
} // end f_getAeId
}//end group getSetFunctions
group CommonFunctions {
/**
* @desc Sending of an Adapter Control primitive
* @param event Action to be performed by TA
* @param data Corresponding information for the correct execution of the given action
* @verdict
*/
function f_checkCseTesterStatus() runs on CseTester {
if (getverdict != pass) {
f_cse_postamble_deleteResources();
// Tear down
f_cfCseTesterDown();
}
}
/**
* @desc Sending of an Adapter Control primitive
* @param event Action to be performed by TA
* @param data Corresponding information for the correct execution of the given action
* @verdict
*/
function f_checkAeTesterStatus() runs on AeTester {
if (getverdict != pass) {
//f_ae_postamble_deleteResources();
// Tear down
f_cfAeTesterDown();
}
}
/**
* @desc Sending of an Adapter Control primitive
* @param event Action to be performed by TA
* @param data Corresponding information for the correct execution of the given action
* @verdict
*/
function f_sendAcPrimitive(in charstring p_event, in charstring p_data) runs on Tester {
var charstring v_data := "" & p_data; // clear encoding rules (ttwb issue ?)
acPort.send(AcRequestPrimitive:{p_event, {charstring := v_data}});
}
group AltstepFunctions {
/**
* @desc Default altstep
*/
altstep a_default() runs on Tester {
[] 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
function f_resourceIdCleaner(in XSD.ID p_resourceID) return XSD.ID {
var integer v_length := lengthof(p_resourceID);
var integer i;
var XSD.ID result := "";
for (i := v_length - 1; i>=0; i := i-1){
if(p_resourceID[i]=="/"){
return result;
}
else{
result := p_resourceID[i] & result;
}
}
return result;
}
function f_removeElementFromList (inout IntegerList p_list, in integer index) {
var IntegerList result := {};
var integer i;
for(i := 0; i < lengthof(p_list); i := i+1){
if(i != index){
result := result & {p_list[i]};
}
}
p_list := result;
}
function f_getTemplateFromPrimitiveContent (in template PrimitiveContent p_primitiveContent) return template PrimitiveContent{
var template PrimitiveContent v_primitiveContent := omit;
if(ischosen(p_primitiveContent.any_1[0].Container_optional)){ // Container
v_primitiveContent.any_1 := {{Container_optional := mw_contentContainerBase}};
if(ispresent(p_primitiveContent.any_1[0].Container_optional.labels)){
v_primitiveContent.any_1[0].Container_optional.labels := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Container_optional.accessControlPolicyIDs)){
v_primitiveContent.any_1[0].Container_optional.accessControlPolicyIDs := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Container_optional.dynamicAuthorizationConsultationIDs)){
v_primitiveContent.any_1[0].Container_optional.dynamicAuthorizationConsultationIDs := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Container_optional.announceTo)){
v_primitiveContent.any_1[0].Container_optional.announceTo := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Container_optional.announcedAttribute)){
v_primitiveContent.any_1[0].Container_optional.announcedAttribute := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Container_optional.creator)){
v_primitiveContent.any_1[0].Container_optional.creator := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Container_optional.maxNrOfInstances)){
v_primitiveContent.any_1[0].Container_optional.maxNrOfInstances := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Container_optional.maxByteSize)){
v_primitiveContent.any_1[0].Container_optional.maxByteSize := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Container_optional.maxInstanceAge)){
v_primitiveContent.any_1[0].Container_optional.maxInstanceAge := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Container_optional.locationID)){
v_primitiveContent.any_1[0].Container_optional.locationID := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Container_optional.ontologyRef)){
v_primitiveContent.any_1[0].Container_optional.ontologyRef := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Container_optional.disableRetrieval)){
v_primitiveContent.any_1[0].Container_optional.disableRetrieval := ?;
}
}
else if(ischosen(p_primitiveContent.any_1[0].AE_optional)){ // AE
v_primitiveContent.any_1 := {{AE_optional := mw_contentAeBase}};
if(ispresent(p_primitiveContent.any_1[0].AE_optional.labels)){
v_primitiveContent.any_1[0].AE_optional.labels := ?;
}
if(ispresent(p_primitiveContent.any_1[0].AE_optional.accessControlPolicyIDs)){
v_primitiveContent.any_1[0].AE_optional.accessControlPolicyIDs := ?;
}
if(ispresent(p_primitiveContent.any_1[0].AE_optional.dynamicAuthorizationConsultationIDs)){
v_primitiveContent.any_1[0].AE_optional.dynamicAuthorizationConsultationIDs := ?;
}
if(ispresent(p_primitiveContent.any_1[0].AE_optional.announceTo)){
v_primitiveContent.any_1[0].AE_optional.announceTo := ?;
}
if(ispresent(p_primitiveContent.any_1[0].AE_optional.announcedAttribute)){
v_primitiveContent.any_1[0].AE_optional.announcedAttribute := ?;
}
if(ispresent(p_primitiveContent.any_1[0].AE_optional.appName)){
v_primitiveContent.any_1[0].AE_optional.appName := ?;
}
if(ispresent(p_primitiveContent.any_1[0].AE_optional.pointOfAccess)){
v_primitiveContent.any_1[0].AE_optional.pointOfAccess := ?;
}
if(ispresent(p_primitiveContent.any_1[0].AE_optional.ontologyRef)){
v_primitiveContent.any_1[0].AE_optional.ontologyRef := ?;
}
if(ispresent(p_primitiveContent.any_1[0].AE_optional.nodeLink)){
v_primitiveContent.any_1[0].AE_optional.nodeLink := ?;
}
if(ispresent(p_primitiveContent.any_1[0].AE_optional.contentSerialization)){
v_primitiveContent.any_1[0].AE_optional.contentSerialization := ?;
}
if(ispresent(p_primitiveContent.any_1[0].AE_optional.e2eSecInfo)){
v_primitiveContent.any_1[0].AE_optional.e2eSecInfo := ?;
}
}
else if(ischosen(p_primitiveContent.any_1[0].AccessControlPolicy_optional)){ // ACP
v_primitiveContent.any_1 := {{AccessControlPolicy_optional := mw_contentAcpBase}};
if(ispresent(p_primitiveContent.any_1[0].AccessControlPolicy_optional.labels)){
v_primitiveContent.any_1[0].AccessControlPolicy_optional.labels := ?;
}
if(ispresent(p_primitiveContent.any_1[0].AccessControlPolicy_optional.announceTo)){
v_primitiveContent.any_1[0].AccessControlPolicy_optional.announceTo := ?;
}
}
else if(ischosen(p_primitiveContent.any_1[0].ContentInstance_optional)){ // ContentInstance
v_primitiveContent.any_1 := {{ContentInstance_optional := mw_contentContentInstanceBase}};
if(ispresent(p_primitiveContent.any_1[0].ContentInstance_optional.labels)){
v_primitiveContent.any_1[0].ContentInstance_optional.labels := ?;
}
if(ispresent(p_primitiveContent.any_1[0].ContentInstance_optional.announceTo)){
v_primitiveContent.any_1[0].ContentInstance_optional.announceTo := ?;
}
if(ispresent(p_primitiveContent.any_1[0].ContentInstance_optional.announcedAttribute)){
v_primitiveContent.any_1[0].ContentInstance_optional.announcedAttribute := ?;
}
if(ispresent(p_primitiveContent.any_1[0].ContentInstance_optional.creator)){
v_primitiveContent.any_1[0].ContentInstance_optional.creator := ?;
}
if(ispresent(p_primitiveContent.any_1[0].ContentInstance_optional.contentInfo)){
v_primitiveContent.any_1[0].ContentInstance_optional.contentInfo := ?;
}
if(ispresent(p_primitiveContent.any_1[0].ContentInstance_optional.contentRef)){
v_primitiveContent.any_1[0].ContentInstance_optional.contentRef := ?;
}
if(ispresent(p_primitiveContent.any_1[0].ContentInstance_optional.ontologyRef)){
v_primitiveContent.any_1[0].ContentInstance_optional.ontologyRef := ?;
}
}
else if(ischosen(p_primitiveContent.any_1[0].Group_optional)){ // Group
v_primitiveContent.any_1 := {{Group_optional := mw_contentGroupBase}};
if(ispresent(p_primitiveContent.any_1[0].Group_optional.labels)){
v_primitiveContent.any_1[0].Group_optional.labels := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Group_optional.accessControlPolicyIDs)){
v_primitiveContent.any_1[0].Group_optional.accessControlPolicyIDs := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Group_optional.dynamicAuthorizationConsultationIDs)){
v_primitiveContent.any_1[0].Group_optional.dynamicAuthorizationConsultationIDs := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Group_optional.announceTo)){
v_primitiveContent.any_1[0].Group_optional.announceTo := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Group_optional.announcedAttribute)){
v_primitiveContent.any_1[0].Group_optional.announcedAttribute := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Group_optional.creator)){
v_primitiveContent.any_1[0].Group_optional.creator := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Group_optional.membersAccessControlPolicyIDs)){
v_primitiveContent.any_1[0].Group_optional.membersAccessControlPolicyIDs := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Group_optional.memberTypeValidated)){
v_primitiveContent.any_1[0].Group_optional.memberTypeValidated := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Group_optional.consistencyStrategy)){
v_primitiveContent.any_1[0].Group_optional.consistencyStrategy := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Group_optional.groupName)){
v_primitiveContent.any_1[0].Group_optional.groupName := ?;
}
}
else if(ischosen(p_primitiveContent.any_1[0].PollingChannel_optional)){ // PollingChannel
v_primitiveContent.any_1 := {{PollingChannel_optional := mw_contentPollingChannelBase}};
if(ispresent(p_primitiveContent.any_1[0].PollingChannel_optional.labels)){
v_primitiveContent.any_1[0].PollingChannel_optional.labels := ?;
}
}
else if(ischosen(p_primitiveContent.any_1[0].Schedule_optional)){ // Schedule
v_primitiveContent.any_1 := {{Schedule_optional := mw_contentScheduleBase}};
if(ispresent(p_primitiveContent.any_1[0].Schedule_optional.labels)){
v_primitiveContent.any_1[0].Schedule_optional.labels := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Schedule_optional.announceTo)){
v_primitiveContent.any_1[0].Schedule_optional.announceTo := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Schedule_optional.announcedAttribute)){
v_primitiveContent.any_1[0].Schedule_optional.announcedAttribute := ?;
}
}
else if(ischosen(p_primitiveContent.any_1[0].Subscription_optional)){ // Schedule
v_primitiveContent.any_1 := {{Subscription_optional := mw_contentSubscriptionBase}};
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.labels)){
v_primitiveContent.any_1[0].Subscription_optional.labels := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.accessControlPolicyIDs)){
v_primitiveContent.any_1[0].Subscription_optional.accessControlPolicyIDs := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.dynamicAuthorizationConsultationIDs)){
v_primitiveContent.any_1[0].Subscription_optional.dynamicAuthorizationConsultationIDs := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.creator)){
v_primitiveContent.any_1[0].Subscription_optional.creator := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.eventNotificationCriteria)){
v_primitiveContent.any_1[0].Subscription_optional.eventNotificationCriteria := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.expirationCounter)){
v_primitiveContent.any_1[0].Subscription_optional.expirationCounter := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.groupID)){
v_primitiveContent.any_1[0].Subscription_optional.groupID := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.notificationForwardingURI)){
v_primitiveContent.any_1[0].Subscription_optional.notificationForwardingURI := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.batchNotify)){
v_primitiveContent.any_1[0].Subscription_optional.batchNotify := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.rateLimit)){
v_primitiveContent.any_1[0].Subscription_optional.rateLimit := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.preSubscriptionNotify)){
v_primitiveContent.any_1[0].Subscription_optional.preSubscriptionNotify := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.pendingNotification)){
v_primitiveContent.any_1[0].Subscription_optional.pendingNotification := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.notificationStoragePriority)){
v_primitiveContent.any_1[0].Subscription_optional.notificationStoragePriority := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.latestNotify)){
v_primitiveContent.any_1[0].Subscription_optional.latestNotify := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.notificationContentType)){
v_primitiveContent.any_1[0].Subscription_optional.notificationContentType := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.notificationEventCat)){
v_primitiveContent.any_1[0].Subscription_optional.notificationEventCat := ?;
}
if(ispresent(p_primitiveContent.any_1[0].Subscription_optional.subscriberURI)){
v_primitiveContent.any_1[0].Subscription_optional.subscriberURI := ?;
}
}
log("Etape0");
return v_primitiveContent;
}
function f_match2PrimitiveContent (in PrimitiveContent p_responsePrimitiveContent, in template PrimitiveContent p_requestPrimitiveContent) runs on CseTester {
var template PrimitiveContent v_primitiveContent;
var PrimitiveContent v_response;
v_response := p_responsePrimitiveContent;
v_primitiveContent := f_getTemplateFromPrimitiveContent(p_requestPrimitiveContent);
log("Etape1");
if(not(match(v_response, v_primitiveContent))){
setverdict(inconc, "Preamble: Error resource incomplete, some attribute missing ");
}
}
}//end of commonFunctions
group externalFunctions {
/**
* @desc Generates a oneM2M timestamp based on current time.
* Format shall be YYYYMMDDTHHMMSS
*/
external function fx_generateTimestamp() return charstring;
} // end externalFunctions
} // end of module