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))));
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
				tc_ac.start;
				alt {
					[] mcaPort.receive(mw_response(mw_responsePrimitive(int4004))) {
						tc_ac.stop;
						setverdict(pass, testcasename() & ": Resource not present");
						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;
			}
			
			/**
			 * @desc Update of the auxiliar ACP resource
			 * @param p_allowedOperations New allowed operations
			 * @verdict 
			 */
930
			function f_cse_updateAcpAuxResource (in template (value) AccessControlOperations p_allowedOperations) runs on AeSimu {
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
				var RequestPrimitive v_request;
				
				v_request := valueof(m_updateAcpBase);
				
				v_request.to_ := f_getResourceAddress(vc_acpAuxIndex);
				v_request.from_ := f_getOriginator(vc_acpAuxIndex);
				v_request.primitiveContent.accessControlPolicy.privileges.accessControlRule_list := {valueof(m_createAcr(PX_ACOR, p_allowedOperations))};
							
				mcaPort.send(m_request(v_request));
				tc_ac.start;
				alt {
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK))  {
						tc_ac.stop;
						setverdict(pass, __SCOPE__&":INFO: " & v_request.to_ & " resource updated successfuly");
					}
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
						tc_ac.stop;
						setverdict(inconc, __SCOPE__&":INFO: Error while updating " & v_request.to_ & " resource");
					}
					[] tc_ac.timeout {
						setverdict(inconc, __SCOPE__&":INFO: No answer while updating " & v_request.to_ & " resource" );
					}
				}		
				
955
				f_checkAeSimuStatus();
956
957
958
959
960
961
962
963
964
			}   
			
			/**
			 * @desc Function to handle announcement of resources
			 * @param p_from
			 * @param p_to
			 * @verdict 
			 */
			 //TODO To finalize this function
965
			function f_cse_resourceAnnouncementHandler(template XSD.ID p_from := *, template XSD.ID p_to := ?) runs on CseSimu {
966
967
968
969
970
971
				// Local variables
				var MsgIn v_request;
				var ResponsePrimitive v_responsePrimitive;
				
				tc_ac.start;
				alt {
972
					[] mccPort.receive(mw_request(mw_create(p_from, p_to))) -> value v_request {
973
974
						tc_ac.stop;
						setverdict(pass, __SCOPE__ & ":INFO: Announcement received");
975
						//TODO Save resource and generate required attributes
976
						v_responsePrimitive := f_getCreateResponsePrimitive(v_request.primitive.requestPrimitive.resourceType, v_request.primitive.requestPrimitive);
977
						mccPort.send(m_response(v_responsePrimitive));
978
						f_checkAttributesToBeSaved(v_request.primitive.requestPrimitive.resourceType, v_request.primitive.requestPrimitive, vc_response.primitive.responsePrimitive);
979
						f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, v_request.primitive.requestPrimitive.resourceType, vc_remoteCseIndex);					
980
					}
981
					[] mccPort.receive{
982
983
984
985
986
987
988
						tc_ac.stop;
						setverdict(fail, __SCOPE__ & ":ERROR: Unexpected message received");
					}
					[] tc_ac.timeout {
						setverdict(fail, __SCOPE__ & ":ERROR:  No announcement received");
					}
				}
989
990
991
992
993
994
995
996
997
998
999
1000
				
				f_checkCseSimuStatus();
	
			} //end f_cse_resourceAnnouncementHandler
			
			/**
			 * @desc Function for announcement of resources
			 * @param p_from
			 * @param p_to
			 * @verdict 
			 */
			 //TODO To finalize this function
For faster browsing, not all history is shown. View entire blame