# Traffic validation rules This feature allows you to define set of simple rules, and test the traffic against them. Such validation may test response for specific JSON fields, headers, etc. ## Examples Example 1: HTTP request (REST API call) that didn't pass validation is highlighted in red ![Simple UI](../assets/validation-example1.png) - - - Example 2: Details pane shows the validation rule details and whether it passed or failed ![Simple UI](../assets/validation-example2.png) ## How to use To use this feature - create simple rules file (see details below) and pass this file as parameter to `mizu tap` command. For example, if rules are stored in file named `rules.yaml` — run the following command: ```shell mizu tap --traffic-validation-file rules.yaml ``` ## Rules file structure The structure of the traffic-validation-file is: * `name`: string, name of the rule * `type`: string, type of the rule, must be `json` or `header` or `slo` * `key`: string, [jsonpath](https://code.google.com/archive/p/jsonpath/wikis/Javascript.wiki) used only in `json` or `header` type * `value`: string, [regex](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) used only in `json` or `header` type * `service`: string, [regex](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) service name to filter * `path`: string, [regex](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) URL path to filter * `response-time`: integer, time in ms of the expected latency. ### For example: ```yaml rules: - name: holy-in-name-property type: json key: "$.name" value: "Holy" service: "catalogue.*" path: "catalogue.*" - name: content-length-header type: header key: "Content-Le.*" value: "(\\d+(?:\\.\\d+)?)" - name: latency-test type: slo response-time: 1 service: "carts.*" ``` ### Explanation: * First rule `holy-in-name-property`: > This rule will be applied to all request made to `catalogue.*` services with `catalogue.*` on the URL path with a json response containing a `$.name` field. If the value of `$.name` is `Holy` than is marked as success, marked as failure otherwise. * Second rule `content-length-header`: > This rule will be applied to all request that has `Content-Le.*` on header. If the value of `Content-Le.*` is `(\\d+(?:\\.\\d+)?)` (number), will be marked as success, marked as failure otherwise. * Third rule `latency-test`: > This rule will be applied to all request made to `carts.*` services. If the latency of the response is greater than `1ms` will be marked as failure, marked as success otherwise.