diff --git a/OneM2M_Functions.ttcn b/OneM2M_Functions.ttcn index 34b4f7e1f6ec346ef0c6bb0b98995d70e0653440..e811bddc0cbe59ce74e305b98c3e8b3960ababbd 100644 --- a/OneM2M_Functions.ttcn +++ b/OneM2M_Functions.ttcn @@ -106,6 +106,50 @@ module OneM2M_Functions { return v_aeAuxIndex; } + + //Added by @Naum + function f_preamble_prepareCSE(in template (value) AccessControlOperations p_allowedOperations := int63, in template ListOfM2MID p_allowedAEs) runs on M2M return integer{//c_CRUDNDi + + 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) { + //TODO:Discuss this case + } else { + var ServiceSubscribedAppRule v_serviceSubscribedAppRule; + v_serviceSubscribedAppRule.applicableCredIDs := {"None"}; + v_serviceSubscribedAppRule.allowedApp_IDs := {"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)){ + tc_ac.stop; + } + [] 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; + + } }//end group preambleFunctions diff --git a/OneM2M_Templates.ttcn b/OneM2M_Templates.ttcn index 824f586e50b55abd571e8e32f98396a841319172..a1aa37444d87a7e59a2659fb1af43ee8fe5b1aed 100644 --- a/OneM2M_Templates.ttcn +++ b/OneM2M_Templates.ttcn @@ -40,7 +40,15 @@ module OneM2M_Templates { protocolBinding := PX_PROTOCOL_BINDING, serialization := PX_SERIALIZATION, nullFields := p_nullFields - + }; + //Added by @Naum + template M2MRequestPrimitive m_requestReceive(in template RequestPrimitive p_requestPrimitive, in template (omit) AttributeList_1 p_nullFields := omit ) := { + requestPrimitive_ := p_requestPrimitive, + host := *, //how to define address of mcc? + xmlNamespace := PX_XML_NAMESPACE, + protocolBinding := PX_PROTOCOL_BINDING, + serialization := PX_SERIALIZATION, + nullFields := p_nullFields }; group RequestPrimitives { @@ -372,6 +380,57 @@ module OneM2M_Templates { }, discoveryResultType := omit };*/ + + //Added by @Naum + template RequestPrimitive m_createAEanncReceive(template (omit) AcpType p_accessControlPolicyIDs := omit,template (omit) XSD.ID p_from := omit, XSD.ID p_appId) := { + operation := int1, + to_ := "Not Initialized", + from_ := p_from,//PX_AE_ID_STEM,//TODO We should use omit, "s", or "c" + requestIdentifier := "m_createAEannc" & f_rnd(1, 1000000), + resourceType := int10002, + primitiveContent := { + any_1 := {{AEAnnc_optional := m_contentCreateAEannc(c_aeAuxName, p_accessControlPolicyIDs, p_appId)}} + }, + role := *, + originatingTimestamp := *, + requestExpirationTimestamp := *, + resultExpirationTimestamp := *, + operationExecutionTime := *, + responseType := *, + resultPersistence := *, + resultContent := *, + eventCategory := *, + deliveryAggregation := *, + groupRequestIdentifier := *, + filterCriteria := *, + discoveryResultType := * + }; + + //Added by @Naum + template (value) RequestPrimitive m_createAe(template (omit) AcpType p_accessControlPolicyIDs := omit,template (omit) XSD.ID p_from := omit, XSD.ID p_appId) := { + operation := int1, + to_ := "Not Initialized", + from_ := p_from,//PX_AE_ID_STEM,//TODO We should use omit, "s", or "c" + requestIdentifier := "m_createAe" & f_rnd(1, 1000000), + resourceType := int2, + primitiveContent := { + any_1 := {{AE_optional := m_contentCreateAe(c_aeAuxName, p_accessControlPolicyIDs, p_appId)}} + }, + role := omit, + originatingTimestamp := omit, + requestExpirationTimestamp := omit, + resultExpirationTimestamp := omit, + operationExecutionTime := omit, + responseType := omit, + resultPersistence := omit, + resultContent := omit, + eventCategory := omit, + deliveryAggregation := omit, + groupRequestIdentifier := omit, + filterCriteria := omit, + discoveryResultType := omit + + }; template (value) RequestPrimitive m_createAeAux(template (omit) AcpType p_accessControlPolicyIDs := omit ) := { operation := int1, @@ -473,6 +532,32 @@ module OneM2M_Templates { }; + //Added by @Naum + template (value) RequestPrimitive m_createCSEBase (in ServiceSubscribedAppRule p_serviceSubscribedAppRule) := { + operation := int1, + to_ := "NotInitialized", + from_ := PX_AE_ID_STEM, + requestIdentifier := "m_createCSE" & f_rnd(1, 1000000), + resourceType := int1, + primitiveContent := { + any_1 := {{CSEBase_optional := m_contentCreateCSEBase (p_serviceSubscribedAppRule)}} + }, + role := omit, + originatingTimestamp := omit, + requestExpirationTimestamp := omit, + resultExpirationTimestamp := omit, + operationExecutionTime := omit, + responseType := omit, + resultPersistence := omit, + resultContent := omit, + eventCategory := omit, + deliveryAggregation := omit, + groupRequestIdentifier := omit, + filterCriteria := omit, + discoveryResultType := omit + + }; + template (value) RequestPrimitive m_createContainerBase := { operation := int1, to_ := "NotInitialized", @@ -804,8 +889,30 @@ module OneM2M_Templates { }//end group RequestPrimitives group ContentCreate { + + template (value) AEAnnc_optional m_contentCreateAEannc (in template (omit) XSD.String p_name, in template (omit) AcpType p_accessControlPolicyIDs, XSD.ID p_appId := PX_APP_ID) := { + resourceName := p_name,//O + resourceType := omit,//NP + resourceID := omit,//NP + parentID := omit,//NP + creationTime := omit,//NP + lastModifiedTime := omit,//NP + labels := omit,//O + accessControlPolicyIDs := p_accessControlPolicyIDs,//O + expirationTime := omit,//O + link := omit,//O + appName := omit,//O + app_ID := p_appId,//M + aE_ID := omit,//NP + pointOfAccess := {"http://127.0.0.1:1400/monitor"},//O //{"http://192.168.1.92:18080/notifications/AE"}, // TODO: Check this => AE PoA + ontologyRef := omit,//O + nodeLink := omit,//NP + requestReachability := true,//M + contentSerialization := omit,//O + choice := omit//NP + }; - template (value) AE_optional m_contentCreateAe (in template (omit) XSD.String p_name, in template (omit) AcpType p_accessControlPolicyIDs) := { + template (value) AE_optional m_contentCreateAe (in template (omit) XSD.String p_name, in template (omit) AcpType p_accessControlPolicyIDs, XSD.ID p_appId := PX_APP_ID) := { resourceName := p_name,//O resourceType := omit,//NP resourceID := omit,//NP @@ -818,7 +925,7 @@ module OneM2M_Templates { announceTo := omit,//O announcedAttribute := omit,//O appName := omit,//O - app_ID := PX_APP_ID,//M + app_ID := p_appId,//M aE_ID := omit,//NP pointOfAccess := {"http://127.0.0.1:1400/monitor"},//O //{"http://192.168.1.92:18080/notifications/AE"}, // TODO: Check this => AE PoA ontologyRef := omit,//O @@ -859,6 +966,29 @@ module OneM2M_Templates { },//M choice := omit //NP }; + + //added by @Naum + template (value) CSEBase_optional m_contentCreateCSEBase (in ServiceSubscribedAppRule p_serviceSubscribedAppRule) := { + resourceName := omit, + resourceType := omit, + resourceID := omit, + parentID := omit, + creationTime := omit, + lastModifiedTime := omit, + labels := omit, + accessControlPolicyIDs := omit, + cseType := omit, + cSE_ID := omit, + supportedResourceType := omit, + pointOfAccess := omit, + nodeLink := omit, + + choice := { + choice_list := {{ + serviceSubscribedAppRule := p_serviceSubscribedAppRule + }} + } + } template (value) Group_optional m_contentCreateGroup ( in template (value) XSD.NonNegativeInteger p_maxNrOfMembers, in template (value) ListOfURIs p_memberIds, @@ -1802,6 +1932,19 @@ module OneM2M_Templates { } }; + template M2MResponsePrimitive mw_responseInverse(ResponseStatusCode p_statusCode) := { + responsePrimitive_ := { + responseStatusCode := complement(p_statusCode), + requestIdentifier := ?, + primitiveContent := *, + to_ := *, + from_ := *, + originatingTimestamp := *, + resultExpirationTimestamp := *, + eventCategory := * + } + }; + template M2MResponsePrimitive mw_responseOK(in template PrimitiveContent p_content := *) := { responsePrimitive_ := { responseStatusCode := (int2000, int2001, int2002, int2004), diff --git a/OneM2M_TestSystem.ttcn b/OneM2M_TestSystem.ttcn index e480aa53978b20cc1a52ee48156ffa9a06bc4f17..9bdbbe024ba81e01249c737bb254337cc04d7083 100644 --- a/OneM2M_TestSystem.ttcn +++ b/OneM2M_TestSystem.ttcn @@ -36,7 +36,7 @@ module OneM2M_TestSystem { /* Components */ type component M2M { port OneM2MPort mcaPort; - //port OneM2MPort mccPort; + port OneM2MPort mccPort; port AdapterControlPort acPort; //timers timer tc_ac := PX_TAC; @@ -50,7 +50,7 @@ module OneM2M_TestSystem { type component M2MSystem { port OneM2MPort mcaPort; - //port OneM2MPort mccPort; + port OneM2MPort mccPort; port AdapterControlPort acPort; } @@ -85,3 +85,7 @@ module OneM2M_TestSystem { } }// end of module +with { + extension "anytype charstring" + +} diff --git a/OneM2M_Testcases.ttcn b/OneM2M_Testcases.ttcn index ce37639594c18b40de11fbc8b6bafa8d0a7d5089..4c237d046eb0f4ee8b6368abc4f3994945d9ea81 100644 --- a/OneM2M_Testcases.ttcn +++ b/OneM2M_Testcases.ttcn @@ -105,6 +105,219 @@ module OneM2M_Testcases { }//end group oneM2M_demos group CSE { + + group Registration { + + testcase TC_CSE_REG_BV_001() runs on M2M system M2MSystem { + + var M2MResponsePrimitive v_response; + var RequestPrimitive v_request; + var integer v_aeIndex := -1; + var integer v_resourceIndex := -1; + + var ResourceType v_resourceType := int2; + template RequestPrimitive v_requestPrimitive := m_createAe(omit, "", "APP_ID"); + + //Preambule + template (value) AccessControlOperations v_allowedOperations := int63; + v_aeIndex := f_preamble_prepareCSE(v_allowedOperations, {"C-AE-ID-STEM"});//c_CRUDNDi); + + + v_resourceIndex := f_createResource(v_resourceType, v_requestPrimitive, v_aeIndex); + + // Test Body + v_request := valueof(m_retrieveResource(f_getResourceAddress(v_resourceIndex))); + + v_request.resultContent := int0;//Nothing + mcaPort.send(m_request(v_request)); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(int2001)) { + tc_ac.stop; + setverdict(pass, testcasename() & ": AE successfuly created."); + } + [] mcaPort.receive(mw_responseInverse(int2001)) -> value v_response{ + tc_ac.stop; + setverdict(fail, testcasename() & ": Error while creating AE with status code " & int2str(enum2int(v_response.responsePrimitive_.responseStatusCode))); + } + [] tc_ac.timeout { + setverdict(inconc, testcasename() & ": No answer while creating AE"); + } + } + + // Postamble + f_postamble_deleteResources(); + + } + + testcase TC_CSE_REG_BV_002() runs on M2M system M2MSystem { + + var M2MResponsePrimitive v_response; + var RequestPrimitive v_request; + var integer v_aeIndex := -1; + var integer v_resourceIndex := -1; + + var ResourceType v_resourceType := int2; + template RequestPrimitive v_requestPrimitive := m_createAe(omit, "C-AE-ID-STEM", "APP_ID"); + + //Preambule + template (value) AccessControlOperations v_allowedOperations := int63; + v_aeIndex := f_preamble_prepareCSE(v_allowedOperations,{"C-AE-ID-STEM"});//c_CRUDNDi); + + + v_resourceIndex := f_createResource(v_resourceType, v_requestPrimitive, v_aeIndex); + + // Test Body + v_request := valueof(m_retrieveResource(f_getResourceAddress(v_resourceIndex))); + + v_request.resultContent := int0;//Nothing + mcaPort.send(m_request(v_request)); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(int2001)) { + tc_ac.stop; + setverdict(pass, testcasename() & ": AE successfuly created."); + } + [] mcaPort.receive(mw_responseInverse(int2001)) -> value v_response{ + tc_ac.stop; + setverdict(fail, testcasename() & ": Error while creating AE with status code " & int2str(enum2int(v_response.responsePrimitive_.responseStatusCode))); + } + [] tc_ac.timeout { + setverdict(inconc, testcasename() & ": No answer while creating AE"); + } + } + + // Postamble + f_postamble_deleteResources(); + + } + + testcase TC_CSE_REG_BV_003() runs on M2M system M2MSystem { + + var M2MResponsePrimitive v_response; + var RequestPrimitive v_request; + var integer v_aeIndex := -1; + var integer v_resourceIndex := -1; + var ResourceType v_resourceType := int2; + template RequestPrimitive v_requestPrimitive := m_createAe(omit, omit, "APP_ID"); + + //Preambule + template (value) AccessControlOperations v_allowedOperations := int63; + v_aeIndex := f_preamble_prepareCSE(v_allowedOperations, omit);//c_CRUDNDi); + + + v_resourceIndex := f_createResource(v_resourceType, v_requestPrimitive, v_aeIndex); + + // Test Body + v_request := valueof(m_retrieveResource(f_getResourceAddress(v_resourceIndex))); + + v_request.resultContent := int0;//Nothing + mcaPort.send(m_request(v_request)); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(int4005)) { + tc_ac.stop; + setverdict(pass, testcasename() & ": AE creation rejected."); + } + [] mcaPort.receive(mw_responseInverse(int4005)) -> value v_response{ + tc_ac.stop; + setverdict(fail, testcasename() & ": Error while creating AE with status code " & int2str(enum2int(v_response.responsePrimitive_.responseStatusCode))); + } + [] tc_ac.timeout { + setverdict(inconc, testcasename() & ": No answer while creating AE"); + } + } + + // Postamble + f_postamble_deleteResources(); + + } + + testcase TC_CSE_REG_BV_004() runs on M2M system M2MSystem { + + var M2MResponsePrimitive v_response; + var RequestPrimitive v_request; + var integer v_aeIndex := -1; + var integer v_resourceIndex := -1; + var ResourceType v_resourceType := int2; + template RequestPrimitive v_requestPrimitive := m_createAe(omit, "C-AE-ID-STEM", "APP_ID"); + + //Preambule + template (value) AccessControlOperations v_allowedOperations := int63; + v_aeIndex := f_preamble_prepareCSE(v_allowedOperations, omit);//c_CRUDNDi); + + + v_resourceIndex := f_createResource(v_resourceType, v_requestPrimitive, v_aeIndex); + + // Test Body + v_request := valueof(m_retrieveResource(f_getResourceAddress(v_resourceIndex))); + + v_request.resultContent := int0;//Nothing + mcaPort.send(m_request(v_request)); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(int4005)) { + tc_ac.stop; + setverdict(pass, testcasename() & ": AE creation rejected."); + } + [] mcaPort.receive(mw_responseInverse(int4005)) -> value v_response{ + tc_ac.stop; + setverdict(fail, testcasename() & ": Error while creating AE with status code " & int2str(enum2int(v_response.responsePrimitive_.responseStatusCode))); + } + [] tc_ac.timeout { + setverdict(inconc, testcasename() & ": No answer while creating AE"); + } + } + + // Postamble + f_postamble_deleteResources(); + + } + + testcase TC_CSE_REG_BV_005() runs on M2M system M2MSystem { + + var M2MResponsePrimitive v_response; + var RequestPrimitive v_request; + var integer v_aeIndex := -1; + var integer v_resourceIndex := -1; + var ResourceType v_resourceType := int2; + template RequestPrimitive v_requestPrimitive := m_createAe(omit, "", "APP_ID"); + + //Preambule + template (value) AccessControlOperations v_allowedOperations := int63; + v_aeIndex := f_preamble_prepareCSE(v_allowedOperations,{"S*"});//c_CRUDNDi); + + + v_resourceIndex := f_createResource(v_resourceType, v_requestPrimitive, v_aeIndex); + + // Test Body + v_request := valueof(m_retrieveResource(f_getResourceAddress(v_resourceIndex))); + + v_request.resultContent := int0;//Nothing + mcaPort.send(m_request(v_request)); + tc_ac.start; + + template RequestPrimitive v_responsePrimitive := m_createAEanncReceive(omit, "", "APP_ID"); + alt { + [] mccPort.receive(m_requestReceive(v_responsePrimitive)) { + tc_ac.stop; + setverdict(pass, testcasename() & ": AE creation redirected."); + } + [] mccPort.receive { + tc_ac.stop; + setverdict(fail, testcasename() & ": Error while creating AE"); + } + [] tc_ac.timeout { + setverdict(inconc, testcasename() & ": No answer while creating AE"); + } + } + + // Postamble + f_postamble_deleteResources(); + + } + + }//end Registration group Data_Management_and_Repository { diff --git a/OneM2M_Types.ttcn b/OneM2M_Types.ttcn index a9c646126d56f38af36c11be8564a515b88436b5..b7a43d1acb3d7b0346476b540958d25658065b2b 100644 --- a/OneM2M_Types.ttcn +++ b/OneM2M_Types.ttcn @@ -4001,6 +4001,56 @@ module OneM2M_Types { /* Additional types */ group optionalResourceTypes { + + //Added by @Naum + type record AEAnnc_optional + { + XSD.NCName resourceName optional, + ResourceType resourceType optional, + XSD.ID resourceID optional, + NhURI parentID optional, + Timestamp creationTime optional, + Timestamp lastModifiedTime optional, + Labels labels optional, + AcpType accessControlPolicyIDs optional, + Timestamp expirationTime optional, + XSD.AnyURI link optional, + XSD.String appName optional, + XSD.String app_ID optional, + XSD.ID aE_ID optional, + PoaList pointOfAccess optional, + XSD.AnyURI ontologyRef optional, + XSD.AnyURI nodeLink optional, + XSD.Boolean requestReachability optional, + Serializations contentSerialization optional, + union { + record length(1 .. infinity) of ChildResourceRef childResource_list, + record length(1 .. infinity) of union { + Container container, + ContainerAnnc containerAnnc, + Group group_, + GroupAnnc groupAnnc, + AccessControlPolicy accessControlPolicy, + AccessControlPolicyAnnc accessControlPolicyAnnc, + Subscription subscription, + ScheduleAnnc scheduleAnnc + } choice_list + } choice optional + } + with { + variant "element"; + variant (resourceName) "attribute"; + variant (app_ID) "name as 'App-ID'"; + variant (aE_ID) "name as 'AE-ID'"; + //variant (requestReachability) "text 'true' as '1'"; + //variant (requestReachability) "text 'false' as '0'"; + variant (choice) "untagged"; + variant (choice.childResource_list) "untagged"; + variant (choice.childResource_list[-]) "name as 'childResource'"; + variant (choice.choice_list) "untagged"; + variant (choice.choice_list[-]) "untagged"; + variant (choice.choice_list[-].group_) "name as 'group'"; + }; type record AE_optional { @@ -4153,6 +4203,60 @@ group optionalResourceTypes { variant (choice.choice_list[-]) "untagged"; }; + + //added by @Naum + type record CSEBase_optional + { + XSD.NCName resourceName optional, + ResourceType resourceType optional, + XSD.ID resourceID optional, + NhURI parentID optional, + Timestamp creationTime optional, + Timestamp lastModifiedTime optional, + Labels labels optional, + AcpType accessControlPolicyIDs optional, + CseTypeID cseType optional, + XSD.ID cSE_ID optional, + record of ResourceType supportedResourceType optional, + PoaList pointOfAccess optional, + XSD.AnyURI nodeLink optional, + union { + record length(1 .. infinity) of ChildResourceRef childResource_list, + record length(1 .. infinity) of union { + RemoteCSE remoteCSE, + Node node, + AE aE, + Container container, + Group group_, + AccessControlPolicy accessControlPolicy, + Subscription subscription, + MgmtCmd mgmtCmd, + LocationPolicy locationPolicy, + StatsConfig statsConfig, + StatsCollect statsCollect, + Request request, + Delivery delivery, + Schedule schedule, + M2mServiceSubscriptionProfile m2mServiceSubscriptionProfile, + ServiceSubscribedAppRule serviceSubscribedAppRule + } choice_list + } choice optional + } + with { + variant "element"; + variant (resourceName) "attribute"; + variant (cSE_ID) "name as 'CSE-ID'"; + variant (supportedResourceType) "list"; + variant (choice) "untagged"; + variant (choice.childResource_list) "untagged"; + variant (choice.childResource_list[-]) "name as 'childResource'"; + variant (choice.choice_list) "untagged"; + variant (choice.choice_list[-]) "untagged"; + variant (choice.choice_list[-].aE) "name as capitalized"; + variant (choice.choice_list[-].group_) "name as 'group'"; + }; + + type record Group_optional { XSD.NCName resourceName optional, @@ -4422,5 +4526,5 @@ with { encode "XML"; variant "namespace as 'http://www.onem2m.org/xml/protocols' prefix 'm2m'"; variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; - extension "anytype charstring, AnyURI, AttributeList, AE, AccessControlPolicy, AccessControlPolicy_optional, ACP_update_invalid, AE_optional, AE_update_invalid,Container_optional, Container_update_invalid, ContentInstance_optional, ContentInstance_update_invalid, Group_optional, Group_update_invalid, Schedule_optional, Schedule_update_invalid, Subscription_optional, Subscription_update_invalid, PollingChannel_optional, PollingChannel_update_invalid" + extension "anytype charstring, AnyURI, AttributeList, AE, AccessControlPolicy, AccessControlPolicy_optional, ACP_update_invalid, AE_optional, AE_update_invalid,AEAnnc_optional, Container_optional, CSEBase_optional, Container_update_invalid, ContentInstance_optional, ContentInstance_update_invalid, Group_optional, Group_update_invalid, Schedule_optional, Schedule_update_invalid, Subscription_optional, Subscription_update_invalid, PollingChannel_optional, PollingChannel_update_invalid" }