Operations & Labels

Overview

The operations parameter in the ExecuteReport JSON-RPC message is an array of operations to perform. Operation may perform logic processing, may send outbound messages, or may wait for inbound messages. They may generate debug/trace messages to the trace_log, and may perform checks which are recorded in the check_log.

A successful check will generate a pass entry in the check_log. A failed check will generate a fail entry in the check_log. An unrecoverable check failure will generate an abort entry in the check_log and will abandon processing for this test instance (although the test run will continue if there are other instances in this run).

Operation Basics

All operations have some basic attributes in common:

Attribute Type Description
type String [Required] A unique identifier describing the type of operation to perform.
label String An optional label name. This is only required if this operation is to be the target of a branch operation. Naturally, the label value must be unique within the list of operations for this test instance.
arguments_not_used Boolean An optional performance testing flag. This flag is available when performance testing overhead needs to be kept to a minimum. If set and no match constraints are provided for an operation the bytes will not be decoded when evaluating the operation.

Example Operations

The following is an example ExecuteTest JSON-RPC request. It contains a sequence of operations including a branch operation.

{
    "inap": {
        "extensions": {
            "400": "OCTET STRING",
            "401": "OCTET STRING"
        }
    },
    "vars": {
        "suffix": "999001",
        "cli": "027654321"
    },
    "operations": [
        { "type": "eval", "expression": "$v->{cause} = 22" },
        { "type": "eval", "expression": "$v->{cause} = $v->{cause} + 3", "label": "add" },
        { "type": "branch", "expression": "$v->{cause} < 30", "on_true": "add" },
        {
            "type": "inap.ssp_to_scp.InitialDP",
            "arguments": {
                "serviceKey": 3000,
                "calledPartyNumber_digits": "{'1800' . $v->{suffix}}",
                "calledPartyNumber_noa": 3,
                "callingPartyNumber_digits": "{$v->{cli}}",
                "callingPartyNumber_noa": 3,
                "locationNumber_digits": "61415015122",
                "locationNumber_noa": 4,
                "callingPartysCategory_hex": "f7",
                "highLayerCompatibility_hex": "9181",
                "serviceInteractionIndicators_hex": "300ba009810102820101880100",
                "forwardCallIndicators_hex": "2001",
                "bearerCapability": {
                    "bearerCap_hex": "8090a3"
                },
                "eventTypeBCSM": 3,
                "callReferenceNumber_auto": 1,
                "extensions": [
                    { "type": "400", "value_octet_string": "BOSS" }
                ]
            }
        },
        {
            "type": "inap.ssp_from_scp.ReleaseCall",
            "arguments" : {
                "initialCallSegment_cause": "30"
            }
        },
        {
            "type": "assert",
            "expression": "$i->{ReleaseCall}{initialCallSegment_cause} > 22",
            "abort": "{'Bad Cause ' . $i->{ReleaseCall}{initialCallSegment_cause} . ', <= 22.'}",
            "pass": "{'OK Cause ' . $i->{ReleaseCall}{initialCallSegment_cause} . ', > 22.'}",
        }
    ]
}

Operations vs. Steps

For tracing purposes, operations are assigned a numeric index op_idx starting from zero based on their position in the operations array. The first operation is 0, the next is 1, etc.

Tracing will also report the step_idx. The first operation execution is step 0, the next is 1, etc. In the absence of any branch operations, the step index and operation index values will be identical. However, when branching occurs, the step index will continue to increase while the operation index will change according to which operation is being performed.