From 6724b5a7a0db04a3c46794313e377d12af789655 Mon Sep 17 00:00:00 2001
From: reinaortega <miguelangel.reinaortega@etsi.org>
Date: Tue, 5 Nov 2019 12:23:37 +0100
Subject: [PATCH] Added TC_CSE_SEC_ROL_CRE_004 and related templates

---
 LibOneM2M/OneM2M_Functions.ttcn      |  6 ++-
 LibOneM2M/OneM2M_Templates.ttcn      | 48 +++++++++++++++++---
 LibOneM2M/OneM2M_Types.ttcn          | 45 +++++++++++++++++++
 LibOneM2M/OneM2M_TypesAndValues.ttcn |  1 +
 OneM2M_Testcases_CSE_Release_3.ttcn  | 66 +++++++++++++++++++++++++++-
 5 files changed, 158 insertions(+), 8 deletions(-)

diff --git a/LibOneM2M/OneM2M_Functions.ttcn b/LibOneM2M/OneM2M_Functions.ttcn
index 8023039..116570d 100644
--- a/LibOneM2M/OneM2M_Functions.ttcn
+++ b/LibOneM2M/OneM2M_Functions.ttcn
@@ -6331,11 +6331,13 @@ module OneM2M_Functions {
 		 * @desc Creates and assigns a token resource to the Originator in the Token Repository
 		 */		
 		external function fx_assign_originatorToken() return charstring;
-
+		
 		/**
 		 * @desc Generates a oneM2M JSON Web Token. 
 		 */		
-		external function fx_generateJWT() return DynAuthJWT;		
+		external function fx_generateJWT() return DynAuthJWT;	
+
+
 
 	} // end externalFunctions
 	
diff --git a/LibOneM2M/OneM2M_Templates.ttcn b/LibOneM2M/OneM2M_Templates.ttcn
index 23fa7ff..8b874c3 100644
--- a/LibOneM2M/OneM2M_Templates.ttcn
+++ b/LibOneM2M/OneM2M_Templates.ttcn
@@ -1522,7 +1522,7 @@ module OneM2M_Templates {
 				resourceType := int10030,
 				primitiveContent := {timeSeriesInstanceAnnc := mw_contentCreateTimeSeriesInstanceAnncBase}
 			};  
-
+			
 			/**
 			 * @desc Base CREATE request primitive for role resource
 			 */
@@ -1531,6 +1531,15 @@ module OneM2M_Templates {
 				resourceType := int31,
 				primitiveContent := {role := m_contentCreateRole()}
 			};
+
+			/**
+			 * @desc Base CREATE request primitive for token resource
+			 */
+			template (value) RequestPrimitive m_createTokenBase modifies m_create := {
+				requestIdentifier := testcasename() & "-m_createToken",
+				resourceType := int32,
+				primitiveContent := {token := m_contentCreateToken()}
+			};
 			
 			/**
 			 * @desc Reception template for CREATE DeviceAirConditioner
@@ -3946,12 +3955,12 @@ module OneM2M_Templates {
 			contentSize  := omit,//NP
 			choice := omit//NP
 		};
-
+		
 		template (value) MissingData m_missingData( in XSD.NonNegativeInteger p_number, in XSD.Duration p_duration) := {
 			number := p_number,
 			duration := p_duration
 		};
-
+		
 		/**
 		 * @desc Base primitiveContent for CREATE operation for Role resource
 		 * @param p_name Resource name
@@ -3976,7 +3985,36 @@ module OneM2M_Templates {
 			tokenLink := omit, //O
 			choice := omit//O
 		};
-	
+		
+		/**
+		 * @desc Base primitiveContent for CREATE operation for Token resource
+		 * @param p_name Resource name
+		 */
+		template (value) Token_optional m_contentCreateToken (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
+			tokenID := "roleID@a.b", //M
+			tokenObject := fx_generateJWT(), //M
+			version := omit, //O
+			issuer := omit, //O
+			holder := omit, //O
+			notBefore := omit,//O
+			notAfter := omit,//O
+			tokenName := omit,//O
+			audience := omit,//O
+			permissions := omit,//O
+			extension_ := omit,//O
+			choice := omit//O
+		};
+
 		/**
 		 * @desc Base primitiveContent for CREATE operation for BinarySwitch resource
 		 * @param 
@@ -4624,7 +4662,7 @@ module OneM2M_Templates {
 			bath := *,//O
 			choice := omit//NP
 		};
-
+	
 	}//end group ContentCreate
 	
 	group ContentUpdate {
diff --git a/LibOneM2M/OneM2M_Types.ttcn b/LibOneM2M/OneM2M_Types.ttcn
index 64a391e..2230332 100644
--- a/LibOneM2M/OneM2M_Types.ttcn
+++ b/LibOneM2M/OneM2M_Types.ttcn
@@ -2095,6 +2095,7 @@ type union PrimitiveContent {
 	DynamicAuthorizationConsultation_optional dynamicAuthorizationConsultation,
 	GenericInterworkingOperationInstance_optional genericInterworkingOperationInstance,
 	Role_optional role,
+	Token_optional token,
 	//HAIM 
 	DeviceAirConditioner_optional deviceAirConditioner,
 	DeviceClothesWasherDryer_optional deviceClothesWasherDryer,
@@ -28465,6 +28466,50 @@ group OptionalResourceTypes {
 	  variant (choice.subscription_list[-]) "name as 'subscription'";
 	};
 
+	type record Token_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,
+		TokenID tokenID optional,
+		DynAuthJWT tokenObject optional,
+		XSD.String version optional,
+		XSD.ID issuer optional,
+		XSD.ID holder optional,
+		Timestamp notBefore optional,
+		Timestamp notAfter optional,
+		XSD.String tokenName optional,
+		ListOfM2MID audience optional,
+		TokenPermissions permissions optional,
+		XSD.String extension_ 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 (extension_) "name as 'extension'";
+	  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";
+	};
+
+
 }//end group OptionalResourceTypes
 	
 	
diff --git a/LibOneM2M/OneM2M_TypesAndValues.ttcn b/LibOneM2M/OneM2M_TypesAndValues.ttcn
index b57c8df..deaf92c 100644
--- a/LibOneM2M/OneM2M_TypesAndValues.ttcn
+++ b/LibOneM2M/OneM2M_TypesAndValues.ttcn
@@ -43,6 +43,7 @@ module OneM2M_TypesAndValues {
 	const XSD.String c_defaultTimeSeriesAnncResourceName := "MyTimeSeriesAnncResource";
 	const XSD.String c_defaultTimeSeriesInstanceResourceName := "MyTimeSeriesInstanceResource";
 	const XSD.String c_defaultRoleResourceName := "MyRoleResource";
+	const XSD.String c_defaultTokenResourceName := "MyTokenResource";
 	const XSD.String c_defaultGenericInterworkingServiceResourceName := "MyGenericInterworkingServiceResource"; //<genericInterworkingService>
 	const XSD.ID c_aeAuxName := "MyAe";
 	const XSD.String c_defaultAE2Name := "MyAe2";
diff --git a/OneM2M_Testcases_CSE_Release_3.ttcn b/OneM2M_Testcases_CSE_Release_3.ttcn
index ce68a58..3f85ba7 100644
--- a/OneM2M_Testcases_CSE_Release_3.ttcn
+++ b/OneM2M_Testcases_CSE_Release_3.ttcn
@@ -7577,7 +7577,7 @@ module OneM2M_Testcases_CSE_Release_3 {
 						// Preamble 	
 						vc_remoteCseIndex := f_cse_registerRemoteCse(m_createRemoteCSEBase);
 				
-//						Test Body
+						// Test Body
 						var RequestPrimitive v_createRequest := f_getCreateRequestPrimitive(int31, m_createRoleBase, -1);
 						f_send(e_mcc_port, m_request(v_createRequest));
 
@@ -7608,6 +7608,70 @@ module OneM2M_Testcases_CSE_Release_3 {
 
 					}//end f_CSE_SEC_ROL_CRE_002						
 					
+					
+					/**
+					 * @desc Check that the IUT successfully creates the <token> resource requested by the Authorization Authority
+					 * 
+					 */						
+					testcase TC_CSE_SEC_ROL_CRE_004() runs on Tester system CseSystem {
+						//Local variables
+						var CseSimu v_cse1 := CseSimu.create("CSE1") alive;
+								
+						v_cse1.start(f_CSE_SEC_ROL_CRE_004()); 	
+						v_cse1.done;																			
+					}	
+					
+					function f_CSE_SEC_ROL_CRE_004() 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(int32, m_createTokenBase, -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__ & ": Token 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 token 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_004						
+
 									
 				}//end group Create
 				
-- 
GitLab