OneM2M_Functions.ttcn 99.3 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 18 19 20 21
 *  @desc       Module containing functions for oneM2M
 *
 */
module OneM2M_Functions {
	
	import from XSD all;
	import from OneM2M_Templates all;
	import from OneM2M_Types all;//{type XSD.ID};
	import from OneM2M_TypesAndValues all;
	import from OneM2M_TestSystem all;
	import from OneM2M_Pixits all;
22
	import from OneM2M_Pics all;
23 24 25
//	import from OneM2M_AdditionalTypes all;
	
	
26 27
	group ConfigFunctions {
		
28 29 30
		/**
			@desc Ports mapping and default behaviour activation for Config 1
		*/
31 32
		function f_cf01Up() runs on AeSimu {
			
33
			// Variables
34 35
			vc_config := e_cf01;	
			
36 37 38
			// Map
			map(self:mcaPort, system:mcaPort);
			map(self:acPort, system:acPort);
39
			
40
			activate(a_default());
41
			activate(a_cse_cf01());
42
				
43
			// Connect
44
						
45
			//Initialze the IUT
46
							
47
		} // end f_cf01Up
48
		
49 50 51
		/**
		 * @desc Ports mapping and default behaviour activation for Config 02
		 */
52
		function f_cf02Up() runs on AeSimu {
53
				
54
			// Variables
55
			vc_config := e_cf02;
56
			vc_cseSimu := CseSimu.create("CSE1") alive;
57
				
58 59
			// Map
			map(self:mcaPort, system:mcaPort);
60
			map(vc_cseSimu:mccPort, system:mccPort);
61 62
			map(self:acPort, system:acPort);
			activate(a_default());
63
			activate(a_cse_aeSimu());
64
				
65
			// Connect
66
			f_connectInfoPort(vc_cseSimu);
67
			//Initialze the IUT
68
							
69
		} // end f_cf02Up
70
		
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
		/**
		  * @desc Ports mapping and default behaviour activation for Config 01
		  */
		  
		function f_cf01UpCseSimuMaster() runs on CseSimu {
		
			// Variables
			vc_config := e_cf01;
			vc_aeSimu := AeSimu.create("AE1") alive;
		
			// Map
			map(self:mccPort, system:mcaPort);
			map(vc_aeSimu:mcaPort, system:mcaPort);
			map(self:acPort, system:acPort);
			activate(a_default());
			activate(a_cse_cseSimu());
		
			// Connect
			f_connectInfoPort(vc_aeSimu);
			//Initialze the IUT
					
		} // end f_cf01UpCseSimuMaster
		
94 95 96 97 98 99 100 101 102 103
		/**
		 * @desc Ports mapping and default behaviour activation for Config 02
		 */
		function f_cf02UpCseSimuMaster() runs on CseSimu {
				
			// Variables
			vc_config := e_cf02;
			vc_aeSimu := AeSimu.create("AE1") alive;
				
			// Map
104
			map(self:mccPort, system:mccPort);
105 106 107 108 109 110 111 112 113 114 115
			map(vc_aeSimu:mcaPort, system:mcaPort);
			map(self:acPort, system:acPort);
			activate(a_default());
			activate(a_cse_cseSimu());
				
			// Connect
			f_connectInfoPort(vc_aeSimu);
			//Initialze the IUT
							
		} // end f_cf02UpCseSimuMaster
		
116 117 118
		/**
		 * @desc Ports mapping and default behaviour activation for Config 03
		 */
119
		function f_cf03Up() runs on CseSimu {
120 121
		
			// Variables
122 123
			vc_config := e_cf03;
			
124 125 126 127
			// Map
			map(self:mcaPort, system:mcaPort);
			map(self:acPort, system:acPort);
			activate(a_default());
128
			activate(a_ae_cf03());
129 130 131 132 133 134 135
		
			// Connect
					
			//Initialze the IUT
					
		} // end f_cf03Up
		
136 137 138
		/**
		 * @desc Ports mapping and default behaviour activation for Config 04
		 */
139
		function f_cf04Up() runs on CseSimu {
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159

			// Variables
			vc_config := e_cf04;
	
			// Map
			map(self:mccPort, system:mccPort);
			map(self:acPort, system:acPort);
			activate(a_default());
			activate(a_cse_cf04());

			// Connect
			
			//Initialze the IUT
			
		} // end f_cf03Up

		/**
		 * @desc Ports unmapping
		 * @verdict 
		 */
160
		/*function f_cfCseTesterDown() runs on Tester {
161 162 163 164 165 166 167 168 169 170 171
		
			if(vc_config == e_cf01) {
				f_cf01Down()
			} else if (vc_config == e_cf02){
				f_cf02Down()
			} 
		}
		/**
		 * @desc Ports unmapping
		 * @verdict 
		 */
172
		/*function f_cfAeTesterDown() runs on AeSimu {
173 174 175 176
		
			if(vc_config == e_cf03) {
				f_cf03Down()
			} 
177
		}	
178 179 180
		/**
		 * @desc Ports unmapping
		 * @verdict 
181
		 */
182
		function f_cf01Down() runs on AeSimu {
183
		
184
			unmap(self:mcaPort, system:mcaPort);
185
			unmap(self:acPort, system:acPort);
186 187 188 189 190 191 192 193 194 195 196 197 198
		}
		
		/**
		 * @desc Ports unmapping
		 * @verdict 
		 */
		function f_cf01DownCseSimuMaster() runs on CseSimu {	
			unmap(self:mccPort, system:mccPort);
			unmap(vc_aeSimu:mcaPort, system:mcaPort);
			unmap(self:acPort, system:acPort);
			unmap(vc_aeSimu:acPort, system:acPort);
		}
		
199 200 201 202
		/**
		 * @desc Ports unmapping
		 * @verdict 
		 */
203
		function f_cf02Down() runs on AeSimu {
204
		
205
			unmap(self:mcaPort, system:mcaPort);
206 207 208 209 210 211 212 213 214 215
			unmap(vc_cseSimu:mccPort, system:mccPort);
			unmap(self:acPort, system:acPort);
			unmap(vc_cseSimu:acPort, system:acPort);
		}		
		/**
		 * @desc Ports unmapping
		 * @verdict 
		 */
		function f_cf02DownCseSimuMaster() runs on CseSimu {
				
216
			unmap(self:mccPort, system:mccPort);
217
			unmap(vc_aeSimu:mcaPort, system:mcaPort);
218
			unmap(self:acPort, system:acPort);
219
			unmap(vc_aeSimu:acPort, system:acPort);
220
		}		
221 222 223
		/**
		 * @desc Ports unmapping for Config 03
		 */
224
		function f_cf03Down() runs on CseSimu {
225 226 227 228 229 230 231 232
			
			unmap(self:mcaPort, system:mcaPort);
			unmap(self:acPort, system:acPort);
		}
		
		/**
		 * @desc Ports unmapping for Config 04
		 */
233
		function f_cf04Down() runs on CseSimu {
234 235 236 237 238
	
			unmap(self:mccPort, system:mccPort);
			unmap(self:acPort, system:acPort);
		}
		
239 240 241 242 243 244 245 246 247 248
		function f_connectInfoPort(in Tester p_tester) runs on Tester {
			// Connect
			connect(self:infoPort, p_tester:infoPort);		
		} 
	
		function f_disconnectInfoPort(in Tester p_tester) runs on Tester {
			// Disconnect
			disconnect(self:infoPort, p_tester:infoPort);		
		} 
		
249
	}//end group configFunctions
250
	
251
	group CseFunctions {
252
	
253
		group PreambleFunctions {
254 255 256 257 258 259 260

			/**
			 * @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 
			 */
261
			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
262
			
263
				return f_cse_createAccessControlPolicyAux(p_acpName, -, p_allowedOperations);
264
			
265 266
			}

267
	
268 269 270 271 272 273
			/**
			 * @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
			 * @return Internal AE resource index
			 * @verdict 
			 */
274
			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
275
			
276 277 278
				var RequestPrimitive v_request;
				var MsgIn v_response;
				var integer v_aeAuxIndex := -1;
279
								
280
				v_request := valueof(m_createAeAux(p_accessControlPolicyIDs, p_poaList));
281 282
				
				v_request := f_getCreateRequestPrimitive(int2, v_request, -1);
283 284
				
				mcaPort.send(m_request(v_request));
285
				
286 287 288 289
				tc_ac.start;
				alt {
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response {
						tc_ac.stop;
290 291 292 293 294
						setverdict(pass,__SCOPE__&":INFO: Application registered successfuly");
						if(ischosen(v_response.primitive.responsePrimitive.primitiveContent.aE)) {
							
							f_checkAttributesToBeSaved(int2, v_request, v_response.primitive.responsePrimitive);
							
295
							vc_aeAuxIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent, int2);
296
							
297 298
							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)));
299 300
							} else {
								f_sendAcPrimitive("AE-ID_changed", "0");
301 302
							}
						}
303 304 305
					}
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
						tc_ac.stop;
306
						setverdict(inconc, __SCOPE__&":INFO: Error while registering application");
307 308 309 310
						stop;
					}
					[] mcaPort.receive {
						tc_ac.stop;
311
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
312
						stop;
313
					};
314
					[] tc_ac.timeout {
315
						setverdict(inconc, __SCOPE__&":INFO: No answer while registering resource");
316 317 318
						stop;
					}
				}	
319
				
320
				f_checkAeSimuStatus();
321
				return vc_aeAuxIndex;
322
			
323
			}
324
			
325 326 327 328 329 330
			/**
			 * @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
			 * @return Internal AE resource index
			 * @verdict 
			 */
331
			function f_cse_preamble_registerAeWithId(XSD.ID p_appId, in template (value) AccessControlOperations p_allowedOperations := int63) runs on AeSimu return integer {//c_CRUDNDi
332
			
333 334 335
				var RequestPrimitive v_request;
				var integer v_aeAuxIndex := -1;
				var integer v_acpAuxIndex := -1;
336
			
337 338 339 340
				if(PICS_ACP_SUPPORT){
					v_acpAuxIndex := f_cse_createAccessControlPolicyAux(p_allowedOperations := p_allowedOperations);
					vc_acpAuxIndex := v_acpAuxIndex;
				}
341
				
342 343 344
				if(v_acpAuxIndex != -1) {
					vc_resourcesIndexToBeDeleted := {v_acpAuxIndex};
					v_request := valueof(m_createAe(p_appId, {f_getResourceId(vc_resourcesList[v_acpAuxIndex].resource)}, -));
345
					
346 347
					//TODO Test, to be removed
					v_request.to_ := f_getResourceAddress();
348
					
349 350 351 352 353 354 355
					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 {
356
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
357
						tc_ac.stop;
358
						setverdict(pass, __SCOPE__&": INFO: Application registered successfuly");
359
						if(ischosen(vc_response.primitive.responsePrimitive.primitiveContent.aE)) {
360
							
361
							vc_aeAuxIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, int2);
362
							
363 364
							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)));
365 366 367 368 369
							} else {
								f_sendAcPrimitive("AE-ID_changed", "0");
							}	
						}
					}
370 371
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO))
					{
372
						tc_ac.stop;
373
						setverdict(inconc, __SCOPE__&":INFO: Error while registering application");
374 375 376 377
						stop;
					}
					[] mcaPort.receive {
						tc_ac.stop;
378
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
379 380 381
						stop;
					}
					[] tc_ac.timeout {
382
						setverdict(inconc, __SCOPE__&":INFO: No answer while registering resource");
383 384 385
						stop;
					}
				}	
386
				
387
				f_checkAeSimuStatus();
388
				return vc_aeAuxIndex;
389
			
390
			}
391
			
392
			function f_cse_preamble_createServiceSubscribedAppRule(in template ListOfM2MID p_allowedAEs := {""}) runs on AeSimu return integer {//c_CRUDNDi
393
			
394
				var integer v_serviceSubscribedAppRuleIndex := -1;
395
	
396
				v_serviceSubscribedAppRuleIndex := f_cse_createResource(int19, m_createServiceSubscribedAppRule({"None"}, {PX_APP_ID}, valueof(p_allowedAEs)));
397
				
398
				return v_serviceSubscribedAppRuleIndex;
399
			
400
			}
401
			
402 403 404 405 406 407 408 409 410 411 412 413 414 415 416
			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;
				
				m_request.primitiveContent.m2mServiceSubscriptionProfile.choice.choice_list[0].serviceSubscribedNode := m_contentServiceSubscribedNode;
				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;
	
			}
			
417
			function f_cse_preamble_subscriptionVerification(out AeSimu p_ae2,in integer p_aeIndex, inout integer p_ae2Index, inout template RequestPrimitive p_createRequestPrimitive,in ResourceType p_resourceType, in ResponseStatusCode p_responseStatusCode := int2001) runs on AeSimu {
418
				if(p_resourceType == int23){
419 420
					p_ae2 := AeSimu.create("AE2") alive;
					p_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
421
					p_ae2.done;
422
					p_ae2Index := f_getResource(p_ae2);
423 424
					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)}; 
425
					}
426
					p_ae2.start(f_cse_notifyProcedure_subscriptionVerificationHandler(p_aeIndex, p_responseStatusCode));
427 428
				}
			}
429
		
430
		}//end group preambleFunctions
431 432 433
		
		group PostambleFunctions {
	
434 435 436 437
			/**
			 * @desc Deletion of all resources created during the test case execution. IUT gets clean and ready for next execution
			 * @verdict 
			 */
438
			function f_cse_postamble_deleteResources() runs on AeSimu {
439 440 441
				var integer i;
				var XSD.ID v_resourceAddress;
				var RequestPrimitive v_request;
442
				
443
				if (PX_RUN_POSTAMBLE) {
444
					
445 446 447 448
					for(i := lengthof(vc_resourcesIndexToBeDeleted) -1; i >=0; i := i - 1) {
						
						v_resourceAddress := f_getResourceAddress(vc_resourcesIndexToBeDeleted[i]); 
						
449
						v_request := valueof(m_delete(v_resourceAddress, f_getOriginator(vc_resourcesIndexToBeDeleted[i])));
450 451
						
						v_request.from_ := f_getOriginator(vc_resourcesIndexToBeDeleted[i]);
452

453
						mcaPort.send(m_request(v_request));
454
						
455 456 457 458
						tc_ac.start;
						alt {
							[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) {
								tc_ac.stop;
459
								log(__SCOPE__&" INFO: Resource " & v_request.to_ & " deleted");
460 461 462
							}
							[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
								tc_ac.stop;
463
								log(__SCOPE__&" INFO: Error while deleting resource " & v_request.to_);
464 465
							}
							[] tc_ac.timeout {
466
								log(__SCOPE__&" INFO: No answer while deleting resource " & v_request.to_);
467 468
							}	
						}	
469
						
470 471
					}
				}
472
						
473
			}
474
			
475 476 477 478
			/**
			 * @desc Deletion of all resources created during the test case execution. IUT gets clean and ready for next execution
			 * @verdict 
			 */
479
			function f_cse_postamble_deleteResourcesCSE() runs on CseSimu {
480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513
				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_);
							}	
						}	
			
					}
				}
			
514
			}
515
			
516
			function f_is_component_done(in Tester p_ae2) runs on Tester {
517
			
518 519
				tc_ac.start(10.0);
				alt {
520
					[] p_ae2.done {
521 522 523
					tc_ac.stop;
					}
					[] tc_ac.timeout {
524
						setverdict(inconc, __SCOPE__ & "INFO: Notify verification not received");
525 526 527
					}
				}
			} //end f_is_component_done
528
			
529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547
			/**
				@desc 
			*/
			function f_getResponsePrimitive(in AeSimu p_ae) runs on Tester return ResponsePrimitive {
				var ResponsePrimitive v_response;
				
				f_connectInfoPort(p_ae);
		
				p_ae.start(f_sendResponsePrimitive());
				alt {
					[]infoPort.receive(mw_responsePrimitiveforInfoPort) -> value v_response {
					}
				}
		
				f_disconnectInfoPort(p_ae);
					
				return v_response;
					
			}
548
			
549 550 551 552 553 554 555 556 557 558 559 560 561 562
						
			/**
				@desc 
			*/
			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 {
					}
				}
563
		
564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581
				f_disconnectInfoPort(p_ae);
					
				return v_primitiveContent;
					
			}
			
			/**
				@desc 
			*/
			function f_getRemoteCseResource(in CseSimu p_cse) runs on AeSimu 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 {
582
						v_resourceIndex := f_setResource(v_resource.resource, v_resource.resourceType, v_resource.parentIndex, false);
583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603
					}
				}
		
				f_disconnectInfoPort(p_cse);
					
				return v_resourceIndex;
					
			}
			
			/**
				@desc 
			*/
			function f_getResource(in AeSimu p_ae, in integer p_resourceIndex := -1) runs on AeSimu return integer {
				var MyResource v_resource;
				var integer v_resourceIndex := -1;
			
				f_connectInfoPort(p_ae);
	
				p_ae.start(f_sendResource(p_resourceIndex));
				alt {
					[]infoPort.receive(mw_resource) -> value v_resource {
604
						v_resourceIndex := f_setResource(v_resource.resource, v_resource.resourceType, v_resource.parentIndex, false);
605 606
					}
				}
607
	
608 609
				f_disconnectInfoPort(p_ae);
				
610 611
				p_ae.done;
				
612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648
				return v_resourceIndex;
				
			}		
		
			function f_sendResponsePrimitive() runs on AeSimu {
		
				infoPort.send(vc_response.primitive.responsePrimitive);
					
			} 
			
			function f_sendPrimitiveContentRetrievedResource() runs on AeSimu {
		
				infoPort.send(vc_primitiveContentRetrievedResource);
					
			} 
			
			function f_sendRemoteCseResource() runs on CseSimu {
		
				infoPort.send(vc_resourcesList[vc_remoteCseIndex]);
					
			} 
			
			function f_sendResource(in integer p_resourceIndex) runs on AeSimu {
		
				if(p_resourceIndex == -1) {
					infoPort.send(vc_resourcesList[vc_aeAuxIndex]);
				} else {
					infoPort.send(vc_resourcesList[p_resourceIndex]);
				}
					
			} 
			
			
		}//end group postambleFunctions
		
		group AeSimuFunctions {
			
649 650 651 652 653 654 655 656
			/**
			 * @desc Creation of a resource
			 * @param p_resourceType Resource type of the resource to be created
			 * @param p_requestPrimitive Template request primitive
			 * @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 
			 */
657
			function f_cse_createResource(in ResourceType p_resourceType, template RequestPrimitive p_requestPrimitive := m_create, integer p_parentIndex := -1) runs on AeSimu return integer {
658
			
659 660
				var RequestPrimitive v_request;
				var integer v_resourceIndex := -1;
661
				
662
				v_request := f_getCreateRequestPrimitive(p_resourceType, p_requestPrimitive, p_parentIndex);
663
			
664 665 666
				mcaPort.send(m_request(v_request));
				tc_ac.start;
				alt {
667
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
668
						tc_ac.stop;
669
						setverdict(pass, __SCOPE__&":INFO: Resource type " & int2str(enum2int(p_resourceType)) & " created successfuly");
670 671 672 673 674
						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;
						}
675 676 677
					}
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
						tc_ac.stop;
678
						setverdict(inconc, __SCOPE__&":INFO: Error while creating resource type " & int2str(enum2int(p_resourceType)));
679 680 681
					}
					[] mcaPort.receive {
						tc_ac.stop;
682
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
683 684
					}
					[] tc_ac.timeout {
685
						setverdict(inconc, __SCOPE__&":INFO: No answer while creating resource type " & int2str(enum2int(p_resourceType)));
686 687
					}
				}	
688
				
689
				f_checkAeSimuStatus();
690
				
691
				return v_resourceIndex;
692
		
693
			}
694
		
695 696 697 698 699 700 701
			/**
			 * @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 
			 */
702
			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;
703
				var integer v_acpAuxIndex := -1;
704
				
705
				v_request := valueof(m_createAcpAux(p_acpName := p_acpName, p_allowedOperations := p_allowedOperations));
706
				
707 708
				v_request := f_getCreateRequestPrimitive(int1, v_request, -1);
								
709 710 711
				mcaPort.send(m_request(v_request));
				tc_ac.start;
				alt {
712
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
713
						tc_ac.stop;
714
						setverdict(pass, __SCOPE__&":INFO: Resource type " & int2str(1) & " created successfuly");
715 716
						f_checkAttributesToBeSaved(int1, v_request, vc_response.primitive.responsePrimitive);
						v_acpAuxIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, int1);
717 718 719 720
						vc_acpAuxIndex := v_acpAuxIndex;
					}
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
						tc_ac.stop;
721
						setverdict(inconc, __SCOPE__&":INFO: Error while creating resource type " & int2str(1));
722 723 724
					}
					[] mcaPort.receive {
						tc_ac.stop;
725
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
726 727
					}
					[] tc_ac.timeout {
728
						setverdict(inconc, __SCOPE__&":INFO: No answer while creating resource type " & int2str(1));
729 730
					}
				}	
731
				
732
				f_checkAeSimuStatus();
733
			
734
				return v_acpAuxIndex;
735
	
736
			}
737 738
				
				
739 740 741 742 743 744
			/**
			 * @desc Creation of the auxiliar Container resource
			 * @param p_parentIndex Internal resource index which indicates the parent of the Container resource to be created
			 * @return Internal resource index of the created Container resource
			 * @verdict 
			 */
745
			function f_cse_createContainerResourceAux (integer p_parentIndex := -1) runs on AeSimu return integer {
746
			
747 748 749
				var RequestPrimitive v_request;
				var integer v_acpAuxIndex := -1;
				var integer v_containerResourceIndex := -1;
750
				
751
				v_acpAuxIndex := f_cse_createAccessControlPolicyAux(p_acpName := c_acpAuxName);//"MyAcp_2"
752
				
753
				v_request := valueof(m_createContainerBase);
754 755 756
				v_request.primitiveContent.container.accessControlPolicyIDs := {f_getResourceId(vc_resourcesList[v_acpAuxIndex].resource)};
				v_request.primitiveContent.container.resourceName := "MyContainerAux";
				
757
				v_containerResourceIndex := f_cse_createResource(int3, v_request, p_parentIndex);
758
				
759
				return v_containerResourceIndex;		
760
		
761
			}
762
			
763 764 765 766 767
			/**
			 * @desc 
			 * @param p_requestPrimitive
			 * @verdict 
			 */
768
			function f_cse_updateResource(in RequestPrimitive p_requestPrimitive) runs on AeSimu {
769 770 771 772

				mcaPort.send(m_request(p_requestPrimitive));
				tc_ac.start;
				alt {
773
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
774
						tc_ac.stop;
775
						setverdict(pass, __SCOPE__&":INFO: Attribute of resource updated successfuly");
776
					}
777
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value vc_response {
778
						tc_ac.stop;
779
						setverdict(inconc, __SCOPE__&":INFO: Error while updating resource");
780 781 782
					}
					[] mcaPort.receive{
						tc_ac.stop;
783
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
784 785
					}
					[] tc_ac.timeout {
786
						setverdict(inconc, __SCOPE__&":INFO: No answer while updating resource");
787 788
					}
				}	
789
				
790
				f_checkAeSimuStatus();
791
				
792
			}// end f_cse_updateResource
793
			
794
			/**
795 796
			 * @desc 
			 * @param p_resourceIndex
797 798
			 * @verdict 
			 */
799
			function f_cse_retrieveResource(integer p_resourceIndex) runs on AeSimu return PrimitiveContent{
800 801

				mcaPort.send(m_request(m_retrieveResource(f_getResourceAddress(p_resourceIndex), f_getOriginator(p_resourceIndex))));
802 803
				tc_ac.start;
				alt {
804
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
805
						tc_ac.stop;
806
						setverdict(pass, __SCOPE__&":INFO: Resource retrieved successfuly");
807
					}
808
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value vc_response {
809 810 811 812
						tc_ac.stop;
						setverdict(inconc, __SCOPE__&":INFO: Error while retrieving resource");
					}
					[] mcaPort.receive{
813
						tc_ac.stop;
814
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
815 816
					}
					[] tc_ac.timeout {
817
						setverdict(inconc, __SCOPE__&":INFO: No answer while retrieving resource");
818
					}
819 820
				}	
				
821
				f_checkAeSimuStatus();
822
				
823
				return vc_response.primitive.responsePrimitive.primitiveContent;
824 825
				
			}// end f_cse_retrievingResource
826
			
827 828 829 830 831
			/**
			 * @desc 
			 * @param p_requestPrimitive
			 * @verdict 
			 */
832
			function f_cse_deleteResource(in integer p_index, in template (omit) RequestPrimitive p_requestPrimitive := omit) runs on AeSimu {
833 834 835
				var RequestPrimitive v_request;
				
				if(not isvalue(p_requestPrimitive)) {
836
					v_request := valueof(m_delete(f_getResourceAddress(p_index), f_getOriginator(p_index)));
837 838
				} else {
					v_request := valueof(p_requestPrimitive);
839
				}
840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859
				
				mcaPort.send(m_request(v_request));
						
				tc_ac.start;
				alt {
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) {
						tc_ac.stop;
						setverdict(pass, __SCOPE__&"INFO: Resource " & v_request.to_ & " deleted");
						
						f_removeElementFromList(vc_resourcesIndexToBeDeleted, p_index);
					}
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
						tc_ac.stop;
						setverdict(inconc, __SCOPE__&"INFO: Error while deleting resource " & v_request.to_);
					}
					[] tc_ac.timeout {
						setverdict(inconc, __SCOPE__&"INFO: No answer while deleting resource " & v_request.to_);
					}	
				}	
				
860
				f_checkAeSimuStatus();
861 862 863 864 865 866 867 868
				
			}// end f_cse_deleteResource
			
			/**
			 * @desc Check that a resource is present in the IUT (resourceId is known)
			 * @param p_resourceIndex Resource index 
			 * @return boolean
			 */
869
			function f_isResourcePresent (integer p_resourceIndex) runs on AeSimu return boolean {
870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890
			
				//Check to see if the resource is present or not
				mcaPort.send(m_request(m_retrieveResource(f_getResourceAddress(p_resourceIndex), f_getOriginator(p_resourceIndex))));
				tc_ac.start;
				alt {
					[] mcaPort.receive(mw_response(mw_responsePrimitive(int2000))) {
						tc_ac.stop;
						setverdict(pass, testcasename() & ": Resource present: " & f_getResourceAddress(p_resourceIndex));
						return true;
					}
					[] mcaPort.receive(mw_response(mw_responsePrimitive(?, -))) {
						tc_ac.stop;
						setverdict(inconc, testcasename() & ": Wrong response status code in the response");
						return false;
					}
					[] tc_ac.timeout {
						setverdict(inconc, testcasename() & ": No answer while retrieving resource");
						return false;
					}
				}	
				return false;
891
			}
892 893 894 895 896 897 898
			
			/**
			 * @desc Check that a resource is not present in the IUT (resourceId is NOT known)
			 * @param p_parentIndex Index of the parent resource
			 * @param p_resourceName Resource name (Hierarchical method is used)
			 * @return boolean
			 */
899
			function f_isResourceNotPresent (integer p_parentIndex, XSD.String p_resourceName) runs on AeSimu return boolean {
900
			
901 902
				log(testcasename() & ":INFO: Hierarchical addressing method is required to check the non presence of the resource");
				
903
				//Check to see if the resource has NOT been created
904
				mcaPort.send(m_request(m_retrieveResource(f_getResourceAddress(p_parentIndex, e_hierarchical) & "/" & p_resourceName, f_getOriginator(p_parentIndex))));