OneM2M_Functions.ttcn 118 KB
Newer Older
1 2 3 4 5 6 7 8
/**
 *  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
9 10
 *  @version    $URL: https://oldforge.etsi.org/svn/oneM2M/branches/Release1/ttcn/LibOneM2M/OneM2M_Functions.ttcn $
 *              $Id: OneM2M_Functions.ttcn 347 2017-08-11 08:48:20Z reinaortega $
11 12 13 14 15 16 17
 *  @desc       Module containing functions for oneM2M
 *
 */
module OneM2M_Functions {
	
	import from XSD all;
	import from OneM2M_Templates all;
18
	import from OneM2M_Types all;
19 20 21
	import from OneM2M_TypesAndValues all;
	import from OneM2M_TestSystem all;
	import from OneM2M_Pixits all;
22
	import from OneM2M_Pics all;
23
	
24 25
	group ConfigFunctions {
		
26 27 28
		/**
			@desc Ports mapping and default behaviour activation for Config 1
		*/
29
		function f_cf01Up(in boolean p_auxiliaryAe2Required := false) runs on AeSimu {
30
			
31
			// Variables
32 33
			vc_config := e_cf01;
			vc_testSystemRole := e_ae;	
34
			
35 36 37
			// Map
			map(self:mcaPort, system:mcaPort);
			map(self:acPort, system:acPort);
38
			
39
			activate(a_default());
40
			activate(a_cse_cf01());
41
				
42 43 44 45 46
			// Initialize AE2
			if(p_auxiliaryAe2Required) {
				vc_auxiliaryAe2Up := p_auxiliaryAe2Required;
				vc_ae2 := AeSimu.create("AE2") alive;
				vc_ae2.start(f_cf01UpAe2());
47
				vc_ae2.done;
48 49 50 51 52 53 54 55 56 57 58 59
			}
				
			//Initialze the IUT
							
		} // end f_cf01Up
		
		/**
			@desc Ports mapping and default behaviour activation for Config 1 on the auxiliary AE2
		*/
		function f_cf01UpAe2() runs on AeSimu {
			
			// Variables
60 61
			vc_config := e_cf01;
			vc_testSystemRole := e_ae;		
62 63 64 65 66 67 68 69 70 71
			
			// Map
			map(self:mcaPort, system:mcaPort);
			map(self:mcaPortIn, system:mcaPortIn);
			map(self:acPort, system:acPort);
			
			activate(a_default());
			activate(a_cse_cf01());
			activate(a_cse_cf01_ae2()); //For mcaPortIn
	
72
			//Initialze the IUT
73
							
74
		} // end f_cf01Up
75
		
76 77 78
		/**
		 * @desc Ports mapping and default behaviour activation for Config 02
		 */
79
		function f_cf02Up() runs on AeSimu {
80
				
81
			// Variables
82
			vc_config := e_cf02;
83
			vc_testSystemRole := e_ae;	
84
			vc_cse1 := CseSimu.create("CSE1") alive;
85
				
86 87 88 89
			// Map
			map(self:mcaPort, system:mcaPort);
			map(self:acPort, system:acPort);
			activate(a_default());
90 91 92
			activate(a_cse_cf02_ae1());
			vc_cse1.start(f_cf02UpCse1());
			vc_cse1.done;
93
				
94
			// Connect
95
			
96
			//Initialze the IUT
97
							
98
		} // end f_cf02Up
99 100 101 102 103 104 105
		
		/**
			@desc Ports mapping and default behaviour activation for Config 2 on the CSE1
		*/
		function f_cf02UpCse1() runs on CseSimu {
			
			// Variables
106 107
			vc_config := e_cf02;
			vc_testSystemRole := e_cse;		
108 109 110 111 112 113 114 115 116 117 118 119
			
			// Map
			map(self:mccPort, system:mccPort);
			map(self:mccPortIn, system:mccPortIn);
			map(self:acPort, system:acPort);
			
			activate(a_default());
			activate(a_cse_cf02_cse1());
			
			//Initialze the IUT
							
		} // end f_cf02UpCse1
120

121 122 123 124 125 126 127
		/**
		 * @desc Ports mapping and default behaviour activation for Config 02
		 */
		function f_cf02UpCseSimuMaster() runs on CseSimu {
				
			// Variables
			vc_config := e_cf02;
128
			vc_testSystemRole := e_cse;		
129
			vc_ae1 := AeSimu.create("AE1") alive;
130 131
				
			// Map
132
			map(self:mccPort, system:mccPort);
133
			map(self:mccPortIn, system:mccPortIn);
134 135
			map(self:acPort, system:acPort);
			activate(a_default());
136 137 138
			activate(a_cse_cf02_cse1());
			vc_ae1.start(f_cf02UpAe1());
			vc_ae1.done;
139 140
				
			// Connect
141
			
142 143 144 145
			//Initialze the IUT
							
		} // end f_cf02UpCseSimuMaster
		
146 147 148 149 150 151 152
		/**
			@desc Ports mapping and default behaviour activation for Config 2 on the AE1
		*/
		function f_cf02UpAe1() runs on AeSimu {
			
			// Variables
			vc_config := e_cf02;	
153
			vc_testSystemRole := e_ae;		
154 155 156 157 158 159 160 161 162 163 164 165
			
			// Map
			map(self:mcaPort, system:mcaPort);
			map(self:acPort, system:acPort);
			
			activate(a_default());
			activate(a_cse_cf02_ae1());
			
			//Initialze the IUT
							
		} // end f_cf02UpAe1
		
166 167 168
		/**
		 * @desc Ports mapping and default behaviour activation for Config 03
		 */
169
		function f_cf03Up() runs on CseSimu {
170 171
		
			// Variables
172
			vc_config := e_cf03;
173
			vc_testSystemRole := e_cse;		
174
			
175
			// Map
176
			map(self:mcaPort, system:mcaPort);//TODO To be consistent, we should use mcaPortIn for AE testing
177
			map(self:acPort, system:acPort);
178
			map(self:utPort, system:utPort);
179
			activate(a_default());
180
			activate(a_ae_cf03());
181 182 183 184 185 186 187
		
			// Connect
					
			//Initialze the IUT
					
		} // end f_cf03Up
		
188 189 190
		/**
		 * @desc Ports mapping and default behaviour activation for Config 04
		 */
191
		function f_cf04Up() runs on CseSimu {
192 193

			// Variables
194
			var PrimitiveContent v_cSEBaseResource;
195
			vc_config := e_cf04;
196 197
			vc_testSystemRole := e_cse;	
			
198 199 200
	
			// Map
			map(self:mccPort, system:mccPort);
201
			map(self:mccPortIn, system:mccPortIn);
202 203 204
			map(self:acPort, system:acPort);
			activate(a_default());
			activate(a_cse_cf04());
205 206 207 208 209
			
			//Creation of CSEBase
			
			v_cSEBaseResource := f_cse_generateLocalResource(-, -1, int5);
			vc_cSEBaseIndex := f_setLocalResource(v_cSEBaseResource, int5, -1);
210 211 212

			// Connect
			
213
			//Initialize the IUT
214 215 216 217 218
			
		} // end f_cf03Up

		/**
		 * @desc Ports unmapping
219
		 */
220
		function f_cf01Down() runs on AeSimu {
221
		
222
			unmap(self:mcaPort, system:mcaPort);
223
			unmap(self:acPort, system:acPort);
224 225 226
			if(vc_auxiliaryAe2Up) {
				vc_ae2.start(f_cf01DownAe2());
			}
227 228 229 230 231
		}
		
		/**
		 * @desc Ports unmapping
		 */
232 233 234
		function f_cf01DownAe2() runs on AeSimu {
				
			unmap(self:mcaPort, system:mcaPort);
235
			unmap(self:acPort, system:acPort);
236
			unmap(self:mcaPortIn, system:mcaPortIn);
237 238
		}
		
239 240 241
		/**
		 * @desc Ports unmapping
		 */
242
		function f_cf02Down() runs on AeSimu {
243
		
244
			unmap(self:mcaPort, system:mcaPort);
245
			unmap(self:acPort, system:acPort);
246 247 248
			unmap(vc_cse1:mccPort, system:mccPort);
			unmap(vc_cse1:mccPortIn, system:mccPortIn);
			unmap(vc_cse1:acPort, system:acPort);
249 250 251 252 253 254
		}		
		/**
		 * @desc Ports unmapping
		 */
		function f_cf02DownCseSimuMaster() runs on CseSimu {
				
255
			unmap(self:mccPort, system:mccPort);
256
			unmap(self:mccPortIn, system:mccPortIn);
257
			unmap(self:acPort, system:acPort);
258 259
			unmap(vc_ae1:mcaPort, system:mcaPort);
			unmap(vc_ae1:acPort, system:acPort);
260
		}		
261 262 263
		/**
		 * @desc Ports unmapping for Config 03
		 */
264
		function f_cf03Down() runs on CseSimu {
265 266
			
			unmap(self:mcaPort, system:mcaPort);
267
			unmap(self:utPort, system:utPort);
268 269 270 271 272 273
			unmap(self:acPort, system:acPort);
		}
		
		/**
		 * @desc Ports unmapping for Config 04
		 */
274
		function f_cf04Down() runs on CseSimu {
275 276
	
			unmap(self:mccPort, system:mccPort);
277
			unmap(self:mccPortIn, system:mccPortIn);
278 279
			unmap(self:acPort, system:acPort);
		}
280 281 282 283 284 285 286 287 288

	}//end group configFunctions
	
	group InfoPortCommunication {
	
		/**
		 * @desc Connection of InfoPort of two components
		 * @param p_tester PTC where InfoPort is to be connected
		 */
289 290 291 292 293
		function f_connectInfoPort(in Tester p_tester) runs on Tester {
			// Connect
			connect(self:infoPort, p_tester:infoPort);		
		} 
	
294 295 296 297
		/**
		 * @desc Disconnection of InfoPort of two components
		 * @param p_tester PTC where InfoPort is to be connected
		 */
298 299 300 301
		function f_disconnectInfoPort(in Tester p_tester) runs on Tester {
			// Disconnect
			disconnect(self:infoPort, p_tester:infoPort);		
		} 
302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322
	
		/**
		 * @desc Getting last responsePrimitive saved in a component
		 * @param p_tester Given component
		 */
		function f_getResponsePrimitive(in Tester p_component) runs on Tester return ResponsePrimitive {
			var ResponsePrimitive v_response;
			
			f_connectInfoPort(p_component);
	
			p_component.start(f_sendResponsePrimitive());
			alt {
				[]infoPort.receive(mw_responsePrimitiveforInfoPort) -> value v_response {
				}
			}
	
			f_disconnectInfoPort(p_component);
				
			return v_response;
				
		}
323
		
324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472
		/**
		 * @desc Getting last requestPrimitive saved in an AeSimu component
		 * @param p_tester Given component
		 */
		function f_getRequestPrimitive(in Tester p_component) runs on Tester return RequestPrimitive {
			var RequestPrimitive v_request;

			f_connectInfoPort(p_component);

			p_component.start(f_sendRequestPrimitive());
			alt {
				[]infoPort.receive(mw_requestPrimitiveforInfoPort) -> value v_request {
				}
			}

			f_disconnectInfoPort(p_component);
	
			return v_request;
	
		}
							
		/**
		 * @desc Getting primitiveContent retrieved in an AeSimu component
		 * @param p_tester AeSimu component
		 */
		function f_getPrimitiveContentRetrievedResource(in AeSimu p_ae) runs on Tester return PrimitiveContent {
			var PrimitiveContent v_primitiveContent;
			
			f_connectInfoPort(p_ae);
	
			p_ae.start(f_sendPrimitiveContentRetrievedResource());
			alt {
				[]infoPort.receive(mw_primitiveContent) -> value v_primitiveContent {
				}
			}
	
			f_disconnectInfoPort(p_ae);
				
			return v_primitiveContent;
				
		}
		
		/**
		 * @desc Getting remoteCSE resource from a CseSimu component
		 * @param p_tester CseSimu component
		 */
		function f_getRemoteCseResource(in CseSimu p_cse) runs on Tester return integer {
			var MyResource v_resource;
			var integer v_resourceIndex := -1;
			
			f_connectInfoPort(p_cse);
	
			p_cse.start(f_sendRemoteCseResource());
			alt {
				[]infoPort.receive(mw_resource) -> value v_resource {
					v_resourceIndex := f_setResource(v_resource.resource, v_resource.resourceType, v_resource.parentIndex, false);
				}
			}
	
			f_disconnectInfoPort(p_cse);
				
			return v_resourceIndex;
				
		}
		
		/**
		 * @desc Getting a specific resource from an AeSimu component
		 * @param p_tester AeSimu component
		 * @param p_resourceIndex Index of resource to be retrieved
		 */
		function f_getResource(in Tester p_component, in integer p_resourceIndex := -1) runs on Tester return integer {
			var MyResource v_resource;
			var integer v_resourceIndex := -1;
		
			f_connectInfoPort(p_component);

			p_component.start(f_sendResource(p_resourceIndex));
			alt {
				[]infoPort.receive(mw_resource) -> value v_resource {
					v_resourceIndex := f_setResource(v_resource.resource, v_resource.resourceType, v_resource.parentIndex, false);
				}
			}

			f_disconnectInfoPort(p_component);
			
			return v_resourceIndex;
			
		}		

		/**
		 * @desc Sending of last responsePrimitive (vc_response) through InfoPort
		 */	
		function f_sendResponsePrimitive() runs on Tester {
	
			infoPort.send(vc_response.primitive.responsePrimitive);
				
		} 

		/**
		 * @desc Sending of last requestPrimitive (vc_request) through InfoPort
		 */			
		function f_sendRequestPrimitive() runs on Tester {
	
			infoPort.send(vc_request.primitive.requestPrimitive);
	
		} 
		
		/**
		 * @desc Sending of last primitiveContent retrieved (vc_primitiveContentRetrievedResource) through InfoPort
		 */	
		function f_sendPrimitiveContentRetrievedResource() runs on AeSimu {
	
			infoPort.send(vc_primitiveContentRetrievedResource);
				
		} 	
		
		/**
		 * @desc Sending of remoteCSE resource through InfoPort
		 */	
		function f_sendRemoteCseResource() runs on CseSimu {
	
			infoPort.send(vc_resourcesList[vc_remoteCseIndex]);
				
		} 
		
		/**
		 * @desc Sending of Ae resource through InfoPort
		 */	
		function f_sendAeResource() runs on AeSimu {
	
			infoPort.send(vc_resourcesList[vc_aeAuxIndex]);
				
		} 		
		
		/**
		 * @desc Sending of a specific resource through InfoPort
		 * @param p_resourceIndex Index of resource to be sent
		 */	
		function f_sendResource(in integer p_resourceIndex) runs on Tester {
	
			if(p_resourceIndex == -1) {
				infoPort.send(vc_resourcesList[vc_aeAuxIndex]);  //TODO To send Ae or RemoteCSE depending on the component type
			} else {
				infoPort.send(vc_resourcesList[p_resourceIndex]);
			}
				
		} 	
	
	}// end of gropu InfoPortCommunication	
473
	
474
	group CseFunctions {
475
	
476
		group PreambleFunctions {
477 478 479 480 481 482 483

			/**
			 * @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 
			 */
484
			function f_cse_preamble_createAcpAux(in template (value) XSD.String p_acpName := c_acpAuxName, in template (value) AccessControlOperations p_allowedOperations := int63) runs on AeSimu return integer {//c_CRUDNDi
485
			
486
				return f_cse_createAccessControlPolicyAux(p_acpName, -, p_allowedOperations);
487
			
488 489
			}

490
	
491
			/**
492 493 494
			 * @desc Creation of auxiliar resource AE for correct execution of the test case
			 * @param p_accessControlPolicyIDs AccessControlPolicyIDs for the auxiliar AE resource
			 * @param p_poaList Point of contact of the auxiliar AE resource
495 496 497
			 * @return Internal AE resource index
			 * @verdict 
			 */
498
			function f_cse_preamble_registerAe(template (omit) AcpType p_accessControlPolicyIDs := omit, in template (omit) PoaList p_poaList := omit) runs on AeSimu return integer {//c_CRUDNDi
499
			
500 501 502
				var RequestPrimitive v_request;
				var MsgIn v_response;
				var integer v_aeAuxIndex := -1;
503
								
504
				v_request := valueof(m_createAeAux(p_accessControlPolicyIDs, p_poaList));
505 506
				
				v_request := f_getCreateRequestPrimitive(int2, v_request, -1);
507 508
				
				mcaPort.send(m_request(v_request));
509
				
510 511 512 513
				tc_ac.start;
				alt {
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response {
						tc_ac.stop;
514 515 516 517 518
						setverdict(pass,__SCOPE__&":INFO: Application registered successfuly");
						if(ischosen(v_response.primitive.responsePrimitive.primitiveContent.aE)) {
							
							f_checkAttributesToBeSaved(int2, v_request, v_response.primitive.responsePrimitive);
							
519
							vc_aeAuxIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent, int2);
520
							
521 522
							if(ispresent(v_response.primitive.responsePrimitive.primitiveContent.aE.aE_ID)){
								f_sendAcPrimitive("AE-ID_changed", oct2char(unichar2oct(v_response.primitive.responsePrimitive.primitiveContent.aE.aE_ID)));
523 524
							} else {
								f_sendAcPrimitive("AE-ID_changed", "0");
525 526
							}
						}
527 528 529
					}
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
						tc_ac.stop;
530
						setverdict(inconc, __SCOPE__&":INFO: Error while registering application");
531 532 533 534
						stop;
					}
					[] mcaPort.receive {
						tc_ac.stop;
535
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
536
						stop;
537
					};
538
					[] tc_ac.timeout {
539
						setverdict(inconc, __SCOPE__&":INFO: No answer while registering resource");
540 541 542
						stop;
					}
				}	
543
				
544
				f_checkAeSimuStatus();
545
				return vc_aeAuxIndex;
546
			}
547
			
548 549 550
			/**
			 * @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
551
			 * @param p_appId AppID of the AE resource to be created
552 553 554
			 * @return Internal AE resource index
			 * @verdict 
			 */
555
			function f_cse_preamble_registerAeWithId(XSD.ID p_appId, in template (value) AccessControlOperations p_allowedOperations := int63) runs on AeSimu return integer {//c_CRUDNDi
556
			
557 558 559
				var RequestPrimitive v_request;
				var integer v_aeAuxIndex := -1;
				var integer v_acpAuxIndex := -1;
560
			
561 562 563 564
				if(PICS_ACP_SUPPORT){
					v_acpAuxIndex := f_cse_createAccessControlPolicyAux(p_allowedOperations := p_allowedOperations);
					vc_acpAuxIndex := v_acpAuxIndex;
				}
565
				
566 567 568
				if(v_acpAuxIndex != -1) {
					vc_resourcesIndexToBeDeleted := {v_acpAuxIndex};
					v_request := valueof(m_createAe(p_appId, {f_getResourceId(vc_resourcesList[v_acpAuxIndex].resource)}, -));
569
					
570 571
					//TODO Test, to be removed
					v_request.to_ := f_getResourceAddress();
572
					
573 574 575 576 577 578 579
					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 {
580
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
581
						tc_ac.stop;
582
						setverdict(pass, __SCOPE__&": INFO: Application registered successfuly");
583
						if(ischosen(vc_response.primitive.responsePrimitive.primitiveContent.aE)) {
584
							
585
							vc_aeAuxIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, int2);
586
							
587 588
							if(ispresent(vc_response.primitive.responsePrimitive.primitiveContent.aE.aE_ID)){
								f_sendAcPrimitive("AE-ID_changed", oct2char(unichar2oct(vc_response.primitive.responsePrimitive.primitiveContent.aE.aE_ID)));
589 590 591 592 593
							} else {
								f_sendAcPrimitive("AE-ID_changed", "0");
							}	
						}
					}
594 595
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO))
					{
596
						tc_ac.stop;
597
						setverdict(inconc, __SCOPE__&":INFO: Error while registering application");
598 599 600 601
						stop;
					}
					[] mcaPort.receive {
						tc_ac.stop;
602
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
603 604 605
						stop;
					}
					[] tc_ac.timeout {
606
						setverdict(inconc, __SCOPE__&":INFO: No answer while registering resource");
607 608 609
						stop;
					}
				}	
610
				
611
				f_checkAeSimuStatus();
612
				return vc_aeAuxIndex;
613
			
614
			}
615
			
616 617 618 619 620 621
			/**
			 * @desc Creation of ServiceSubscribedAppRule resource
			 * @param p_allowedAEs Allowed AEs
			 * @return Internal resource index
			 * @verdict 
			 */
622
			function f_cse_preamble_createServiceSubscribedAppRule(in template ListOfM2MID p_allowedAEs := {""}) runs on AeSimu return integer {//c_CRUDNDi
623
			
624
				var integer v_serviceSubscribedAppRuleIndex := -1;
625
	
626
				v_serviceSubscribedAppRuleIndex := f_cse_createResource(int19, m_createServiceSubscribedAppRule({"None"}, {PX_APP_ID}, valueof(p_allowedAEs)));
627
				
628
				return v_serviceSubscribedAppRuleIndex;
629
			
630
			}
631
			
632 633 634 635 636 637
			/**
			 * @desc Creation of SubscribedProfile resource
			 * @param p_allowedAEs Allowed AEs
			 * @return Internal resource index
			 * @verdict 
			 */
638 639 640 641 642 643
			function f_cse_preamble_createServiceSubscribedProfile(in template ListOfM2MID p_allowedAEs := {""}) runs on AeSimu return integer {//c_CRUDNDi
			
				var integer v_serviceSubscribedAppRuleIndex := -1;
				var integer v_serviceSubscribedProfileIndex := -1;
				var template RequestPrimitive m_request := m_createM2mServiceSubscriptionProfileBase;
				
644
				//TODO Create/Update serviceSubscribedNode //m_request.primitiveContent.m2mServiceSubscriptionProfile.choice.choice_list[0].serviceSubscribedNode := m_contentServiceSubscribedNode;
645 646 647 648 649 650 651 652
				v_serviceSubscribedAppRuleIndex := f_cse_createResource(int19, m_createServiceSubscribedAppRule({"None"}, {PX_APP_ID}, valueof(p_allowedAEs)));
				m_request.primitiveContent.m2mServiceSubscriptionProfile.choice.choice_list[0].serviceSubscribedNode.ruleLinks := {f_getResourceAddress(v_serviceSubscribedAppRuleIndex)};
				v_serviceSubscribedProfileIndex := f_cse_createResource(int11, m_request);
			
				return v_serviceSubscribedProfileIndex;
	
			}
			
653 654 655 656 657 658 659 660
			/**
			 * @desc Registration of AE2 for handling of notifications and handling of subscription verification started if subscription resource is to be created
			 * @param p_ae2Index Internal AE2 resource index
			 * @param p_createRequestPrimitive CREATE Request for the resource to be created
			 * @param p_resourceType ResourceType of the resource to be created
			 * @param p_responseStatusCode Response Status Code to be sent in response to the subscription verification request
			 * @verdict 
			 */
661
			function f_cse_preamble_subscriptionVerification(inout integer p_ae2Index, inout template RequestPrimitive p_createRequestPrimitive,in ResourceType p_resourceType, in ResponseStatusCode p_responseStatusCode := int2001) runs on AeSimu {
662
				if(p_resourceType == int23){
663 664 665 666 667 668
					
					vc_ae2.start(f_cse_createResource(int2, m_createAe(PX_APP_ID, -, PX_AE2_ID_STEM, "MyAe2", {f_getAnnouncementTargetPoA("HTTP", PX_AE2_ADDRESS, "")}), -1)); // AE2 is registred
					
					f_checkComponentDoneAndGetVerdict(vc_ae2);
					
					p_ae2Index := f_getResource(vc_ae2);
669 670
					if(ischosen(p_createRequestPrimitive.primitiveContent.subscription)){		//this condition is necessary for Subscription TCs where notification URI is set in m_createSubscriptionAdvanced
						p_createRequestPrimitive.primitiveContent.subscription.notificationURI := {f_getResourceAddress(p_ae2Index)}; 
671
					}
672
					vc_ae2.start(f_cse_notifyProcedure_subscriptionVerificationHandler(p_responseStatusCode));
673 674
				}
			}
675
		
676
		}//end group preambleFunctions
677 678 679
		
		group PostambleFunctions {
	
680
			/**
681
			 * @desc Deletion of all resources created during the test case execution. It deals also with AE2 created resources if any. IUT gets clean and ready for next execution
682 683
			 * @verdict 
			 */
684
			function f_cse_postamble_deleteResources() runs on AeSimu {
685 686 687
				var integer i;
				var XSD.ID v_resourceAddress;
				var RequestPrimitive v_request;
688
				
689
				if (PX_RUN_POSTAMBLE) {
690
					
691 692 693 694
					if(vc_auxiliaryAe2Up) {
						f_cse_postamble_aeSimu(vc_ae2);
					}
					
695 696 697 698
					for(i := lengthof(vc_resourcesIndexToBeDeleted) -1; i >=0; i := i - 1) {
						
						v_resourceAddress := f_getResourceAddress(vc_resourcesIndexToBeDeleted[i]); 
						
699
						v_request := valueof(m_delete(v_resourceAddress, f_getOriginator(vc_resourcesIndexToBeDeleted[i])));
700 701
						
						v_request.from_ := f_getOriginator(vc_resourcesIndexToBeDeleted[i]);
702

703
						mcaPort.send(m_request(v_request));
704
						
705 706 707 708
						tc_ac.start;
						alt {
							[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) {
								tc_ac.stop;
709
								log(__SCOPE__&" INFO: Resource " & v_request.to_ & " deleted");
710 711 712
							}
							[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
								tc_ac.stop;
713
								log(__SCOPE__&" INFO: Error while deleting resource " & v_request.to_);
714 715
							}
							[] tc_ac.timeout {
716
								log(__SCOPE__&" INFO: No answer while deleting resource " & v_request.to_);
717 718
							}	
						}	
719
						
720 721
					}
				}
722
						
723
			}
724
			
725
			/**
726
			 * @desc Calls to postamble for AeSimu components (i.e. AE2)
727 728 729 730 731 732 733 734 735
			 * @verdict 
			 */
			function f_cse_postamble_aeSimu(in AeSimu p_ae) runs on AeSimu {
				if(p_ae.running) {
					p_ae.stop;
				}
					p_ae.start(f_cse_postamble_deleteResources());
			}
			
736 737 738 739
			/**
			 * @desc Deletion of all resources created during the test case execution. IUT gets clean and ready for next execution
			 * @verdict 
			 */
740
			function f_cse_postamble_deleteResourcesCSE() runs on CseSimu {
741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774
				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_delete(v_resourceAddress, f_getOriginator(vc_resourcesIndexToBeDeleted[i],false)));
			
						v_request.from_ := PX_SUPER_CSE_ID;

						mccPort.send(m_request(v_request));
			
						tc_ac.start;
						alt {
							[] mccPort.receive(mw_response(mw_responsePrimitiveOK)) {
								tc_ac.stop;
								log(__SCOPE__&" INFO: Resource " & v_request.to_ & " deleted");
							}
							[] mccPort.receive(mw_response(mw_responsePrimitiveKO)) {
								tc_ac.stop;
								log(__SCOPE__&" INFO: Error while deleting resource " & v_request.to_);
							}
							[] tc_ac.timeout {
								log(__SCOPE__&" INFO: No answer while deleting resource " & v_request.to_);
							}	
						}	
			
					}
				}
			
775
			}			
776 777 778 779 780
			
		}//end group postambleFunctions
		
		group AeSimuFunctions {
			
781 782 783
			/**
			 * @desc Creation of a resource
			 * @param p_resourceType Resource type of the resource to be created
784
			 * @param p_requestPrimitive CREATE request primitive for the resource to be created
785 786 787 788
			 * @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 
			 */
789
			function f_cse_createResource(in ResourceType p_resourceType, template RequestPrimitive p_requestPrimitive := m_create, integer p_parentIndex := -1) runs on AeSimu return integer {
790
			
791 792
				var RequestPrimitive v_request;
				var integer v_resourceIndex := -1;
793
				
794
				v_request := f_getCreateRequestPrimitive(p_resourceType, p_requestPrimitive, p_parentIndex);
795
			
796 797 798
				mcaPort.send(m_request(v_request));
				tc_ac.start;
				alt {
799
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
800
						tc_ac.stop;
801
						setverdict(pass, __SCOPE__&":INFO: Resource type " & int2str(enum2int(p_resourceType)) & " created successfuly");
802 803 804 805 806
						f_checkAttributesToBeSaved(p_resourceType, v_request, vc_response.primitive.responsePrimitive);
						v_resourceIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, p_resourceType, p_parentIndex);
						if(p_resourceType == int2) {
							vc_aeAuxIndex := v_resourceIndex;
						}
807 808 809
					}
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
						tc_ac.stop;
810
						setverdict(inconc, __SCOPE__&":INFO: Error while creating resource type " & int2str(enum2int(p_resourceType)));
811 812 813
					}
					[] mcaPort.receive {
						tc_ac.stop;
814
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
815 816
					}
					[] tc_ac.timeout {
817
						setverdict(inconc, __SCOPE__&":INFO: No answer while creating resource type " & int2str(enum2int(p_resourceType)));
818 819
					}
				}	
820
				
821
				f_checkAeSimuStatus();
822
				
823
				return v_resourceIndex;
824
		
825
			}
826
		
827 828 829 830 831 832 833
			/**
			 * @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 
			 */
834
			function f_cse_createAccessControlPolicyAux(in template (value) XSD.String p_acpName := c_acpAuxName, in template (value) ListOfURIs p_acor := PX_ACOR, in template (value) AccessControlOperations p_allowedOperations := int63) runs on AeSimu return integer{				var RequestPrimitive v_request;
835
				var integer v_acpAuxIndex := -1;
836
				
837
				v_request := valueof(m_createAcpAux(p_acpName := p_acpName, p_allowedOperations := p_allowedOperations));
838
				
839 840
				v_request := f_getCreateRequestPrimitive(int1, v_request, -1);
								
841 842 843
				mcaPort.send(m_request(v_request));
				tc_ac.start;
				alt {
844
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
845
						tc_ac.stop;
846
						setverdict(pass, __SCOPE__&":INFO: Resource type " & int2str(1) & " created successfuly");
847 848
						f_checkAttributesToBeSaved(int1, v_request, vc_response.primitive.responsePrimitive);
						v_acpAuxIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, int1);
849 850 851 852
						vc_acpAuxIndex := v_acpAuxIndex;
					}
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
						tc_ac.stop;
853
						setverdict(inconc, __SCOPE__&":INFO: Error while creating resource type " & int2str(1));
854 855 856
					}
					[] mcaPort.receive {
						tc_ac.stop;
857
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
858 859
					}
					[] tc_ac.timeout {
860
						setverdict(inconc, __SCOPE__&":INFO: No answer while creating resource type " & int2str(1));
861 862
					}
				}	
863
				
864
				f_checkAeSimuStatus();
865
			
866
				return v_acpAuxIndex;
867
	
868
			}
869
							
870
			/**
871 872
			 * @desc Message exchange for the update of a resource
			 * @param p_requestPrimitive UPDATE request primitive to be used
873 874
			 * @verdict 
			 */
875
			function f_cse_updateResource(in RequestPrimitive p_requestPrimitive) runs on AeSimu {
876 877 878 879

				mcaPort.send(m_request(p_requestPrimitive));
				tc_ac.start;
				alt {
880
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
881
						tc_ac.stop;
882
						setverdict(pass, __SCOPE__&":INFO: Attribute of resource updated successfuly");
883
					}
884
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value vc_response {
885
						tc_ac.stop;
886
						setverdict(inconc, __SCOPE__&":INFO: Error while updating resource");
887 888 889
					}
					[] mcaPort.receive{
						tc_ac.stop;
890
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
891 892
					}
					[] tc_ac.timeout {
893
						setverdict(inconc, __SCOPE__&":INFO: No answer while updating resource");
894 895
					}
				}	
896
				
897
				f_checkAeSimuStatus();
898
				
899
			}// end f_cse_updateResource
900
			
901
			/**
902 903 904
			 * @desc Message exchange for the retrieval of a resource
			 * @param p_resourceIndex Resource index of the resource to be retrieved
			 * @return PrimitiveContent parameter of the RETRIEVE response
905 906
			 * @verdict 
			 */
907
			function f_cse_retrieveResource(integer p_resourceIndex) runs on AeSimu return PrimitiveContent{
908 909

				mcaPort.send(m_request(m_retrieveResource(f_getResourceAddress(p_resourceIndex), f_getOriginator(p_resourceIndex))));
910 911
				tc_ac.start;
				alt {
912
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
913
						tc_ac.stop;
914
						setverdict(pass, __SCOPE__&":INFO: Resource retrieved successfuly");
915
					}
916
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value vc_response {
917 918 919 920
						tc_ac.stop;
						setverdict(inconc, __SCOPE__&":INFO: Error while retrieving resource");
					}
					[] mcaPort.receive{
921
						tc_ac.stop;
922
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
923 924
					}
					[] tc_ac.timeout {
925
						setverdict(inconc, __SCOPE__&":INFO: No answer while retrieving resource");