[
  {
    "enabled":1,
    "version_min":300000,
    "title":"Testing Variables :: TX:0 (1/2)",
    "client":{
      "ip":"200.249.12.31",
      "port":123
    },
    "server":{
      "ip":"200.249.12.11",
      "port":80
    },
    "request":{
      "headers":{
        "Host":"localhost",
        "User-Agent":"curl/7.38.0",
        "Accept":"*/*",
        "Content-Length":"27",
        "Content-Type":"application/x-www-form-urlencoded"
      },
      "uri":"/one/two/three?key1=value1&key2=v%20a%20l%20u%20e%202",
      "method":"GET"
    },
    "response":{
      "headers":{
        "Date":"Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified":"Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type":"text/html"
      },
      "body":[
        "whee test 123"
      ]
    },
    "expected":{
      "debug_log":"(.*) Target value: \"123\" \\(Variable\\: TX\\:0(.*)"
    },
    "rules":[
      "SecRuleEngine On",
      "SecResponseBodyAccess On",
      "SecRequestBodyAccess On",
      "SecRule RESPONSE_BODY \"@rx ([0-9]+)\" \"id:1,phase:4,capture,id:105\"",
      "SecRule TX \"@rx ([A-z]+)\" \"phase:4,id:106\""
    ]
  },
  {
    "enabled":1,
    "version_min":300000,
    "title":"Testing Variables :: TX:0 (2/2)",
    "client":{
      "ip":"200.249.12.31",
      "port":123
    },
    "server":{
      "ip":"200.249.12.31",
      "port":80
    },
    "request":{
      "headers":{
        "Cookie":"USER_TOKEN=Yes; a=z; t=b"
      },
      "uri":"/?key=value&key=other_value",
      "method":"GET"
    },
    "response":{
      "headers":{
        "Date":"Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified":"Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type":"text/html"
      },
      "body":[
        "no need."
      ]
    },
    "expected":{
      "debug_log":"Target value: \"USER_TOKEN\" \\(Variable: TX:0(.*)"
    },
    "rules":[
      "SecRuleEngine On",
      "SecRule REQUEST_HEADERS \"@rx ([A-z]+)\" \"id:1,log,pass,capture,id:14\"",
      "SecRule TX:0 \"@rx ([A-z]+)\" \"id:15\""
    ]
  },
  {
    "enabled":1,
    "version_min":300000,
    "title":"Testing Variables :: capture group match after unused group",
    "client":{
      "ip":"200.249.12.31",
      "port":123
    },
    "server":{
      "ip":"200.249.12.31",
      "port":80
    },
    "request":{
      "uri":"/?key=aadd",
      "method":"GET"
    },
    "response":{
      "headers":{
        "Date":"Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified":"Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type":"text/html"
      },
      "body":[
        "no need."
      ]
    },
    "expected":{
      "debug_log":"Added regex subexpression TX\\.3: dd[\\s\\S]*Target value: \"dd\" \\(Variable\\: TX\\:3[\\s\\S]*Rule returned 1"
    },
    "rules":[
      "SecRuleEngine On",
      "SecRule ARGS \"@rx (aa)(bb|cc)?(dd)\" \"id:1,log,pass,capture,id:16\"",
      "SecRule TX:3 \"@streq dd\" \"id:19,phase:2,log,pass\""
    ]
  },
  {
    "enabled":1,
    "version_min":300000,
    "title":"Testing Variables :: empty capture group match followed by nonempty capture group",
    "client":{
      "ip":"200.249.12.31",
      "port":123
    },
    "server":{
      "ip":"200.249.12.31",
      "port":80
    },
    "request":{
      "uri":"/?key=aadd",
      "method":"GET"
    },
    "response":{
      "headers":{
        "Date":"Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified":"Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type":"text/html"
      },
      "body":[
        "no need."
      ]
    },
    "expected":{
      "debug_log":"Added regex subexpression TX\\.3: dd[\\s\\S]*Target value: \"dd\" \\(Variable\\: TX\\:3[\\s\\S]*Rule returned 1"
    },
    "rules":[
      "SecRuleEngine On",
      "SecRule ARGS \"@rx (aa)(bb|cc|)(dd)\" \"id:18,phase:1,log,pass,capture\"",
      "SecRule TX:3 \"@streq dd\" \"id:19,phase:2,log,pass\""
    ]
  },
  {
    "enabled":1,
    "version_min":300000,
    "title":"Testing Variables :: repeating capture group -- alternates",
    "client":{
      "ip":"200.249.12.31",
      "port":123
    },
    "server":{
      "ip":"200.249.12.31",
      "port":80
    },
    "request":{
      "uri":"/?key=_abc123_",
      "method":"GET"
    },
    "response":{
      "headers":{
        "Date":"Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified":"Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type":"text/html"
      },
      "body":[
        "no need."
      ]
    },
    "expected":{
      "debug_log":"Added regex subexpression TX\\.2: abc[\\s\\S]*Added regex subexpression TX\\.3: 123"
    },
    "rules":[
      "SecRuleEngine On",
      "SecRule ARGS \"@rx _((?:(abc)|(123))+)_\" \"id:18,phase:1,log,pass,capture\""
    ]
  },
  {
    "enabled":1,
    "version_min":300000,
    "title":"Testing Variables :: repeating capture group -- same (nested)",
    "client":{
      "ip":"200.249.12.31",
      "port":123
    },
    "server":{
      "ip":"200.249.12.31",
      "port":80
    },
    "request":{
      "uri":"/?key=a:5a:8a:9",
      "method":"GET"
    },
    "response":{
      "headers":{
        "Date":"Mon, 13 Jul 2015 20:02:41 GMT",
        "Last-Modified":"Sun, 26 Oct 2014 22:33:37 GMT",
        "Content-Type":"text/html"
      },
      "body":[
        "no need."
      ]
    },
    "expected":{
      "debug_log":"Added regex subexpression TX\\.1: 5[\\s\\S]*Added regex subexpression TX\\.2: 8[\\s\\S]*Added regex subexpression TX\\.3: 9"
    },
    "rules":[
      "SecRuleEngine On",
      "SecRule ARGS \"@rx a:([0-9])(?:a:([0-9])(?:a:([0-9]))*)*\" \"id:18,phase:1,log,pass,capture\""
    ]
  }
]
