AtsMec_Ams_TestCases.ttcn 61.5 KB
Newer Older
Elian Kraja's avatar
Elian Kraja committed
/**
*    @author   ETSI / STF569
*    @version  $URL:$
*              $ID:$
*    @desc     This module provides the MEC test cases.
*    @copyright   ETSI Copyright Notification
*                 No part may be reproduced except as authorized by written permission.
*                 The copyright and the foregoing restriction extend to reproduction in all media.
*                 All rights reserved.
*    @see      ETSI GS MEC 003, Draft ETSI GS MEC 013 V2.0.3 (2018-10)
*/
  module AtsMec_Ams_TestCases {
  
  // Libcommon
  import from LibCommon_BasicTypesAndValues all;
  import from LibCommon_Sync all;
  
  // LibHttp
  import from LibItsHttp_TypesAndValues all;
  import from LibItsHttp_Functions all;
  import from LibItsHttp_Templates all;
  import from LibItsHttp_JsonTemplates all;
  import from LibItsHttp_TestSystem all;
  
  // LibMec_LocationAPI
  import from Ams_Templates all;
  import from Ams_Pics all;
  import from Ams_Pixits all;
  
  // LibMec
  import from LibMec_Functions all;
  import from LibMec_Pics all;
  import from LibMec_Pixits all;
  
  group appMobilityServices {
  
   	/**
       * @desc Check that the AMS service returns information about the registered application mobility services when requested
       * @see  ETSI GS MEC 021 2.0.8, clause 8.3.3.1
       */
      testcase TP_MEC_SRV_AMS_001_OK() runs on HttpComponent system HttpTestAdapter {
        // Local variables
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
        var HttpMessage v_response;
  
        // Test control
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
  
        // Test component configuration
        f_cf_01_http_up();
  
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
                      m_http_request(
                                     m_http_request_get(
                                                        "/" & PICS_ROOT_API & PX_ME_APP_AMS_URI,
                                                        v_headers
                                                        )));
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
  
        // Test Body
        tc_ac.start;
        alt {
          [] httpPort.receive(
                              mw_http_response(
                                               mw_http_response_ok(
                                                                   mw_http_message_body_json(
                                                                                             mw_body_json_app_mobility_service_info(
                                                                                                                                    mw_app_mobility_service_info(
                                                                                                                                                                 {
                                                                                                                                                                   mw_app_mobility_registration_info(
                                                                                                                                                                                                     mw_service_consumer_id(
                                                                                                                                                                                                                            PX_APP_INS_ID,
                                                                                                                                                                                                                            PX_MEP_ID
                                                                                                                                                                                                                            )
                                                                                                                                                                                                     )
                                                                                                                                                                   }
                              )))))) -> value v_response {
            tc_ac.stop;
            
            if (f_check_headers(valueof(v_response.response.header)) == true) {
              log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppTerminationNotificationSubscription ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
            } else {
              log("*** " & testcasename() & ": FAIL: Header 'Location' was not present in the response headers ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
            }
          }
          [] tc_ac.timeout {
            log("*** " & testcasename() & ": INCONC: Expected message not received ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
          }
        } // End of 'alt' statement
      } // End of testcase TP_MEC_SRV_AMS_001_OK
  
  	/**
       * @desc Check that the AMS service returns an error when receives a query about a registered application mobility service with wrong parameters
       * @see  ETSI GS MEC 021 2.0.8, clause 8.3.3.1
       */
      testcase TP_MEC_SRV_AMS_001_BR() runs on HttpComponent system HttpTestAdapter {
        // Local variables
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
  
        // Test control
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
  
        // Test component configuration
        f_cf_01_http_up();
  
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
                      m_http_request(
                                     m_http_request_get(
                                                        "/" & PICS_ROOT_API & PX_ME_APP_AMS_URI & "?appMobilityService=" & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")),
                                                        v_headers
                                                        )));
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
  
        // Test Body
        tc_ac.start;
        alt {
          [] httpPort.receive(
                              mw_http_response(
                                               mw_http_response_400_bad_request(
                                                                                mw_http_message_body_json(
                                                                                                          mw_body_json_ams_problem_details(
                                                                                                                                           mw_problem_details(
                                                                                                                                                              -, 
                                                                                                                                                              -, 
                                                                                                                                                              400
                                                                                                                                                              )))))) {
            tc_ac.stop;
  
            log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
          }
          [] tc_ac.timeout {
            log("*** " & testcasename() & ": INCONC: Expected message not received ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
          }
        } // End of 'alt' statement
  
      }  // End of testcase TP_MEC_SRV_AMS_001_BR
      
      
  	/**
       * @desc Check that the AMS service creates a new application mobility services when requested
       * @see  ETSI GS MEC 021 2.0.8, clause 8.3.3.4
       */
  	testcase TP_MEC_SRV_AMS_002_OK() runs on HttpComponent system HttpTestAdapter {
Yann Garcia's avatar
Yann Garcia committed
      	var Headers v_headers;
      	if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
      		log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
        		setverdict(inconc);
        		stop;
      	}
  
      	// Test component configuration
      	f_cf_01_http_up();
  
  
      	// Preamble
      	f_init_default_headers_list(-, -, v_headers);
      	httpPort.send(
        		m_http_request(
          		m_http_request_post(
            			"/" & PICS_ROOT_API & PX_ME_APP_AMS_URI,
            			v_headers,
            			m_http_message_body_json(
              			m_body_json_ams_registration_request(
                				m_registration_request(
                    				m_service_consumer_id(
                    					PX_APP_INS_ID, 
                    					-
                    				),
                    			-,
                    			-
                				)
              			)
            			)
          		)
        		)
      	);
      	f_selfOrClientSyncAndVerdict(c_prDone, e_success);
  
      	// Test Body
      	tc_ac.start;
      	alt {
        		[] httpPort.receive(
          		mw_http_response(
            			mw_http_response_201_created(
              			mw_http_message_body_json(
                				mw_body_json_app_mobility_service_info(
                  				mw_app_mobility_service_info(
                      				mw_registration_info(
                      					mw_service_consumer_id(
                      						PX_APP_INS_ID,
                      						-
                      					),
                      					-,
                      					-
                      				),
                      				PX_APP_MOBILITY_SERVICE_ID
                      			)
                      		)
  		                )
          	        )
              	)
              )
  
        	{
  		tc_ac.stop;
  
          log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo and status code set to 201 Created ***");
          f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
        	}
        	[] tc_ac.timeout {
          	log("*** " & testcasename() & ": INCONC: Expected message not received ***");
          	f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
        	}
      		} // End of 'alt' statement
      } // End of testcase TP_MEC_SRV_AMS_002_OK
  
  	/**
       * @desc Check that the AMS service sends an error when it receives a malformed request to create a new application mobility service
       * @see  ETSI GS MEC 021 2.0.8, clause 8.3.3.4
       */
  	testcase TP_MEC_SRV_AMS_002_BR() runs on HttpComponent system HttpTestAdapter {
Yann Garcia's avatar
Yann Garcia committed
      	var Headers v_headers;
      	if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
      		log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
        		setverdict(inconc);
        		stop;
      	}
  
      	// Test component configuration
      	f_cf_01_http_up();
  
  
      	// Preamble
      	f_init_default_headers_list(-, -, v_headers);
      	httpPort.send(
        		m_http_request(
          		m_http_request_post(
            			"/" & PICS_ROOT_API & PX_ME_APP_AMS_URI,
            			v_headers,
            			m_http_message_body_json(
              			m_body_json_ams_registration_request(
                				m_registration_request_error(
                					m_service_consumer_error(
                						PX_APP_INS_ID,
                						-
                					)
                				)
              			)
            			)
          		)
        		)
      	);
      	f_selfOrClientSyncAndVerdict(c_prDone, e_success);
  
      	// Test Body
      	tc_ac.start;
      	alt {
        		[] httpPort.receive(
          		mw_http_response(
            			mw_http_response_400_bad_request(
              			mw_http_message_body_json(
                				mw_body_json_ams_problem_details(
                  				mw_problem_details(
                      				-, -, 400
                  				)
                				)
              			)
            			)
          		)
        		) 
        	{
          tc_ac.stop;
  
          log("*** " & testcasename() & ": PASS: IUT successfully responds with a Problem Details when bad request is performed ***");
          f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
        }
        [] tc_ac.timeout {
          log("*** " & testcasename() & ": INCONC: Expected message not received ***");
          f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
        }
      } // End of 'alt' statement
  
    	} // End of testcase TP_MEC_SRV_AMS_002_BR
  } // End of group appMobilityServices
  
  
  group individualAppMobilityService{
    
       	/**
       * @desc Check that the AMS service returns information about this individual application mobility service
       * @see  ETSI GS MEC 021 2.0.10, clause 8.4.3.1
       */
      testcase TP_MEC_SRV_AMS_011_OK() runs on HttpComponent system HttpTestAdapter {
        // Local variables
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
        var HttpMessage v_response;
  
        // Test control
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
  
        // Test component configuration
        f_cf_01_http_up();
  
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
                      m_http_request(
                                     m_http_request_get(
                                                        "/" & PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")),
                                                        v_headers
                                                        )));
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
  
        // Test Body
        tc_ac.start;
        alt {
          [] httpPort.receive(
          	 mw_http_response(
             	mw_http_response_ok(
                	mw_http_message_body_json(
                    	mw_body_json_app_mobility_service_info(
                        	mw_app_mobility_service_info(
                        		-,
                        		PX_APP_MOBILITY_SERVICE_ID
                              )))))) -> value v_response {
            tc_ac.stop;
            
              log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
          }
          [] tc_ac.timeout {
            log("*** " & testcasename() & ": INCONC: Expected message not received ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
          }
        } // End of 'alt' statement
      } // End of testcase TP_MEC_SRV_AMS_011_OK
  
  	/**
       * @desc Check that the AMS service sends an error when receives a query about a not existing individual application mobility service
       * @see  ETSI GS MEC 021 2.0.10, clause 8.4.3.1
       */
      testcase TP_MEC_SRV_AMS_011_NF() runs on HttpComponent system HttpTestAdapter {
        // Local variables
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
  
        // Test control
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
  
        // Test component configuration
        f_cf_01_http_up();
  
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
        	m_http_request(
            	m_http_request_get(
                	"/" & PICS_ROOT_API & PX_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID, "UTF-8")),
                    	v_headers
            )));
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
  
        // Test Body
        tc_ac.start;
        alt {
          [] httpPort.receive(
          	mw_http_response(
            	mw_http_response_404_not_found(
            ))) {
            tc_ac.stop;
  
            log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 Not Found ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
          }
          [] tc_ac.timeout {
            log("*** " & testcasename() & ": INCONC: Expected message not received ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
          }
        } // End of 'alt' statement
  
      }  // End of testcase TP_MEC_SRV_AMS_011_NF
    
       
       
       /**
       * @desc Check that the AMS service modifies the individual application mobility service when requested
       * @see  ETSI GS MEC 021 2.0.10, clause 8.4.3.2
       */
      testcase TP_MEC_SRV_AMS_012_OK() runs on HttpComponent system HttpTestAdapter {
        // Local variables
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
        var HttpMessage v_response;
  
        // Test control
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
  
        // Test component configuration
        f_cf_01_http_up();
  
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
        	m_http_request(
            	m_http_request_put(
                	"/" & PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")),
                    v_headers,
                    m_http_message_body_json(
              			m_body_json_ams_registration_request(
                				m_registration_request(
                    				m_service_consumer_id(
                    					PX_APP_INS_ID, 
                    					-
                    				),
                    			-,
                    			-
                				)
              			)
              		)
                )));
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
  
        // Test Body
        tc_ac.start;
        alt {
          [] httpPort.receive(
          	 mw_http_response(
             	mw_http_response_ok(
                	mw_http_message_body_json(
                    	mw_body_json_app_mobility_service_info(
                        	mw_app_mobility_service_info({
                        	  	*, 
                        	  	mw_app_mobility_registration_info(
                        			mw_service_consumer_id(
                        				PX_APP_INS_ID,
                        				-
                        			),
                        			-,
                        			-
                        		), 
                        		*},
                        		-
                        	)
                        )
                	)
            	))) -> value v_response {
            tc_ac.stop;
            
              log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
          }
          [] tc_ac.timeout {
            log("*** " & testcasename() & ": INCONC: Expected message not received ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
          }
        } // End of 'alt' statement
      } // End of testcase TP_MEC_SRV_AMS_012_OK
  
  	   /**
       * @desc Check that the AMS service sends an error when receives a request to modify a not existing individual application mobility service
       * @see  ETSI GS MEC 021 2.0.10, clause 8.4.3.2
       */
      testcase TP_MEC_SRV_AMS_012_NF() runs on HttpComponent system HttpTestAdapter {
        // Local variables
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
  
        // Test control
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
  
        // Test component configuration
        f_cf_01_http_up();
  
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
        	m_http_request(
            	m_http_request_put(
                	"/" & PICS_ROOT_API & PX_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID, "UTF-8")),
                    	v_headers,
                    	m_http_message_body_json(
              			m_body_json_ams_registration_request(
                				m_registration_request(
                    				m_service_consumer_id(
                    					PX_APP_INS_ID, 
                    					-
                    				),
                    			-,
                    			-
                				)
              			)
              		)
            )));
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
  
        // Test Body
        tc_ac.start;
        alt {
          [] httpPort.receive(
          	mw_http_response(
            	mw_http_response_404_not_found(
            ))) {
            tc_ac.stop;
  
            log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 Not Found ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
          }
          [] tc_ac.timeout {
            log("*** " & testcasename() & ": INCONC: Expected message not received ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
          }
        } // End of 'alt' statement
  
      }  // End of testcase TP_MEC_SRV_AMS_012_NF
    
      	/**
       * @desc Check that the AMS service sends an error when receives a request to modify a individual application mobility service using bad parameters
       * @see  ETSI GS MEC 021 2.0.10, clause 8.4.3.2
       */
      testcase TP_MEC_SRV_AMS_012_BR() runs on HttpComponent system HttpTestAdapter {
        // Local variables
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
  
        // Test control
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
  
        // Test component configuration
        f_cf_01_http_up();
  
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
        	m_http_request(
            	m_http_request_put(
                	"/" & PICS_ROOT_API & PX_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")),
                    	v_headers,
                    	m_http_message_body_json(
                    	m_body_json_ams_registration_request_with_error(
                				m_registration_request_with_error(
                    				m_service_consumer_id_with_error(
                    					PX_APP_INS_ID, 
                    					-
                    				),
                    			-,
                    			-
                				)
              			)
              			)
            )));
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
  
        // Test Body
        tc_ac.start;
        alt {
          [] httpPort.receive(
          	mw_http_response(
            	mw_http_response_400_bad_request(
            ))) {
            tc_ac.stop;
  
            log("*** " & testcasename() & ": PASS: IUT successfully responds with a 400 Bad Request ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
          }
          [] tc_ac.timeout {
            log("*** " & testcasename() & ": INCONC: Expected message not received ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
          }
        } // End of 'alt' statement
  
      }  // End of testcase TP_MEC_SRV_AMS_012_BR
      
      
       /**
       * @desc Check that the AMS service de-register the individual application mobility service and delete the resource
	   *		that represents the individual application mobility service
       * @see  ETSI GS MEC 021 2.0.10, clause 8.4.3.5
       */
      testcase TP_MEC_SRV_AMS_013_OK() runs on HttpComponent system HttpTestAdapter {
        // Local variables
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
        var HttpMessage v_response;
  
        // Test control
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
  
        // Test component configuration
        f_cf_01_http_up();
  
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
        	m_http_request(
            	m_http_request_delete(
                	"/" & PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")),
                    v_headers
                )));
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
  
        // Test Body
        tc_ac.start;
        alt {
          [] httpPort.receive(
          	 mw_http_response(
             	mw_http_response_204_no_content(
            	))) -> value v_response {
            tc_ac.stop;
            
              log("*** " & testcasename() & ": PASS: IUT successfully responds with a 204 No Content ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
          }
          [] tc_ac.timeout {
            log("*** " & testcasename() & ": INCONC: Expected message not received ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
          }
        } // End of 'alt' statement
      } // End of testcase TP_MEC_SRV_AMS_013_OK
  
  	   /**
       * @desc Check that the AMS service sends an error when is requested to delete the resource
	   *		that represents the individual application mobility service
       * @see  ETSI GS MEC 021 2.0.10, clause 8.4.3.5
       */
      testcase TP_MEC_SRV_AMS_013_NF() runs on HttpComponent system HttpTestAdapter {
        // Local variables
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
  
        // Test control
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
  
        // Test component configuration
        f_cf_01_http_up();
  
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
        	m_http_request(
            	m_http_request_delete(
                	"/" & PICS_ROOT_API & PX_ME_APP_AMS_URI & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID, "UTF-8")),
                    	v_headers
            )));
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
  
        // Test Body
        tc_ac.start;
        alt {
          [] httpPort.receive(
          	mw_http_response(
            	mw_http_response_404_not_found(
            ))) {
            tc_ac.stop;
  
            log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 Not Found ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
          }
          [] tc_ac.timeout {
            log("*** " & testcasename() & ": INCONC: Expected message not received ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
          }
        } // End of 'alt' statement
  
      }  // End of testcase TP_MEC_SRV_AMS_013_NF
     
  }
  
  group appMobilityServiceDeregisterTask {
    
       /**
       * @desc Check that the AMS service deregister an individual application mobility service on expiry of the timer associated with the service
       * @see  ETSI GS MEC 021 2.0.10, clause 8.5.3.4
       */
      testcase TP_MEC_SRV_AMS_014_OK() runs on HttpComponent system HttpTestAdapter {
        // Local variables
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
        var HttpMessage v_response;
  
        // Test control
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
  
        // Test component configuration
        f_cf_01_http_up();
  
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
        	m_http_request(
            	m_http_request_post(
                	"/" & PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(PX_APP_MOBILITY_SERVICE_ID, "UTF-8")) & "/deregisterTask",
                    v_headers
                )));
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
  
        // Test Body
        tc_ac.start;
        alt {
          [] httpPort.receive(
          	 mw_http_response(
             	mw_http_response_ok(
                	mw_http_message_body_json(
                    	mw_body_json_app_mobility_service_info(
                        	mw_app_mobility_service_info({
                        	  	*, 
                        	  	mw_app_mobility_registration_info(
                        			mw_service_consumer_id(
                        				PX_APP_INS_ID,
                        				-
                        			),
                        			-,
                        			-
                        		), 
                        		*},
                        		-
                        	)
                        )
                	)
            	))) -> value v_response {
            tc_ac.stop;
            
              log("*** " & testcasename() & ": PASS: IUT successfully responds with a AppMobilityServiceInfo***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
          }
          [] tc_ac.timeout {
            log("*** " & testcasename() & ": INCONC: Expected message not received ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
          }
        } // End of 'alt' statement
      } // End of testcase TP_MEC_SRV_AMS_014_OK
  
       /**
       * @desc Check that the AMS service send an error when is requested to deregister a not existent individual application mobility service
       * @see  ETSI GS MEC 021 2.0.10, clause 8.5.3.4
       */
      testcase TP_MEC_SRV_AMS_014_NF() runs on HttpComponent system HttpTestAdapter {
        // Local variables
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
        var HttpMessage v_response;
  
        // Test control
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
  
        // Test component configuration
        f_cf_01_http_up();
  
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
        	m_http_request(
            	m_http_request_post(
                	"/" & PICS_ROOT_API & PX_ME_APP_AMS_URI & oct2char(unichar2oct(PX_NON_EXISTENT_APP_MOBILITY_SERVICE_ID, "UTF-8")) & "/deregisterTask",
                    v_headers
                )));
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
  
        // Test Body
        tc_ac.start;
        alt {
          [] httpPort.receive(
          	 mw_http_response(
             	mw_http_response_404_not_found(
            	))) -> value v_response {
            tc_ac.stop;
            
              log("*** " & testcasename() & ": PASS: IUT successfully responds with a 404 Not Found***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
          }
          [] tc_ac.timeout {
            log("*** " & testcasename() & ": INCONC: Expected message not received ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
          }
        } // End of 'alt' statement
      } // End of testcase TP_MEC_SRV_AMS_012_OK
    
    
  }
    
  group appMobilityServicesSubscriptions {
    
    	/**
       * @desc Check that the AMS service returns information about the available subscriptions when requested.
       *     Permitted SUBSCRIPTION_TYPE are:
       *     - MobilityProcedureSubscription
       *     - AdjacentAppInfoSubscription
       * @see  ETSI GS MEC 021 2.0.8, clause 8.6.3.1
       */
      testcase TP_MEC_SRV_AMS_003_OK() runs on HttpComponent system HttpTestAdapter {
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
    
        // Test component configuration
        f_cf_01_http_up();
    
    
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
          m_http_request(
            m_http_request_get(
            	//@TODO: How can we convert enums in strings?
              "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "?subscriptionType=" & int2str(enum2int(PX_SUBSCRIPTION_TYPE)),
              v_headers
            )
          )
        );
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
    
        // Test Body
        tc_ac.start;
        alt {
        	[] httpPort.receive(
            	mw_http_response(
              		mw_http_response_ok(
                		mw_http_message_body_json(
                  			mw_body_json_ams_subscriptions(
                                mw_ams_subscription(
                                	PX_SUBSCRIPTION_TYPE, 
                                	-, 
                                	-, 
                                	-, 
                                	-
                                )
                  			)
                		)
              		)
            	)
          	) 
          {
            tc_ac.stop;
    
            log("*** " & testcasename() & ": PASS: IUT successfully responds with the list of subscriptions type MobilityProcedureSubscription ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
          }
          [] tc_ac.timeout {
            log("*** " & testcasename() & ": INCONC: Expected message not received ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
          }
        } // End of 'alt' statement
    
      } // END TP_MEC_SRV_AMS_003_OK
    
  	/**
       * @desc Check that the AMS service sends an error when it receives a malformed query about the available subscriptions
       * @see  ETSI GS MEC 021 2.0.8, clause 8.6.3.1
       */
      testcase TP_MEC_SRV_AMS_003_BR() runs on HttpComponent system HttpTestAdapter {
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
    
        // Test component configuration
        f_cf_01_http_up();
    
    
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
          m_http_request(
            m_http_request_get(
              "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "?subscriptionTyp=" & int2str(enum2int(PX_SUBSCRIPTION_TYPE)),
              v_headers
            )
          )
        );
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
    
        // Test Body
        tc_ac.start;
        alt {
          [] httpPort.receive(
            mw_http_response(
              mw_http_response_400_bad_request(
                mw_http_message_body_json(
                  mw_body_json_ams_problem_details(
                    mw_problem_details(
                        -, -, 400
                    )
                  )
                )
              )
            )
          ) 
          {
            tc_ac.stop;
    
            log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 400 Bad Request ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
          }
          [] tc_ac.timeout {
            log("*** " & testcasename() & ": INCONC: Expected message not received ***");
            f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
          }
        } // End of 'alt' statement
    
      } // END of TP_MEC_SRV_AMS_003_BR
  
  	/**
       * @desc Check that the AMS service creates a notification subscriptions when requested.
       *     Permitted SUBSCRIPTION_TYPE are:
       *     - MobilityProcedureSubscription
       *     - AdjacentAppInfoSubscription
       * @see  ETSI GS MEC 021 2.0.8, clause 8.6.3.4
       */
      testcase TP_MEC_SRV_AMS_004_OK() runs on HttpComponent system HttpTestAdapter {
Yann Garcia's avatar
Yann Garcia committed
        var Headers v_headers;
        if (not(PICS_AMS) or not(PICS_AMS_API_SUPPORTED)){
          log("*** " & testcasename() & ": PICS_AMS required for executing the TC ***");
          setverdict(inconc);
          stop;
        }
    
        // Test component configuration
        f_cf_01_http_up();
    
    
        // Preamble
        f_init_default_headers_list(-, -, v_headers);
        httpPort.send(
          m_http_request(
            m_http_request_post(
             "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS,
              v_headers,
              m_http_message_body_json(
                m_body_json_ams_subscriptions(
    				m_ams_subscription(
    					PX_SUBSCRIPTION_TYPE,
      					PX_CALLBACK_REFERENCE,
      					-,
    					-,
    					-
    				)
                )
              )
            )
          )
        );
        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
    
        // Test Body
        tc_ac.start;
        alt {
          [] httpPort.receive(
            mw_http_response(
              mw_http_response_201_created(
                mw_http_message_body_json(
                  mw_body_json_ams_subscriptions(