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 TC_MEC_SRV_AMS_001_OK() runs on HttpComponent system HttpTestAdapter {
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 TC_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 TC_MEC_SRV_AMS_001_BR() runs on HttpComponent system HttpTestAdapter {
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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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 TC_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(
                    mw_ams_subscription(
                      PX_SUBSCRIPTION_TYPE,
      					PX_CALLBACK_REFERENCE,
      					-,
    					-,
    					-
                    )
                  )
                )
              )
            )
          ) 
          {
            tc_ac.stop;
    
            log("*** " & testcasename() & ": PASS: IUT successfully responds with a AMS Subscription and 201 Created status code ***");
            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 TC_MEC_SRV_AMS_004_OK
  
  	/**
       * @desc Check that the AMS service sends an error when it receives a malformed request to create a notification subscription
       *     Permitted SUBSCRIPTION_TYPE are:
       *     - MobilityProcedureSubscription
       *     - AdjacentAppInfoSubscription
       * @see  ETSI GS MEC 021 2.0.8, clause 8.6.3.4
       */
    testcase TC_MEC_SRV_AMS_004_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_SUBS,
            v_headers,
            m_http_message_body_json(
              m_body_json_ams_subscriptions(
                m_ams_subscription_error(
                  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_400_bad_request(
              mw_http_message_body_json(
                mw_body_json_ams_problem_details(
                  mw_problem_details(
                      -, -, 400
                  )
                )
              )
            )
          )
        ) 
        {
  
          log("*** " & testcasename() & ": PASS: IUT successfully responds with a Problem Details and 400 Bad request status code ***");
          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 TC_MEC_SRV_AMS_004_BR
    
    	/**
       * @desc Check that the AMS service returns information about a given subscription when requested.
       *     Permitted SUBSCRIPTION_TYPE are:
       *     - MobilityProcedureSubscription
       *     - AdjacentAppInfoSubscription
       * @see  ETSI GS MEC 021 2.0.8, clause 8.7.3.1
       */
    testcase TC_MEC_SRV_AMS_005_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(
            "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_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_ams_subscriptions(
                	mw_ams_subscription(PX_SUBSCRIPTION_TYPE, -, -, -, -)
                )
              )
            )
          )
        ) 
        {
  
          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 of TC_MEC_SRV_AMS_005_OK
  	/**
       * @desc Check that the AMS service returns an error when receives a query about a not existing subscription
       * @see  ETSI GS MEC 021 2.0.8, clause 8.7.3.1
       */
    testcase TC_MEC_SRV_AMS_005_NF() 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 & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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(
              mw_http_message_body_json(
                mw_body_json_ams_problem_details(
                  mw_problem_details(
                      -, -, 404
                  )
                )
              )
            )
          )
        ) 
        {
          tc_ac.stop;
  
          log("*** " & testcasename() & ": PASS: IUT successfully responds with a ProblemDetails set to 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 TC_MEC_SRV_AMS_005_NF
    
    	/**
       * @desc Check that the AMS service deletes a given subscription when requested
       * @see  ETSI GS MEC 021 2.0.8, clause 8.7.3.5
       */
    testcase TC_MEC_SRV_AMS_006_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_delete(
            "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_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(
            )
          )
        ) 
        {
          tc_ac.stop;
  
          log("*** " & testcasename() & ": PASS: IUT successfully responds with 204 No Content on deletion 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 TC_MEC_SRV_AMS_006_OK
       * @desc Check that the AMS service sends an error when it receives a delete request for a not existing subscription
       * @see  ETSI GS MEC 021 2.0.8, clause 8.7.3.5
       */
    testcase TC_MEC_SRV_AMS_006_NF() 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_delete(
            "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_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(
              mw_http_message_body_json(
                mw_body_json_ams_problem_details(
                )
              )
            )
          )
        ) 
        {
          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 TC_MEC_SRV_AMS_006_NF 
  
  	/**
       * @desc Check that the AMS service modifies a given subscription when requested.
  	 *	  Permitted SUBSCRIPTION_TYPE are:
       *     - MobilityProcedureSubscription
       *     - AdjacentAppInfoSubscription
       * @see  ETSI GS MEC 021 2.0.8, clause 8.7.3.2
       */
    testcase TC_MEC_SRV_AMS_007_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_put(
            "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")),
            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_ok(
              mw_http_message_body_json(
                mw_body_json_ams_subscriptions(
                	mw_ams_subscription(PX_SUBSCRIPTION_TYPE, -, -, -, -)
                )
              )
            )
          )
        ) 
          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 TC_MEC_SRV_AMS_007_OK 
  	/**
       * @desc Check that the AMS service sends an error when it receives a malformed modify request for a given subscription.
  	 *	  Permitted SUBSCRIPTION_TYPE are:
       *     - MobilityProcedureSubscription
       *     - AdjacentAppInfoSubscription
       * @see  ETSI GS MEC 021 2.0.8, clause 8.7.3.2
       */
    testcase TC_MEC_SRV_AMS_007_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_put(
            "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_SUBSCRIPTION_ID, "UTF-8")),
            v_headers,
            m_http_message_body_json(
              m_body_json_ams_registration_request(
                m_registration_request(
                    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(
                )
              )
            )
          )
        ) 
        {
          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 TC_MEC_SRV_AMS_007_BR
  
  	/**
       * @desc Check that the AMS service sends an error when it receives a modify request for a not existing subscription
       * @see  ETSI GS MEC 021 2.0.8, clause 8.7.3.2
       */
    testcase TC_MEC_SRV_AMS_007_NF() 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_put(
            "/" & PICS_ROOT_API & PX_ME_APP_AMS_SUBS & "/" & oct2char(unichar2oct(PX_NON_EXISTENT_SUBSCRIPTION_ID, "UTF-8")),
            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_404_not_found(
              mw_http_message_body_json(
                mw_body_json_ams_problem_details(
          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 TC_MEC_SRV_AMS_007_NF 
  } // End of group appMobilityServicesSubscriptions
  
  group ams_notifications {
      
      /**
       * @desc Check that the AMS service sends an AMS notification  about a mobility procedure if the AMS service has an associated subscription and the event is generated
       * @see  ETSI GS MEC 021 2.0.8, clause 7.4.2
       */
      testcase TC_MEC_SRV_AMS_008_OK() runs on HttpComponent system HttpTestAdapter {
Yann Garcia's avatar
Yann Garcia committed
          var Headers v_headers;
          
          // Test control
          if (not(PICS_AMS) or not(PICS_AMS_NOTIFICATIONS)) {
              log("*** " & testcasename() & ": PICS_AMS and PICS_AMS_NOTIFICATIONS required for executing the TC ***");
              setverdict(inconc);
              stop;
          
          // Test component configuration
          f_cf_01_http_notif_up();
          
          // Test adapter configuration
          
          // Preamble
          f_init_default_headers_list(-, -, v_headers);
          action("Trigger a mobility procedure event");
          f_selfOrClientSyncAndVerdict(c_prDone, e_success);
          
          // Test Body
          tc_wait.start;
          alt {
            [] httpPort_notif.receive(
            		mw_http_request(
                  	mw_http_request_post(
                      	PX_CALLBACK_URI,
                          -,
                      	mw_http_message_body_json(
                          	mw_body_json_mobility_procedure_notification(
                              	mw_mobility_procedure_notification(
                              		-,
                                  	PX_CALLBACK_REFERENCE,
                                  	-,
                                  	-,
                                  	-
                                  )
                              )
                          )
                      )
                  )
              ) {
              tc_wait.stop;
              log("*** " & testcasename() & ": INFO: IUT successfully sends mobility procedure notification ***");
              
              // Send 204 No Content
              httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers)));
              
              log("*** " & testcasename() & ": PASS: IUT successfully sends mobility procedure notification ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
            }
            [] tc_wait.timeout {
              log("*** " & testcasename() & ": INCONC: Expected message not received ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
            }
          } // End of 'alt' statement
          
          // Postamble
          f_cf_01_http_notif_down();
      } // End of TC_MEC_SRV_AMS_008_OK
      
      /**
       * @desc Check that the AMS service sends an AMS notification about adjacent application instances if the AMS service has an associated subscription and the event is generated
       * @see  ETSI GS MEC 021 2.0.8, clause 7.4.3
       */
    testcase TC_MEC_SRV_AMS_009_OK() runs on HttpComponent system HttpTestAdapter {
Yann Garcia's avatar
Yann Garcia committed
          var Headers v_headers;
          
          // Test control
          if (not(PICS_AMS) or not(PICS_AMS_NOTIFICATIONS)) {
              log("*** " & testcasename() & ": PICS_AMS and PICS_AMS_NOTIFICATIONS required for executing the TC ***");
              setverdict(inconc);
              stop;
          
          // Test component configuration
          f_cf_01_http_notif_up();
          
          // Test adapter configuration
          
          // Preamble
          f_init_default_headers_list(-, -, v_headers);
          action("Trigger a adjacent application info event");
          f_selfOrClientSyncAndVerdict(c_prDone, e_success);
          
          // Test Body
          tc_wait.start;
          alt {
            [] httpPort_notif.receive(
            		mw_http_request(
                  	mw_http_request_post(
                      	PX_CALLBACK_URI,
                          -,
                      	mw_http_message_body_json(
                          	mw_body_json_adjacent_application_info_notification(
                              	mw_adjacent_application_info_notification(
                              		-,
                                  	PX_CALLBACK_REFERENCE,
                                  	-,
                                  	-,
                                  	-
                                  )
                              )
                          )
                      )
                  )
              ) {
              tc_wait.stop;
              log("*** " & testcasename() & ": INFO: IUT successfully sends adjacent application info notification ***");
              
              // Send 204 No Content
              httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers)));
              
              log("*** " & testcasename() & ": PASS: IUT successfully sends adjacent application info notification ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
            }
            [] tc_wait.timeout {
              log("*** " & testcasename() & ": INCONC: Expected message not received ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
            }
          } // End of 'alt' statement
          
          // Postamble
          f_cf_01_http_notif_down();
      } 
      
      
     /**
       * @desc Check that the AMS service sends an AMS notification on subscription expiration if the AMS service has an associated subscription and the event is generated
       * @see  ETSI GS MEC 021 2.0.8, clause 7.4.4
       */  
    testcase TC_MEC_SRV_AMS_010_OK() runs on HttpComponent system HttpTestAdapter {
Yann Garcia's avatar
Yann Garcia committed
          var Headers v_headers;
          var UInt64 v_timestamp;
          
          // Test control
          if (not(PICS_AMS) or not(PICS_AMS_NOTIFICATIONS)) {
              log("*** " & testcasename() & ": PICS_AMS and PICS_AMS_NOTIFICATIONS required for executing the TC ***");
              setverdict(inconc);
              stop;
          
          // Test component configuration
          f_cf_01_http_notif_up();
          
          // Test adapter configuration
          
          // Preamble
          f_init_default_headers_list(-, -, v_headers);
          action("Trigger a expire notification event");
          v_timestamp := f_get_current_timestamp_utc();
          f_selfOrClientSyncAndVerdict(c_prDone, e_success);
          
          // Test Body
          tc_wait.start;
          alt {
            [] httpPort_notif.receive(
            		mw_http_request(
                  	mw_http_request_post(
                      	PX_CALLBACK_URI,
                          -,
                      	mw_http_message_body_json(
                          	mw_body_json_expire_notification(
                              	mw_expire_notification(
                                  	-,
                                  	-,
                                  	{ seconds := v_timestamp / 1000, nanoSeconds := 1000 * v_timestamp mod 1000 }
                                  )
                              )
                          )
                      )
                  )
              ) {
              tc_wait.stop;
              log("*** " & testcasename() & ": INFO: IUT successfully sends adjacent application info notification ***");
              
              // Send 204 No Content
              httpPort_notif.send(m_http_response(m_http_response_204_no_content(v_headers)));
              
              log("*** " & testcasename() & ": PASS: IUT successfully sends adjacent applicationinfo notification ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
            }
            [] tc_wait.timeout {
              log("*** " & testcasename() & ": INCONC: Expected message not received ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
            }
          } // End of 'alt' statement
          
          // Postamble
          f_cf_01_http_notif_down();
      } 
  
  
  
    } // End of group ams_notifications 
  
Elian Kraja's avatar
Elian Kraja committed
} // End of module AtsMec_Ams_TestCases