{
    "Steps": [
        {
            "Action": "Connect",
            "Arg": "{url}",
            "Description": "Connect to a server. Use {url} in 'Arg' to use the value from -url= on the commandline"
        },
        {
            "Action": "Wait",
            "Arg": "1",
            "Description": "Waits the specified number of seconds before advancing to the next step. The 'waiting' message is shown in the client until it's done."
        },
        {
            "Action": "ConsoleCommand",
            "Arg": "Attr oxygen 10",
            "Description": "Run a console command"
        },
        {
            "Action": "CheckConnected",
            "Description": "Check if we have a valid netdriver"
        },
        {
            "Action": "CheckNetMode",
            "Arg": "standalone",
            "Description": "Check for netmode: standalone, client, dedicatedserver"
        },
        {
            "Action": "CheckServerBuildNumber",
            "Description": "Fail if the client build number does not match the server"
        },
        {
            "Action": "CheckServerLogIncludes",
            "Arg": "This-string-should-be-in-the-log",
            "Description": "Fail if the server log does not include the substring (case insensitive)"
        },
        {
            "Action": "CheckServerLogExcludes",
            "Arg": "This-string-should-not-be-in-the-log",
            "Description": "Fail if the server log includes the substring (case insensitive)"
        },
        {
            "Action": "CheckServerMaxWarnings",
            "Arg": "10",
            "Description": "Fail if the server log has more than this number of warnings (note that the entire server log is searched)"
        },
        {
            "Action": "CheckServerMaxErrors",
            "Arg": "0",
            "Description": "Fail if the server log has more than this number of errors (note that the entire server log is searched)"
        },
        {
            "Action": "CheckServerMaxLogLines",
            "Arg": "10000",
            "Description": "Fail if the server log has more than this number of lines (note that the entire server log is searched)"
        },
        {
            "Action": "CheckLogIncludes",
            "Arg": "This-string-should-be-in-the-log",
            "Description": "Fail if the client log does not include the substring (case insensitive)"
        },
        {
            "Action": "CheckLogExcludes",
            "Arg": "This-string-should-not-be-in-the-log",
            "Description": "Fail if the client log includes the substring (case insensitive)"
        },
        {
            "Action": "CheckMaxWarnings",
            "Arg": "10",
            "Description": "Fail if the client log has more than this number of warnings"
        },
        {
            "Action": "CheckMaxErrors",
            "Arg": "0",
            "Description": "Fail if the client log has more than this number of errors"
        },
        {
            "Action": "CheckMaxLogLines",
            "Arg": "10000",
            "Description": "Fail if the client log has more than this number of loglines"
        },
        {
            "Action": "ClientExit",
            "Description": "Exit the client in a couple of seconds"
        },
        {
            "Action": "ServerExit",
            "Description": "Exit the server in a couple of seconds"
        },
        {
            "Action": "Message",
            "Arg": "This should appear in the client and server log",
            "Description": "Show a custom message on the screen and in the client and server logs"
        }
    ]
}