diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn index f142472958a71e0da9d90aaf9e7674bec23bf18f..8023039b6534dea12765e1717b9d402264181249 100644 --- a/LibOneM2M/OneM2M_Functions.ttcn +++ b/LibOneM2M/OneM2M_Functions.ttcn @@ -1761,12 +1761,12 @@ module OneM2M_Functions { * @return PrimitiveContent parameter of the RETRIEVE response * @verdict */ - function f_cse_retrieveResourceWithRoleToken(integer p_resourceIndex, XSD.ID p_roleResourceID, XSD.ID p_tokenResourceID) runs on AeSimu return PrimitiveContent{ + function f_cse_retrieveResourceWithRoleToken(integer p_resourceIndex, template (omit) XSD.ID p_roleResourceID := omit, template (omit) XSD.ID p_tokenResourceID) runs on AeSimu return PrimitiveContent{ var RequestPrimitive v_retrieveRequest; v_retrieveRequest := m_retrieve(f_getResourceAddress(p_resourceIndex), f_getOriginator(p_resourceIndex)); - if (p_roleResourceID!= null) {v_retrieveRequest.roleIDs := {p_roleResourceID};} - if (p_tokenResourceID!= null) {v_retrieveRequest.tokenIDs := {p_tokenResourceID};} + if (ispresent(p_roleResourceID)) {v_retrieveRequest.roleIDs := {p_roleResourceID};} + if (ispresent(p_tokenResourceID)) {v_retrieveRequest.tokenIDs := {p_tokenResourceID};} f_send(e_mca_port, m_request(v_retrieveRequest)); tc_ac.start; diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn index f28e037d87e72c1665f75ae69858e3d3414b6902..23fa7ff8ae05156050f2b35c435b8278158976b3 100644 --- a/LibOneM2M/OneM2M_Templates.ttcn +++ b/LibOneM2M/OneM2M_Templates.ttcn @@ -1522,6 +1522,15 @@ module OneM2M_Templates { resourceType := int10030, primitiveContent := {timeSeriesInstanceAnnc := mw_contentCreateTimeSeriesInstanceAnncBase} }; + + /** + * @desc Base CREATE request primitive for role resource + */ + template (value) RequestPrimitive m_createRoleBase modifies m_create := { + requestIdentifier := testcasename() & "-m_createRole", + resourceType := int31, + primitiveContent := {role := m_contentCreateRole()} + }; /** * @desc Reception template for CREATE DeviceAirConditioner @@ -2136,8 +2145,6 @@ module OneM2M_Templates { container := p_container } - - template PrimitiveContent m_primitiveContentContentInstance(template ContentInstance_optional p_contentInstance) := { contentInstance := p_contentInstance } @@ -2154,8 +2161,6 @@ module OneM2M_Templates { responsePrimitive := p_responsePrimitive } - - template (value) PrimitiveContent m_primitiveContentGroup(template Group_optional p_group) := { group_ := valueof(p_group) } @@ -3947,6 +3952,31 @@ module OneM2M_Templates { duration := p_duration }; + /** + * @desc Base primitiveContent for CREATE operation for Role resource + * @param p_name Resource name + */ + template (value) Role_optional m_contentCreateRole (in template (omit) XSD.String p_name := c_defaultRoleResourceName):= { + resourceName := p_name,//O + resourceType := omit,//NP + resourceID := omit,//NP + parentID := omit,//NP + creationTime := omit,//NP + lastModifiedTime := omit,//NP + labels := omit,//O + accessControlPolicyIDs := omit, //O + expirationTime := omit,//O + dynamicAuthorizationConsultationIDs := omit, //O + roleID := "roleID@a.b", //M + issuer := "issuer", //M + holder := "holder", //M + notBefore := fx_generateTimestamp(),//M + notAfter := fx_generateTimestamp(),//M + roleName := omit, //O + tokenLink := omit, //O + choice := omit//O + }; + /** * @desc Base primitiveContent for CREATE operation for BinarySwitch resource * @param @@ -6528,7 +6558,7 @@ module OneM2M_Templates { template TimeSeries_optional mw_contentTimeSeries_rc8 modifies mw_contentTimeSeries_allOmit := { choice := {choice_list := ?} //O } - + template FlexContainerResource_optional m_contentFlexContainer_allOmit := { resourceName := omit,//O resourceType := omit,//NP @@ -6836,7 +6866,7 @@ module OneM2M_Templates { choice := omit //NP } - + }//end group responseContent group SpecialContents { @@ -7310,7 +7340,7 @@ module OneM2M_Templates { releaseVersionIndicator := ?, vendorInformation := * }; - + template ResponsePrimitive mw_responseNotifySecurityInfo(ResponseStatusCode p_statusCode, template SecurityInfo p_securityInfo) := { responseStatusCode := p_statusCode, requestIdentifier := ?, diff --git a/LibOneM2M/OneM2M_Types.ttcn b/LibOneM2M/OneM2M_Types.ttcn index a2a3088d83189f8fae44a9b41ae5be3a9340370f..64a391e8ed5f3b561de4a3c5ecf59d490ef74904 100644 --- a/LibOneM2M/OneM2M_Types.ttcn +++ b/LibOneM2M/OneM2M_Types.ttcn @@ -2094,6 +2094,7 @@ type union PrimitiveContent { GenericInterworkingService_optional genericInterworkingService, DynamicAuthorizationConsultation_optional dynamicAuthorizationConsultation, GenericInterworkingOperationInstance_optional genericInterworkingOperationInstance, + Role_optional role, //HAIM DeviceAirConditioner_optional deviceAirConditioner, DeviceClothesWasherDryer_optional deviceClothesWasherDryer, @@ -2159,7 +2160,6 @@ type union PrimitiveContent { Subscription_update_invalid subscription_update_invalid, LocationPolicy_update_invalid locationPolicy_update_invalid, TimeSeries_update_invalid timeSeries_update_invalid - } @@ -4025,9 +4025,6 @@ with { }; - - - type enumerated ResourceType { int1(1), @@ -25193,7 +25190,6 @@ with { AttributeAux_list forcedFields optional } - /** * @desc Type for the oneM2M primitives exchange * @member primitive oneM2M primitive @@ -27060,6 +27056,45 @@ group OptionalResourceTypes { variant (choice.choice_list) "untagged"; variant (choice.choice_list[-]) "untagged"; }; + + type record Role_optional + { + ResourceName 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, + ListOfURIs dynamicAuthorizationConsultationIDs optional, + RoleID roleID optional, + XSD.ID issuer optional, + XSD.ID holder optional, + Timestamp notBefore optional, + Timestamp notAfter optional, + XSD.String roleName optional, + XSD.AnyURI tokenLink optional, + union { + record length(1 .. infinity) of ChildResourceRef childResource_list, + record length(1 .. infinity) of union { + Subscription subscription, + Transaction transaction + } choice_list + } choice optional + } + with { + variant "name as uncapitalized"; + variant "element"; + variant (resourceName) "attribute"; + 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"; + }; + type record DeviceAirConditioner_optional { ResourceName resourceName optional, @@ -28429,10 +28464,10 @@ group OptionalResourceTypes { variant (choice.subscription_list) "untagged"; variant (choice.subscription_list[-]) "name as 'subscription'"; }; - + }//end group OptionalResourceTypes - + group InvalidTypes { diff --git a/LibOneM2M/OneM2M_TypesAndValues.ttcn b/LibOneM2M/OneM2M_TypesAndValues.ttcn index acf1c11ad8ccb067bf1a20355ed31b4afadb3250..b57c8df15140963d7853eaefcca07632b038cec1 100644 --- a/LibOneM2M/OneM2M_TypesAndValues.ttcn +++ b/LibOneM2M/OneM2M_TypesAndValues.ttcn @@ -42,6 +42,7 @@ module OneM2M_TypesAndValues { const XSD.String c_defaultTimeSeriesResourceName := "MyTimeSeriesResource"; const XSD.String c_defaultTimeSeriesAnncResourceName := "MyTimeSeriesAnncResource"; const XSD.String c_defaultTimeSeriesInstanceResourceName := "MyTimeSeriesInstanceResource"; + const XSD.String c_defaultRoleResourceName := "MyRoleResource"; const XSD.String c_defaultGenericInterworkingServiceResourceName := "MyGenericInterworkingServiceResource"; //<genericInterworkingService> const XSD.ID c_aeAuxName := "MyAe"; const XSD.String c_defaultAE2Name := "MyAe2"; diff --git a/OneM2M_Testcases_AE_Release_1.ttcn b/OneM2M_Testcases_AE_Release_1.ttcn index ced59c4fe0a64173ddf4246c7a3c63cdefb47e26..360deb63cf91b6049b3a89d853078af5aa3fbb1f 100644 --- a/OneM2M_Testcases_AE_Release_1.ttcn +++ b/OneM2M_Testcases_AE_Release_1.ttcn @@ -648,7 +648,7 @@ module OneM2M_Testcases_AE_Release_1 { var template UtTriggerPrimitive v_utRequest := m_utCreateAe; var template RequestPrimitive v_createAe := mw_createAe; var universal charstring v_action := __SCOPE__ & ": Please, send a valid AE CREATE Registration Request containing attribute SupportedReleaseVersions"; - v_utRequest.requestPrimitive.primitiveContent.aE.supportedReleaseVersions := {"2a"}; + v_utRequest.requestPrimitive.primitiveContent.aE.supportedReleaseVersions := {"3"}; v_utRequest.forcedFields := {{name := "supportedReleaseVersions", value_ := "UNINITIALIZED"}}; v_createAe.primitiveContent.aE.supportedReleaseVersions := ?;//Check value other than UNINITIALIZED, done by typing v_cse1.start(f_AE_REG_CRE_002(v_utRequest,v_createAe,v_action)); diff --git a/OneM2M_Testcases_CSE_Release_3.ttcn b/OneM2M_Testcases_CSE_Release_3.ttcn index f1e5a1110679f2fe7eb5b75f1df5c8bfdee2bb48..ce68a58c6c0b845673a18d19e55ca1b2b7d89567 100644 --- a/OneM2M_Testcases_CSE_Release_3.ttcn +++ b/OneM2M_Testcases_CSE_Release_3.ttcn @@ -7543,6 +7543,75 @@ module OneM2M_Testcases_CSE_Release_3 { group Roles { + group Create{ + + /** + * @desc Check that the IUT successfully creates the <role> resource requested by the Authorization Authority + * + */ + testcase TC_CSE_SEC_ROL_CRE_002() runs on Tester system CseSystem { + //Local variables + var CseSimu v_cse1 := CseSimu.create("CSE1") alive; + + v_cse1.start(f_CSE_SEC_ROL_CRE_002()); + v_cse1.done; + } + + function f_CSE_SEC_ROL_CRE_002() runs on CseSimu system CseSystem { + // Local variables + var MsgIn v_response; + var integer v_aeIndex := -1; + var XSD.ID v_targetResourceAddress; + + // Test control + if(not(PICS_ROL_SUPPORT)) { + setverdict(inconc, __SCOPE__ & ": Role Based Access Control Procedure support is required to run this test case"); + stop; + } + + // Test component configuration + f_cf04Up(); + + // Test adapter configuration + + // Preamble + vc_remoteCseIndex := f_cse_registerRemoteCse(m_createRemoteCSEBase); + +// Test Body + var RequestPrimitive v_createRequest := f_getCreateRequestPrimitive(int31, m_createRoleBase, -1); + f_send(e_mcc_port, m_request(v_createRequest)); + + tc_ac.start; + alt { + [] mccPort.receive(mw_response(mw_responsePrimitive(int2001))) { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": Role resource successfully created"); + } + [] mccPort.receive(mw_response(mw_responsePrimitiveOK)) { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Wrong response status code in the response"); + } + [] mccPort.receive(mw_response(mw_responsePrimitiveKO)) { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Error while creating role resource"); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while creating the resource"); + } + } + + // Postamble + f_cse_postamble_deleteResourcesCSE(); + + // Tear down + f_cf04Down(); + + }//end f_CSE_SEC_ROL_CRE_002 + + + }//end group Create + + group Retrieve { /** @@ -7715,7 +7784,7 @@ module OneM2M_Testcases_CSE_Release_3 { v_roleResourceID := fx_assign_originatorRole(); // external function, may require additional paremeters //Test Body - vc_ae1.start(f_cse_retrieveResourceWithRoleToken(v_resourceIndex, v_roleResourceID, null)); + vc_ae1.start(f_cse_retrieveResourceWithRoleToken(v_resourceIndex, v_roleResourceID, omit)); tc_ac.start; alt{ @@ -7782,7 +7851,7 @@ module OneM2M_Testcases_CSE_Release_3 { v_tokenResourceID := fx_assign_originatorToken(); // external function, may require additional paremeters //Test Body - vc_ae1.start(f_cse_retrieveResourceWithRoleToken(v_resourceIndex, null, v_tokenResourceID)); + vc_ae1.start(f_cse_retrieveResourceWithRoleToken(v_resourceIndex, -, v_tokenResourceID)); tc_ac.start; alt{