OneM2M_Functions.ttcn 145 KB
Newer Older
1
2
3
4
5
6
7
/**
 *  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.
 *  
8
9
10
 *  @author     ETSI
 *  @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
 *  @desc       Module containing functions for oneM2M
 *
 */
module OneM2M_Functions {
	
	import from XSD all;
17
	import from LibCommon_Time all;
18
	import from OneM2M_Templates all;
19
	import from OneM2M_Types all;
20
21
22
	import from OneM2M_TypesAndValues all;
	import from OneM2M_TestSystem all;
	import from OneM2M_Pixits all;
23
	import from OneM2M_Pics all;
24
	
25
	group ConfigFunctions {
26
		
27
28
29
		/**
			@desc Ports mapping and default behaviour activation for Config 1
		*/
30
31
		function f_cf01Up(in boolean p_auxiliaryAe2Required := false) runs on AeSimu {
			
32
			// Variables
33
34
			vc_config := e_cf01;
			vc_testSystemRole := e_ae;	
35
			
36
37
			// Map
			map(self:mcaPort, system:mcaPort);
Antonio Castillo Verdugo's avatar
Fix #15    
Antonio Castillo Verdugo committed
38
			map(self:mcaPortIn, system:mcaPortIn);
39
			map(self:acPort, system:acPort);
40
			
41
			activate(a_default());
42
			activate(a_cse_cf01());
43
				
44
45
46
47
48
			// Initialize AE2
			if(p_auxiliaryAe2Required) {
				vc_auxiliaryAe2Up := p_auxiliaryAe2Required;
				vc_ae2 := AeSimu.create("AE2") alive;
				vc_ae2.start(f_cf01UpAe2());
49
				vc_ae2.done;
50
51
52
53
54
55
56
57
58
59
60
61
			}
				
			//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
62
63
			vc_config := e_cf01;
			vc_testSystemRole := e_ae;		
64
65
66
67
68
69
			
			// Map
			map(self:mcaPort, system:mcaPort);
			map(self:mcaPortIn, system:mcaPortIn);
			map(self:acPort, system:acPort);
	
70
			//Initialze the IUT
71
							
72
		} // end f_cf01Up
73
		
74
75
76
		/**
		 * @desc Ports mapping and default behaviour activation for Config 02
		 */
77
		function f_cf02Up() runs on AeSimu {
78
				
79
			// Variables
80
			vc_config := e_cf02;
81
			vc_testSystemRole := e_ae;	
82
			vc_cse1 := CseSimu.create("CSE1") alive;
83
				
84
85
86
			// Map
			map(self:mcaPort, system:mcaPort);
			map(self:acPort, system:acPort);
87
88
89
			if(PX_UT_IMPLEMENTED) {
				map(self:utPort, system:utPort);
			}
90
			activate(a_default());
91
92
93
			activate(a_cse_cf02_ae1());
			vc_cse1.start(f_cf02UpCse1());
			vc_cse1.done;
94
				
95
			// Connect
96
			
97
			//Initialze the IUT
98
							
99
		} // end f_cf02Up
100
101
102
103
104
105
106
		
		/**
			@desc Ports mapping and default behaviour activation for Config 2 on the CSE1
		*/
		function f_cf02UpCse1() runs on CseSimu {
			
			// Variables
107
			var PrimitiveContent v_cSEBaseResource;
108
109
			vc_config := e_cf02;
			vc_testSystemRole := e_cse;		
110
111
112
113
114
			
			// Map
			map(self:mccPort, system:mccPort);
			map(self:mccPortIn, system:mccPortIn);
			map(self:acPort, system:acPort);
115
						
116
117
118
			v_cSEBaseResource := f_cse_generateLocalResource(-, -1, int5);
			vc_cSEBaseIndex := f_setLocalResource(v_cSEBaseResource, int5, -1);
			
119
120
121
			//Initialze the IUT
							
		} // end f_cf02UpCse1
122
123
124
125
126
127
128

		/**
		 * @desc Ports mapping and default behaviour activation for Config 02
		 */
		function f_cf02UpCseSimuMaster() runs on CseSimu {
				
			// Variables
129
130
			var PrimitiveContent v_cSEBaseResource;
			vc_config := e_cf02CseSimuMaster;
131
			vc_testSystemRole := e_cse;		
132
			vc_ae1 := AeSimu.create("AE1") alive;
133
134
135
				
			// Map
			map(self:mccPort, system:mccPort);
136
			map(self:mccPortIn, system:mccPortIn);
137
138
			map(self:acPort, system:acPort);
			activate(a_default());
139
140
141
			activate(a_cse_cf02_cse1());
			vc_ae1.start(f_cf02UpAe1());
			vc_ae1.done;
142
143
144
			
			v_cSEBaseResource := f_cse_generateLocalResource(-, -1, int5);
			vc_cSEBaseIndex := f_setLocalResource(v_cSEBaseResource, int5, -1);
145
146
				
			// Connect
147
			
148
149
150
			//Initialze the IUT
							
		} // end f_cf02UpCseSimuMaster
151
		
152
153
154
155
156
157
		/**
			@desc Ports mapping and default behaviour activation for Config 2 on the AE1
		*/
		function f_cf02UpAe1() runs on AeSimu {
			
			// Variables
158
			vc_config := e_cf02CseSimuMaster;	
159
			vc_testSystemRole := e_ae;		
160
161
162
			
			// Map
			map(self:mcaPort, system:mcaPort);
163
			map(self:mcaPortIn, system:mcaPortIn);
164
165
166
167
168
169
			map(self:acPort, system:acPort);
			
			//Initialze the IUT
							
		} // end f_cf02UpAe1
		
170
171
172
		/**
		 * @desc Ports mapping and default behaviour activation for Config 03
		 */
173
		function f_cf03Up() runs on CseSimu {
174
175
		
			// Variables
176
			var PrimitiveContent v_cSEBaseResource;
177
			vc_config := e_cf03;
178
			vc_testSystemRole := e_cse;		
179
			
180
			// Map
181
			map(self:mcaPortIn, system:mcaPortIn);//TODO To be consistent, we should use mcaPortIn for AE testing
182
			map(self:acPort, system:acPort);
183
184
185
			if(PX_UT_IMPLEMENTED) {
				map(self:utPort, system:utPort);
			}
186
			activate(a_default());
187
			activate(a_ae_cf03());
188
189
190
191
192
			
			//Creation of CSEBase
			
			v_cSEBaseResource := f_cse_generateLocalResource(-, -1, int5);
			vc_cSEBaseIndex := f_setLocalResource(v_cSEBaseResource, int5, -1);
193
194
195
196
197
198
		
			// Connect
					
			//Initialze the IUT
					
		} // end f_cf03Up
199
200
201
202
		
		/**
		 * @desc Ports mapping and default behaviour activation for Config 04
		 */
203
		function f_cf04Up() runs on CseSimu {
204
205

			// Variables
206
			var PrimitiveContent v_cSEBaseResource;
207
			vc_config := e_cf04;
208
209
			vc_testSystemRole := e_cse;	
			
210
211
212
	
			// Map
			map(self:mccPort, system:mccPort);
213
			map(self:mccPortIn, system:mccPortIn);
214
215
216
			map(self:acPort, system:acPort);
			activate(a_default());
			activate(a_cse_cf04());
217
218
219
220
221
			
			//Creation of CSEBase
			
			v_cSEBaseResource := f_cse_generateLocalResource(-, -1, int5);
			vc_cSEBaseIndex := f_setLocalResource(v_cSEBaseResource, int5, -1);
222
223
224

			// Connect
			
225
			//Initialize the IUT
226
227
			
		} // end f_cf03Up
228
229

		/**
230
		 * @desc Ports unmapping
231
		 */
232
		function f_cf01Down() runs on AeSimu {
233
		
234
			unmap(self:mcaPort, system:mcaPort);
235
			unmap(self:acPort, system:acPort);
236
237
			if(vc_auxiliaryAe2Up) {
				vc_ae2.start(f_cf01DownAe2());
238
				vc_ae2.done;
239
240
241
242
243
244
245
246
247
248
249
250
251
			}
		}
		
		/**
		 * @desc Ports unmapping
		 */
		function f_cf01DownAe2() runs on AeSimu {
				
			unmap(self:mcaPort, system:mcaPort);
			unmap(self:acPort, system:acPort);
			unmap(self:mcaPortIn, system:mcaPortIn);
		}
		
252
253
254
		/**
		 * @desc Ports unmapping
		 */
255
		function f_cf02Down() runs on AeSimu {
256
		
257
			unmap(self:mcaPort, system:mcaPort);
258
			unmap(self:acPort, system:acPort);
259
260
261
			if(PX_UT_IMPLEMENTED){
				unmap(self:utPort, system:utPort);
			}
262
263
264
			unmap(vc_cse1:mccPort, system:mccPort);
			unmap(vc_cse1:mccPortIn, system:mccPortIn);
			unmap(vc_cse1:acPort, system:acPort);
265
266
267
268
269
270
		}		
		/**
		 * @desc Ports unmapping
		 */
		function f_cf02DownCseSimuMaster() runs on CseSimu {
				
271
			unmap(self:mccPort, system:mccPort);
272
			unmap(self:mccPortIn, system:mccPortIn);
273
			unmap(self:acPort, system:acPort);
274
275
			unmap(vc_ae1:mcaPort, system:mcaPort);
			unmap(vc_ae1:acPort, system:acPort);
276
		}		
277
278
279
		/**
		 * @desc Ports unmapping for Config 03
		 */
280
		function f_cf03Down() runs on CseSimu {
281
			
282
			unmap(self:mcaPortIn, system:mcaPortIn);
283
284
285
			if(PX_UT_IMPLEMENTED){
				unmap(self:utPort, system:utPort);
			}
286
287
			unmap(self:acPort, system:acPort);
		}
288
		
289
290
291
		/**
		 * @desc Ports unmapping for Config 04
		 */
292
		function f_cf04Down() runs on CseSimu {
293
294
	
			unmap(self:mccPort, system:mccPort);
295
			unmap(self:mccPortIn, system:mccPortIn);
296
297
			unmap(self:acPort, system:acPort);
		}
298
299
300
301
302
303
304
305
306

	}//end group configFunctions
	
	group InfoPortCommunication {
	
		/**
		 * @desc Connection of InfoPort of two components
		 * @param p_tester PTC where InfoPort is to be connected
		 */
307
308
309
310
311
		function f_connectInfoPort(in Tester p_tester) runs on Tester {
			// Connect
			connect(self:infoPort, p_tester:infoPort);		
		} 
	
312
313
314
315
		/**
		 * @desc Disconnection of InfoPort of two components
		 * @param p_tester PTC where InfoPort is to be connected
		 */
316
317
318
319
		function f_disconnectInfoPort(in Tester p_tester) runs on Tester {
			// Disconnect
			disconnect(self:infoPort, p_tester:infoPort);		
		} 
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
	
		/**
		 * @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;
				
		}
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
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
		/**
		 * @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	
491
	
492
	group CseFunctions {
493
	
494
		group PreambleFunctions {
495

496
497
498
499
500
501
			/**
			 * @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 
			 */
502
			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
503
			
504
				return f_cse_createAccessControlPolicyAux(p_acpName, -, p_allowedOperations);
505
506
			
			}
507

508
509
	
			/**
510
511
512
			 * @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
513
514
515
			 * @return Internal AE resource index
			 * @verdict 
			 */
516
			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
517
518
519
			
				var RequestPrimitive v_request;
				var MsgIn v_response;
520
521
522
523

				//Activate defaults when running on a PTC
				f_cse_activateDefaults_ae();		
												
524
				v_request := valueof(m_createAeAux(p_accessControlPolicyIDs, p_poaList));
525
526
				
				v_request := f_getCreateRequestPrimitive(int2, v_request, -1);
527
				
528
				mcaPort.send(m_request(v_request));
529
530
531
532
533
				
				tc_ac.start;
				alt {
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value v_response {
						tc_ac.stop;
534
						setverdict(pass,__SCOPE__&":INFO: Application registered successfuly");
535
						if(ischosen(v_response.primitive.responsePrimitive.primitiveContent.aE)) {
536
							
537
538
							f_checkAttributesToBeSaved(int2, v_request, v_response.primitive.responsePrimitive);
							
539
							vc_aeAuxIndex := f_setResource(v_response.primitive.responsePrimitive.primitiveContent, int2);
540
							
541
542
							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)));
543
544
545
546
547
548
549
							} else {
								f_sendAcPrimitive("AE-ID_changed", "0");
							}
						}
					}
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
						tc_ac.stop;
550
						setverdict(inconc, __SCOPE__&":INFO: Error while registering application");
551
552
553
554
						stop;
					}
					[] mcaPort.receive {
						tc_ac.stop;
555
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
556
557
558
						stop;
					};
					[] tc_ac.timeout {
559
						setverdict(inconc, __SCOPE__&":INFO: No answer while registering resource");
560
561
562
563
						stop;
					}
				}	
				
564
				f_checkAeSimuStatus();
565
				return vc_aeAuxIndex;
566
567
568
569
570
			}
			
			/**
			 * @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
571
			 * @param p_appId AppID of the AE resource to be created
572
573
574
			 * @return Internal AE resource index
			 * @verdict 
			 */
575
			function f_cse_preamble_registerAeWithId(XSD.ID p_appId, in template (value) AccessControlOperations p_allowedOperations := int63) runs on AeSimu return integer {//c_CRUDNDi
576
577
			
				var RequestPrimitive v_request;
578
				
579
580
581
				//Activate defaults when running on a PTC
				f_cse_activateDefaults_ae();		
				
582
				if(PICS_ACP_SUPPORT){
583
					vc_acpAuxIndex := f_cse_createAccessControlPolicyAux(p_allowedOperations := p_allowedOperations);
584
585
				}
				
586
587
588
				if(vc_acpAuxIndex != -1) {
					vc_resourcesIndexToBeDeleted := {vc_acpAuxIndex};
					v_request := valueof(m_createAe(p_appId, {f_getResourceId(vc_resourcesList[vc_acpAuxIndex].resource)}, -));
589
590
591
592
593
594
595
596
597
598
599
					
					//TODO Test, to be removed
					v_request.to_ := f_getResourceAddress();
					
					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 {
600
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
601
						tc_ac.stop;
602
						setverdict(pass, __SCOPE__&": INFO: Application registered successfuly");
603
						if(ischosen(vc_response.primitive.responsePrimitive.primitiveContent.aE)) {
604
							
605
							vc_aeAuxIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, int2);
606
							
607
608
							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)));
609
610
611
612
613
614
615
616
							} else {
								f_sendAcPrimitive("AE-ID_changed", "0");
							}	
						}
					}
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO))
					{
						tc_ac.stop;
617
						setverdict(inconc, __SCOPE__&":INFO: Error while registering application");
618
619
620
621
						stop;
					}
					[] mcaPort.receive {
						tc_ac.stop;
622
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
623
624
625
						stop;
					}
					[] tc_ac.timeout {
626
						setverdict(inconc, __SCOPE__&":INFO: No answer while registering resource");
627
628
629
630
						stop;
					}
				}	
				
631
				f_checkAeSimuStatus();
632
				return vc_aeAuxIndex;
633
634
635
			
			}
			
636
637
638
639
640
641
			/**
			 * @desc Creation of ServiceSubscribedAppRule resource
			 * @param p_allowedAEs Allowed AEs
			 * @return Internal resource index
			 * @verdict 
			 */
642
			function f_cse_preamble_createServiceSubscribedAppRule(in template ListOfM2MID p_allowedAEs := {""}) runs on AeSimu return integer {//c_CRUDNDi
643
644
645
646
647
648
649
650
651
			
				var integer v_serviceSubscribedAppRuleIndex := -1;
	
				v_serviceSubscribedAppRuleIndex := f_cse_createResource(int19, m_createServiceSubscribedAppRule({"None"}, {PX_APP_ID}, valueof(p_allowedAEs)));
				
				return v_serviceSubscribedAppRuleIndex;
			
			}
			
652
653
654
655
656
657
			/**
			 * @desc Creation of SubscribedProfile resource
			 * @param p_allowedAEs Allowed AEs
			 * @return Internal resource index
			 * @verdict 
			 */
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
			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;
				
				//TODO Create/Update serviceSubscribedNode //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;
	
			}
			
673
674
675
676
677
678
679
680
			/**
			 * @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 
			 */
Naum Spaseski's avatar
Naum Spaseski committed
681
			function f_cse_preamble_subscriptionVerification(inout integer p_ae2Index, inout template RequestPrimitive p_createRequestPrimitive,in ResourceType p_resourceType, in ResponseStatusCode p_responseStatusCode := int2000) runs on AeSimu {
682
				if(p_resourceType == int23){
683
					
684
					vc_ae2.start(f_cse_createResource(int2, m_createAe(PX_APP_ID, -, PX_AE2_ID_STEM, c_defaultAE2Name, {f_getAnnouncementTargetPoA("HTTP", PX_AE2_ADDRESS, "")}), -1)); // AE2 is registred
685
686
687
688
					
					f_checkComponentDoneAndGetVerdict(vc_ae2);
					
					p_ae2Index := f_getResource(vc_ae2);
689
					if(ischosen(p_createRequestPrimitive.primitiveContent.subscription)){		//this condition is necessary for Subscription TCs where notification URI is set in m_createSubscriptionAdvanced
690
						p_createRequestPrimitive.primitiveContent.subscription.notificationURI := {f_getResourceAddress(p_ae2Index)};
691
					}
692
					vc_ae2.start(f_cse_notifyProcedure_subscriptionVerificationHandler(p_responseStatusCode));
693
				}
694
			}
695
696
697
698
699
700
		
		}//end group preambleFunctions
		
		group PostambleFunctions {
	
			/**
701
			 * @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
702
703
			 * @verdict 
			 */
704
			function f_cse_postamble_deleteResources() runs on AeSimu {
705
706
707
708
709
710
				var integer i;
				var XSD.ID v_resourceAddress;
				var RequestPrimitive v_request;
				
				if (PX_RUN_POSTAMBLE) {
					
711
712
713
714
715
					if(vc_config == e_cf02) {
						vc_cse1.start(f_cse_postamble_deleteResourcesCSE());
						vc_cse1.done;
					}
					
716
717
718
719
					if(vc_auxiliaryAe2Up) {
						f_cse_postamble_aeSimu(vc_ae2);
					}
					
720
					for(i := lengthof(vc_resourcesIndexToBeDeleted) -1; i >=0; i := i - 1) {
721
						
722
						v_resourceAddress := f_getResourceAddress(vc_resourcesIndexToBeDeleted[i]); 
723
						
724
						v_request := valueof(m_delete(v_resourceAddress, f_getOriginator(vc_resourcesIndexToBeDeleted[i])));
725
						
726
						v_request.from_ := f_getOriginator(vc_resourcesIndexToBeDeleted[i]);
727

728
729
730
731
732
733
						mcaPort.send(m_request(v_request));
						
						tc_ac.start;
						alt {
							[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) {
								tc_ac.stop;
734
								log(__SCOPE__&" INFO: Resource " & v_request.to_ & " deleted");
735
736
737
738
739
740
741
742
743
							}
							[] mcaPort.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_);
							}	
						}	
744
						
745
746
					}
				}
747
748
749
750
						
			}
			
			/**
751
			 * @desc Calls to postamble for AeSimu components (i.e. AE2)
752
753
754
755
756
757
			 * @verdict 
			 */
			function f_cse_postamble_aeSimu(in AeSimu p_ae) runs on AeSimu {
				if(p_ae.running) {
					p_ae.stop;
				}
758
759
				p_ae.start(f_cse_postamble_deleteResources());
				p_ae.done;
760
761
			}
			
762
763
764
765
766
767
768
769
770
771
			/**
			 * @desc Calls to postamble for AeSimu component (i.e. AE1) on CseSimu 
			 * @verdict 
			 */
			function f_cse_postamble_ae1() runs on CseSimu {
				if(vc_ae1.running) {
					vc_ae1.stop;
				}
				vc_ae1.start(f_cse_postamble_deleteResources());
				vc_ae1.done;
772
773
			}
			
774
775
776
777
			/**
			 * @desc Deletion of all resources created during the test case execution. IUT gets clean and ready for next execution
			 * @verdict 
			 */
778
			function f_cse_postamble_deleteResourcesCSE() runs on CseSimu {
779
780
781
				var integer i;
				var XSD.ID v_resourceAddress;
				var RequestPrimitive v_request;
782
	
783
				if (PX_RUN_POSTAMBLE) {
784
785
786
787
					
					if(vc_config == e_cf02CseSimuMaster) {
						f_cse_postamble_ae1();
					};
788
		
789
					for(i := lengthof(vc_resourcesIndexToBeDeleted) -1; i >=0; i := i - 1) {
790
			
791
792
793
794
795
						if(ischosen(vc_resourcesList[vc_resourcesIndexToBeDeleted[i]].resource.remoteCSE)) {
							v_resourceAddress := f_getResourceAddress(vc_resourcesIndexToBeDeleted[i], e_nonHierarchical, e_spRelative);
						} else {
							v_resourceAddress := f_getResourceAddress(vc_resourcesIndexToBeDeleted[i]);
						} 
796
			
797
798
799
						v_request := valueof(m_delete(v_resourceAddress, f_getOriginator(vc_resourcesIndexToBeDeleted[i],false)));

						mccPort.send(m_request(v_request));
800
			
801
802
803
804
805
806
						tc_ac.start;
						alt {
							[] mccPort.receive(mw_response(mw_responsePrimitiveOK)) {
								tc_ac.stop;
								log(__SCOPE__&" INFO: Resource " & v_request.to_ & " deleted");
							}
807
808
809
810
811
812
813
814
							[] 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_);
							}	
						}	
815
			
816
					}
817
				}
818
			
819
			}			
820
821
822
			
		}//end group postambleFunctions
		
823
824
		group AeSimuFunctions {
			
825
826
827
			/**
			 * @desc Creation of a resource
			 * @param p_resourceType Resource type of the resource to be created
828
			 * @param p_requestPrimitive CREATE request primitive for the resource to be created
829
830
831
832
			 * @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 
			 */
833
			function f_cse_createResource(in ResourceType p_resourceType, template RequestPrimitive p_requestPrimitive := m_create, integer p_parentIndex := -1) runs on AeSimu return integer {
834
835
836
			
				var RequestPrimitive v_request;
				var integer v_resourceIndex := -1;
837
838
839
840
			
				//Activate defaults when running on a PTC
				f_cse_activateDefaults_ae();		
								
841
842
843
844
845
				v_request := f_getCreateRequestPrimitive(p_resourceType, p_requestPrimitive, p_parentIndex);
			
				mcaPort.send(m_request(v_request));
				tc_ac.start;
				alt {
846
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
847
						tc_ac.stop;
848
						setverdict(pass, __SCOPE__&":INFO: Resource type " & int2str(enum2int(p_resourceType)) & " created successfuly");
849
850
851
852
853
						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;
						}
854
855
856
					}
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
						tc_ac.stop;
857
						setverdict(inconc, __SCOPE__&":INFO: Error while creating resource type " & int2str(enum2int(p_resourceType)));
858
859
860
					}
					[] mcaPort.receive {
						tc_ac.stop;
861
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
862
863
					}
					[] tc_ac.timeout {
864
						setverdict(inconc, __SCOPE__&":INFO: No answer while creating resource type " & int2str(enum2int(p_resourceType)));
865
866
867
					}
				}	
				
868
				f_checkAeSimuStatus();
869
				
870
871
872
				return v_resourceIndex;
		
			}
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
			
			/**
			 * @desc Message exchange for the update of an announced resource
			 * @param p_requestPrimitive UPDATE request primitive to be used
			 * @verdict 
			 */
			function f_cse_updateAnnouncedResource(in RequestPrimitive p_requestPrimitive) runs on CseSimu {

				mccPort.send(m_request(p_requestPrimitive));
				tc_ac.start;
				alt {
					[] mccPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
						tc_ac.stop;
						setverdict(pass, __SCOPE__&":INFO: Attribute of announced resource updated successfuly");
					}
					[] mccPort.receive(mw_response(mw_responsePrimitiveKO)) -> value vc_response {
						tc_ac.stop;
						setverdict(inconc, __SCOPE__&":INFO: Error while updating announced resource");
					}
					[] mccPort.receive{
						tc_ac.stop;
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
					}
					[] tc_ac.timeout {
						setverdict(inconc, __SCOPE__&":INFO: No answer while updating announced resource");
					}
				}	
				
				f_checkCseSimuStatus();
				
			}// end f_cse_updateAnnouncedResource
904
905
906
907
908
909
910
911
		
			/**
			 * @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 
			 */
912
			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;
913
914
915
916
				var integer v_acpAuxIndex := -1;
				
				v_request := valueof(m_createAcpAux(p_acpName := p_acpName, p_allowedOperations := p_allowedOperations));
				
917
				v_request := f_getCreateRequestPrimitive(int1, v_request, -1);
918
								
919
920
921
				mcaPort.send(m_request(v_request));
				tc_ac.start;
				alt {
922
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
923
						tc_ac.stop;
924
						setverdict(pass, __SCOPE__&":INFO: Resource type " & int2str(1) & " created successfuly");
925
926
						f_checkAttributesToBeSaved(int1, v_request, vc_response.primitive.responsePrimitive);
						v_acpAuxIndex := f_setResource(vc_response.primitive.responsePrimitive.primitiveContent, int1);
927
						vc_acpAuxIndex := v_acpAuxIndex;
928
					}
929
930
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) {
						tc_ac.stop;
931
						setverdict(inconc, __SCOPE__&":INFO: Error while creating resource type " & int2str(1));
932
933
934
					}
					[] mcaPort.receive {
						tc_ac.stop;
935
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
936
937
					}
					[] tc_ac.timeout {
938
						setverdict(inconc, __SCOPE__&":INFO: No answer while creating resource type " & int2str(1));
939
940
					}
				}	
941
				
942
				f_checkAeSimuStatus();
943
944
945
946
			
				return v_acpAuxIndex;
	
			}
947
							
948
			/**
949
950
			 * @desc Message exchange for the update of a resource
			 * @param p_requestPrimitive UPDATE request primitive to be used
951
952
			 * @verdict 
			 */
953
			function f_cse_updateResource(in RequestPrimitive p_requestPrimitive) runs on AeSimu {
954
955
956
957

				mcaPort.send(m_request(p_requestPrimitive));
				tc_ac.start;
				alt {
958
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
959
						tc_ac.stop;
960
						setverdict(pass, __SCOPE__&":INFO: Attribute of resource updated successfuly");
961
					}
962
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value vc_response {
963
						tc_ac.stop;
964
						setverdict(inconc, __SCOPE__&":INFO: Error while updating resource");
965
966
967
					}
					[] mcaPort.receive{
						tc_ac.stop;
968
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
969
970
					}
					[] tc_ac.timeout {
971
						setverdict(inconc, __SCOPE__&":INFO: No answer while updating resource");
972
973
					}
				}	
974
				
975
				f_checkAeSimuStatus();
976
				
977
			}// end f_cse_updateResource
978
			
979
			/**
980
981
982
			 * @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
983
984
			 * @verdict 
			 */
985
			function f_cse_retrieveResource(integer p_resourceIndex) runs on AeSimu return PrimitiveContent{
986

987
				mcaPort.send(m_request(m_retrieve(f_getResourceAddress(p_resourceIndex), f_getOriginator(p_resourceIndex))));
988
989
				tc_ac.start;
				alt {
990
					[] mcaPort.receive(mw_response(mw_responsePrimitiveOK)) -> value vc_response {
991
992
993
						tc_ac.stop;
						setverdict(pass, __SCOPE__&":INFO: Resource retrieved successfuly");
					}
994
					[] mcaPort.receive(mw_response(mw_responsePrimitiveKO)) -> value vc_response {
995
						tc_ac.stop;
996
						setverdict(inconc, __SCOPE__&":INFO: Error while retrieving resource");
997
998
999
					}
					[] mcaPort.receive{
						tc_ac.stop;
1000
						setverdict(inconc, __SCOPE__&":INFO: Unexpected message received");
For faster browsing, not all history is shown. View entire blame