{
    "config": {
        "name": "run request with WebSocket protocol",
        "base_url": "ws://echo.websocket.events",
        "variables": {
            "a": 12.3,
            "b": 3.45,
            "n": 5
        }
    },
    "teststeps": [
        {
            "name": "open connection",
            "websocket": {
                "type": "open",
                "url": "/",
                "headers": {
                    "User-Agent": "HttpRunnerPlus"
                }
            },
            "validate": [
                {
                    "check": "status_code",
                    "assert": "equals",
                    "expect": 101,
                    "msg": "check open status code"
                },
                {
                    "check": "headers.Connection",
                    "assert": "equals",
                    "expect": "Upgrade",
                    "msg": "check headers"
                }
            ]
        },
        {
            "name": "ping pong test",
            "websocket": {
                "type": "ping",
                "url": "/",
                "timeout": 5000
            }
        },
        {
            "name": "read sponsor info",
            "websocket": {
                "type": "r",
                "url": "/",
                "timeout": 5000
            },
            "validate": [
                {
                    "check": "body",
                    "assert": "contains",
                    "expect": "Lob.com",
                    "msg": "check sponsor message"
                }
            ]
        },
        {
            "name": "write json",
            "websocket": {
                "type": "w",
                "url": "/",
                "text": {
                    "foo1": "${gen_random_string($n)}",
                    "foo2": "${max($a, $b)}"
                }
            }
        },
        {
            "name": "read json",
            "websocket": {
                "type": "r",
                "url": "/"
            },
            "extract": {
                "varFoo1": "body.foo1"
            },
            "validate": [
                {
                    "check": "body.foo1",
                    "assert": "length_equals",
                    "expect": 5,
                    "msg": "check json foo1"
                },
                {
                    "check": "body.foo2",
                    "assert": "equals",
                    "expect": 12.3,
                    "msg": "check json foo2"
                }
            ]
        },
        {
            "name": "write and read text",
            "websocket": {
                "type": "wr",
                "url": "/",
                "text": "$varFoo1"
            },
            "validate": [
                {
                    "check": "body",
                    "assert": "length_equals",
                    "expect": 5,
                    "msg": "check length equal"
                }
            ]
        },
        {
            "name": "write something redundant",
            "websocket": {
                "type": "w",
                "url": "/",
                "text": "have a nice day!"
            }
        },
        {
            "name": "write something redundant",
            "websocket": {
                "type": "w",
                "url": "/",
                "text": "balabala ..."
            }
        },
        {
            "name": "close connection",
            "websocket": {
                "type": "close",
                "url": "/",
                "close_status": 1000,
                "timeout": 30000
            },
            "validate": [
                {
                    "check": "status_code",
                    "assert": "equals",
                    "expect": 1000,
                    "msg": "check close status code"
                }
            ]
        }
    ]
}