+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<ric-id>` | Id of the ric |
+| `NORIC` | Indicator that no ric is provided |
+| `<service-id>` | Id of the service |
+| `NOSERVICE` | Indicator that no service id is provided |
+| `<policy-type-id>` | Id of the policy type |
+| `NOTYPE` | Indicator that no type id is provided |
+| `NOID` | Indicator that no policy id is provided - indicate empty list of policies|
+| `<policy-id>` | Id of the policy |
+| `EMPTY` | Indicate for the special empty policy type |
+| `transient` | Transient, true or false |
+| `notification-url` | Url for notifications |
+| `<template-file>` | Path to the template file for the policy (same template used when creating the policy) |
+
+## Function: api_get_policy() ##
+
+Test of GET '/policy' or V2 GET '/v2/policies/{policy_id}' and optional check of the returned json payload.
+To test the the response code only, provide the expected response code and policy id.
+To test the contents of the returned json payload, add a path to the template file used when creating the policy.
+
+| arg list |
+|--|
+| `<response-code> <policy-id> [<template-file>]` |
+
+| arg list V2|
+|--|
+| `<response-code> <policy-id> [ <template-file> <service-name> <ric-id> <policytype-id>\|NOTYPE <transient> <notification-url>\|NOURL ]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<policy-id>` | Id of the policy |
+| `<template-file>` | Path to the template file for the policy (same template used when creating the policy) |
+| `<service-id>` | Id of the service |
+| `<ric-id>` | Id of the ric |
+| `<policy-type-id>` | Id of the policy type |
+| `NOTYPE` | Indicator that no type id is provided |
+| `transient` | Transient, true or false |
+| `notification-url` | Url for notifications |
+
+## Function: api_put_policy() ##
+
+Test of PUT '/policy' or V2 PUT '/policies'.
+If more than one policy shall be created, add a count value to indicate the number of policies to create. Note that if more than one policy shall be created the provided policy-id must be numerical (will be used as the starting id).
+
+| arg list |
+|--|
+| `<response-code> <service-name> <ric-id> <policytype-id> <policy-id> <transient> <template-file> [<count>]` |
+
+| arg list V2 |
+|--|
+| `<response-code> <service-name> <ric-id> <policytype-id>\|NOTYPE <policy-id> <transient>\|NOTRANSIENT <notification-url>\|NOURL <template-file> [<count>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<service-id>` | Id of the service |
+| `<ric-id>` | Id of the ric |
+| `<policy-type-id>` | Id of the policy type |
+| `<policy-id>` | Id of the policy. This value shall be a numeric value if more than one policy shall be created |
+| `transient>` | Transient 'true' or 'false'. 'NOTRANSIENT' can be used to indicate using the default value (no transient value provided) |
+| `notification-url` | Url for notifications |
+|`NOURL`| Indicator for no url |
+| `<template-file>` | Path to the template file for the policy |
+| `<count>` | An optional count (default is 1). If a value greater than 1 is given, the policy ids will use the given policy id as the first id and add 1 to that id for each new policy |
+
+## Function: api_put_policy_batch() ##
+
+This tests the same as function 'api_put_policy' except that all put requests are sent to dmaap in one go and then the responses are polled one by one.
+If the agent api is not configured to use dmaap (see 'use_agent_dmaap', 'use_agent_rest_http' and 'use_agent_rest_https'), an error message is printed.
+For arg list and parameters, see 'api_put_policy'.
+
+## Function: api_put_policy_parallel() ##
+
+This tests the same as function 'api_put_policy' except that the policy create is spread out over a number of processes and it only uses the agent rest API. The total number of policies created is determined by the product of the parameters 'number-of-rics' and 'count'. The parameter 'number-of-threads' shall be selected to be not evenly divisible by the product of the parameters 'number-of-rics' and 'count' - this is to ensure that one process does not handle the creation of all the policies in one ric.
+
+| arg list |
+|--|
+| `<response-code> <service-name> <ric-id-base> <number-of-rics> <policytype-id> <policy-start-id> <transient> <template-file> <count-per-ric> <number-of-threads>`
+
+| arg list |
+|--|
+| `<response-code> <service-name> <ric-id-base> <number-of-rics> <policytype-id> <policy-start-id> <transient> <notification-url>\|NOURL <template-file> <count-per-ric> <number-of-threads>`
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<service-id>` | Id of the service |
+| `<ric-id-base>` | The base id of the rics, ie ric id without the sequence number. The sequence number is added during processing |
+| `<number-of-rics>` | The number of rics, assuming the first index is '1'. The index is added to the 'ric-id-base' id |
+| `<policy-type-id>` | Id of the policy type |
+| `<policy-start-id>` | Id of the policy. This value shall be a numeric value and will be the id of the first policy |
+| `transient>` | Transient 'true' or 'false'. 'NOTRANSIENT' can be used to indicate using the default value (no transient value provide) |
+| `notification-url` | Url for notifications |
+| `<template-file>` | Path to the template file for the policy |
+| `<count-per-ric>` | Number of policies per ric |
+| `<number-of-threads>` | Number of threads (processes) to run in parallel |
+
+## Function: api_delete_policy() ##
+
+This tests the DELETE '/policy' or V2 DELETE '/v2/policies/{policy_id}'. Removes the indicated policy or a 'count' number of policies starting with 'policy-id' as the first id.
+
+| arg list |
+|--|
+| `<response-code> <policy-id> [<count>]`
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<policy-id>` | Id of the policy |
+| `<count>` | An optional count of policies to delete. The 'policy-id' will be the first id to be deleted. |
+
+## Function: api_delete_policy_batch() ##
+
+This tests the same as function 'api_delete_policy' except that all delete requests are sent to dmaap in one go and then the responses are polled one by one.
+If the agent api is not configured to used dmaap (see 'use_agent_dmaap', 'use_agent_rest_http' and 'use_agent_rest_https'), an error message is printed.
+For arg list and parameters, see 'api_delete_policy'.
+
+## Function: api_delete_policy_parallel() ##
+
+This tests the same as function 'api_delete_policy' except that the policy delete is spread out over a number of processes and it only uses the agent rest API. The total number of policies deleted is determined by the product of the parameters 'number-of-rics' and 'count'. The parameter 'number-of-threads' shall be selected to be not evenly divisible by the product of the parameters 'number-of-rics' and 'count' - this is to ensure that one process does not handle the deletion of all the policies in one ric.
+
+| arg list |
+|--|
+| `<response-code> <ric-id-base> <number-of-rics> <policy-start-id> <count-per-ric> <number-of-threads>`
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<ric-id-base>` | The base id of the rics, ie ric id without the sequence number. The sequence number is added during processing |
+| `<number-of-rics>` | The number of rics, assuming the first index is '1' |
+| `<policy-start-id>` | Id of the policy. This value shall be a numeric value and will be the id of the first policy |
+| `<count-per-ric>` | Number of policies per ric |
+| `<number-of-threads>` | Number of threads (processes) to run in parallel |
+
+## Function: api_get_policy_ids() ##
+
+Test of GET '/policy_ids' or V2 GET '/v2/policies'.
+To test response code only, provide the response code parameter as well as the following three parameters.
+To also test the response payload add the 'NOID' for an expected empty array or repeat the 'policy-instance-id' for each expected policy id.
+
+| arg list |
+|--|
+| `<response-code> <ric-id>\|NORIC <service-id>\|NOSERVICE <type-id>\|NOTYPE ([<policy-instance-id]*\|NOID)` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<ric-id>` | Id of the ric |
+| `NORIC` | Indicator that no ric is provided |
+| `<service-id>` | Id of the service |
+| `NOSERVICE` | Indicator that no service id is provided |
+| `type-id>` | Id of the policy type |
+| `NOTYPE` | Indicator that no type id is provided |
+| `NOID` | Indicator that no policy id is provided - indicate empty list of policies|
+| `<policy-instance-id>` | Id of the policy |
+
+## Function: api_get_policy_schema() ##
+
+Test of V2 GET '/v2/policy-types/{policyTypeId}' and optional check of the returned json schema.
+To test the response code only, provide the expected response code and policy type id.
+To test the contents of the returned json schema, add a path to a schema file to compare with.
+
+| arg list |
+|--|
+| `<response-code> <policy-type-id> [<schema-file>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<policy-type-id>` | Id of the policy type |
+| `<schema-file>` | Path to the schema file for the policy type |
+
+## Function: api_get_policy_schema() ##
+
+Test of GET '/policy_schema' and optional check of the returned json schema.
+To test the response code only, provide the expected response code and policy type id.
+To test the contents of the returned json schema, add a path to a schema file to compare with.
+
+| arg list |
+|--|
+| `<response-code> <policy-type-id> [<schema-file>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<policy-type-id>` | Id of the policy type |
+| `<schema-file>` | Path to the schema file for the policy type |
+
+## Function: api_get_policy_schemas() ##
+
+Test of GET '/policy_schemas' and optional check of the returned json schemas.
+To test the response code only, provide the expected response code and ric id (or NORIC if no ric is given).
+To test the contents of the returned json schema, add a path to a schema file to compare with (or NOFILE to represent an empty '{}' type)
+
+| arg list |
+|--|
+| `<response-code> <ric-id>\|NORIC [<schema-file>\|NOFILE]*` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<ric-id>` | Id of the ric |
+| `NORIC` | No ric id given |
+| `<schema-file>` | Path to the schema file for the policy type |
+| `NOFILE` | Indicate the template for an empty type |
+
+## Function: api_get_policy_status() ##
+
+Test of GET '/policy_status' or V2 GET '/policies/{policy_id}/status'.
+
+| arg list |
+|--|
+| `<response-code> <policy-id> (STD\|STD2 <enforce-status>\|EMPTY [<reason>\|EMPTY])\|(OSC <instance-status> <has-been-deleted>)` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<policy-id>` | Id of the policy |
+| `STD` | Indicator of status of Standarized A1 |
+| `STD2` | Indicator of status of Standarized A1 version 2 |
+| `<enforce-status>` | Enforcement status |
+| `<reason>` | Optional reason |
+| `EMPTY` | Indicator of empty string status or reason |
+| `OSC` | Indicator of status of Non-Standarized OSC A1 |
+| `<instance-status>` | Instance status |
+| `<has-been-deleted>` | Deleted status, true or false |
+
+## Function: api_get_policy_types() ##
+
+Test of GET '/policy_types' or V2 GET '/v2/policy-types' and optional check of the returned ids.
+To test the response code only, provide the expected response code and ric id (or NORIC if no ric is given).
+To test the contents of the returned json payload, add the list of expected policy type id (or 'EMPTY' for the '{}' type)
+
+| arg list |
+|--|
+| `<response-code> [<ric-id>\|NORIC [<policy-type-id>\|EMPTY [<policy-type-id>]*]]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<ric-id>` | Id of the ric |
+| `NORIC` | No ric id given |
+| `<policy-type-id>` | Id of the policy type |
+| `EMPTY` | Indicate the empty type |
+
+## Function: api_get_status() ##
+
+Test of GET /status or V2 GET /status
+
+| arg list |
+|--|
+| `<response-code>` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+
+## Function: api_get_ric() ##
+
+Test of GET '/ric' or V2 GET '/v2/rics/ric'
+To test the response code only, provide the expected response code and managed element id.
+To test the returned ric id, provide the expected ric id.
+
+| arg list |
+|--|
+| `<reponse-code> <managed-element-id> [<ric-id>]` |
+
+| arg list V2 |
+|--|
+| `<reponse-code> <management-element-id>\|NOME <ric-id>\|<NORIC> [<string-of-ricinfo>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<managed-element-id>` | Id of the managed element |
+| `NOME` | Indicator for no ME |
+| `ric-id` | Id of the ric |
+| `NORIC` | Indicator no RIC |
+| `string-of-ricinfo` | String of ric info |
+
+## Function: api_get_rics() ##
+
+Test of GET '/rics' or V2 GET '/v2/rics' and optional check of the returned json payload (ricinfo).
+To test the response code only, provide the expected response code and policy type id (or NOTYPE if no type is given).
+To test also the returned payload, add the formatted string of info in the returned payload.
+Format of ricinfo: <br>`<ric-id>:<list-of-mes>:<list-of-policy-type-ids>`<br>
+Example <br>`<space-separate-string-of-ricinfo> = "ricsim_g1_1:me1_ricsim_g1_1,me2_ricsim_g1_1:1,2,4 ricsim_g1_1:me2_........."`
+
+| arg list |
+|--|
+| `<reponse-code> <policy-type-id>\|NOTYPE [<space-separate-string-of-ricinfo>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<policy-type-id>` | Policy type id of the ric |
+| `NOTYPE>` | No type given |
+| `<space-separate-string-of-ricinfo>` | A space separated string of ric info - needs to be quoted |
+
+## Function: api_put_service() ##
+
+Test of PUT '/service' or V2 PUT '/service'.
+| arg list |
+|--|
+| `<response-code> <service-name> <keepalive-timeout> <callbackurl>` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<service-name>` | Service name |
+| `<keepalive-timeout>` | Timeout value |
+| `<callbackurl>` | Callback url |
+
+## Function: api_get_services() ##
+
+Test of GET '/service' or V2 GET '/v2/services' and optional check of the returned json payload.
+To test only the response code, omit all parameters except the expected response code.
+To test the returned json, provide the parameters after the response code.
+
+| arg list |
+|--|
+| `<response-code> [ (<query-service-name> <target-service-name> <keepalive-timeout> <callbackurl>) \| (NOSERVICE <target-service-name> <keepalive-timeout> <callbackurl> [<target-service-name> <keepalive-timeout> <callbackurl>]* )]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<query-service-name>` | Service name for the query |
+| `<target-service-name>` | Target service name|
+| `<keepalive-timeout>` | Timeout value |
+| `<callbackurl>` | Callback url |
+| `NOSERVICE` | Indicator of no target service name |
+
+## Function: api_get_service_ids() ##
+
+Test of GET '/services' or V2 GET /'v2/services'. Only check of service ids.
+
+| arg list |
+|--|
+| `<response-code> [<service-name>]*` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<service-name>` | Service name |
+
+## Function: api_delete_services() ##
+
+Test of DELETE '/services' or V2 DELETE '/v2/services/{serviceId}'
+
+| arg list |
+|--|
+| `<response-code> [<service-name>]*` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<service-name>` | Service name |
+
+## Function: api_put_services_keepalive() ##
+
+Test of PUT '/services/keepalive' or V2 PUT '/v2/services/{service_id}/keepalive'
+
+| arg list |
+|--|
+| `<response-code> <service-name>` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<service-name>` | Service name |
+
+## Function: api_put_configuration() ##
+
+Test of PUT '/v2/configuration'
+
+| arg list |
+|--|
+| `<response-code> <config-file>` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<config-file>` | Path json config file |
+
+## Function: api_get_configuration() ##
+
+Test of GET '/v2/configuration'
+
+| arg list |
+|--|
+| `<response-code> [<config-file>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<config-file>` | Path json config file to compare the retrieved config with |
+
+# Description of functions in consul_cbs_function.sh #
+
+## Function: consul_config_app ##
+
+Function to load a json config from a file into consul for the Policy Agent
+
+| arg list |
+|--|
+| `<json-config-file>` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<json-config-file>` | The path to the json file to be loaded to Consul/CBS |
+
+## Function: prepare_consul_config ##
+
+Function to prepare a Consul config based on the previously configured (and started simulators). Note that all simulator must be running and the test script has to configure if http or https shall be used for the components (this is done by the functions 'use_simulator_http', 'use_simulator_https', 'use_sdnc_http', 'use_sdnc_https', 'use_mr_http', 'use_mr_https')
+| arg list |
+|--|
+| `<deviation-message-to-print>` |
+
+| parameter | description |
+| --------- | ----------- |
+| `SDNC\|NOSDNC` | Configure based on a1-controller (SNDC) or without a controller/adapter (NOSDNC) |
+| `<output-file>` | The path to the json output file containing the prepared config. This file is used in 'consul_config_app' |
+
+## Function: start_consul_cbs ##
+
+Start the Consul and CBS containers
+| arg list |
+|--|
+| None |
+
+# Description of functions in control_panel_api_function.sh #
+
+## Function: use_control_panel_http ##
+
+Set http as the protocol to use for all communication to the Control Panel
+| arg list |
+|--|
+| None |
+
+## Function: use_control_panel_https ##
+
+Set https as the protocol to use for all communication to the Control Panel
+| arg list |
+|--|
+| None |
+
+## Function: start_control_panel ##
+
+Start the Control Panel container
+| arg list |
+|--|
+| None |
+
+# Description of functions in controller_api_functions.sh #
+
+The file contains a selection of the possible API tests towards the a1-controller
+
+## Function: use_sdnc_http ##
+
+Use http for all API calls towards the SDNC A1 Controller. This is the default. Note that this function shall be called before preparing the config for Consul.
+| arg list |
+|--|
+| None |
+
+## Function: use_sdnc_https ##
+
+Use https for all API calls towards the SDNC A1 Controller. Note that this function shall be called before preparing the config for Consul.
+| arg list |
+|--|
+| None |
+
+## Function: start_sdnc ##
+
+Start the SDNC A1 Controller container and its database container
+| arg list |
+|--|
+| None |
+
+## Function: check_sdnc_logs ##
+
+Check the SDNC log for any warnings and errors and print the count of each.
+| arg list |
+|--|
+| None |
+
+## Function: controller_api_get_A1_policy_ids ##
+
+Test of GET policy ids towards OSC or STD type simulator.
+To test response code only, provide the response code, 'OSC' + policy type or 'STD'
+To test the response payload, include the ids of the expexted response.
+
+| arg list |
+|--|
+| `<response-code> (OSC <ric-id> <policy-type-id> [ <policy-id> [<policy-id>]* ]) \| ( STD <ric-id> [ <policy-id> [<policy-id>]* ]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `OSC` | Indicator of status of Non-Standarized OSC A1 |
+| `<ric-id>` | Id of the ric |
+| `policy-type-id>` | Id of the policy type |
+| `<policy-id>` | Id of the policy |
+| `STD` | Indicator of status of Standarized A1 |
+
+## Function: controller_api_get_A1_policy_type ##
+
+Test of GET a policy type (OSC only)
+
+| arg list |
+|--|
+| `<response-code> OSC <ric-id> <policy-type-id> [<policy-type-file>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `OSC` | Indicator of status of Non-Standarized OSC A1 |
+| `<ric-id>` | Id of the ric |
+| `policy-type-id>` | Id of the policy type |
+| `policy-type-file>` | Optional schema file to compare the returned type with |
+
+## Function: controller_api_delete_A1_policy ##
+
+Deletes a policy instance
+
+| arg list |
+|--|
+| `(STD <ric-id> <policy-id>) \| (OSC <ric-id> <policy-type-id> <policy-id>)` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `STD` | Indicator of status of Standarized A1 |
+| `<ric-id>` | Id of the ric |
+| `<policy-id>` | Id of the policy |
+| `policy-type-id>` | Id of the policy type |
+| `OSC` | Indicator of status of Non-Standarized OSC A1 |
+| `policy-type-file>` | Optional schema file to compare the returned type with |
+
+## Function: controller_api_put_A1_policy ##
+
+Creates a policy instance
+
+| arg list |
+|--|
+| `<response-code> (STD <ric-id> <policy-id> <template-file> ) \| (OSC <ric-id> <policy-type-id> <policy-id> <template-file>)` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `STD` | Indicator of status of Standarized A1 |
+| `<ric-id>` | Id of the ric |
+| `<policy-id>` | Id of the policy |
+| `<template-file>` | Path to the template file of the policy|
+| `OSC` | Indicator of status of Non-Standarized OSC A1 |
+| `<policy-type-id>` | Id of the policy type |
+
+## Function: controller_api_get_A1_policy_status ##
+
+Checks the status of a policy
+
+ arg list |
+|--|
+| `<response-code> (STD <ric-id> <policy-id> <enforce-status> [<reason>]) \| (OSC <ric-id> <policy-type-id> <policy-id> <instance-status> <has-been-deleted>)` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `STD` | Indicator of status of Standarized A1 |
+| `<ric-id>` | Id of the ric |
+| `<policy-id>` | Id of the policy |
+| `<enforce-status>` | Enforcement status |
+| `<reason>` | Optional reason |
+| `OSC` | Indicator of status of Non-Standarized OSC A1 |
+| `<policy-type-id>` | Id of the policy type |
+| `<instance-status>` | Instance status |
+| `<has-been-deleted>` | Deleted status, true or false |
+
+# Description of functions in cr_api_functions.sh #
+
+## Function: use_cr_http ##
+
+Use http for getting event from CR. The admin API is not affected. This is the default.
+| arg list |
+|--|
+| None |
+
+## Function: use_cr_https ##
+
+Use https for getting event from CR. The admin API is not affected.
+Note: Not yet used as callback event is not fully implemented/deciced.
+| arg list |
+|--|
+| None |
+
+## Function: start_cr ##
+
+Start the Callback Receiver container in docker or kube depending on start mode.
+| arg list |
+|--|
+| None |
+
+## Function: cr_equal ##
+
+Tests if a variable value in the Callback Receiver (CR) simulator is equal to a target value.
+Without the timeout, the test sets pass or fail immediately depending on if the variable is equal to the target or not.
+With the timeout, the test waits up to the timeout seconds before setting pass or fail depending on if the variable value becomes equal to the target value or not.
+See the 'cr' dir for more details.
+| arg list |
+|--|
+| `<variable-name> <target-value> [ <timeout-in-sec> ]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<variable-name>` | Variable name in the CR |
+| `<target-value>` | Target value for the variable |
+| `<timeout-in-sec>` | Max time to wait for the variable to reach the target value |
+
+## Function: cr_api_check_all_sync_events() ##
+
+Check the contents of all ric events received for a callback id.
+
+| arg list |
+|--|
+| `<response-code> <id> [ EMPTY \| ( <ric-id> )+ ]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<id>` | Id of the callback destination |
+| `EMPTY` | Indicator for an empty list |
+| `<ric-id>` | Id of the ric |
+
+## Function: cr_api_check_all_ics_events() ##
+
+Check the contents of all current status events for one id from ICS
+
+| arg list |
+|--|
+| `<response-code> <id> [ EMPTY \| ( <status> )+ ]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<id>` | Id of the callback destination |
+| `EMPTY` | Indicator for an empty list |
+| `<status>` | Status string |
+
+## Function: cr_api_check_all_ics_subscription_events() ##
+
+Check the contents of all current subscription events for one id from ICS
+
+| arg list |
+|--|
+| `<response-code> <id> [ EMPTY | ( <type-id> <schema> <registration-status> )+ ]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<id>` | Id of the callback destination |
+| `EMPTY` | Indicator for an empty list |
+| `<type-id>` | Id of the data type |
+| `<schema>` | Path to typeschema file |
+| `<registration-status>` | Status string |
+
+
+## Function: cr_api_reset() ##
+
+Reset the callback receiver
+
+| arg list |
+|--|
+| - |
+
+
+# Description of functions in ics_api_functions.sh #
+
+## Function: use_ics_rest_http ##
+
+Use http for all API calls to the ICS. This is the default protocol.
+| arg list |
+|--|
+| None |
+
+## Function: use_ics_rest_https ##
+
+Use https for all API calls to the ICS.
+| arg list |
+|--|
+| None |
+
+## Function: use_ics_dmaap_http ##
+
+Send and recieve all API calls to the ICS over Dmaap via the MR using http.
+| arg list |
+|--|
+| None |
+
+## Function: use_ics_dmaap_https ##
+
+Send and recieve all API calls to the ICS over Dmaap via the MR using https.
+| arg list |
+|--|
+| None |
+
+## Function: start_ics ##
+
+Start the ICS container in docker or kube depending on running mode.
+| arg list |
+|--|
+| None |
+
+## Function: stop_ics ##
+
+Stop the ICS container.
+| arg list |
+|--|
+| None |
+
+## Function: start_stopped_ics ##
+
+Start a previously stopped ics.
+| arg list |
+|--|
+| None |
+
+## Function: set_ics_debug ##
+
+Configure the ICS log on debug level. The ICS must be running.
+| arg list |
+|--|
+| None |
+
+## Function: set_ics_trace ##
+
+Configure the ICS log on trace level. The ICS must be running.
+| arg list |
+|--|
+| None |
+
+## Function: check_ics_logs ##
+
+Check the ICS log for any warnings and errors and print the count of each.
+| arg list |
+|--|
+| None |
+
+## Function: ics_equal ##
+
+Tests if a variable value in the ICS is equal to a target value.
+Without the timeout, the test sets pass or fail immediately depending on if the variable is equal to the target or not.
+With the timeout, the test waits up to the timeout seconds before setting pass or fail depending on if the variable value becomes equal to the target value or not.
+See the 'a1-interface' repo for more details.
+
+| arg list |
+|--|
+| `<variable-name> <target-value> [ <timeout-in-sec> ]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<variable-name>` | Variable name in ics |
+| `<target-value>` | Target value for the variable |
+| `<timeout-in-sec>` | Max time to wait for the variable to reach the target value |
+
+## Function: ics_api_a1_get_job_ids() ##
+
+Test of GET '/A1-EI​/v1​/eitypes​/{eiTypeId}​/eijobs' and optional check of the array of returned job ids.
+To test the response code only, provide the response code parameter as well as a type id and an owner id.
+To also test the response payload add the 'EMPTY' for an expected empty array or repeat the last parameter for each expected job id.
+
+| arg list |
+|--|
+| `<response-code> <type-id> <owner-id>\|NOOWNER [ EMPTY \| <job-id>+ ]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the EI type |
+| `<owner-id>` | Id of the job owner |
+| `NOOWNER` | No owner is given |
+| `<job-id>` | Id of the expected job |
+| `EMPTY` | The expected list of job id shall be empty |
+
+## Function: ics_api_a1_get_type() ##
+
+Test of GET '/A1-EI​/v1​/eitypes​/{eiTypeId}' and optional check of the returned schema.
+To test the response code only, provide the response code parameter as well as the type-id.
+To also test the response payload add a path to the expected schema file.
+
+| arg list |
+|--|
+| `<response-code> <type-id> [<schema-file>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the EI type |
+| `<schema-file>` | Path to a schema file to compare with the returned schema |
+
+## Function: ics_api_a1_get_type_ids() ##
+
+Test of GET '/A1-EI​/v1​/eitypes' and optional check of returned list of type ids.
+To test the response code only, provide the response only.
+To also test the response payload add the list of expected type ids (or EMPTY if the list is expected to be empty).
+
+| arg list |
+|--|
+| `<response-code> [ (EMPTY \| [<type-id>]+) ]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `EMPTY` | The expected list of type ids shall be empty |
+| `<type-id>` | Id of the EI type |
+
+## Function: ics_api_a1_get_job_status() ##
+
+Test of GET '/A1-EI​/v1​/eitypes​/{eiTypeId}​/eijobs​/{eiJobId}​/status' and optional check of the returned status.
+To test the response code only, provide the response code, type id and job id.
+To also test the response payload add the expected status.
+
+| arg list |
+|--|
+| `<response-code> <type-id> <job-id> [<status>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the EI type |
+| `<job-id>` | Id of the job |
+| `<status>` | Expected status |
+
+## Function: ics_api_a1_get_job() ##
+
+Test of GET '/A1-EI​/v1​/eitypes​/{eiTypeId}​/eijobs​/{eiJobId}' and optional check of the returned job.
+To test the response code only, provide the response code, type id and job id.
+To also test the response payload add the remaining parameters.
+
+| arg list |
+|--|
+| `<response-code> <type-id> <job-id> [<target-url> <owner-id> <template-job-file>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the EI type |
+| `<job-id>` | Id of the job |
+| `<target-url>` | Expected target url for the job |
+| `<owner-id>` | Expected owner for the job |
+| `<template-job-file>` | Path to a job template for job parameters of the job |
+
+## Function: ics_api_a1_delete_job() ##
+
+Test of DELETE '/A1-EI​/v1​/eitypes​/{eiTypeId}​/eijobs​/{eiJobId}'.
+To test, provide all the specified parameters.
+
+| arg list |
+|--|
+| `<response-code> <type-id> <job-id>` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the EI type |
+| `<job-id>` | Id of the job |
+
+## Function: ics_api_a1_put_job() ##
+
+Test of PUT '/A1-EI​/v1​/eitypes​/{eiTypeId}​/eijobs​/{eiJobId}'.
+To test, provide all the specified parameters.
+
+| arg list |
+|--|
+| `<response-code> <type-id> <job-id> <target-url> <owner-id> <template-job-file>` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the EI type |
+| `<job-id>` | Id of the job |
+| `<target-url>` | Target url for the job |
+| `<owner-id>` | Owner of the job |
+| `<template-job-file>` | Path to a job template for job parameters of the job |
+
+## Function: ics_api_edp_get_type_ids() ##
+
+Test of GET '/ei-producer/v1/eitypes' or '/data-producer/v1/info-types' depending on ics version and an optional check of the returned list of type ids.
+To test the response code only, provide the response code.
+To also test the response payload add list of expected type ids (or EMPTY if the list is expected to be empty).
+
+| arg list |
+|--|
+| `<response-code> [ EMPTY \| <type-id>+]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the type |
+| `EMPTY` | The expected list of type ids shall be empty |
+
+## Function: ics_api_edp_get_producer_status() ##
+
+Test of GET '/ei-producer/v1/eiproducers/{eiProducerId}/status' or '/data-producer/v1/info-producers/{infoProducerId}/status' depending on ics version and optional check of the returned status.
+To test the response code only, provide the response code and producer id.
+To also test the response payload add the expected status.
+
+| arg list |
+|--|
+| `<response-code> <producer-id> [<status>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<producer-id>` | Id of the producer |
+| `<status>` | The expected status string |
+
+## Function: ics_api_edp_get_producer_ids() ##
+
+Test of GET '/ei-producer/v1/eiproducers' and optional check of the returned producer ids.
+To test the response code only, provide the response.
+To also test the response payload add the list of expected producer-ids (or EMPTY if the list of ids is expected to be empty).
+
+| arg list |
+|--|
+| `<response-code> [ EMPTY \| <producer-id>+]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<producer-id>` | Id of the producer |
+| `EMPTY` | The expected list of type ids shall be empty |
+
+## Function: ics_api_edp_get_producer_ids_2() ##
+
+Test of GET '/ei-producer/v1/eiproducers' or '/data-producer/v1/info-producers' depending on ics version and optional check of the returned producer ids.
+To test the response code only, provide the response.
+To also test the response payload add the type (if any) and a list of expected producer-ids (or EMPTY if the list of ids is expected to be empty).
+
+| arg list |
+|--|
+| `<response-code> [ ( NOTYPE \| <type-id> ) [ EMPTY \| <producer-id>+]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the type |
+| `EMPTY` | No type given |
+| `<producer-id>` | Id of the producer |
+| `EMPTY` | The expected list of type ids shall be empty |
+
+## Function: ics_api_edp_get_type() ##
+
+Test of GET '/ei-producer/v1/eitypes/{eiTypeId}' and optional check of the returned type.
+To test the response code only, provide the response and the type-id.
+To also test the response payload add a path to a job schema file and a list expected producer-id (or EMPTY if the list of ids is expected to be empty).
+
+| arg list |
+|--|
+| `<response-code> <type-id> [<job-schema-file> (EMPTY \| [<producer-id>]+)]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the type |
+| `<job-schema-file>` | Path to a job schema file |
+| `<producer-id>` | Id of the producer |
+| `EMPTY` | The expected list of type ids shall be empty |
+
+## Function: ics_api_edp_get_type_2() ##
+
+Test of GET '/ei-producer/v1/eitypes/{eiTypeId}' or '/data-producer/v1/info-types/{infoTypeId}' depending on ics version and optional check of the returned type.
+To test the response code only, provide the response and the type-id.
+To also test the response payload add a path to a job schema file.
+
+| arg list |
+|--|
+| `<response-code> <type-id> [<job-schema-file>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the type |
+| `<job-schema-file>` | Path to a job schema file |
+| `EMPTY` | The expected list of type ids shall be empty |
+
+## Function: ics_api_edp_put_type_2() ##
+
+Test of PUT '/ei-producer/v1/eitypes/{eiTypeId}' or '/data-producer/v1/info-types/{infoTypeId}' depending on ics version and optional check of the returned type.
+
+| arg list |
+|--|
+| `<response-code> <type-id> [<job-schema-file>]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the type |
+| `<job-schema-file>` | Path to a job schema file |
+| `EMPTY` | The expected list of type ids shall be empty |
+
+## Function: ics_api_edp_delete_type_2() ##
+
+Test of DELETE '/ei-producer/v1/eitypes/{eiTypeId}' or '/data-producer/v1/info-types/{infoTypeId}' depending on ics version and optional check of the returned type.
+
+| arg list |
+|--|
+| `<response-code> <type-id>` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<type-id>` | Id of the type |
+
+## Function: ics_api_edp_get_producer() ##
+
+Test of GET '/ei-producer/v1/eiproducers/{eiProducerId}' and optional check of the returned producer.
+To test the response code only, provide the response and the producer-id.
+To also test the response payload add the remaining parameters defining thee producer.
+
+| arg list |
+|--|
+| `<response-code> <producer-id> [<create-callback> <delete-callback> <supervision-callback> (EMPTY\| [<type-id> <schema-file>]+) ]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<producer-id>` | Id of the producer |
+| `<create-callback>` | Callback for create job |
+| `<delete-callback>` | Callback for delete job |
+| `<supervision-callback>` | Callback for producer supervision |
+| `<type-id>` | Id of the type |
+| `<schema-file>` | Path to a schema file |
+| `EMPTY` | The expected list of type schema pairs shall be empty |
+
+## Function: ics_api_edp_get_producer_2() ##
+
+Test of GET '/ei-producer/v1/eiproducers/{eiProducerId}' or '/data-producer/v1/info-producers/{infoProducerId}' depending on ics version and optional check of the returned producer.
+To test the response code only, provide the response and the producer-id.
+To also test the response payload add the remaining parameters defining thee producer.
+
+| arg list |
+|--|
+| `<response-code> <producer-id> [<job-callback> <supervision-callback> (EMPTY \| <type-id>+) ]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<producer-id>` | Id of the producer |
+| `<job-callback>` | Callback for the url |
+| `<supervision-callback>` | Callback for producer supervision |
+| `<type-id>` | Id of the type |
+| `EMPTY` | The expected list of types shall be empty |
+
+## Function: ics_api_edp_delete_producer() ##
+
+Test of DELETE '/ei-producer/v1/eiproducers/{eiProducerId}' or '/data-producer/v1/info-producers/{infoProducerId}' depending on ics version.
+To test, provide all parameters.
+
+| arg list |
+|--|
+| `<response-code> <producer-id>` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<producer-id>` | Id of the producer |
+
+## Function: ics_api_edp_put_producer() ##
+
+Test of PUT '/ei-producer/v1/eiproducers/{eiProducerId}'.
+To test, provide all parameters. The list of type/schema pair may be empty.
+
+| arg list |
+|--|
+| `<response-code> <producer-id> <job-callback> <supervision-callback> (EMPTY \| [<type-id> <schema-file>]+)` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<producer-id>` | Id of the producer |
+| `<job-callback>` | Callback for create/delete job |
+| `<supervision-callback>` | Callback for producer supervision |
+| `<type-id>` | Id of the type |
+| `<schema-file>` | Path to a schema file |
+| `EMPTY` | The list of type/schema pairs is empty |
+
+## Function: ics_api_edp_put_producer_2() ##
+
+Test of PUT '/ei-producer/v1/eiproducers/{eiProducerId}' or '/data-producer/v1/info-producers/{infoProducerId}' depending on ics version.
+To test, provide all parameters. The list of type/schema pair may be empty.
+
+| arg list |
+|--|
+| `<response-code> <producer-id> <job-callback> <supervision-callback> NOTYPE\|[<type-id>+]` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<producer-id>` | Id of the producer |
+| `<job-callback>` | Callback for create/delete job |
+| `<supervision-callback>` | Callback for producer supervision |
+| `<type-id>` | Id of the type |
+| `NOTYPE` | The list of types is empty |
+
+## Function: ics_api_edp_get_producer_jobs() ##
+
+Test of GET '/ei-producer/v1/eiproducers/{eiProducerId}/eijobs' and optional check of the returned producer job.
+To test the response code only, provide the response and the producer-id.
+To also test the response payload add the remaining parameters.
+
+| arg list |
+|--|
+| `<response-code> <producer-id> (EMPTY \| [<job-id> <type-id> <target-url> <job-owner> <template-job-file>]+)` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<producer-id>` | Id of the producer |
+| `<job-id>` | Id of the job |
+| `<type-id>` | Id of the EI type |
+| `<target-url>` | Target url for data delivery |
+| `<job-owner>` | Id of the job owner |
+| `<template-job-file>` | Path to a job template file |
+| `EMPTY` | The list of job/type/target/job-file tuples is empty |
+
+## Function: ics_api_edp_get_producer_jobs_2() ##
+
+Test of GET '/ei-producer/v1/eiproducers/{eiProducerId}/eijobs' or '/data-producer/v1/info-producers/{infoProducerId}/info-jobs' depending on ics version and optional check of the returned producer job.
+To test the response code only, provide the response and the producer-id.
+To also test the response payload add the remaining parameters.
+
+| arg list |
+|--|
+| `<response-code> <producer-id> (EMPTY \| [<job-id> <type-id> <target-url> <job-owner> <template-job-file>]+)` |
+
+| parameter | description |
+| --------- | ----------- |
+| `<response-code>` | Expected http response code |
+| `<producer-id>` | Id of the producer |
+| `<job-id>` | Id of the job |
+| `<type-id>` | Id of the type |
+| `<target-url>` | Target url for data delivery |
+| `<job-owner>` | Id of the job owner |
+| `<template-job-file>` | Path to a job template file |
+| `EMPTY` | The list of job/type/target/job-file tuples is empty |