diff --git a/LibOneM2M/oneM2M_Types b/LibOneM2M/oneM2M_Types index d889689ceb276b318e80da545e2b57881578a2ed..2782131b4c78662f8175412cdc69812e7811dfa0 160000 --- a/LibOneM2M/oneM2M_Types +++ b/LibOneM2M/oneM2M_Types @@ -1 +1 @@ -Subproject commit d889689ceb276b318e80da545e2b57881578a2ed +Subproject commit 2782131b4c78662f8175412cdc69812e7811dfa0 diff --git a/OneM2M_PermutationFunctions.ttcn b/OneM2M_PermutationFunctions.ttcn index d7eec53c8148671e8744d7c6b89891c2b7dcec71..6cd543086cc4fc8baa64ed907ad352007c229a08 100644 --- a/OneM2M_PermutationFunctions.ttcn +++ b/OneM2M_PermutationFunctions.ttcn @@ -11975,6 +11975,68 @@ module OneM2M_PermutationFunctions { } //end f_CSE_SEC_ACP_016 + function f_CSE_SEC_ACP_017(template RequestPrimitive p_requestPrimitive, in ResponseStatusCode p_responseStatusCode) runs on AeSimu system CseSystem { + // Local variables + var MsgIn v_response; + var integer v_aeIndex := -1; + var integer v_containerIndex := -1; + var integer v_acpIndex := -1; + var integer v_groupIndex := -1; + var template RequestPrimitive v_groupRequest := m_createGroup(1, -, omit, int2, -, -, -); + var template RequestPrimitive v_createRequest := valueof(m_createAcpBase); + + // Test control + + // Test component configuration + f_cf01Up(); + + // Test adapter configuration + + // Preamble + v_aeIndex := f_cse_preamble_registerAe(-, -); + v_containerIndex := f_cse_createResource(int3, m_createContainerBase, v_aeIndex); + + v_groupRequest.primitiveContent.group_.memberIDs := {f_getResourceId(vc_resourcesList[v_aeIndex].resource)}; + + v_groupIndex := f_cse_createResource(int9, v_groupRequest, -); + + v_createRequest := m_createAcp(-, {f_getResourceId(vc_resourcesList[v_groupIndex].resource)} , -); + + v_acpIndex := f_cse_createResource(int1, v_createRequest, -); + + // Test Body + p_requestPrimitive.to_ := f_getResourceAddress(v_containerIndex); + p_requestPrimitive.from_ := f_getOriginator(v_aeIndex); + p_requestPrimitive.requestIdentifier := valueof(p_requestPrimitive.requestIdentifier) & f_rnd(1, 1000000); + + f_send(e_mcaPort, m_request(valueof(p_requestPrimitive))); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(p_responseStatusCode))) -> value v_response { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": Successful operation on resource type int3 (Container)"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Wrong response status code"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Error while operation on resource type int3 (Container)"); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while executing operation on resource type int3 (Container)"); + } + } + + //Postamble + f_cse_postamble_deleteResources(); + + //Tear down + f_cf01Down(); + + } //end f_CSE_SEC_ACP_017 + }// end of Basic_Operations }//end group AccessControlPolicy diff --git a/OneM2M_Testcases_CSE_Release_4.ttcn b/OneM2M_Testcases_CSE_Release_4.ttcn index 7e9d19a5092b3d5af4c8e299cf49a5cfd43ba9af..e61c238442bf9ceb0012d613dcea74cfde923cc3 100644 --- a/OneM2M_Testcases_CSE_Release_4.ttcn +++ b/OneM2M_Testcases_CSE_Release_4.ttcn @@ -2729,6 +2729,204 @@ module OneM2M_Testcases_CSE_Release_4 { group Access_Control_Policy { // TODO To be moved to authorization group + + group Create{ + + }//end group Create + + group Retrieve { + + /** + * @desc Check that the IUT successfully returns the privileges of the ORIGINATOR on the TARGET_RESOURCE_ADDRESS when the RETRIEVE request contains Result Content set to permissions + * + */ + testcase TC_CSE_SEC_ACP_RET_001() runs on Tester system CseSystem { + + var AeSimu v_ae := AeSimu.create("AE1") alive; + + v_ae.start(f_CSE_SEC_ACP_RET_001()); + + v_ae.done; + + } + + function f_CSE_SEC_ACP_RET_001() runs on AeSimu system CseSystem { + // Local variables + var MsgIn v_response; + var integer v_aeIndex := -1; + var integer v_acpIndex := -1; + var RequestPrimitive v_createRequestAcp := valueof(m_createAcp(omit, -, -)); + var RequestPrimitive v_retrieveRequest; + var AccessControlRule v_accessControlRule; + var PrimitiveContent v_primitiveContentRetrievedResource; + + // Test control + + // Test component configuration + f_cf01Up(); + + // Test adapter configuration + + // Preamble + v_acpIndex := f_cse_createResource(int1, v_createRequestAcp); // CSE child resource + + v_aeIndex := f_cse_preamble_registerAe({f_getResourceId(vc_resourcesList[v_acpIndex].resource)}, -); + + v_accessControlRule := valueof(m_createAcr({f_getOriginator(v_aeIndex)}, int59)); // c_CRDNDi + + // TODO Check Content containing permissions ... + // pernissions only present is Token + v_primitiveContentRetrievedResource := f_cse_retrieveResource(v_aeIndex); + + // Test Body + v_retrieveRequest := valueof(m_retrieve(f_getResourceAddress(v_acpIndex), f_getOriginator(v_acpIndex))); + v_retrieveRequest.primitiveContent.aE.accessControlPolicyIDs := {f_getResourceId(vc_resourcesList[v_acpIndex].resource)}; + v_retrieveRequest.resultContent := int12; + + f_send(e_mcaPort, m_request(v_retrieveRequest)); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int2000, v_primitiveContentRetrievedResource))) -> value v_response { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": Successful Update operation on resource type int1 (Ae)"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Wrong response status code"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Error while Update operation on resource type int2 (Ae)"); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while executing update operation on resource type int2 (Ae)"); + } + } + + if(getverdict == pass){ + if(ischosen(v_primitiveContentRetrievedResource.aE)) { + if(not match (f_resourceIdCleaner(v_primitiveContentRetrievedResource.aE.accessControlPolicyIDs[0]), v_retrieveRequest.primitiveContent.aE.accessControlPolicyIDs[0])){ + setverdict(fail, __SCOPE__ & ": Error: Access Control policy ID attribute not updated correctly"); + } + } + } + + //Postamble + f_cse_postamble_deleteResources(); + + //Tear down + f_cf01Down(); + + }//end TC_CSE_SEC_ACP_RET_001 + + /** + * @desc Check that the IUT rejects a RETRIEVE request from the AE containing Result Content set to permissions when AE has no RETRIEVE privileges on the selfPrivileges attribute of <accessControlPolicy> resources associated with the TARGET_RESOURCE_ADDRESS resource + * + */ + testcase TC_CSE_SEC_ACP_RET_002() runs on Tester system CseSystem { + + var AeSimu v_ae := AeSimu.create("AE1") alive; + + v_ae.start(f_CSE_SEC_ACP_RET_002()); + + v_ae.done; + + } + + function f_CSE_SEC_ACP_RET_002() runs on AeSimu system CseSystem { + // Local variables + var MsgIn v_response; + var integer v_aeIndex := -1; + var RequestPrimitive v_retrieveRequest; + + // Test control + + // Test component configuration + f_cf01Up(); + + // Test adapter configuration + + // Preamble + v_aeIndex := f_cse_preamble_registerAe(); + + // Test Body + v_retrieveRequest := valueof(m_retrieve(f_getResourceAddress(v_aeIndex), f_getOriginator(v_aeIndex))); + v_retrieveRequest.primitiveContent.aE.accessControlPolicyIDs := {f_getResourceId(vc_resourcesList[v_aeIndex].resource)}; + v_retrieveRequest.resultContent := int12; + + f_send(e_mcaPort, m_request(v_retrieveRequest)); + tc_ac.start; + alt { + [] mcaPort.receive(mw_response(mw_responsePrimitive(int4130))) -> value v_response { + tc_ac.stop; + setverdict(pass, __SCOPE__ & ": Successful Update operation on resource type int1 (Ae)"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Wrong response status code"); + } + [] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value v_response { + tc_ac.stop; + setverdict(fail, __SCOPE__ & ": Error while Update operation on resource type int2 (Ae)"); + } + [] tc_ac.timeout { + setverdict(fail, __SCOPE__ & ": No answer while executing update operation on resource type int2 (Ae)"); + } + } + + //Postamble + f_cse_postamble_deleteResources(); + + //Tear down + f_cf01Down(); + + }//end TC_CSE_SEC_ACP_RET_002 + + }// end of group Retrieve + + group Basic_Operations { + + group g_CSE_SEC_ACP_017 { + + /** + * @desc Check that the IUT accepts the OPERATION request on <accessControlPolicy> resource when at least one of the access control rules defined in the selfPrivileges attribute allows the operation + * + */ + testcase TC_CSE_SEC_ACP_017_CRE() runs on Tester system CseSystem { //Create + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_ae1.start(f_CSE_SEC_ACP_017(m_createContainerBase, int2001)); + v_ae1.done; + }//end TC_CSE_SEC_ACP_017_CRE + + testcase TC_CSE_SEC_ACP_017_UPD() runs on Tester system CseSystem { //Update + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + var template RequestPrimitive v_updateRequest := m_updateContainerBase; + var Labels v_labels_1:= {"VALUE_1"}; + v_updateRequest.primitiveContent.container.labels := v_labels_1; + v_ae1.start(f_CSE_SEC_ACP_017(v_updateRequest, int2004)); + v_ae1.done; + }//end TC_CSE_SEC_ACP_017_UPD + + testcase TC_CSE_SEC_ACP_017_RET() runs on Tester system CseSystem { //Retrieve + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_ae1.start(f_CSE_SEC_ACP_017(m_retrieve("Temporary", "Temporary"), int2000)); + v_ae1.done; + }//end TC_CSE_SEC_ACP_017_RET + + testcase TC_CSE_SEC_ACP_017_DEL() runs on Tester system CseSystem { //Delete + var AeSimu v_ae1 := AeSimu.create("AE1") alive; + + v_ae1.start(f_CSE_SEC_ACP_017(m_delete("Temporary", "Temporary"), int2002)); + v_ae1.done; + }//end TC_CSE_SEC_ACP_017_DEL + + } //end g_CSE_SEC_ACP_017 + + } // End of group Basic_Operations + }//end group AccessControlPolicy } // End of group authentication