[
  {
    "name": "c_glib",
    "platforms": [
      "Linux"
    ],
    "server": {
      "command": [
        "test_server",
        "--lt-debug"
      ],
      "protocols": [
        "binary:multi",
        "compact:multic"
      ]
    },
    "client": {
      "command": [
        "test_client",
        "--lt-debug"
      ],
      "protocols": [
        "multi:binary",
        "multic:compact"
      ],
      "sockets": [
        "ip-ssl"
      ]
    },
    "transports": [
      "buffered",
      "framed"
    ],
    "sockets": [
      "ip",
      "domain"
    ],
    "protocols": [
      "binary",
      "compact",
      "multi",
      "multic"
    ],
    "workdir": "c_glib"
  },
  {
    "name": "cl",
    "server": {
      "command": ["TestServer"],
      "workdir": "cl",
      "protocols": ["binary", "multi"],
      "transports": ["buffered", "framed"],
      "sockets": ["ip"]
    },
    "client": {
      "command": ["TestClient"],
      "workdir": "cl",
      "protocols": ["binary", "multi"],
      "transports": ["buffered", "framed"],
      "sockets": ["ip"]
    }
  },
  {
    "name": "d",
    "server": {
      "command": [
        "thrift_test_server",
        "--trace"
      ]
    },
    "client": {
      "command": [
        "thrift_test_client"
      ]
    },
    "transports": [
      "http",
      "buffered",
      "framed",
      "zlib"
    ],
    "sockets": [
      "ip",
      "ip-ssl"
    ],
    "protocols": [
      "binary",
      "compact",
      "json"
    ],
    "workdir": "../lib/d/test"
  },
  {
    "name": "go",
    "server": {
      "command": [
        "testserver",
        "--certPath=../../keys"
      ]
    },
    "client": {
      "timeout": 6,
      "command": [
        "testclient"
      ]
    },
    "transports": [
      "buffered",
      "framed",
      "http",
      "zlib"
    ],
    "sockets": [
      "ip",
      "ip-ssl"
    ],
    "protocols": [
      "binary",
      "compact",
      "json",
      "header"
    ],
    "workdir": "go/bin"
  },
  {
    "name": "java",
    "join_args": false,
    "server": {
      "delay": 15,
      "command": [
        "build/runserver"
      ],
      "protocols": [
        "binary:multi",
        "compact:multic",
        "json:multij"
      ]
    },
    "client": {
      "timeout": 13,
      "command": [
        "build/runclient"
      ],
      "transports": [
        "http"
      ],
      "protocols": [
        "multi:binary",
        "multic:compact",
        "multij:json"
      ]
    },
    "transports": [
      "buffered",
      "framed",
      "framed:fastframed",
      "zlib"
    ],
    "sockets": [
      "ip",
      "ip-ssl"
    ],
    "protocols": [
      "binary",
      "compact",
      "json",
      "multi",
      "multic",
      "multij"
    ],
    "workdir": "../lib/java"
  },
  {
    "name": "kotlin",
    "join_args": false,
    "server": {
      "delay": 15,
      "command": [
        "cross-test-server/build/install/TestServer/bin/TestServer"
      ],
      "protocols": [
        "binary"
      ]
    },
    "client": {
      "timeout": 13,
      "command": [
        "cross-test-client/build/install/TestClient/bin/TestClient"
      ],
      "transports": [
        "framed"
      ],
      "protocols": [
        "binary"
      ]
    },
    "transports": [
      "framed"
    ],
    "sockets": [
      "ip"
    ],
    "protocols": [
      "binary",
      "compact",
      "json"
    ],
    "workdir": "../lib/kotlin"
  },
  {
    "name": "nodejs",
    "env": {
      "NODE_PATH": "../lib"
    },
    "server": {
      "command": [
        "node",
        "server.js",
        "--type=tcp"
      ]
    },
    "client": {
      "timeout": 6,
      "command": [
        "node",
        "client.js",
        "--type=tcp"
      ]
    },
    "transports": [
      "buffered",
      "framed",
      "http",
      "websocket"
    ],
    "sockets": [
      "ip",
      "ip-ssl",
      "domain"
    ],
    "protocols": [
      "compact",
      "binary",
      "json",
      "header"
    ],
    "workdir": "../lib/nodejs/test"
  },
  {
    "name": "hs",
    "server": {
      "command": [
        "TestServer"
      ]
    },
    "client": {
      "timeout": 6,
      "transports": [
        "http"
      ],
      "command": [
        "TestClient"
      ]
    },
    "transports": [
      "buffered",
      "framed"
    ],
    "sockets": [
      "ip"
    ],
    "protocols": [
      "header",
      "compact",
      "binary",
      "json"
    ],
    "workdir": "hs"
  },
  {
    "name": "py",
    "server": {
      "extra_args": ["TSimpleServer"],
      "command": [
        "TestServer.py",
        "--verbose",
        "--genpydir=gen-py"
      ]
    },
    "client": {
      "timeout": 10,
      "command": [
        "TestClient.py",
        "--verbose",
        "--host=localhost",
        "--genpydir=gen-py"
      ]
    },
    "transports": [
      "buffered",
      "framed",
      "http",
      "zlib"
    ],
    "sockets": [
      "ip",
      "ip-ssl",
      "domain"
    ],
    "protocols": [
      "binary",
      "binary:accel",
      "compact",
      "compact:accelc",
      "header",
      "json",
      "multi",
      "multi:multia",
      "multia",
      "multiac",
      "multic",
      "multic:multiac",
      "multih",
      "multij"
    ],
    "workdir": "py"
  },
  {
    "comment": "Using 'python3' executable to test py2 and 3 at once",
    "name": "py3",
    "server": {
      "extra_args": ["TSimpleServer"],
      "command": [
        "python3",
        "TestServer.py",
        "--verbose",
        "--genpydir=gen-py"
      ]
    },
    "client": {
      "timeout": 10,
      "command": [
        "python3",
        "TestClient.py",
        "--host=localhost",
        "--genpydir=gen-py"
      ]
    },
    "transports": [
      "buffered",
      "framed",
      "http",
      "zlib"
    ],
    "sockets": [
      "ip",
      "ip-ssl",
      "domain"
    ],
    "protocols": [
      "binary",
      "binary:accel",
      "compact",
      "compact:accelc",
      "header",
      "json",
      "multi",
      "multi:multia",
      "multia",
      "multiac",
      "multic",
      "multic:multiac",
      "multih",
      "multij"
    ],
    "workdir": "py"
  },
  {
    "name": "cpp",
    "server": {
      "command": [
        "TestServer"
      ],
      "protocols": [
        "binary:multi",
        "compact:multic",
        "header:multih",
        "json:multij"
      ]
    },
    "client": {
      "timeout": 8,
      "command": [
        "TestClient"
      ],
      "protocols": [
        "multi:binary",
        "multic:compact",
        "multih:header",
        "multij:json"
      ]
    },
    "transports": [
      "buffered",
      "http",
      "framed",
      "zlib",
      "websocket"
    ],
    "sockets": [
      "ip",
      "ip-ssl",
      "domain"
    ],
    "protocols": [
      "compact",
      "binary",
      "json",
      "header",
      "multi",
      "multic",
      "multih",
      "multij"
    ],
    "workdir": "cpp"
  },
  {
    "name": "rb",
    "server": {
      "command": [
        "ruby",
        "../integration/TestServer.rb"
      ]
    },
    "client": {
      "timeout": 10,
      "command": [
        "ruby",
        "../integration/TestClient.rb",
        "--"
      ]
    },
    "transports": [
      "buffered",
      "framed"
    ],
    "sockets": [
      "domain",
      "ip",
      "ip-ssl"
    ],
    "protocols": [
      "binary",
      "binary:accel",
      "compact",
      "json"
    ],
    "workdir": "rb/gen-rb"
  },
  {
    "name": "netstd",
    "transports": [
      "buffered",
      "framed"
    ],
    "sockets": [
      "ip",
      "ip-ssl"
    ],
    "protocols": [
      "binary",
      "compact",
      "json"
    ],
    "server": {
      "command": [
        "dotnet",
        "run",
        "--no-build",
        "--project=Server/Server.csproj",
        "server"
      ]
    },
    "client": {
      "timeout": 10,
      "command": [
        "dotnet",
        "run",
        "--no-build",
        "--project=Client/Client.csproj",
        "client"
      ]
    },
        "workdir": "netstd"
  },
  {
    "name": "perl",
    "transports": [
      "buffered",
      "framed"
    ],
    "sockets": [
      "ip",
      "ip-ssl",
      "domain"
    ],
    "protocols": [
      "binary",
      "multi"
    ],
    "client": {
      "command": [
        "perl",
        "-Igen-perl/",
        "-I../../lib/perl/lib/",
        "TestClient.pl",
        "--ca=../keys/CA.pem",
        "--cert=../keys/client.crt",
        "--key=../keys/client.key"
      ],
      "protocols": [
        "multi:binary"
      ]
    },
    "server": {
      "command": [
        "perl",
        "-Igen-perl/",
        "-I../../lib/perl/lib/",
        "TestServer.pl",
        "--cert=../keys/server.crt",
        "--key=../keys/server.key"
      ],
      "protocols": [
        "binary:multi"
      ]
    },
    "workdir": "perl"
  },
  {
    "name": "php",
    "server": {
      "transports": [
        "buffered",
        "framed"
      ],
      "sockets": [
        "ip"
      ],
      "protocols": [
        "binary",
        "binary:accel",
        "compact",
        "json"
      ],
      "command": [
        "php",
        "-dextension_dir=php_ext_dir",
        "--php-ini=test_php.ini",
        "--no-php-ini",
        "-ddisplay_errors=stderr",
        "-dlog_errors=0",
        "-derror_reporting=E_ALL",
        "TestServer.php"
      ]
    },
    "client": {
      "timeout": 6,
      "transports": [
        "buffered",
        "framed"
      ],
      "sockets": [
        "ip"
      ],
      "protocols": [
        "binary",
        "binary:accel",
        "compact",
        "json"
      ],
      "command": [
        "php",
        "-dextension_dir=php_ext_dir",
        "--php-ini=test_php.ini",
        "--no-php-ini",
        "-ddisplay_errors=stderr",
        "-dlog_errors=0",
        "-derror_reporting=E_ALL",
        "TestClient.php"
      ]
    },
    "workdir": "php"
  },
  {
    "name": "dart",
    "client": {
      "timeout": 30,
      "transports": [
        "buffered",
        "framed",
        "http"
      ],
      "sockets": [
        "ip"
      ],
      "protocols": [
        "binary",
        "compact",
        "json"
      ],
      "command": [
        "dart",
	    "--enable-asserts",
        "test_client/bin/main.dart",
	    "--verbose"
      ]
    },
    "workdir": "dart"
  },
  {
    "name": "erl",
    "transports": [
      "buffered",
      "framed"
    ],
    "sockets": [
      "ip",
      "ip-ssl"
    ],
    "protocols": [
      "binary",
      "compact"
    ],
    "client": {
      "command": [
        "erl",
        "+K",
        "true",
        "-noshell",
        "-pa",
        "../../lib/erl/_build/default/lib/thrift/ebin/",
        "-pa",
        "./_build/default/lib/thrift_test/ebin",
        "-s",
        "test_client",
        "-s",
        "init",
        "stop",
        "-extra"
      ]
    },
    "server": {
      "command": [
        "erl",
        "+K",
        "true",
        "-noshell",
        "-pa",
        "../../lib/erl/_build/default/lib/thrift/ebin/",
        "-pa",
        "./_build/default/lib/thrift_test/ebin",
        "-s",
        "test_thrift_server",
        "-extra"
      ]
    },
    "workdir": "erl"
  },
  {
    "name": "js",
    "transports": [
      "http"
    ],
    "sockets": [
      "ip"
    ],
    "protocols": [
      "json"
    ],
    "client": {
      "command": [
        "phantomjs",
        "test/phantom-client.js"
      ]
    },
    "workdir": "../lib/js"
  },
  {
    "name": "lua",
    "TODO": "Add dll to LUA_CPATH",
    "env": {
      "LUA_PATH": ";;gen-lua/?.lua;../../lib/lua/?.lua",
      "LUA_CPATH": ";;../../lib/lua/.libs/?.so"
    },
    "client": {
      "timeout": 5,
      "transports": [
        "buffered",
        "framed",
        "http"
      ],
      "sockets": [
        "ip"
      ],
      "protocols": [
        "binary",
        "compact",
        "json"
      ],
      "command": [
        "lua",
        "test_basic_client.lua"
      ]
    },
    "workdir": "lua"
  },
  {
    "name": "rs",
    "env": {
      "RUST_BACKTRACE": "1",
      "RUST_LOG": "info"
    },
    "server": {
      "command": [
        "test_server"
      ],
      "protocols": [
        "binary:multi",
        "compact:multic"
      ]
    },
    "client": {
      "timeout": 6,
      "command": [
        "test_client"
      ],
      "protocols": [
        "multi:binary",
        "multic:compact"
      ]
    },
    "sockets": [
      "ip",
      "domain"
    ],
    "transports": [
      "buffered",
      "framed"
    ],
    "protocols": [
      "binary",
      "compact",
      "multi",
      "multic"
    ],
    "workdir": "rs/bin"
  },
  {
    "name": "nodets",
    "env": {
      "NODE_PATH": "../lib"
    },
    "server": {
      "command": [
        "runServer.sh"
      ]
    },
    "client": {
      "timeout": 6,
      "command": [
        "runClient.sh"
      ]
    },
    "protocols": [
      "binary"
    ],
    "sockets": [
      "ip"
    ],
    "transports": [
      "buffered"
    ],
    "workdir": "../lib/nodets/test"
  },
  {
    "name": "swift",
    "server": {
      "command": ["TestServer"],
      "workdir": "swift/CrossTests/.build/x86_64-unknown-linux-gnu/debug",
      "protocols": ["binary", "compact"],
      "transports": ["buffered", "framed"],
      "sockets": ["ip"]
    },
    "client": {
      "command": ["TestClient"],
      "workdir": "swift/CrossTests/.build/x86_64-unknown-linux-gnu/debug",
      "protocols": ["binary", "compact"],
      "transports": ["buffered", "framed"],
      "sockets": ["ip"]
    }
  }
]
