{
  "ApiCancelFlowHandler": [
    {
      "api_method": "CancelFlow",
      "method": "POST",
      "response": {
        "args": {
          "@type": "type.googleapis.com/grr.ListProcessesArgs"
        },
        "clientId": "C.1000000000000000",
        "creator": "",
        "errorDescription": "Cancelled by user",
        "flowId": "W:ABCDEF",
        "isRobot": false,
        "lastActiveAt": "4242000000",
        "name": "ListProcesses",
        "runnerArgs": {
          "clientId": "aff4:/C.1000000000000000",
          "flowName": "ListProcesses"
        },
        "startedAt": "42000000",
        "state": "ERROR",
        "urn": "aff4:/C.1000000000000000/W:ABCDEF"
      },
      "test_class": "ApiCancelFlowHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows/W:ABCDEF/actions/cancel"
    }
  ],
  "ApiCountHuntResultsByTypeHandler": [
    {
      "api_method": "CountHuntResultsByType",
      "method": "GET",
      "response": {
        "items": [
          {
            "count": "1",
            "type": "DummyFlowResult"
          }
        ]
      },
      "test_class": "ApiCountHuntResultsByTypeRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/result-counts"
    }
  ],
  "ApiCreateClientApprovalHandler": [
    {
      "api_method": "CreateClientApproval",
      "method": "POST",
      "request_payload": {
        "approval": {
          "emailCcAddresses": [
            "test@example.com"
          ],
          "notifiedUsers": [
            "approver1",
            "approver2"
          ],
          "reason": "really important reason!"
        }
      },
      "response": {
        "approvers": [
          "api_test_user"
        ],
        "emailCcAddresses": [
          "test@example.com"
        ],
        "emailMessageId": "<message id stub>",
        "expirationTimeUs": "2419326000000",
        "id": "approval:112233",
        "isValid": false,
        "isValidMessage": "Need at least 1 additional approver for access.",
        "notifiedUsers": [
          "approver1",
          "approver2"
        ],
        "reason": "really important reason!",
        "requestor": "api_test_user",
        "subject": {
          "age": "42000000",
          "agentInfo": {
            "buildTime": "1980-01-01T12:00:00.000000+00:00",
            "clientName": "GRR Monitor",
            "clientVersion": 1234,
            "labels": [
              "label1",
              "label2"
            ]
          },
          "clientId": "C.1000000000000000",
          "hardwareInfo": {
            "biosVersion": "Bios-Version-0",
            "systemManufacturer": "System-Manufacturer-0"
          },
          "interfaces": [
            {
              "addresses": [
                {
                  "addressType": "INET",
                  "packedBytes": "wKgAAA=="
                },
                {
                  "addressType": "INET6",
                  "packedBytes": "IAGrzQAAAAAAAAAAAAAAAA=="
                }
              ],
              "ifname": "if0"
            },
            {
              "ifname": "if1",
              "macAddress": "qrvM3e4A"
            },
            {
              "ifname": "if2",
              "macAddress": "u8zd7v8A"
            }
          ],
          "knowledgeBase": {
            "fqdn": "Host-0.example.com",
            "os": "Linux",
            "users": [
              {
                "username": "user1"
              },
              {
                "username": "user2"
              }
            ]
          },
          "lastSeenAt": "42000000",
          "osInfo": {
            "fqdn": "Host-0.example.com",
            "kernel": "4.0.0",
            "machine": "x86_64",
            "system": "Linux",
            "version": "buster/sid"
          },
          "urn": "aff4:/C.1000000000000000"
        }
      },
      "test_class": "ApiCreateClientApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me/approvals/client/C.1000000000000000"
    }
  ],
  "ApiCreateCronJobApprovalHandler": [
    {
      "api_method": "CreateCronJobApproval",
      "method": "POST",
      "request_payload": {
        "approval": {
          "emailCcAddresses": [
            "test@example.com"
          ],
          "notifiedUsers": [
            "approver1",
            "approver2"
          ],
          "reason": "really important reason!"
        }
      },
      "response": {
        "approvers": [
          "api_test_user"
        ],
        "emailCcAddresses": [
          "test@example.com"
        ],
        "emailMessageId": "<message id stub>",
        "id": "approval:112233",
        "isValid": false,
        "isValidMessage": "Need at least 1 additional approver for access.",
        "notifiedUsers": [
          "approver1",
          "approver2"
        ],
        "reason": "really important reason!",
        "requestor": "api_test_user",
        "subject": {
          "allowOverruns": false,
          "args": {
            "actionType": "HUNT_CRON_ACTION",
            "huntCronAction": {
              "flowArgs": "",
              "flowName": "Interrogate",
              "huntRunnerArgs": {
                "avgCpuSecondsPerClientLimit": "60",
                "avgNetworkBytesPerClientLimit": "10485760",
                "avgResultsPerClientLimit": "1000",
                "clientRate": 20.0,
                "crashLimit": "100"
              }
            }
          },
          "cronJobId": "CronJob_123456",
          "description": "",
          "enabled": true,
          "frequency": "86400",
          "isFailing": false
        }
      },
      "test_class": "ApiCreateCronJobApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me/approvals/cron-job/CronJob_123456"
    }
  ],
  "ApiCreateFlowHandler": [
    {
      "api_method": "CreateFlow",
      "method": "POST",
      "request_payload": {
        "flow": {
          "args": {
            "@type": "type.googleapis.com/grr.ListProcessesArgs",
            "fetchBinaries": true,
            "filenameRegex": "."
          },
          "name": "ListProcesses",
          "runnerArgs": {}
        }
      },
      "response": {
        "args": {
          "@type": "type.googleapis.com/grr.ListProcessesArgs",
          "fetchBinaries": true,
          "filenameRegex": "."
        },
        "clientId": "C.1000000000000000",
        "creator": "api_test_user",
        "flowId": "W:ABCDEF",
        "isRobot": false,
        "lastActiveAt": "42000000",
        "name": "ListProcesses",
        "runnerArgs": {
          "clientId": "aff4:/C.1000000000000000",
          "flowName": "ListProcesses"
        },
        "startedAt": "42000000",
        "state": "RUNNING",
        "urn": "aff4:/C.1000000000000000/flows/W:ABCDEF"
      },
      "test_class": "ApiCreateFlowHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows"
    }
  ],
  "ApiCreateHuntApprovalHandler": [
    {
      "api_method": "CreateHuntApproval",
      "method": "POST",
      "request_payload": {
        "approval": {
          "emailCcAddresses": [
            "test@example.com"
          ],
          "notifiedUsers": [
            "approver1",
            "approver2"
          ],
          "reason": "really important reason!"
        }
      },
      "response": {
        "approvers": [
          "api_test_user"
        ],
        "emailCcAddresses": [
          "test@example.com"
        ],
        "emailMessageId": "<message id stub>",
        "expirationTimeUs": "2419326000000",
        "id": "approval:112233",
        "isValid": false,
        "isValidMessage": "Need at least 1 additional approver for access.",
        "notifiedUsers": [
          "approver1",
          "approver2"
        ],
        "reason": "really important reason!",
        "requestor": "api_test_user",
        "subject": {
          "allClientsCount": "0",
          "clientLimit": "100",
          "clientRate": 0.0,
          "clientRuleSet": {
            "rules": [
              {
                "regex": {
                  "attributeRegex": "GRR",
                  "field": "CLIENT_NAME"
                },
                "ruleType": "REGEX"
              }
            ]
          },
          "clientsWithResultsCount": "0",
          "completedClientsCount": "0",
          "crashLimit": "100",
          "crashedClientsCount": "0",
          "created": "42000000",
          "creator": "api_test_user",
          "description": "foo",
          "duration": "1209600",
          "failedClientsCount": "0",
          "flowArgs": {
            "@type": "type.googleapis.com/grr.FileFinderArgs",
            "action": {
              "actionType": "DOWNLOAD",
              "download": {
                "collectExtAttrs": false
              }
            },
            "paths": [
              "/tmp/evil.txt"
            ],
            "pathtype": "OS"
          },
          "flowName": "ClientFileFinder",
          "huntId": "H:123456",
          "huntRunnerArgs": {
            "avgCpuSecondsPerClientLimit": "60",
            "avgNetworkBytesPerClientLimit": "10485760",
            "avgResultsPerClientLimit": "1000",
            "clientLimit": "100",
            "clientRate": 0.0,
            "clientRuleSet": {
              "rules": [
                {
                  "regex": {
                    "attributeRegex": "GRR",
                    "field": "CLIENT_NAME"
                  },
                  "ruleType": "REGEX"
                }
              ]
            },
            "crashLimit": "100",
            "description": "foo",
            "expiryTime": "1209600",
            "huntName": "GenericHunt",
            "originalObject": {}
          },
          "huntType": "STANDARD",
          "isRobot": false,
          "name": "GenericHunt",
          "remainingClientsCount": "0",
          "resultsCount": "0",
          "state": "PAUSED",
          "stateComment": "",
          "stateReason": "UNKNOWN",
          "totalCpuUsage": 0.0,
          "totalNetUsage": "0",
          "urn": "aff4:/hunts/H:123456"
        }
      },
      "test_class": "ApiCreateHuntApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me/approvals/hunt/H:123456"
    }
  ],
  "ApiCreateVfsRefreshOperationHandler": [
    {
      "api_method": "CreateVfsRefreshOperation",
      "method": "POST",
      "request_payload": {
        "filePath": "fs/os/Users/Shared",
        "maxDepth": "1"
      },
      "response": {
        "operationId": "ABCDEF"
      },
      "test_class": "ApiCreateVfsRefreshOperationHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-refresh-operations"
    }
  ],
  "ApiDeleteHuntHandler": [
    {
      "api_method": "DeleteHunt",
      "method": "DELETE",
      "response": {
        "status": "OK"
      },
      "test_class": "ApiDeleteHuntHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456"
    }
  ],
  "ApiExplainGlobExpressionHandler": [
    {
      "api_method": "ExplainGlobExpression",
      "method": "POST",
      "request_payload": {
        "globExpression": "/foo/*"
      },
      "response": {
        "components": [
          {
            "globExpression": "/foo/"
          },
          {
            "globExpression": "*"
          }
        ]
      },
      "test_class": "ApiExplainGlobExpressionHandlerTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/glob-expressions:explain"
    }
  ],
  "ApiForceRunCronJobHandler": [
    {
      "api_method": "ForceRunCronJob",
      "method": "POST",
      "response": {
        "status": "OK"
      },
      "test_class": "ApiForceRunCronJobRegressionTest_http_v2",
      "url": "/api/v2/cron-jobs/FileFinder/actions/force-run"
    }
  ],
  "ApiGetClientApprovalHandler": [
    {
      "api_method": "GetClientApproval",
      "method": "GET",
      "response": {
        "approvers": [
          "api_test_user"
        ],
        "emailMessageId": "<message id stub>",
        "expirationTimeUs": "2419244000000",
        "id": "approval:111111",
        "isValid": false,
        "isValidMessage": "Need at least 1 additional approver for access.",
        "notifiedUsers": [
          "approver"
        ],
        "reason": "foo",
        "requestor": "api_test_user",
        "subject": {
          "age": "42000000",
          "agentInfo": {
            "buildTime": "1980-01-01T12:00:00.000000+00:00",
            "clientName": "GRR Monitor",
            "clientVersion": 1234,
            "labels": [
              "label1",
              "label2"
            ]
          },
          "clientId": "C.1000000000000000",
          "hardwareInfo": {
            "biosVersion": "Bios-Version-0",
            "systemManufacturer": "System-Manufacturer-0"
          },
          "interfaces": [
            {
              "addresses": [
                {
                  "addressType": "INET",
                  "packedBytes": "wKgAAA=="
                },
                {
                  "addressType": "INET6",
                  "packedBytes": "IAGrzQAAAAAAAAAAAAAAAA=="
                }
              ],
              "ifname": "if0"
            },
            {
              "ifname": "if1",
              "macAddress": "qrvM3e4A"
            },
            {
              "ifname": "if2",
              "macAddress": "u8zd7v8A"
            }
          ],
          "knowledgeBase": {
            "fqdn": "Host-0.example.com",
            "os": "Linux",
            "users": [
              {
                "username": "user1"
              },
              {
                "username": "user2"
              }
            ]
          },
          "lastSeenAt": "42000000",
          "osInfo": {
            "fqdn": "Host-0.example.com",
            "kernel": "4.0.0",
            "machine": "x86_64",
            "system": "Linux",
            "version": "buster/sid"
          },
          "urn": "aff4:/C.1000000000000000"
        }
      },
      "test_class": "ApiGetClientApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/api_test_user/approvals/client/C.1000000000000000/approval:111111"
    },
    {
      "api_method": "GetClientApproval",
      "method": "GET",
      "response": {
        "approvers": [
          "api_test_user",
          "approver"
        ],
        "emailMessageId": "<message id stub>",
        "expirationTimeUs": "2419245000000",
        "id": "approval:222222",
        "isValid": true,
        "notifiedUsers": [
          "approver"
        ],
        "reason": "bar",
        "requestor": "api_test_user",
        "subject": {
          "age": "42000000",
          "agentInfo": {
            "buildTime": "1980-01-01T12:00:00.000000+00:00",
            "clientName": "GRR Monitor",
            "clientVersion": 1234,
            "labels": [
              "label1",
              "label2"
            ]
          },
          "clientId": "C.1000000000000001",
          "hardwareInfo": {
            "biosVersion": "Bios-Version-1",
            "systemManufacturer": "System-Manufacturer-1"
          },
          "interfaces": [
            {
              "addresses": [
                {
                  "addressType": "INET",
                  "packedBytes": "wKgAAQ=="
                },
                {
                  "addressType": "INET6",
                  "packedBytes": "IAGrzQAAAAAAAAAAAAAAAQ=="
                }
              ],
              "ifname": "if0"
            },
            {
              "ifname": "if1",
              "macAddress": "qrvM3e4B"
            },
            {
              "ifname": "if2",
              "macAddress": "u8zd7v8B"
            }
          ],
          "knowledgeBase": {
            "fqdn": "Host-1.example.com",
            "os": "Linux",
            "users": [
              {
                "username": "user1"
              },
              {
                "username": "user2"
              }
            ]
          },
          "lastSeenAt": "42000000",
          "osInfo": {
            "fqdn": "Host-1.example.com",
            "kernel": "4.0.0",
            "machine": "x86_64",
            "system": "Linux",
            "version": "buster/sid"
          },
          "urn": "aff4:/C.1000000000000001"
        }
      },
      "test_class": "ApiGetClientApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/api_test_user/approvals/client/C.1000000000000001/approval:222222"
    }
  ],
  "ApiGetClientHandler": [
    {
      "api_method": "GetClient",
      "method": "GET",
      "response": {
        "age": "42000000",
        "agentInfo": {
          "buildTime": "1980-01-01T12:00:00.000000+00:00",
          "clientName": "GRR Monitor",
          "clientVersion": 1234,
          "labels": [
            "label1",
            "label2"
          ]
        },
        "clientId": "C.1000000000000000",
        "hardwareInfo": {
          "biosVersion": "Bios-Version-0",
          "systemManufacturer": "System-Manufacturer-0"
        },
        "interfaces": [
          {
            "addresses": [
              {
                "addressType": "INET",
                "packedBytes": "wKgAAA=="
              },
              {
                "addressType": "INET6",
                "packedBytes": "IAGrzQAAAAAAAAAAAAAAAA=="
              }
            ],
            "ifname": "if0"
          },
          {
            "ifname": "if1",
            "macAddress": "qrvM3e4A"
          },
          {
            "ifname": "if2",
            "macAddress": "u8zd7v8A"
          }
        ],
        "knowledgeBase": {
          "fqdn": "Host-0.example.com",
          "os": "Linux",
          "users": [
            {
              "username": "user1"
            },
            {
              "username": "user2"
            }
          ]
        },
        "lastSeenAt": "42000000",
        "memorySize": "4294967296",
        "osInfo": {
          "fqdn": "Host-0.example.com",
          "kernel": "4.0.0",
          "machine": "x86_64",
          "system": "Linux",
          "version": "buster/sid"
        },
        "urn": "aff4:/C.1000000000000000"
      },
      "test_class": "ApiGetClientHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000"
    }
  ],
  "ApiGetClientVersionsHandler": [
    {
      "api_method": "GetClientVersions",
      "method": "GET",
      "response": {
        "items": [
          {
            "age": "42000000",
            "agentInfo": {
              "buildTime": "1980-01-01T12:00:00.000000+00:00",
              "clientName": "GRR Monitor",
              "clientVersion": 1234,
              "labels": [
                "label1",
                "label2"
              ]
            },
            "clientId": "C.1000000000000000",
            "hardwareInfo": {
              "biosVersion": "Bios-Version-0",
              "systemManufacturer": "System-Manufacturer-0"
            },
            "interfaces": [
              {
                "addresses": [
                  {
                    "addressType": "INET",
                    "packedBytes": "wKgAAA=="
                  },
                  {
                    "addressType": "INET6",
                    "packedBytes": "IAGrzQAAAAAAAAAAAAAAAA=="
                  }
                ],
                "ifname": "if0"
              },
              {
                "ifname": "if1",
                "macAddress": "qrvM3e4A"
              },
              {
                "ifname": "if2",
                "macAddress": "u8zd7v8A"
              }
            ],
            "knowledgeBase": {
              "fqdn": "Host-0.example.com",
              "os": "Linux",
              "users": [
                {
                  "username": "user1"
                },
                {
                  "username": "user2"
                }
              ]
            },
            "memorySize": "4294967296",
            "osInfo": {
              "fqdn": "Host-0.example.com",
              "kernel": "4.0.0",
              "machine": "x86_64",
              "system": "Linux",
              "version": "buster/sid"
            },
            "urn": "aff4:/C.1000000000000000"
          },
          {
            "age": "45000000",
            "agentInfo": {
              "buildTime": "1980-01-01T12:00:00.000000+00:00",
              "clientName": "GRR Monitor",
              "clientVersion": 1234,
              "labels": [
                "label1",
                "label2"
              ]
            },
            "clientId": "C.1000000000000000",
            "hardwareInfo": {
              "biosVersion": "Bios-Version-0",
              "systemManufacturer": "System-Manufacturer-0"
            },
            "interfaces": [
              {
                "addresses": [
                  {
                    "addressType": "INET",
                    "packedBytes": "wKgAAA=="
                  },
                  {
                    "addressType": "INET6",
                    "packedBytes": "IAGrzQAAAAAAAAAAAAAAAA=="
                  }
                ],
                "ifname": "if0"
              },
              {
                "ifname": "if1",
                "macAddress": "qrvM3e4A"
              },
              {
                "ifname": "if2",
                "macAddress": "u8zd7v8A"
              }
            ],
            "knowledgeBase": {
              "fqdn": "some-other-hostname.org",
              "os": "Linux",
              "users": [
                {
                  "username": "user1"
                },
                {
                  "username": "user2"
                }
              ]
            },
            "memorySize": "4294967296",
            "osInfo": {
              "fqdn": "some-other-hostname.org",
              "kernel": "4.0.0",
              "machine": "x86_64",
              "system": "Linux",
              "version": "buster/sid"
            },
            "urn": "aff4:/C.1000000000000000"
          }
        ]
      },
      "test_class": "ApiGetClientVersionsRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/versions?mode=full"
    },
    {
      "api_method": "GetClientVersions",
      "method": "GET",
      "response": {
        "items": [
          {
            "age": "42000000",
            "agentInfo": {
              "buildTime": "1980-01-01T12:00:00.000000+00:00",
              "clientName": "GRR Monitor",
              "clientVersion": 1234,
              "labels": [
                "label1",
                "label2"
              ]
            },
            "clientId": "C.1000000000000000",
            "hardwareInfo": {
              "biosVersion": "Bios-Version-0",
              "systemManufacturer": "System-Manufacturer-0"
            },
            "interfaces": [
              {
                "addresses": [
                  {
                    "addressType": "INET",
                    "packedBytes": "wKgAAA=="
                  },
                  {
                    "addressType": "INET6",
                    "packedBytes": "IAGrzQAAAAAAAAAAAAAAAA=="
                  }
                ],
                "ifname": "if0"
              },
              {
                "ifname": "if1",
                "macAddress": "qrvM3e4A"
              },
              {
                "ifname": "if2",
                "macAddress": "u8zd7v8A"
              }
            ],
            "knowledgeBase": {
              "fqdn": "Host-0.example.com",
              "os": "Linux",
              "users": [
                {
                  "username": "user1"
                },
                {
                  "username": "user2"
                }
              ]
            },
            "memorySize": "4294967296",
            "osInfo": {
              "fqdn": "Host-0.example.com",
              "kernel": "4.0.0",
              "machine": "x86_64",
              "system": "Linux",
              "version": "buster/sid"
            },
            "urn": "aff4:/C.1000000000000000"
          }
        ]
      },
      "test_class": "ApiGetClientVersionsRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/versions?end=44000000&mode=full"
    },
    {
      "api_method": "GetClientVersions",
      "method": "GET",
      "response": {
        "items": [
          {
            "age": "45000000",
            "agentInfo": {
              "buildTime": "1980-01-01T12:00:00.000000+00:00",
              "clientName": "GRR Monitor",
              "clientVersion": 1234,
              "labels": [
                "label1",
                "label2"
              ]
            },
            "clientId": "C.1000000000000000",
            "hardwareInfo": {
              "biosVersion": "Bios-Version-0",
              "systemManufacturer": "System-Manufacturer-0"
            },
            "interfaces": [
              {
                "addresses": [
                  {
                    "addressType": "INET",
                    "packedBytes": "wKgAAA=="
                  },
                  {
                    "addressType": "INET6",
                    "packedBytes": "IAGrzQAAAAAAAAAAAAAAAA=="
                  }
                ],
                "ifname": "if0"
              },
              {
                "ifname": "if1",
                "macAddress": "qrvM3e4A"
              },
              {
                "ifname": "if2",
                "macAddress": "u8zd7v8A"
              }
            ],
            "knowledgeBase": {
              "fqdn": "some-other-hostname.org",
              "os": "Linux",
              "users": [
                {
                  "username": "user1"
                },
                {
                  "username": "user2"
                }
              ]
            },
            "memorySize": "4294967296",
            "osInfo": {
              "fqdn": "some-other-hostname.org",
              "kernel": "4.0.0",
              "machine": "x86_64",
              "system": "Linux",
              "version": "buster/sid"
            },
            "urn": "aff4:/C.1000000000000000"
          }
        ]
      },
      "test_class": "ApiGetClientVersionsRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/versions?end=46000000&mode=full&start=44000000"
    }
  ],
  "ApiGetConfigOptionHandler": [
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": false,
        "name": "Client.company_name",
        "type": "StringValue",
        "value": {
          "@type": "type.googleapis.com/grr.StringValue",
          "value": "Monstros S.A."
        }
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/Client.company_name"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": false,
        "name": "AdminUI.hunt_config",
        "type": "AdminUIHuntConfig",
        "value": {
          "@type": "type.googleapis.com/grr.AdminUIHuntConfig",
          "defaultExcludeLabels": [
            "oh-oh"
          ]
        }
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/AdminUI.hunt_config"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": false,
        "name": "Source.version_major",
        "type": "Int64Value",
        "value": {
          "@type": "type.googleapis.com/grr.Int64Value",
          "value": "42"
        }
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/Source.version_major"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": false,
        "name": "Source.version_major",
        "type": "Int64Value",
        "value": {
          "@type": "type.googleapis.com/grr.Int64Value",
          "value": "42"
        }
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/Source.version_major"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": false,
        "name": "Source.version_major",
        "type": "Int64Value",
        "value": {
          "@type": "type.googleapis.com/grr.Int64Value",
          "value": "42"
        }
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/Source.version_major"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": false,
        "name": "Source.version_major",
        "type": "Int64Value",
        "value": {
          "@type": "type.googleapis.com/grr.Int64Value",
          "value": "42"
        }
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/Source.version_major"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": false,
        "name": "Hunt.default_client_rate",
        "type": "Int64Value",
        "value": {
          "@type": "type.googleapis.com/grr.Int64Value",
          "value": "42"
        }
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/Hunt.default_client_rate"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": false,
        "name": "Email.enable_custom_email_address",
        "type": "BoolValue",
        "value": {
          "@type": "type.googleapis.com/grr.BoolValue",
          "value": true
        }
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/Email.enable_custom_email_address"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": true,
        "name": "Cron.disabled_cron_jobs"
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/Cron.disabled_cron_jobs"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": false,
        "name": "Server.fleetspeak_last_ping_threshold",
        "type": "Int64Value",
        "value": {
          "@type": "type.googleapis.com/grr.Int64Value",
          "value": "3600000000"
        }
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/Server.fleetspeak_last_ping_threshold"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": false,
        "name": "Server.raw_filesystem_access_pathtype",
        "type": "StringValue",
        "value": {
          "@type": "type.googleapis.com/grr.StringValue",
          "value": "TSK"
        }
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/Server.raw_filesystem_access_pathtype"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": false,
        "name": "ClientBuilder.build_type",
        "type": "StringValue",
        "value": {
          "@type": "type.googleapis.com/grr.StringValue",
          "value": "Debug"
        }
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/ClientBuilder.build_type"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": true,
        "name": "ClientBuilder.target_platforms"
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/ClientBuilder.target_platforms"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isInvalid": false,
        "name": "ClientRepacker.output_filename",
        "type": "StringValue",
        "value": {
          "@type": "type.googleapis.com/grr.StringValue",
          "value": "GRR_0.0.0.0_"
        }
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/ClientRepacker.output_filename"
    },
    {
      "api_method": "GetConfigOption",
      "method": "GET",
      "response": {
        "isRedacted": true,
        "name": "Mysql.password"
      },
      "test_class": "ApiGetConfigOptionHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/Mysql.password"
    }
  ],
  "ApiGetCronJobApprovalHandler": [
    {
      "api_method": "GetCronJobApproval",
      "method": "GET",
      "response": {
        "approvers": [
          "api_test_user"
        ],
        "emailMessageId": "<message id stub>",
        "id": "approval:111111",
        "isValid": false,
        "isValidMessage": "Need at least 1 additional approver for access.",
        "notifiedUsers": [
          "approver"
        ],
        "reason": "foo",
        "requestor": "api_test_user",
        "subject": {
          "allowOverruns": false,
          "args": {
            "actionType": "HUNT_CRON_ACTION",
            "huntCronAction": {
              "flowArgs": "",
              "flowName": "Interrogate",
              "huntRunnerArgs": {
                "avgCpuSecondsPerClientLimit": "60",
                "avgNetworkBytesPerClientLimit": "10485760",
                "avgResultsPerClientLimit": "1000",
                "clientRate": 20.0,
                "crashLimit": "100"
              }
            }
          },
          "cronJobId": "CronJob_123456",
          "description": "",
          "enabled": true,
          "frequency": "86400",
          "isFailing": false
        }
      },
      "test_class": "ApiGetCronJobApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/api_test_user/approvals/cron-job/CronJob_123456/approval:111111"
    },
    {
      "api_method": "GetCronJobApproval",
      "method": "GET",
      "response": {
        "approvers": [
          "api_test_user",
          "approver"
        ],
        "emailMessageId": "<message id stub>",
        "id": "approval:222222",
        "isValid": true,
        "notifiedUsers": [
          "approver"
        ],
        "reason": "bar",
        "requestor": "api_test_user",
        "subject": {
          "allowOverruns": false,
          "args": {
            "actionType": "HUNT_CRON_ACTION",
            "huntCronAction": {
              "flowArgs": "",
              "flowName": "Interrogate",
              "huntRunnerArgs": {
                "avgCpuSecondsPerClientLimit": "60",
                "avgNetworkBytesPerClientLimit": "10485760",
                "avgResultsPerClientLimit": "1000",
                "clientRate": 20.0,
                "crashLimit": "100"
              }
            }
          },
          "cronJobId": "CronJob_567890",
          "description": "",
          "enabled": true,
          "frequency": "86400",
          "isFailing": false
        }
      },
      "test_class": "ApiGetCronJobApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/api_test_user/approvals/cron-job/CronJob_567890/approval:222222"
    }
  ],
  "ApiGetCronJobRunHandler": [
    {
      "api_method": "GetCronJobRun",
      "method": "GET",
      "response": {
        "cronJobId": "InterrogateClientsCronJob",
        "finishedAt": "44000000",
        "logMessage": "Started hunt ABCDEFGH12.",
        "runId": "F:ABCDEF11",
        "startedAt": "44000000",
        "status": "FINISHED"
      },
      "test_class": "ApiGetCronJobRunHandlerRegressionTest_http_v2",
      "url": "/api/v2/cron-jobs/InterrogateClientsCronJob/runs/F:ABCDEF11"
    }
  ],
  "ApiGetFileDownloadCommandHandler": [
    {
      "api_method": "GetFileDownloadCommand",
      "method": "GET",
      "response": {
        "command": "/usr/bin/grr_api_shell 'http://localhost:8000/' --exec_code 'grrapi.Client(\"C.1000000000000000\").File(r\"\"\"fs/os/etc\"\"\").GetBlob().WriteToFile(\"./etc\")'"
      },
      "test_class": "ApiGetFileDownloadCommandHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-download-command/fs/os/etc"
    }
  ],
  "ApiGetFileTextHandler": [
    {
      "api_method": "GetFileText",
      "method": "GET",
      "response": {
        "content": "Goodbye World",
        "totalSize": "13"
      },
      "test_class": "ApiGetFileTextHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-text/fs/os/c/Downloads/a.txt"
    },
    {
      "api_method": "GetFileText",
      "method": "GET",
      "response": {
        "content": "dby",
        "totalSize": "13"
      },
      "test_class": "ApiGetFileTextHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-text/fs/os/c/Downloads/a.txt?length=3&offset=3"
    },
    {
      "api_method": "GetFileText",
      "method": "GET",
      "response": {
        "content": "Hello World",
        "totalSize": "11"
      },
      "test_class": "ApiGetFileTextHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-text/fs/os/c/Downloads/a.txt?timestamp=86400000042"
    }
  ],
  "ApiGetFileVersionTimesHandler": [
    {
      "api_method": "GetFileVersionTimes",
      "method": "GET",
      "response": {
        "times": [
          "172800000042",
          "86400000042"
        ]
      },
      "test_class": "ApiGetFileVersionTimesHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-version-times/fs/os/c/Downloads/a.txt"
    }
  ],
  "ApiGetFlowHandler": [
    {
      "api_method": "GetFlow",
      "method": "GET",
      "response": {
        "args": {
          "@type": "type.googleapis.com/grr.InterrogateArgs"
        },
        "clientId": "C.1000000000000000",
        "context": {
          "clientResources": {
            "cpuUsage": {
              "systemCpuTime": 0.0,
              "userCpuTime": 0.0
            }
          },
          "createTime": "42000000",
          "creator": "api_test_user",
          "currentState": "Start",
          "nextOutboundId": "9",
          "outstandingRequests": "8",
          "sessionId": "aff4:/C.1000000000000000/flows/F:ABCDEF12",
          "state": "RUNNING"
        },
        "creator": "api_test_user",
        "flowId": "F:ABCDEF12",
        "isRobot": false,
        "lastActiveAt": "42000000",
        "name": "Interrogate",
        "progress": {
          "@type": "type.googleapis.com/grr.DefaultFlowProgress"
        },
        "resultMetadata": {
          "isMetadataSet": true
        },
        "runnerArgs": {
          "clientId": "aff4:/C.1000000000000000",
          "cpuLimit": "60",
          "flowName": "Interrogate",
          "networkBytesLimit": "8192"
        },
        "startedAt": "42000000",
        "state": "RUNNING",
        "stateData": {},
        "store": {
          "@type": "type.googleapis.com/grr.InterrogateStore"
        },
        "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF12"
      },
      "test_class": "ApiGetFlowHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows/F:ABCDEF12"
    },
    {
      "api_method": "GetFlow",
      "method": "GET",
      "response": {
        "args": {
          "@type": "type.googleapis.com/grr.InterrogateArgs"
        },
        "clientId": "C.1000000000000000",
        "context": {
          "clientResources": {
            "cpuUsage": {
              "systemCpuTime": 0.0,
              "userCpuTime": 0.0
            }
          },
          "createTime": "42000000",
          "creator": "api_test_user",
          "currentState": "Start",
          "nextOutboundId": "9",
          "outstandingRequests": "8",
          "sessionId": "aff4:/C.1000000000000000/flows/F:ABCDEF13",
          "state": "ERROR",
          "status": "Pending termination: Some reason"
        },
        "creator": "api_test_user",
        "errorDescription": "Pending termination: Some reason",
        "flowId": "F:ABCDEF13",
        "isRobot": false,
        "lastActiveAt": "42000000",
        "name": "Interrogate",
        "progress": {
          "@type": "type.googleapis.com/grr.DefaultFlowProgress"
        },
        "resultMetadata": {
          "isMetadataSet": true
        },
        "runnerArgs": {
          "clientId": "aff4:/C.1000000000000000",
          "cpuLimit": "60",
          "flowName": "Interrogate",
          "networkBytesLimit": "8192"
        },
        "startedAt": "42000000",
        "state": "ERROR",
        "stateData": {},
        "store": {
          "@type": "type.googleapis.com/grr.InterrogateStore"
        },
        "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF13"
      },
      "test_class": "ApiGetFlowHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows/F:ABCDEF13"
    }
  ],
  "ApiGetFlowResultsExportCommandHandler": [
    {
      "api_method": "GetFlowResultsExportCommand",
      "method": "GET",
      "response": {
        "command": "/usr/bin/grr_api_shell 'http://localhost:8000/' --exec_code 'grrapi.Client(\"C.1000000000000000\").Flow(\"F:ABCDEF\").GetFilesArchive().WriteToFile(\"./flow_results_C_1000000000000000_F_ABCDEF.zip\")'"
      },
      "test_class": "ApiGetFlowResultsExportCommandHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows/F:ABCDEF/results/export-command"
    }
  ],
  "ApiGetGrrBinaryBlobHandler": [
    {
      "api_method": "GetGrrBinaryBlob",
      "method": "GET",
      "response": "I'm a python hack",
      "test_class": "ApiGetGrrBinaryBlobHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/binaries-blobs/python_hack/test"
    },
    {
      "api_method": "GetGrrBinaryBlob",
      "method": "GET",
      "response": "I am a binary file",
      "test_class": "ApiGetGrrBinaryBlobHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/binaries-blobs/executable/windows/test.exe"
    }
  ],
  "ApiGetGrrBinaryHandler": [
    {
      "api_method": "GetGrrBinary",
      "method": "GET",
      "response": {
        "hasValidSignature": true,
        "path": "test",
        "size": "17",
        "timestamp": "43000000",
        "type": "PYTHON_HACK"
      },
      "test_class": "ApiGetGrrBinaryHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/binaries/python_hack/test"
    },
    {
      "api_method": "GetGrrBinary",
      "method": "GET",
      "response": {
        "hasValidSignature": true,
        "path": "windows/test.exe",
        "size": "18",
        "timestamp": "42000000",
        "type": "EXECUTABLE"
      },
      "test_class": "ApiGetGrrBinaryHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/binaries/executable/windows/test.exe"
    }
  ],
  "ApiGetHuntApprovalHandler": [
    {
      "api_method": "GetHuntApproval",
      "method": "GET",
      "response": {
        "approvers": [
          "api_test_user"
        ],
        "emailMessageId": "<message id stub>",
        "expirationTimeUs": "2419244000000",
        "id": "approval:111111",
        "isValid": false,
        "isValidMessage": "Need at least 1 additional approver for access.",
        "notifiedUsers": [
          "approver"
        ],
        "reason": "foo",
        "requestor": "api_test_user",
        "subject": {
          "allClientsCount": "0",
          "clientLimit": "100",
          "clientRate": 0.0,
          "clientRuleSet": {
            "rules": [
              {
                "regex": {
                  "attributeRegex": "GRR",
                  "field": "CLIENT_NAME"
                },
                "ruleType": "REGEX"
              }
            ]
          },
          "clientsWithResultsCount": "0",
          "completedClientsCount": "0",
          "crashLimit": "100",
          "crashedClientsCount": "0",
          "created": "42000000",
          "creator": "api_test_user",
          "description": "hunt1",
          "duration": "1209600",
          "failedClientsCount": "0",
          "flowArgs": {
            "@type": "type.googleapis.com/grr.FileFinderArgs",
            "action": {
              "actionType": "DOWNLOAD",
              "download": {
                "collectExtAttrs": false
              }
            },
            "paths": [
              "/tmp/evil.txt"
            ],
            "pathtype": "OS"
          },
          "flowName": "ClientFileFinder",
          "huntId": "H:123456",
          "huntRunnerArgs": {
            "avgCpuSecondsPerClientLimit": "60",
            "avgNetworkBytesPerClientLimit": "10485760",
            "avgResultsPerClientLimit": "1000",
            "clientLimit": "100",
            "clientRate": 0.0,
            "clientRuleSet": {
              "rules": [
                {
                  "regex": {
                    "attributeRegex": "GRR",
                    "field": "CLIENT_NAME"
                  },
                  "ruleType": "REGEX"
                }
              ]
            },
            "crashLimit": "100",
            "description": "hunt1",
            "expiryTime": "1209600",
            "huntName": "GenericHunt",
            "originalObject": {}
          },
          "huntType": "STANDARD",
          "isRobot": false,
          "name": "GenericHunt",
          "remainingClientsCount": "0",
          "resultsCount": "0",
          "state": "PAUSED",
          "stateComment": "",
          "stateReason": "UNKNOWN",
          "totalCpuUsage": 0.0,
          "totalNetUsage": "0",
          "urn": "aff4:/hunts/H:123456"
        }
      },
      "test_class": "ApiGetHuntApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/api_test_user/approvals/hunt/H:123456/approval:111111"
    },
    {
      "api_method": "GetHuntApproval",
      "method": "GET",
      "response": {
        "approvers": [
          "api_test_user",
          "approver"
        ],
        "emailMessageId": "<message id stub>",
        "expirationTimeUs": "2419245000000",
        "id": "approval:222222",
        "isValid": true,
        "notifiedUsers": [
          "approver"
        ],
        "reason": "bar",
        "requestor": "api_test_user",
        "subject": {
          "allClientsCount": "0",
          "clientLimit": "100",
          "clientRate": 0.0,
          "clientRuleSet": {
            "rules": [
              {
                "regex": {
                  "attributeRegex": "GRR",
                  "field": "CLIENT_NAME"
                },
                "ruleType": "REGEX"
              }
            ]
          },
          "clientsWithResultsCount": "0",
          "completedClientsCount": "0",
          "crashLimit": "100",
          "crashedClientsCount": "0",
          "created": "42000000",
          "creator": "api_test_user",
          "description": "hunt2",
          "duration": "1209600",
          "failedClientsCount": "0",
          "flowArgs": {
            "@type": "type.googleapis.com/grr.FileFinderArgs",
            "action": {
              "actionType": "DOWNLOAD",
              "download": {
                "collectExtAttrs": false
              }
            },
            "paths": [
              "/tmp/evil.txt"
            ],
            "pathtype": "OS"
          },
          "flowName": "ClientFileFinder",
          "huntId": "H:567890",
          "huntRunnerArgs": {
            "avgCpuSecondsPerClientLimit": "60",
            "avgNetworkBytesPerClientLimit": "10485760",
            "avgResultsPerClientLimit": "1000",
            "clientLimit": "100",
            "clientRate": 0.0,
            "clientRuleSet": {
              "rules": [
                {
                  "regex": {
                    "attributeRegex": "GRR",
                    "field": "CLIENT_NAME"
                  },
                  "ruleType": "REGEX"
                }
              ]
            },
            "crashLimit": "100",
            "description": "hunt2",
            "expiryTime": "1209600",
            "huntName": "GenericHunt",
            "originalObject": {}
          },
          "huntType": "STANDARD",
          "isRobot": false,
          "name": "GenericHunt",
          "remainingClientsCount": "0",
          "resultsCount": "0",
          "state": "PAUSED",
          "stateComment": "",
          "stateReason": "UNKNOWN",
          "totalCpuUsage": 0.0,
          "totalNetUsage": "0",
          "urn": "aff4:/hunts/H:567890"
        }
      },
      "test_class": "ApiGetHuntApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/api_test_user/approvals/hunt/H:567890/approval:222222"
    },
    {
      "api_method": "GetHuntApproval",
      "method": "GET",
      "response": {
        "approvers": [
          "api_test_user"
        ],
        "copiedFromHunt": {
          "allClientsCount": "0",
          "clientLimit": "100",
          "clientRate": 0.0,
          "clientRuleSet": {
            "rules": [
              {
                "regex": {
                  "attributeRegex": "GRR",
                  "field": "CLIENT_NAME"
                },
                "ruleType": "REGEX"
              }
            ]
          },
          "clientsWithResultsCount": "0",
          "completedClientsCount": "0",
          "crashLimit": "100",
          "crashedClientsCount": "0",
          "created": "42000000",
          "creator": "api_test_user",
          "description": "original hunt",
          "duration": "1209600",
          "failedClientsCount": "0",
          "flowArgs": {
            "@type": "type.googleapis.com/grr.FileFinderArgs",
            "action": {
              "actionType": "DOWNLOAD",
              "download": {
                "collectExtAttrs": false
              }
            },
            "paths": [
              "/tmp/evil.txt"
            ],
            "pathtype": "OS"
          },
          "flowName": "ClientFileFinder",
          "huntId": "H:556677",
          "huntRunnerArgs": {
            "avgCpuSecondsPerClientLimit": "60",
            "avgNetworkBytesPerClientLimit": "10485760",
            "avgResultsPerClientLimit": "1000",
            "clientLimit": "100",
            "clientRate": 0.0,
            "clientRuleSet": {
              "rules": [
                {
                  "regex": {
                    "attributeRegex": "GRR",
                    "field": "CLIENT_NAME"
                  },
                  "ruleType": "REGEX"
                }
              ]
            },
            "crashLimit": "100",
            "description": "original hunt",
            "expiryTime": "1209600",
            "huntName": "GenericHunt",
            "originalObject": {}
          },
          "huntType": "STANDARD",
          "isRobot": false,
          "name": "GenericHunt",
          "remainingClientsCount": "0",
          "resultsCount": "0",
          "state": "PAUSED",
          "stateComment": "",
          "stateReason": "UNKNOWN",
          "totalCpuUsage": 0.0,
          "totalNetUsage": "0",
          "urn": "aff4:/hunts/H:556677"
        },
        "emailMessageId": "<message id stub>",
        "expirationTimeUs": "2419244000000",
        "id": "approval:333333",
        "isValid": false,
        "isValidMessage": "Need at least 1 additional approver for access.",
        "notifiedUsers": [
          "approver"
        ],
        "reason": "foo",
        "requestor": "api_test_user",
        "subject": {
          "allClientsCount": "0",
          "clientLimit": "100",
          "clientRate": 0.0,
          "clientRuleSet": {
            "rules": [
              {
                "regex": {
                  "attributeRegex": "GRR",
                  "field": "CLIENT_NAME"
                },
                "ruleType": "REGEX"
              }
            ]
          },
          "clientsWithResultsCount": "0",
          "completedClientsCount": "0",
          "crashLimit": "100",
          "crashedClientsCount": "0",
          "created": "42000000",
          "creator": "api_test_user",
          "description": "copied hunt",
          "duration": "1209600",
          "failedClientsCount": "0",
          "flowArgs": {
            "@type": "type.googleapis.com/grr.FileFinderArgs",
            "action": {
              "actionType": "DOWNLOAD",
              "download": {
                "collectExtAttrs": false
              }
            },
            "paths": [
              "/tmp/evil.txt"
            ],
            "pathtype": "OS"
          },
          "flowName": "ClientFileFinder",
          "huntId": "H:DDEEFF",
          "huntRunnerArgs": {
            "avgCpuSecondsPerClientLimit": "60",
            "avgNetworkBytesPerClientLimit": "10485760",
            "avgResultsPerClientLimit": "1000",
            "clientLimit": "100",
            "clientRate": 0.0,
            "clientRuleSet": {
              "rules": [
                {
                  "regex": {
                    "attributeRegex": "GRR",
                    "field": "CLIENT_NAME"
                  },
                  "ruleType": "REGEX"
                }
              ]
            },
            "crashLimit": "100",
            "description": "copied hunt",
            "expiryTime": "1209600",
            "huntName": "GenericHunt",
            "originalObject": {
              "huntReference": {
                "huntId": "H:556677"
              },
              "objectType": "HUNT_REFERENCE"
            }
          },
          "huntType": "STANDARD",
          "isRobot": false,
          "name": "GenericHunt",
          "originalObject": {
            "huntReference": {
              "huntId": "H:556677"
            },
            "objectType": "HUNT_REFERENCE"
          },
          "remainingClientsCount": "0",
          "resultsCount": "0",
          "state": "PAUSED",
          "stateComment": "",
          "stateReason": "UNKNOWN",
          "totalCpuUsage": 0.0,
          "totalNetUsage": "0",
          "urn": "aff4:/hunts/H:DDEEFF"
        }
      },
      "test_class": "ApiGetHuntApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/api_test_user/approvals/hunt/H:DDEEFF/approval:333333"
    },
    {
      "api_method": "GetHuntApproval",
      "method": "GET",
      "response": {
        "approvers": [
          "api_test_user"
        ],
        "copiedFromFlow": {
          "args": {
            "@type": "type.googleapis.com/grr.InterrogateArgs"
          },
          "clientId": "C.1000000000000000",
          "creator": "api_test_user",
          "flowId": "F:112233",
          "isRobot": false,
          "lastActiveAt": "42000000",
          "name": "Interrogate",
          "runnerArgs": {
            "clientId": "aff4:/C.1000000000000000",
            "flowName": "Interrogate"
          },
          "startedAt": "42000000",
          "state": "RUNNING",
          "store": {
            "@type": "type.googleapis.com/grr.InterrogateStore"
          },
          "urn": "aff4:/C.1000000000000000/flows/F:112233"
        },
        "emailMessageId": "<message id stub>",
        "expirationTimeUs": "2419244000000",
        "id": "approval:444444",
        "isValid": false,
        "isValidMessage": "Need at least 1 additional approver for access.",
        "notifiedUsers": [
          "approver"
        ],
        "reason": "foo",
        "requestor": "api_test_user",
        "subject": {
          "allClientsCount": "0",
          "clientLimit": "100",
          "clientRate": 0.0,
          "clientRuleSet": {
            "rules": [
              {
                "regex": {
                  "attributeRegex": "GRR",
                  "field": "CLIENT_NAME"
                },
                "ruleType": "REGEX"
              }
            ]
          },
          "clientsWithResultsCount": "0",
          "completedClientsCount": "0",
          "crashLimit": "100",
          "crashedClientsCount": "0",
          "created": "42000000",
          "creator": "api_test_user",
          "description": "hunt started from flow",
          "duration": "1209600",
          "failedClientsCount": "0",
          "flowArgs": {
            "@type": "type.googleapis.com/grr.FileFinderArgs",
            "action": {
              "actionType": "DOWNLOAD",
              "download": {
                "collectExtAttrs": false
              }
            },
            "paths": [
              "/tmp/evil.txt"
            ],
            "pathtype": "OS"
          },
          "flowName": "ClientFileFinder",
          "huntId": "H:667788",
          "huntRunnerArgs": {
            "avgCpuSecondsPerClientLimit": "60",
            "avgNetworkBytesPerClientLimit": "10485760",
            "avgResultsPerClientLimit": "1000",
            "clientLimit": "100",
            "clientRate": 0.0,
            "clientRuleSet": {
              "rules": [
                {
                  "regex": {
                    "attributeRegex": "GRR",
                    "field": "CLIENT_NAME"
                  },
                  "ruleType": "REGEX"
                }
              ]
            },
            "crashLimit": "100",
            "description": "hunt started from flow",
            "expiryTime": "1209600",
            "huntName": "GenericHunt",
            "originalObject": {
              "flowReference": {
                "clientId": "C.1000000000000000",
                "flowId": "F:112233"
              },
              "objectType": "FLOW_REFERENCE"
            }
          },
          "huntType": "STANDARD",
          "isRobot": false,
          "name": "GenericHunt",
          "originalObject": {
            "flowReference": {
              "clientId": "C.1000000000000000",
              "flowId": "F:112233"
            },
            "objectType": "FLOW_REFERENCE"
          },
          "remainingClientsCount": "0",
          "resultsCount": "0",
          "state": "PAUSED",
          "stateComment": "",
          "stateReason": "UNKNOWN",
          "totalCpuUsage": 0.0,
          "totalNetUsage": "0",
          "urn": "aff4:/hunts/H:667788"
        }
      },
      "test_class": "ApiGetHuntApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/api_test_user/approvals/hunt/H:667788/approval:444444"
    }
  ],
  "ApiGetHuntClientCompletionStatsHandler": [
    {
      "api_method": "GetHuntClientCompletionStats",
      "method": "GET",
      "response": {
        "completePoints": [
          {
            "xValue": 45.0,
            "yValue": 1.0
          },
          {
            "xValue": 45.900002,
            "yValue": 1.0
          },
          {
            "xValue": 46.799999,
            "yValue": 1.0
          },
          {
            "xValue": 47.700001,
            "yValue": 1.0
          },
          {
            "xValue": 48.599998,
            "yValue": 1.0
          },
          {
            "xValue": 49.5,
            "yValue": 1.0
          },
          {
            "xValue": 50.400002,
            "yValue": 1.0
          },
          {
            "xValue": 51.299999,
            "yValue": 1.0
          },
          {
            "xValue": 52.200001,
            "yValue": 1.0
          },
          {
            "xValue": 53.099998,
            "yValue": 1.0
          },
          {
            "xValue": 54.0,
            "yValue": 1.0
          },
          {
            "xValue": 54.900002,
            "yValue": 2.0
          },
          {
            "xValue": 55.799999,
            "yValue": 2.0
          },
          {
            "xValue": 56.700001,
            "yValue": 2.0
          },
          {
            "xValue": 57.599998,
            "yValue": 2.0
          },
          {
            "xValue": 58.5,
            "yValue": 2.0
          },
          {
            "xValue": 59.400002,
            "yValue": 2.0
          },
          {
            "xValue": 60.299999,
            "yValue": 2.0
          },
          {
            "xValue": 61.200001,
            "yValue": 2.0
          },
          {
            "xValue": 62.099998,
            "yValue": 2.0
          },
          {
            "xValue": 63.0,
            "yValue": 2.0
          },
          {
            "xValue": 63.900002,
            "yValue": 2.0
          },
          {
            "xValue": 64.800003,
            "yValue": 3.0
          },
          {
            "xValue": 65.699997,
            "yValue": 3.0
          },
          {
            "xValue": 66.599998,
            "yValue": 3.0
          },
          {
            "xValue": 67.5,
            "yValue": 3.0
          },
          {
            "xValue": 68.400002,
            "yValue": 3.0
          },
          {
            "xValue": 69.300003,
            "yValue": 3.0
          },
          {
            "xValue": 70.199997,
            "yValue": 3.0
          },
          {
            "xValue": 71.099998,
            "yValue": 3.0
          },
          {
            "xValue": 72.0,
            "yValue": 3.0
          },
          {
            "xValue": 72.900002,
            "yValue": 3.0
          },
          {
            "xValue": 73.800003,
            "yValue": 3.0
          },
          {
            "xValue": 74.699997,
            "yValue": 4.0
          },
          {
            "xValue": 75.599998,
            "yValue": 4.0
          },
          {
            "xValue": 76.5,
            "yValue": 4.0
          },
          {
            "xValue": 77.400002,
            "yValue": 4.0
          },
          {
            "xValue": 78.300003,
            "yValue": 4.0
          },
          {
            "xValue": 79.199997,
            "yValue": 4.0
          },
          {
            "xValue": 80.099998,
            "yValue": 4.0
          },
          {
            "xValue": 81.0,
            "yValue": 4.0
          },
          {
            "xValue": 81.900002,
            "yValue": 4.0
          },
          {
            "xValue": 82.800003,
            "yValue": 4.0
          },
          {
            "xValue": 83.699997,
            "yValue": 4.0
          },
          {
            "xValue": 84.599998,
            "yValue": 5.0
          },
          {
            "xValue": 85.5,
            "yValue": 5.0
          },
          {
            "xValue": 86.400002,
            "yValue": 5.0
          },
          {
            "xValue": 87.300003,
            "yValue": 5.0
          },
          {
            "xValue": 88.199997,
            "yValue": 5.0
          },
          {
            "xValue": 89.099998,
            "yValue": 5.0
          },
          {
            "xValue": 90.0,
            "yValue": 5.0
          },
          {
            "xValue": 90.900002,
            "yValue": 5.0
          },
          {
            "xValue": 91.800003,
            "yValue": 5.0
          },
          {
            "xValue": 92.699997,
            "yValue": 5.0
          },
          {
            "xValue": 93.599998,
            "yValue": 5.0
          },
          {
            "xValue": 94.5,
            "yValue": 6.0
          },
          {
            "xValue": 95.400002,
            "yValue": 6.0
          },
          {
            "xValue": 96.300003,
            "yValue": 6.0
          },
          {
            "xValue": 97.199997,
            "yValue": 6.0
          },
          {
            "xValue": 98.099998,
            "yValue": 6.0
          },
          {
            "xValue": 99.0,
            "yValue": 6.0
          },
          {
            "xValue": 99.900002,
            "yValue": 6.0
          },
          {
            "xValue": 100.8,
            "yValue": 6.0
          },
          {
            "xValue": 101.7,
            "yValue": 6.0
          },
          {
            "xValue": 102.6,
            "yValue": 6.0
          },
          {
            "xValue": 103.5,
            "yValue": 6.0
          },
          {
            "xValue": 104.4,
            "yValue": 7.0
          },
          {
            "xValue": 105.3,
            "yValue": 7.0
          },
          {
            "xValue": 106.2,
            "yValue": 7.0
          },
          {
            "xValue": 107.1,
            "yValue": 7.0
          },
          {
            "xValue": 108.0,
            "yValue": 7.0
          },
          {
            "xValue": 108.9,
            "yValue": 7.0
          },
          {
            "xValue": 109.8,
            "yValue": 7.0
          },
          {
            "xValue": 110.7,
            "yValue": 7.0
          },
          {
            "xValue": 111.6,
            "yValue": 7.0
          },
          {
            "xValue": 112.5,
            "yValue": 7.0
          },
          {
            "xValue": 113.4,
            "yValue": 7.0
          },
          {
            "xValue": 114.3,
            "yValue": 8.0
          },
          {
            "xValue": 115.2,
            "yValue": 8.0
          },
          {
            "xValue": 116.1,
            "yValue": 8.0
          },
          {
            "xValue": 117.0,
            "yValue": 8.0
          },
          {
            "xValue": 117.9,
            "yValue": 8.0
          },
          {
            "xValue": 118.8,
            "yValue": 8.0
          },
          {
            "xValue": 119.7,
            "yValue": 8.0
          },
          {
            "xValue": 120.6,
            "yValue": 8.0
          },
          {
            "xValue": 121.5,
            "yValue": 8.0
          },
          {
            "xValue": 122.4,
            "yValue": 8.0
          },
          {
            "xValue": 123.3,
            "yValue": 8.0
          },
          {
            "xValue": 124.2,
            "yValue": 9.0
          },
          {
            "xValue": 125.1,
            "yValue": 9.0
          },
          {
            "xValue": 126.0,
            "yValue": 9.0
          },
          {
            "xValue": 126.9,
            "yValue": 9.0
          },
          {
            "xValue": 127.8,
            "yValue": 9.0
          },
          {
            "xValue": 128.7,
            "yValue": 9.0
          },
          {
            "xValue": 129.60001,
            "yValue": 9.0
          },
          {
            "xValue": 130.5,
            "yValue": 9.0
          },
          {
            "xValue": 131.39999,
            "yValue": 9.0
          },
          {
            "xValue": 132.3,
            "yValue": 9.0
          },
          {
            "xValue": 133.2,
            "yValue": 9.0
          },
          {
            "xValue": 134.10001,
            "yValue": 10.0
          }
        ],
        "startPoints": [
          {
            "xValue": 45.0,
            "yValue": 1.0
          },
          {
            "xValue": 45.900002,
            "yValue": 1.0
          },
          {
            "xValue": 46.799999,
            "yValue": 1.0
          },
          {
            "xValue": 47.700001,
            "yValue": 1.0
          },
          {
            "xValue": 48.599998,
            "yValue": 1.0
          },
          {
            "xValue": 49.5,
            "yValue": 1.0
          },
          {
            "xValue": 50.400002,
            "yValue": 1.0
          },
          {
            "xValue": 51.299999,
            "yValue": 1.0
          },
          {
            "xValue": 52.200001,
            "yValue": 1.0
          },
          {
            "xValue": 53.099998,
            "yValue": 1.0
          },
          {
            "xValue": 54.0,
            "yValue": 1.0
          },
          {
            "xValue": 54.900002,
            "yValue": 2.0
          },
          {
            "xValue": 55.799999,
            "yValue": 2.0
          },
          {
            "xValue": 56.700001,
            "yValue": 2.0
          },
          {
            "xValue": 57.599998,
            "yValue": 2.0
          },
          {
            "xValue": 58.5,
            "yValue": 2.0
          },
          {
            "xValue": 59.400002,
            "yValue": 2.0
          },
          {
            "xValue": 60.299999,
            "yValue": 2.0
          },
          {
            "xValue": 61.200001,
            "yValue": 2.0
          },
          {
            "xValue": 62.099998,
            "yValue": 2.0
          },
          {
            "xValue": 63.0,
            "yValue": 2.0
          },
          {
            "xValue": 63.900002,
            "yValue": 2.0
          },
          {
            "xValue": 64.800003,
            "yValue": 3.0
          },
          {
            "xValue": 65.699997,
            "yValue": 3.0
          },
          {
            "xValue": 66.599998,
            "yValue": 3.0
          },
          {
            "xValue": 67.5,
            "yValue": 3.0
          },
          {
            "xValue": 68.400002,
            "yValue": 3.0
          },
          {
            "xValue": 69.300003,
            "yValue": 3.0
          },
          {
            "xValue": 70.199997,
            "yValue": 3.0
          },
          {
            "xValue": 71.099998,
            "yValue": 3.0
          },
          {
            "xValue": 72.0,
            "yValue": 3.0
          },
          {
            "xValue": 72.900002,
            "yValue": 3.0
          },
          {
            "xValue": 73.800003,
            "yValue": 3.0
          },
          {
            "xValue": 74.699997,
            "yValue": 4.0
          },
          {
            "xValue": 75.599998,
            "yValue": 4.0
          },
          {
            "xValue": 76.5,
            "yValue": 4.0
          },
          {
            "xValue": 77.400002,
            "yValue": 4.0
          },
          {
            "xValue": 78.300003,
            "yValue": 4.0
          },
          {
            "xValue": 79.199997,
            "yValue": 4.0
          },
          {
            "xValue": 80.099998,
            "yValue": 4.0
          },
          {
            "xValue": 81.0,
            "yValue": 4.0
          },
          {
            "xValue": 81.900002,
            "yValue": 4.0
          },
          {
            "xValue": 82.800003,
            "yValue": 4.0
          },
          {
            "xValue": 83.699997,
            "yValue": 4.0
          },
          {
            "xValue": 84.599998,
            "yValue": 5.0
          },
          {
            "xValue": 85.5,
            "yValue": 5.0
          },
          {
            "xValue": 86.400002,
            "yValue": 5.0
          },
          {
            "xValue": 87.300003,
            "yValue": 5.0
          },
          {
            "xValue": 88.199997,
            "yValue": 5.0
          },
          {
            "xValue": 89.099998,
            "yValue": 5.0
          },
          {
            "xValue": 90.0,
            "yValue": 5.0
          },
          {
            "xValue": 90.900002,
            "yValue": 5.0
          },
          {
            "xValue": 91.800003,
            "yValue": 5.0
          },
          {
            "xValue": 92.699997,
            "yValue": 5.0
          },
          {
            "xValue": 93.599998,
            "yValue": 5.0
          },
          {
            "xValue": 94.5,
            "yValue": 6.0
          },
          {
            "xValue": 95.400002,
            "yValue": 6.0
          },
          {
            "xValue": 96.300003,
            "yValue": 6.0
          },
          {
            "xValue": 97.199997,
            "yValue": 6.0
          },
          {
            "xValue": 98.099998,
            "yValue": 6.0
          },
          {
            "xValue": 99.0,
            "yValue": 6.0
          },
          {
            "xValue": 99.900002,
            "yValue": 6.0
          },
          {
            "xValue": 100.8,
            "yValue": 6.0
          },
          {
            "xValue": 101.7,
            "yValue": 6.0
          },
          {
            "xValue": 102.6,
            "yValue": 6.0
          },
          {
            "xValue": 103.5,
            "yValue": 6.0
          },
          {
            "xValue": 104.4,
            "yValue": 7.0
          },
          {
            "xValue": 105.3,
            "yValue": 7.0
          },
          {
            "xValue": 106.2,
            "yValue": 7.0
          },
          {
            "xValue": 107.1,
            "yValue": 7.0
          },
          {
            "xValue": 108.0,
            "yValue": 7.0
          },
          {
            "xValue": 108.9,
            "yValue": 7.0
          },
          {
            "xValue": 109.8,
            "yValue": 7.0
          },
          {
            "xValue": 110.7,
            "yValue": 7.0
          },
          {
            "xValue": 111.6,
            "yValue": 7.0
          },
          {
            "xValue": 112.5,
            "yValue": 7.0
          },
          {
            "xValue": 113.4,
            "yValue": 7.0
          },
          {
            "xValue": 114.3,
            "yValue": 8.0
          },
          {
            "xValue": 115.2,
            "yValue": 8.0
          },
          {
            "xValue": 116.1,
            "yValue": 8.0
          },
          {
            "xValue": 117.0,
            "yValue": 8.0
          },
          {
            "xValue": 117.9,
            "yValue": 8.0
          },
          {
            "xValue": 118.8,
            "yValue": 8.0
          },
          {
            "xValue": 119.7,
            "yValue": 8.0
          },
          {
            "xValue": 120.6,
            "yValue": 8.0
          },
          {
            "xValue": 121.5,
            "yValue": 8.0
          },
          {
            "xValue": 122.4,
            "yValue": 8.0
          },
          {
            "xValue": 123.3,
            "yValue": 8.0
          },
          {
            "xValue": 124.2,
            "yValue": 9.0
          },
          {
            "xValue": 125.1,
            "yValue": 9.0
          },
          {
            "xValue": 126.0,
            "yValue": 9.0
          },
          {
            "xValue": 126.9,
            "yValue": 9.0
          },
          {
            "xValue": 127.8,
            "yValue": 9.0
          },
          {
            "xValue": 128.7,
            "yValue": 9.0
          },
          {
            "xValue": 129.60001,
            "yValue": 9.0
          },
          {
            "xValue": 130.5,
            "yValue": 9.0
          },
          {
            "xValue": 131.39999,
            "yValue": 9.0
          },
          {
            "xValue": 132.3,
            "yValue": 9.0
          },
          {
            "xValue": 133.2,
            "yValue": 9.0
          },
          {
            "xValue": 134.10001,
            "yValue": 10.0
          }
        ]
      },
      "test_class": "ApiGetHuntClientCompletionStatsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/client-completion-stats"
    },
    {
      "api_method": "GetHuntClientCompletionStats",
      "method": "GET",
      "response": {
        "completePoints": [
          {
            "xValue": 45.0,
            "yValue": 1.0
          },
          {
            "xValue": 45.900002,
            "yValue": 1.0
          },
          {
            "xValue": 46.799999,
            "yValue": 1.0
          },
          {
            "xValue": 47.700001,
            "yValue": 1.0
          },
          {
            "xValue": 48.599998,
            "yValue": 1.0
          },
          {
            "xValue": 49.5,
            "yValue": 1.0
          },
          {
            "xValue": 50.400002,
            "yValue": 1.0
          },
          {
            "xValue": 51.299999,
            "yValue": 1.0
          },
          {
            "xValue": 52.200001,
            "yValue": 1.0
          },
          {
            "xValue": 53.099998,
            "yValue": 1.0
          },
          {
            "xValue": 54.0,
            "yValue": 1.0
          },
          {
            "xValue": 54.900002,
            "yValue": 2.0
          },
          {
            "xValue": 55.799999,
            "yValue": 2.0
          },
          {
            "xValue": 56.700001,
            "yValue": 2.0
          },
          {
            "xValue": 57.599998,
            "yValue": 2.0
          },
          {
            "xValue": 58.5,
            "yValue": 2.0
          },
          {
            "xValue": 59.400002,
            "yValue": 2.0
          },
          {
            "xValue": 60.299999,
            "yValue": 2.0
          },
          {
            "xValue": 61.200001,
            "yValue": 2.0
          },
          {
            "xValue": 62.099998,
            "yValue": 2.0
          },
          {
            "xValue": 63.0,
            "yValue": 2.0
          },
          {
            "xValue": 63.900002,
            "yValue": 2.0
          },
          {
            "xValue": 64.800003,
            "yValue": 3.0
          },
          {
            "xValue": 65.699997,
            "yValue": 3.0
          },
          {
            "xValue": 66.599998,
            "yValue": 3.0
          },
          {
            "xValue": 67.5,
            "yValue": 3.0
          },
          {
            "xValue": 68.400002,
            "yValue": 3.0
          },
          {
            "xValue": 69.300003,
            "yValue": 3.0
          },
          {
            "xValue": 70.199997,
            "yValue": 3.0
          },
          {
            "xValue": 71.099998,
            "yValue": 3.0
          },
          {
            "xValue": 72.0,
            "yValue": 3.0
          },
          {
            "xValue": 72.900002,
            "yValue": 3.0
          },
          {
            "xValue": 73.800003,
            "yValue": 3.0
          },
          {
            "xValue": 74.699997,
            "yValue": 4.0
          },
          {
            "xValue": 75.599998,
            "yValue": 4.0
          },
          {
            "xValue": 76.5,
            "yValue": 4.0
          },
          {
            "xValue": 77.400002,
            "yValue": 4.0
          },
          {
            "xValue": 78.300003,
            "yValue": 4.0
          },
          {
            "xValue": 79.199997,
            "yValue": 4.0
          },
          {
            "xValue": 80.099998,
            "yValue": 4.0
          },
          {
            "xValue": 81.0,
            "yValue": 4.0
          },
          {
            "xValue": 81.900002,
            "yValue": 4.0
          },
          {
            "xValue": 82.800003,
            "yValue": 4.0
          },
          {
            "xValue": 83.699997,
            "yValue": 4.0
          },
          {
            "xValue": 84.599998,
            "yValue": 5.0
          },
          {
            "xValue": 85.5,
            "yValue": 5.0
          },
          {
            "xValue": 86.400002,
            "yValue": 5.0
          },
          {
            "xValue": 87.300003,
            "yValue": 5.0
          },
          {
            "xValue": 88.199997,
            "yValue": 5.0
          },
          {
            "xValue": 89.099998,
            "yValue": 5.0
          },
          {
            "xValue": 90.0,
            "yValue": 5.0
          },
          {
            "xValue": 90.900002,
            "yValue": 5.0
          },
          {
            "xValue": 91.800003,
            "yValue": 5.0
          },
          {
            "xValue": 92.699997,
            "yValue": 5.0
          },
          {
            "xValue": 93.599998,
            "yValue": 5.0
          },
          {
            "xValue": 94.5,
            "yValue": 6.0
          },
          {
            "xValue": 95.400002,
            "yValue": 6.0
          },
          {
            "xValue": 96.300003,
            "yValue": 6.0
          },
          {
            "xValue": 97.199997,
            "yValue": 6.0
          },
          {
            "xValue": 98.099998,
            "yValue": 6.0
          },
          {
            "xValue": 99.0,
            "yValue": 6.0
          },
          {
            "xValue": 99.900002,
            "yValue": 6.0
          },
          {
            "xValue": 100.8,
            "yValue": 6.0
          },
          {
            "xValue": 101.7,
            "yValue": 6.0
          },
          {
            "xValue": 102.6,
            "yValue": 6.0
          },
          {
            "xValue": 103.5,
            "yValue": 6.0
          },
          {
            "xValue": 104.4,
            "yValue": 7.0
          },
          {
            "xValue": 105.3,
            "yValue": 7.0
          },
          {
            "xValue": 106.2,
            "yValue": 7.0
          },
          {
            "xValue": 107.1,
            "yValue": 7.0
          },
          {
            "xValue": 108.0,
            "yValue": 7.0
          },
          {
            "xValue": 108.9,
            "yValue": 7.0
          },
          {
            "xValue": 109.8,
            "yValue": 7.0
          },
          {
            "xValue": 110.7,
            "yValue": 7.0
          },
          {
            "xValue": 111.6,
            "yValue": 7.0
          },
          {
            "xValue": 112.5,
            "yValue": 7.0
          },
          {
            "xValue": 113.4,
            "yValue": 7.0
          },
          {
            "xValue": 114.3,
            "yValue": 8.0
          },
          {
            "xValue": 115.2,
            "yValue": 8.0
          },
          {
            "xValue": 116.1,
            "yValue": 8.0
          },
          {
            "xValue": 117.0,
            "yValue": 8.0
          },
          {
            "xValue": 117.9,
            "yValue": 8.0
          },
          {
            "xValue": 118.8,
            "yValue": 8.0
          },
          {
            "xValue": 119.7,
            "yValue": 8.0
          },
          {
            "xValue": 120.6,
            "yValue": 8.0
          },
          {
            "xValue": 121.5,
            "yValue": 8.0
          },
          {
            "xValue": 122.4,
            "yValue": 8.0
          },
          {
            "xValue": 123.3,
            "yValue": 8.0
          },
          {
            "xValue": 124.2,
            "yValue": 9.0
          },
          {
            "xValue": 125.1,
            "yValue": 9.0
          },
          {
            "xValue": 126.0,
            "yValue": 9.0
          },
          {
            "xValue": 126.9,
            "yValue": 9.0
          },
          {
            "xValue": 127.8,
            "yValue": 9.0
          },
          {
            "xValue": 128.7,
            "yValue": 9.0
          },
          {
            "xValue": 129.60001,
            "yValue": 9.0
          },
          {
            "xValue": 130.5,
            "yValue": 9.0
          },
          {
            "xValue": 131.39999,
            "yValue": 9.0
          },
          {
            "xValue": 132.3,
            "yValue": 9.0
          },
          {
            "xValue": 133.2,
            "yValue": 9.0
          },
          {
            "xValue": 134.10001,
            "yValue": 10.0
          }
        ],
        "startPoints": [
          {
            "xValue": 45.0,
            "yValue": 1.0
          },
          {
            "xValue": 45.900002,
            "yValue": 1.0
          },
          {
            "xValue": 46.799999,
            "yValue": 1.0
          },
          {
            "xValue": 47.700001,
            "yValue": 1.0
          },
          {
            "xValue": 48.599998,
            "yValue": 1.0
          },
          {
            "xValue": 49.5,
            "yValue": 1.0
          },
          {
            "xValue": 50.400002,
            "yValue": 1.0
          },
          {
            "xValue": 51.299999,
            "yValue": 1.0
          },
          {
            "xValue": 52.200001,
            "yValue": 1.0
          },
          {
            "xValue": 53.099998,
            "yValue": 1.0
          },
          {
            "xValue": 54.0,
            "yValue": 1.0
          },
          {
            "xValue": 54.900002,
            "yValue": 2.0
          },
          {
            "xValue": 55.799999,
            "yValue": 2.0
          },
          {
            "xValue": 56.700001,
            "yValue": 2.0
          },
          {
            "xValue": 57.599998,
            "yValue": 2.0
          },
          {
            "xValue": 58.5,
            "yValue": 2.0
          },
          {
            "xValue": 59.400002,
            "yValue": 2.0
          },
          {
            "xValue": 60.299999,
            "yValue": 2.0
          },
          {
            "xValue": 61.200001,
            "yValue": 2.0
          },
          {
            "xValue": 62.099998,
            "yValue": 2.0
          },
          {
            "xValue": 63.0,
            "yValue": 2.0
          },
          {
            "xValue": 63.900002,
            "yValue": 2.0
          },
          {
            "xValue": 64.800003,
            "yValue": 3.0
          },
          {
            "xValue": 65.699997,
            "yValue": 3.0
          },
          {
            "xValue": 66.599998,
            "yValue": 3.0
          },
          {
            "xValue": 67.5,
            "yValue": 3.0
          },
          {
            "xValue": 68.400002,
            "yValue": 3.0
          },
          {
            "xValue": 69.300003,
            "yValue": 3.0
          },
          {
            "xValue": 70.199997,
            "yValue": 3.0
          },
          {
            "xValue": 71.099998,
            "yValue": 3.0
          },
          {
            "xValue": 72.0,
            "yValue": 3.0
          },
          {
            "xValue": 72.900002,
            "yValue": 3.0
          },
          {
            "xValue": 73.800003,
            "yValue": 3.0
          },
          {
            "xValue": 74.699997,
            "yValue": 4.0
          },
          {
            "xValue": 75.599998,
            "yValue": 4.0
          },
          {
            "xValue": 76.5,
            "yValue": 4.0
          },
          {
            "xValue": 77.400002,
            "yValue": 4.0
          },
          {
            "xValue": 78.300003,
            "yValue": 4.0
          },
          {
            "xValue": 79.199997,
            "yValue": 4.0
          },
          {
            "xValue": 80.099998,
            "yValue": 4.0
          },
          {
            "xValue": 81.0,
            "yValue": 4.0
          },
          {
            "xValue": 81.900002,
            "yValue": 4.0
          },
          {
            "xValue": 82.800003,
            "yValue": 4.0
          },
          {
            "xValue": 83.699997,
            "yValue": 4.0
          },
          {
            "xValue": 84.599998,
            "yValue": 5.0
          },
          {
            "xValue": 85.5,
            "yValue": 5.0
          },
          {
            "xValue": 86.400002,
            "yValue": 5.0
          },
          {
            "xValue": 87.300003,
            "yValue": 5.0
          },
          {
            "xValue": 88.199997,
            "yValue": 5.0
          },
          {
            "xValue": 89.099998,
            "yValue": 5.0
          },
          {
            "xValue": 90.0,
            "yValue": 5.0
          },
          {
            "xValue": 90.900002,
            "yValue": 5.0
          },
          {
            "xValue": 91.800003,
            "yValue": 5.0
          },
          {
            "xValue": 92.699997,
            "yValue": 5.0
          },
          {
            "xValue": 93.599998,
            "yValue": 5.0
          },
          {
            "xValue": 94.5,
            "yValue": 6.0
          },
          {
            "xValue": 95.400002,
            "yValue": 6.0
          },
          {
            "xValue": 96.300003,
            "yValue": 6.0
          },
          {
            "xValue": 97.199997,
            "yValue": 6.0
          },
          {
            "xValue": 98.099998,
            "yValue": 6.0
          },
          {
            "xValue": 99.0,
            "yValue": 6.0
          },
          {
            "xValue": 99.900002,
            "yValue": 6.0
          },
          {
            "xValue": 100.8,
            "yValue": 6.0
          },
          {
            "xValue": 101.7,
            "yValue": 6.0
          },
          {
            "xValue": 102.6,
            "yValue": 6.0
          },
          {
            "xValue": 103.5,
            "yValue": 6.0
          },
          {
            "xValue": 104.4,
            "yValue": 7.0
          },
          {
            "xValue": 105.3,
            "yValue": 7.0
          },
          {
            "xValue": 106.2,
            "yValue": 7.0
          },
          {
            "xValue": 107.1,
            "yValue": 7.0
          },
          {
            "xValue": 108.0,
            "yValue": 7.0
          },
          {
            "xValue": 108.9,
            "yValue": 7.0
          },
          {
            "xValue": 109.8,
            "yValue": 7.0
          },
          {
            "xValue": 110.7,
            "yValue": 7.0
          },
          {
            "xValue": 111.6,
            "yValue": 7.0
          },
          {
            "xValue": 112.5,
            "yValue": 7.0
          },
          {
            "xValue": 113.4,
            "yValue": 7.0
          },
          {
            "xValue": 114.3,
            "yValue": 8.0
          },
          {
            "xValue": 115.2,
            "yValue": 8.0
          },
          {
            "xValue": 116.1,
            "yValue": 8.0
          },
          {
            "xValue": 117.0,
            "yValue": 8.0
          },
          {
            "xValue": 117.9,
            "yValue": 8.0
          },
          {
            "xValue": 118.8,
            "yValue": 8.0
          },
          {
            "xValue": 119.7,
            "yValue": 8.0
          },
          {
            "xValue": 120.6,
            "yValue": 8.0
          },
          {
            "xValue": 121.5,
            "yValue": 8.0
          },
          {
            "xValue": 122.4,
            "yValue": 8.0
          },
          {
            "xValue": 123.3,
            "yValue": 8.0
          },
          {
            "xValue": 124.2,
            "yValue": 9.0
          },
          {
            "xValue": 125.1,
            "yValue": 9.0
          },
          {
            "xValue": 126.0,
            "yValue": 9.0
          },
          {
            "xValue": 126.9,
            "yValue": 9.0
          },
          {
            "xValue": 127.8,
            "yValue": 9.0
          },
          {
            "xValue": 128.7,
            "yValue": 9.0
          },
          {
            "xValue": 129.60001,
            "yValue": 9.0
          },
          {
            "xValue": 130.5,
            "yValue": 9.0
          },
          {
            "xValue": 131.39999,
            "yValue": 9.0
          },
          {
            "xValue": 132.3,
            "yValue": 9.0
          },
          {
            "xValue": 133.2,
            "yValue": 9.0
          },
          {
            "xValue": 134.10001,
            "yValue": 10.0
          }
        ]
      },
      "test_class": "ApiGetHuntClientCompletionStatsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/client-completion-stats?size=4"
    },
    {
      "api_method": "GetHuntClientCompletionStats",
      "method": "GET",
      "response": {
        "completePoints": [
          {
            "xValue": 45.0,
            "yValue": 1.0
          },
          {
            "xValue": 45.900002,
            "yValue": 1.0
          },
          {
            "xValue": 46.799999,
            "yValue": 1.0
          },
          {
            "xValue": 47.700001,
            "yValue": 1.0
          },
          {
            "xValue": 48.599998,
            "yValue": 1.0
          },
          {
            "xValue": 49.5,
            "yValue": 1.0
          },
          {
            "xValue": 50.400002,
            "yValue": 1.0
          },
          {
            "xValue": 51.299999,
            "yValue": 1.0
          },
          {
            "xValue": 52.200001,
            "yValue": 1.0
          },
          {
            "xValue": 53.099998,
            "yValue": 1.0
          },
          {
            "xValue": 54.0,
            "yValue": 1.0
          },
          {
            "xValue": 54.900002,
            "yValue": 2.0
          },
          {
            "xValue": 55.799999,
            "yValue": 2.0
          },
          {
            "xValue": 56.700001,
            "yValue": 2.0
          },
          {
            "xValue": 57.599998,
            "yValue": 2.0
          },
          {
            "xValue": 58.5,
            "yValue": 2.0
          },
          {
            "xValue": 59.400002,
            "yValue": 2.0
          },
          {
            "xValue": 60.299999,
            "yValue": 2.0
          },
          {
            "xValue": 61.200001,
            "yValue": 2.0
          },
          {
            "xValue": 62.099998,
            "yValue": 2.0
          },
          {
            "xValue": 63.0,
            "yValue": 2.0
          },
          {
            "xValue": 63.900002,
            "yValue": 2.0
          },
          {
            "xValue": 64.800003,
            "yValue": 3.0
          },
          {
            "xValue": 65.699997,
            "yValue": 3.0
          },
          {
            "xValue": 66.599998,
            "yValue": 3.0
          },
          {
            "xValue": 67.5,
            "yValue": 3.0
          },
          {
            "xValue": 68.400002,
            "yValue": 3.0
          },
          {
            "xValue": 69.300003,
            "yValue": 3.0
          },
          {
            "xValue": 70.199997,
            "yValue": 3.0
          },
          {
            "xValue": 71.099998,
            "yValue": 3.0
          },
          {
            "xValue": 72.0,
            "yValue": 3.0
          },
          {
            "xValue": 72.900002,
            "yValue": 3.0
          },
          {
            "xValue": 73.800003,
            "yValue": 3.0
          },
          {
            "xValue": 74.699997,
            "yValue": 4.0
          },
          {
            "xValue": 75.599998,
            "yValue": 4.0
          },
          {
            "xValue": 76.5,
            "yValue": 4.0
          },
          {
            "xValue": 77.400002,
            "yValue": 4.0
          },
          {
            "xValue": 78.300003,
            "yValue": 4.0
          },
          {
            "xValue": 79.199997,
            "yValue": 4.0
          },
          {
            "xValue": 80.099998,
            "yValue": 4.0
          },
          {
            "xValue": 81.0,
            "yValue": 4.0
          },
          {
            "xValue": 81.900002,
            "yValue": 4.0
          },
          {
            "xValue": 82.800003,
            "yValue": 4.0
          },
          {
            "xValue": 83.699997,
            "yValue": 4.0
          },
          {
            "xValue": 84.599998,
            "yValue": 5.0
          },
          {
            "xValue": 85.5,
            "yValue": 5.0
          },
          {
            "xValue": 86.400002,
            "yValue": 5.0
          },
          {
            "xValue": 87.300003,
            "yValue": 5.0
          },
          {
            "xValue": 88.199997,
            "yValue": 5.0
          },
          {
            "xValue": 89.099998,
            "yValue": 5.0
          },
          {
            "xValue": 90.0,
            "yValue": 5.0
          },
          {
            "xValue": 90.900002,
            "yValue": 5.0
          },
          {
            "xValue": 91.800003,
            "yValue": 5.0
          },
          {
            "xValue": 92.699997,
            "yValue": 5.0
          },
          {
            "xValue": 93.599998,
            "yValue": 5.0
          },
          {
            "xValue": 94.5,
            "yValue": 6.0
          },
          {
            "xValue": 95.400002,
            "yValue": 6.0
          },
          {
            "xValue": 96.300003,
            "yValue": 6.0
          },
          {
            "xValue": 97.199997,
            "yValue": 6.0
          },
          {
            "xValue": 98.099998,
            "yValue": 6.0
          },
          {
            "xValue": 99.0,
            "yValue": 6.0
          },
          {
            "xValue": 99.900002,
            "yValue": 6.0
          },
          {
            "xValue": 100.8,
            "yValue": 6.0
          },
          {
            "xValue": 101.7,
            "yValue": 6.0
          },
          {
            "xValue": 102.6,
            "yValue": 6.0
          },
          {
            "xValue": 103.5,
            "yValue": 6.0
          },
          {
            "xValue": 104.4,
            "yValue": 7.0
          },
          {
            "xValue": 105.3,
            "yValue": 7.0
          },
          {
            "xValue": 106.2,
            "yValue": 7.0
          },
          {
            "xValue": 107.1,
            "yValue": 7.0
          },
          {
            "xValue": 108.0,
            "yValue": 7.0
          },
          {
            "xValue": 108.9,
            "yValue": 7.0
          },
          {
            "xValue": 109.8,
            "yValue": 7.0
          },
          {
            "xValue": 110.7,
            "yValue": 7.0
          },
          {
            "xValue": 111.6,
            "yValue": 7.0
          },
          {
            "xValue": 112.5,
            "yValue": 7.0
          },
          {
            "xValue": 113.4,
            "yValue": 7.0
          },
          {
            "xValue": 114.3,
            "yValue": 8.0
          },
          {
            "xValue": 115.2,
            "yValue": 8.0
          },
          {
            "xValue": 116.1,
            "yValue": 8.0
          },
          {
            "xValue": 117.0,
            "yValue": 8.0
          },
          {
            "xValue": 117.9,
            "yValue": 8.0
          },
          {
            "xValue": 118.8,
            "yValue": 8.0
          },
          {
            "xValue": 119.7,
            "yValue": 8.0
          },
          {
            "xValue": 120.6,
            "yValue": 8.0
          },
          {
            "xValue": 121.5,
            "yValue": 8.0
          },
          {
            "xValue": 122.4,
            "yValue": 8.0
          },
          {
            "xValue": 123.3,
            "yValue": 8.0
          },
          {
            "xValue": 124.2,
            "yValue": 9.0
          },
          {
            "xValue": 125.1,
            "yValue": 9.0
          },
          {
            "xValue": 126.0,
            "yValue": 9.0
          },
          {
            "xValue": 126.9,
            "yValue": 9.0
          },
          {
            "xValue": 127.8,
            "yValue": 9.0
          },
          {
            "xValue": 128.7,
            "yValue": 9.0
          },
          {
            "xValue": 129.60001,
            "yValue": 9.0
          },
          {
            "xValue": 130.5,
            "yValue": 9.0
          },
          {
            "xValue": 131.39999,
            "yValue": 9.0
          },
          {
            "xValue": 132.3,
            "yValue": 9.0
          },
          {
            "xValue": 133.2,
            "yValue": 9.0
          },
          {
            "xValue": 134.10001,
            "yValue": 10.0
          }
        ],
        "startPoints": [
          {
            "xValue": 45.0,
            "yValue": 1.0
          },
          {
            "xValue": 45.900002,
            "yValue": 1.0
          },
          {
            "xValue": 46.799999,
            "yValue": 1.0
          },
          {
            "xValue": 47.700001,
            "yValue": 1.0
          },
          {
            "xValue": 48.599998,
            "yValue": 1.0
          },
          {
            "xValue": 49.5,
            "yValue": 1.0
          },
          {
            "xValue": 50.400002,
            "yValue": 1.0
          },
          {
            "xValue": 51.299999,
            "yValue": 1.0
          },
          {
            "xValue": 52.200001,
            "yValue": 1.0
          },
          {
            "xValue": 53.099998,
            "yValue": 1.0
          },
          {
            "xValue": 54.0,
            "yValue": 1.0
          },
          {
            "xValue": 54.900002,
            "yValue": 2.0
          },
          {
            "xValue": 55.799999,
            "yValue": 2.0
          },
          {
            "xValue": 56.700001,
            "yValue": 2.0
          },
          {
            "xValue": 57.599998,
            "yValue": 2.0
          },
          {
            "xValue": 58.5,
            "yValue": 2.0
          },
          {
            "xValue": 59.400002,
            "yValue": 2.0
          },
          {
            "xValue": 60.299999,
            "yValue": 2.0
          },
          {
            "xValue": 61.200001,
            "yValue": 2.0
          },
          {
            "xValue": 62.099998,
            "yValue": 2.0
          },
          {
            "xValue": 63.0,
            "yValue": 2.0
          },
          {
            "xValue": 63.900002,
            "yValue": 2.0
          },
          {
            "xValue": 64.800003,
            "yValue": 3.0
          },
          {
            "xValue": 65.699997,
            "yValue": 3.0
          },
          {
            "xValue": 66.599998,
            "yValue": 3.0
          },
          {
            "xValue": 67.5,
            "yValue": 3.0
          },
          {
            "xValue": 68.400002,
            "yValue": 3.0
          },
          {
            "xValue": 69.300003,
            "yValue": 3.0
          },
          {
            "xValue": 70.199997,
            "yValue": 3.0
          },
          {
            "xValue": 71.099998,
            "yValue": 3.0
          },
          {
            "xValue": 72.0,
            "yValue": 3.0
          },
          {
            "xValue": 72.900002,
            "yValue": 3.0
          },
          {
            "xValue": 73.800003,
            "yValue": 3.0
          },
          {
            "xValue": 74.699997,
            "yValue": 4.0
          },
          {
            "xValue": 75.599998,
            "yValue": 4.0
          },
          {
            "xValue": 76.5,
            "yValue": 4.0
          },
          {
            "xValue": 77.400002,
            "yValue": 4.0
          },
          {
            "xValue": 78.300003,
            "yValue": 4.0
          },
          {
            "xValue": 79.199997,
            "yValue": 4.0
          },
          {
            "xValue": 80.099998,
            "yValue": 4.0
          },
          {
            "xValue": 81.0,
            "yValue": 4.0
          },
          {
            "xValue": 81.900002,
            "yValue": 4.0
          },
          {
            "xValue": 82.800003,
            "yValue": 4.0
          },
          {
            "xValue": 83.699997,
            "yValue": 4.0
          },
          {
            "xValue": 84.599998,
            "yValue": 5.0
          },
          {
            "xValue": 85.5,
            "yValue": 5.0
          },
          {
            "xValue": 86.400002,
            "yValue": 5.0
          },
          {
            "xValue": 87.300003,
            "yValue": 5.0
          },
          {
            "xValue": 88.199997,
            "yValue": 5.0
          },
          {
            "xValue": 89.099998,
            "yValue": 5.0
          },
          {
            "xValue": 90.0,
            "yValue": 5.0
          },
          {
            "xValue": 90.900002,
            "yValue": 5.0
          },
          {
            "xValue": 91.800003,
            "yValue": 5.0
          },
          {
            "xValue": 92.699997,
            "yValue": 5.0
          },
          {
            "xValue": 93.599998,
            "yValue": 5.0
          },
          {
            "xValue": 94.5,
            "yValue": 6.0
          },
          {
            "xValue": 95.400002,
            "yValue": 6.0
          },
          {
            "xValue": 96.300003,
            "yValue": 6.0
          },
          {
            "xValue": 97.199997,
            "yValue": 6.0
          },
          {
            "xValue": 98.099998,
            "yValue": 6.0
          },
          {
            "xValue": 99.0,
            "yValue": 6.0
          },
          {
            "xValue": 99.900002,
            "yValue": 6.0
          },
          {
            "xValue": 100.8,
            "yValue": 6.0
          },
          {
            "xValue": 101.7,
            "yValue": 6.0
          },
          {
            "xValue": 102.6,
            "yValue": 6.0
          },
          {
            "xValue": 103.5,
            "yValue": 6.0
          },
          {
            "xValue": 104.4,
            "yValue": 7.0
          },
          {
            "xValue": 105.3,
            "yValue": 7.0
          },
          {
            "xValue": 106.2,
            "yValue": 7.0
          },
          {
            "xValue": 107.1,
            "yValue": 7.0
          },
          {
            "xValue": 108.0,
            "yValue": 7.0
          },
          {
            "xValue": 108.9,
            "yValue": 7.0
          },
          {
            "xValue": 109.8,
            "yValue": 7.0
          },
          {
            "xValue": 110.7,
            "yValue": 7.0
          },
          {
            "xValue": 111.6,
            "yValue": 7.0
          },
          {
            "xValue": 112.5,
            "yValue": 7.0
          },
          {
            "xValue": 113.4,
            "yValue": 7.0
          },
          {
            "xValue": 114.3,
            "yValue": 8.0
          },
          {
            "xValue": 115.2,
            "yValue": 8.0
          },
          {
            "xValue": 116.1,
            "yValue": 8.0
          },
          {
            "xValue": 117.0,
            "yValue": 8.0
          },
          {
            "xValue": 117.9,
            "yValue": 8.0
          },
          {
            "xValue": 118.8,
            "yValue": 8.0
          },
          {
            "xValue": 119.7,
            "yValue": 8.0
          },
          {
            "xValue": 120.6,
            "yValue": 8.0
          },
          {
            "xValue": 121.5,
            "yValue": 8.0
          },
          {
            "xValue": 122.4,
            "yValue": 8.0
          },
          {
            "xValue": 123.3,
            "yValue": 8.0
          },
          {
            "xValue": 124.2,
            "yValue": 9.0
          },
          {
            "xValue": 125.1,
            "yValue": 9.0
          },
          {
            "xValue": 126.0,
            "yValue": 9.0
          },
          {
            "xValue": 126.9,
            "yValue": 9.0
          },
          {
            "xValue": 127.8,
            "yValue": 9.0
          },
          {
            "xValue": 128.7,
            "yValue": 9.0
          },
          {
            "xValue": 129.60001,
            "yValue": 9.0
          },
          {
            "xValue": 130.5,
            "yValue": 9.0
          },
          {
            "xValue": 131.39999,
            "yValue": 9.0
          },
          {
            "xValue": 132.3,
            "yValue": 9.0
          },
          {
            "xValue": 133.2,
            "yValue": 9.0
          },
          {
            "xValue": 134.10001,
            "yValue": 10.0
          }
        ]
      },
      "test_class": "ApiGetHuntClientCompletionStatsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/client-completion-stats?size=100"
    }
  ],
  "ApiGetHuntHandler": [
    {
      "api_method": "GetHunt",
      "method": "GET",
      "response": {
        "allClientsCount": "0",
        "clientLimit": "100",
        "clientRate": 0.0,
        "clientRuleSet": {
          "rules": [
            {
              "regex": {
                "attributeRegex": "GRR",
                "field": "CLIENT_NAME"
              },
              "ruleType": "REGEX"
            }
          ]
        },
        "clientsWithResultsCount": "0",
        "completedClientsCount": "0",
        "crashLimit": "100",
        "crashedClientsCount": "0",
        "created": "42000000",
        "creator": "api_test_user",
        "description": "the hunt",
        "duration": "1209600",
        "failedClientsCount": "0",
        "flowArgs": {
          "@type": "type.googleapis.com/grr.FileFinderArgs",
          "action": {
            "actionType": "DOWNLOAD",
            "download": {
              "collectExtAttrs": false
            }
          },
          "paths": [
            "/tmp/evil.txt"
          ],
          "pathtype": "OS"
        },
        "flowName": "ClientFileFinder",
        "huntId": "H:123456",
        "huntRunnerArgs": {
          "avgCpuSecondsPerClientLimit": "60",
          "avgNetworkBytesPerClientLimit": "10485760",
          "avgResultsPerClientLimit": "1000",
          "clientLimit": "100",
          "clientRate": 0.0,
          "clientRuleSet": {
            "rules": [
              {
                "regex": {
                  "attributeRegex": "GRR",
                  "field": "CLIENT_NAME"
                },
                "ruleType": "REGEX"
              }
            ]
          },
          "crashLimit": "100",
          "description": "the hunt",
          "expiryTime": "1209600",
          "huntName": "GenericHunt",
          "originalObject": {
            "flowReference": {
              "clientId": "C.1111111111111111",
              "flowId": "F:332211"
            },
            "objectType": "FLOW_REFERENCE"
          }
        },
        "huntType": "STANDARD",
        "isRobot": false,
        "name": "GenericHunt",
        "originalObject": {
          "flowReference": {
            "clientId": "C.1111111111111111",
            "flowId": "F:332211"
          },
          "objectType": "FLOW_REFERENCE"
        },
        "remainingClientsCount": "0",
        "resultsCount": "0",
        "state": "PAUSED",
        "stateComment": "",
        "stateReason": "UNKNOWN",
        "totalCpuUsage": 0.0,
        "totalNetUsage": "0",
        "urn": "aff4:/hunts/H:123456"
      },
      "test_class": "ApiGetHuntHandlerFlowCopyRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456"
    },
    {
      "api_method": "GetHunt",
      "method": "GET",
      "response": {
        "allClientsCount": "0",
        "clientLimit": "100",
        "clientRate": 0.0,
        "clientRuleSet": {
          "rules": [
            {
              "regex": {
                "attributeRegex": "GRR",
                "field": "CLIENT_NAME"
              },
              "ruleType": "REGEX"
            }
          ]
        },
        "clientsWithResultsCount": "0",
        "completedClientsCount": "0",
        "crashLimit": "100",
        "crashedClientsCount": "0",
        "created": "42000000",
        "creator": "api_test_user",
        "description": "the hunt",
        "duration": "1209600",
        "failedClientsCount": "0",
        "flowArgs": {
          "@type": "type.googleapis.com/grr.FileFinderArgs",
          "action": {
            "actionType": "DOWNLOAD",
            "download": {
              "collectExtAttrs": false
            }
          },
          "paths": [
            "/tmp/evil.txt"
          ],
          "pathtype": "OS"
        },
        "flowName": "ClientFileFinder",
        "huntId": "H:123456",
        "huntRunnerArgs": {
          "avgCpuSecondsPerClientLimit": "60",
          "avgNetworkBytesPerClientLimit": "10485760",
          "avgResultsPerClientLimit": "1000",
          "clientLimit": "100",
          "clientRate": 0.0,
          "clientRuleSet": {
            "rules": [
              {
                "regex": {
                  "attributeRegex": "GRR",
                  "field": "CLIENT_NAME"
                },
                "ruleType": "REGEX"
              }
            ]
          },
          "crashLimit": "100",
          "description": "the hunt",
          "expiryTime": "1209600",
          "huntName": "GenericHunt",
          "originalObject": {
            "huntReference": {
              "huntId": "H:332211"
            },
            "objectType": "HUNT_REFERENCE"
          }
        },
        "huntType": "STANDARD",
        "isRobot": false,
        "name": "GenericHunt",
        "originalObject": {
          "huntReference": {
            "huntId": "H:332211"
          },
          "objectType": "HUNT_REFERENCE"
        },
        "remainingClientsCount": "0",
        "resultsCount": "0",
        "state": "PAUSED",
        "stateComment": "",
        "stateReason": "UNKNOWN",
        "totalCpuUsage": 0.0,
        "totalNetUsage": "0",
        "urn": "aff4:/hunts/H:123456"
      },
      "test_class": "ApiGetHuntHandlerHuntCopyRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456"
    },
    {
      "api_method": "GetHunt",
      "method": "GET",
      "response": {
        "allClientsCount": "0",
        "clientLimit": "100",
        "clientRate": 0.0,
        "clientRuleSet": {
          "rules": [
            {
              "regex": {
                "attributeRegex": "GRR",
                "field": "CLIENT_NAME"
              },
              "ruleType": "REGEX"
            }
          ]
        },
        "clientsWithResultsCount": "0",
        "completedClientsCount": "0",
        "crashLimit": "100",
        "crashedClientsCount": "0",
        "created": "42000000",
        "creator": "api_test_user",
        "description": "the hunt",
        "duration": "1209600",
        "failedClientsCount": "0",
        "flowArgs": {
          "@type": "type.googleapis.com/grr.FileFinderArgs",
          "action": {
            "actionType": "DOWNLOAD",
            "download": {
              "collectExtAttrs": false
            }
          },
          "paths": [
            "/tmp/evil.txt"
          ],
          "pathtype": "OS"
        },
        "flowName": "ClientFileFinder",
        "huntId": "H:123456",
        "huntRunnerArgs": {
          "avgCpuSecondsPerClientLimit": "60",
          "avgNetworkBytesPerClientLimit": "10485760",
          "avgResultsPerClientLimit": "1000",
          "clientLimit": "100",
          "clientRate": 0.0,
          "clientRuleSet": {
            "rules": [
              {
                "regex": {
                  "attributeRegex": "GRR",
                  "field": "CLIENT_NAME"
                },
                "ruleType": "REGEX"
              }
            ]
          },
          "crashLimit": "100",
          "description": "the hunt",
          "expiryTime": "1209600",
          "huntName": "GenericHunt",
          "originalObject": {}
        },
        "huntType": "STANDARD",
        "isRobot": false,
        "name": "GenericHunt",
        "remainingClientsCount": "0",
        "resultsCount": "0",
        "state": "PAUSED",
        "stateComment": "",
        "stateReason": "UNKNOWN",
        "totalCpuUsage": 0.0,
        "totalNetUsage": "0",
        "urn": "aff4:/hunts/H:123456"
      },
      "test_class": "ApiGetHuntHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456"
    }
  ],
  "ApiGetHuntResultsExportCommandHandler": [
    {
      "api_method": "GetHuntResultsExportCommand",
      "method": "GET",
      "response": {
        "command": "/usr/bin/grr_api_shell 'http://localhost:8000/' --exec_code 'grrapi.Hunt(\"H:123456\").GetFilesArchive().WriteToFile(\"./hunt_results_H_123456.zip\")'"
      },
      "test_class": "ApiGetHuntResultsExportCommandHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/results/export-command"
    }
  ],
  "ApiGetHuntStatsHandler": [
    {
      "api_method": "GetHuntStats",
      "method": "GET",
      "response": {
        "stats": {
          "networkBytesSentStats": {
            "histogram": {
              "bins": [
                {
                  "num": "1",
                  "rangeMaxValue": 16.0
                },
                {
                  "rangeMaxValue": 32.0
                },
                {
                  "rangeMaxValue": 64.0
                },
                {
                  "rangeMaxValue": 128.0
                },
                {
                  "rangeMaxValue": 256.0
                },
                {
                  "rangeMaxValue": 512.0
                },
                {
                  "rangeMaxValue": 1024.0
                },
                {
                  "rangeMaxValue": 2048.0
                },
                {
                  "rangeMaxValue": 4096.0
                },
                {
                  "rangeMaxValue": 8192.0
                },
                {
                  "rangeMaxValue": 16384.0
                },
                {
                  "rangeMaxValue": 32768.0
                },
                {
                  "rangeMaxValue": 65536.0
                },
                {
                  "rangeMaxValue": 131072.0
                },
                {
                  "rangeMaxValue": 262144.0
                },
                {
                  "rangeMaxValue": 524288.0
                },
                {
                  "rangeMaxValue": 1048576.0
                },
                {
                  "rangeMaxValue": 2097152.0
                }
              ]
            },
            "num": "1",
            "stddev": 0.0,
            "sum": 3.0
          },
          "systemCpuStats": {
            "histogram": {
              "bins": [
                {
                  "rangeMaxValue": 0.1
                },
                {
                  "rangeMaxValue": 0.2
                },
                {
                  "rangeMaxValue": 0.30000001
                },
                {
                  "rangeMaxValue": 0.40000001
                },
                {
                  "rangeMaxValue": 0.5
                },
                {
                  "rangeMaxValue": 0.75
                },
                {
                  "rangeMaxValue": 1.0
                },
                {
                  "rangeMaxValue": 1.5
                },
                {
                  "rangeMaxValue": 2.0
                },
                {
                  "num": "1",
                  "rangeMaxValue": 2.5
                },
                {
                  "rangeMaxValue": 3.0
                },
                {
                  "rangeMaxValue": 4.0
                },
                {
                  "rangeMaxValue": 5.0
                },
                {
                  "rangeMaxValue": 6.0
                },
                {
                  "rangeMaxValue": 7.0
                },
                {
                  "rangeMaxValue": 8.0
                },
                {
                  "rangeMaxValue": 9.0
                },
                {
                  "rangeMaxValue": 10.0
                },
                {
                  "rangeMaxValue": 15.0
                },
                {
                  "rangeMaxValue": 20.0
                }
              ]
            },
            "num": "1",
            "stddev": 0.0,
            "sum": 2.0
          },
          "userCpuStats": {
            "histogram": {
              "bins": [
                {
                  "rangeMaxValue": 0.1
                },
                {
                  "rangeMaxValue": 0.2
                },
                {
                  "rangeMaxValue": 0.30000001
                },
                {
                  "rangeMaxValue": 0.40000001
                },
                {
                  "rangeMaxValue": 0.5
                },
                {
                  "rangeMaxValue": 0.75
                },
                {
                  "rangeMaxValue": 1.0
                },
                {
                  "num": "1",
                  "rangeMaxValue": 1.5
                },
                {
                  "rangeMaxValue": 2.0
                },
                {
                  "rangeMaxValue": 2.5
                },
                {
                  "rangeMaxValue": 3.0
                },
                {
                  "rangeMaxValue": 4.0
                },
                {
                  "rangeMaxValue": 5.0
                },
                {
                  "rangeMaxValue": 6.0
                },
                {
                  "rangeMaxValue": 7.0
                },
                {
                  "rangeMaxValue": 8.0
                },
                {
                  "rangeMaxValue": 9.0
                },
                {
                  "rangeMaxValue": 10.0
                },
                {
                  "rangeMaxValue": 15.0
                },
                {
                  "rangeMaxValue": 20.0
                }
              ]
            },
            "num": "1",
            "stddev": 0.0,
            "sum": 1.0
          },
          "worstPerformers": [
            {
              "clientId": "aff4:/C.1000000000000000",
              "cpuUsage": {
                "systemCpuTime": 2.0,
                "userCpuTime": 1.0
              },
              "networkBytesSent": "3",
              "sessionId": "aff4:/C.1000000000000000/H:123456"
            }
          ]
        }
      },
      "test_class": "ApiGetHuntStatsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/stats"
    }
  ],
  "ApiGetLastClientIPAddressHandler": [
    {
      "api_method": "GetLastClientIPAddress",
      "method": "GET",
      "response": {
        "info": "No ip information.",
        "ip": "",
        "status": "UNKNOWN"
      },
      "test_class": "ApiGetLastClientIPAddressHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/last-ip"
    }
  ],
  "ApiGetOwnGrrUserHandler": [
    {
      "api_method": "GetGrrUser",
      "method": "GET",
      "response": {
        "interfaceTraits": {
          "artifactManagerNavItemEnabled": true,
          "browseVirtualFileSystemNavItemEnabled": true,
          "createCronJobActionEnabled": true,
          "createHuntActionEnabled": true,
          "cronJobsNavItemEnabled": true,
          "huntApprovalRequired": false,
          "huntManagerNavItemEnabled": true,
          "manageBinariesNavItemEnabled": true,
          "manageClientFlowsNavItemEnabled": true,
          "modifyClientLabelsActionEnabled": true,
          "searchClientsActionEnabled": true,
          "serverLoadNavItemEnabled": true,
          "settingsNavItemEnabled": true,
          "showStatisticsNavItemEnabled": true,
          "startClientFlowNavItemEnabled": true,
          "uploadArtifactActionEnabled": true,
          "uploadBinaryActionEnabled": true
        },
        "settings": {
          "canaryMode": true,
          "mode": "ADVANCED"
        },
        "userType": "USER_TYPE_STANDARD",
        "username": "api_test_user"
      },
      "test_class": "ApiGetOwnGrrUserHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me"
    },
    {
      "api_method": "GetGrrUser",
      "method": "GET",
      "response": {
        "interfaceTraits": {
          "artifactManagerNavItemEnabled": true,
          "browseVirtualFileSystemNavItemEnabled": true,
          "createCronJobActionEnabled": true,
          "createHuntActionEnabled": true,
          "cronJobsNavItemEnabled": true,
          "huntApprovalRequired": false,
          "huntManagerNavItemEnabled": true,
          "manageBinariesNavItemEnabled": true,
          "manageClientFlowsNavItemEnabled": true,
          "modifyClientLabelsActionEnabled": true,
          "searchClientsActionEnabled": true,
          "serverLoadNavItemEnabled": true,
          "settingsNavItemEnabled": true,
          "showStatisticsNavItemEnabled": true,
          "startClientFlowNavItemEnabled": true,
          "uploadArtifactActionEnabled": true,
          "uploadBinaryActionEnabled": true
        },
        "settings": {
          "canaryMode": true,
          "mode": "ADVANCED"
        },
        "userType": "USER_TYPE_ADMIN",
        "username": "api_test_user"
      },
      "test_class": "ApiGetOwnGrrUserHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me"
    }
  ],
  "ApiGetPendingUserNotificationsCountHandler": [
    {
      "api_method": "GetPendingUserNotificationsCount",
      "method": "GET",
      "response": {
        "count": "2"
      },
      "test_class": "ApiGetPendingUserNotificationsCountHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me/notifications/pending/count"
    }
  ],
  "ApiGetRDFValueDescriptorHandler": [
    {
      "api_method": "GetRDFValueDescriptor",
      "method": "GET",
      "response": {
        "default": {
          "@type": "type.googleapis.com/google.protobuf.UInt64Value",
          "value": "0"
        },
        "doc": "Duration that is (de)serialized with second-precision.\n\n  This class exists for compatibility purposes and to keep certain API fields\n  simple. For most uses, please prefer `Duration` directly.\n  ",
        "kind": "PRIMITIVE",
        "name": "DurationSeconds",
        "parents": [
          "DurationSeconds",
          "Duration",
          "RDFPrimitive",
          "RDFValue",
          "object"
        ]
      },
      "test_class": "ApiGetRDFValueDescriptorHandlerRegressionTest_http_v2",
      "url": "/api/v2/reflection/rdfvalue/DurationSeconds"
    },
    {
      "api_method": "GetRDFValueDescriptor",
      "method": "GET",
      "response": {
        "default": {
          "@type": "type.googleapis.com/grr.ApiFlow"
        },
        "doc": "ApiFlow is used when rendering responses.\n\n  ApiFlow is meant to be more lightweight than automatically generated AFF4\n  representation. It's also meant to contain only the information needed by\n  the UI and and to not expose implementation defails.\n  ",
        "fields": [
          {
            "doc": "Flow URN.",
            "dynamic": false,
            "friendlyName": "Urn",
            "index": 1,
            "name": "urn",
            "repeated": false,
            "type": "SessionID"
          },
          {
            "doc": "Flow id.",
            "dynamic": false,
            "friendlyName": "Flow id",
            "index": 12,
            "name": "flow_id",
            "repeated": false,
            "type": "ApiFlowId"
          },
          {
            "doc": "Client id.",
            "dynamic": false,
            "friendlyName": "Client id",
            "index": 15,
            "name": "client_id",
            "repeated": false,
            "type": "ApiClientId"
          },
          {
            "default": {
              "@type": "type.googleapis.com/google.protobuf.StringValue",
              "value": ""
            },
            "doc": "Flow name.",
            "dynamic": false,
            "friendlyName": "Name",
            "index": 2,
            "name": "name",
            "repeated": false,
            "type": "RDFString"
          },
          {
            "doc": "Flow arguments.",
            "dynamic": true,
            "friendlyName": "Args",
            "index": 3,
            "name": "args",
            "repeated": false
          },
          {
            "doc": "Flow progress info.",
            "dynamic": true,
            "friendlyName": "Progress",
            "index": 16,
            "name": "progress",
            "repeated": false
          },
          {
            "doc": "Metadata about results returned by the flow.",
            "dynamic": false,
            "friendlyName": "Result metadata",
            "index": 17,
            "name": "result_metadata",
            "repeated": false,
            "type": "FlowResultMetadata"
          },
          {
            "doc": "Flow runner arguments.",
            "dynamic": false,
            "friendlyName": "Runner args",
            "index": 4,
            "name": "runner_args",
            "repeated": false,
            "type": "FlowRunnerArgs"
          },
          {
            "allowedValues": [
              {
                "doc": "",
                "name": "RUNNING",
                "value": "0"
              },
              {
                "doc": "",
                "name": "TERMINATED",
                "value": "1"
              },
              {
                "doc": "",
                "name": "ERROR",
                "value": "3"
              },
              {
                "doc": "",
                "name": "CLIENT_CRASHED",
                "value": "4"
              }
            ],
            "default": {
              "@type": "type.googleapis.com/google.protobuf.Int64Value",
              "value": "0"
            },
            "doc": "Current flow state.",
            "dynamic": false,
            "friendlyName": "State",
            "index": 5,
            "name": "state",
            "repeated": false,
            "type": "EnumNamedValue"
          },
          {
            "default": {
              "@type": "type.googleapis.com/google.protobuf.StringValue",
              "value": ""
            },
            "doc": "Describes the error that happened while executing the flow, truncated if over 4 KB.",
            "dynamic": false,
            "friendlyName": "Error description",
            "index": 18,
            "name": "error_description",
            "repeated": false,
            "type": "RDFString"
          },
          {
            "doc": "When flow was created.",
            "dynamic": false,
            "friendlyName": "Started at",
            "index": 6,
            "name": "started_at",
            "repeated": false,
            "type": "RDFDatetime"
          },
          {
            "doc": "When flow was last active.",
            "dynamic": false,
            "friendlyName": "Last active at",
            "index": 7,
            "name": "last_active_at",
            "repeated": false,
            "type": "RDFDatetime"
          },
          {
            "default": {
              "@type": "type.googleapis.com/google.protobuf.StringValue",
              "value": ""
            },
            "doc": "Who started the flow.",
            "dynamic": false,
            "friendlyName": "Creator",
            "index": 8,
            "name": "creator",
            "repeated": false,
            "type": "RDFString"
          },
          {
            "default": {
              "@type": "type.googleapis.com/google.protobuf.UInt64Value",
              "value": "0"
            },
            "doc": "Whether the flow was created by a GRRWorker.",
            "dynamic": false,
            "friendlyName": "Is robot",
            "index": 19,
            "name": "is_robot",
            "repeated": false,
            "type": "bool"
          },
          {
            "doc": "Current flow state data.",
            "dynamic": false,
            "friendlyName": "State data",
            "index": 10,
            "name": "state_data",
            "repeated": false,
            "type": "ApiDataObject"
          },
          {
            "doc": "Current flow store data.",
            "dynamic": false,
            "friendlyName": "Store",
            "index": 20,
            "name": "store",
            "repeated": false
          },
          {
            "doc": "Current flow context.",
            "dynamic": false,
            "friendlyName": "Context",
            "index": 11,
            "name": "context",
            "repeated": false,
            "type": "FlowContext"
          },
          {
            "doc": "Nested flows started by this flow.",
            "dynamic": false,
            "friendlyName": "Nested flows",
            "index": 9,
            "name": "nested_flows",
            "repeated": true,
            "type": "ApiFlow"
          },
          {
            "doc": "If this flow was copied, a reference to the source flow.",
            "dynamic": false,
            "friendlyName": "Original flow",
            "index": 13,
            "labels": [
              "HIDDEN"
            ],
            "name": "original_flow",
            "repeated": false,
            "type": "ApiFlowReference"
          },
          {
            "default": {
              "@type": "type.googleapis.com/google.protobuf.StringValue",
              "value": ""
            },
            "doc": "An error that happened while reading the flow. This is not an error while executing the flow but an internal data issue.",
            "dynamic": false,
            "friendlyName": "Internal error",
            "index": 14,
            "name": "internal_error",
            "repeated": false,
            "type": "RDFString"
          }
        ],
        "kind": "STRUCT",
        "name": "ApiFlow",
        "parents": [
          "ApiFlow",
          "RDFProtoStruct",
          "RDFStruct",
          "RDFValue",
          "object"
        ]
      },
      "test_class": "ApiGetRDFValueDescriptorHandlerRegressionTest_http_v2",
      "url": "/api/v2/reflection/rdfvalue/ApiFlow"
    }
  ],
  "ApiGetReportHandler": [
    {
      "api_method": "GetReport",
      "method": "GET",
      "response": {
        "data": {
          "auditChart": {
            "rows": [
              {
                "action": "USER_ADD",
                "id": 42,
                "timestamp": "1544745600000000",
                "user": "user"
              }
            ],
            "usedFields": [
              "action",
              "client",
              "timestamp",
              "user"
            ]
          },
          "representationType": "AUDIT_CHART"
        },
        "desc": {
          "name": "BarReportPlugin",
          "requiresTimeRange": true,
          "summary": "Reports bars' activity in the given time range.",
          "title": "Bar Activity",
          "type": "SERVER"
        }
      },
      "test_class": "ApiGetReportRegressionTest_http_v2",
      "url": "/api/v2/stats/reports/BarReportPlugin?duration=345600&start_time=1355443200000000"
    }
  ],
  "ApiGetUiConfigHandler": [
    {
      "api_method": "GetUiConfig",
      "method": "GET",
      "response": {
        "defaultAccessDurationSeconds": "2419200",
        "defaultHuntRunnerArgs": {
          "avgCpuSecondsPerClientLimit": "60",
          "avgNetworkBytesPerClientLimit": "10485760",
          "avgResultsPerClientLimit": "1000",
          "clientRate": 20.0,
          "crashLimit": "100"
        },
        "grrVersion": "1.2.3.4",
        "heading": "",
        "helpUrl": "/help/index.html",
        "maxAccessDurationSeconds": "31708800",
        "profileImageUrl": "",
        "reportUrl": "https://github.com/google/grr/issues"
      },
      "test_class": "ApiGetUiConfigHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/ui"
    },
    {
      "api_method": "GetUiConfig",
      "method": "GET",
      "response": {
        "defaultAccessDurationSeconds": "2419200",
        "defaultHuntRunnerArgs": {
          "avgCpuSecondsPerClientLimit": "60",
          "avgNetworkBytesPerClientLimit": "10485760",
          "avgResultsPerClientLimit": "1000",
          "clientRate": 20.0,
          "clientRuleSet": {
            "matchMode": "MATCH_ALL",
            "rules": [
              {
                "label": {
                  "labelNames": [
                    "oh-oh"
                  ],
                  "matchMode": "DOES_NOT_MATCH_ANY"
                },
                "ruleType": "LABEL"
              }
            ]
          },
          "crashLimit": "100"
        },
        "grrVersion": "1.2.3.4",
        "heading": "test heading",
        "helpUrl": "test help url",
        "huntConfig": {
          "defaultExcludeLabels": [
            "oh-oh"
          ]
        },
        "maxAccessDurationSeconds": "31708800",
        "profileImageUrl": "test profile image url",
        "reportUrl": "test report url"
      },
      "test_class": "ApiGetUiConfigHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/ui"
    }
  ],
  "ApiGetVfsFileContentUpdateStateHandler": [
    {
      "api_method": "GetVfsFileContentUpdateState",
      "method": "GET",
      "response": {
        "state": "RUNNING"
      },
      "test_class": "ApiGetVfsFileContentUpdateStateHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-update/ABCDEF"
    },
    {
      "api_method": "GetVfsFileContentUpdateState",
      "method": "GET",
      "response": {
        "state": "FINISHED"
      },
      "test_class": "ApiGetVfsFileContentUpdateStateHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-update/ABCDEF"
    },
    {
      "api_method": "GetVfsFileContentUpdateState",
      "method": "GET",
      "response": {
        "message": "Operation with id ABCDEF not found"
      },
      "test_class": "ApiGetVfsFileContentUpdateStateHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-update/ABCDEF"
    },
    {
      "api_method": "GetVfsFileContentUpdateState",
      "method": "GET",
      "response": {
        "message": "Flow id has incorrect format: `ABCDEF`"
      },
      "test_class": "ApiGetVfsFileContentUpdateStateHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-update/ABCDEF"
    }
  ],
  "ApiGetVfsRefreshOperationStateHandler": [
    {
      "api_method": "GetVfsRefreshOperationState",
      "method": "GET",
      "response": {
        "state": "RUNNING"
      },
      "test_class": "ApiGetVfsRefreshOperationStateHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-refresh-operations/ABCDEF"
    },
    {
      "api_method": "GetVfsRefreshOperationState",
      "method": "GET",
      "response": {
        "state": "FINISHED"
      },
      "test_class": "ApiGetVfsRefreshOperationStateHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-refresh-operations/ABCDEF"
    },
    {
      "api_method": "GetVfsRefreshOperationState",
      "method": "GET",
      "response": {
        "message": "Operation with id ABCDEF not found"
      },
      "test_class": "ApiGetVfsRefreshOperationStateHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-refresh-operations/ABCDEF"
    },
    {
      "api_method": "GetVfsRefreshOperationState",
      "method": "GET",
      "response": {
        "message": "Operation with id ABCDEF not found"
      },
      "test_class": "ApiGetVfsRefreshOperationStateHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-refresh-operations/ABCDEF"
    }
  ],
  "ApiGetVfsTimelineHandler": [
    {
      "api_method": "GetVfsTimeline",
      "method": "GET",
      "response": {
        "items": [
          {
            "action": "MODIFICATION",
            "filePath": "fs/os/Users/中国新闻网新闻中/Shared/a.txt",
            "timestamp": "4000000"
          },
          {
            "action": "MODIFICATION",
            "filePath": "fs/os/Users/中国新闻网新闻中/Shared/a.txt",
            "timestamp": "3000000"
          },
          {
            "action": "MODIFICATION",
            "filePath": "fs/os/Users/中国新闻网新闻中/Shared/a.txt",
            "timestamp": "2000000"
          },
          {
            "action": "MODIFICATION",
            "filePath": "fs/os/Users/中国新闻网新闻中/Shared/a.txt",
            "timestamp": "1000000"
          },
          {
            "action": "MODIFICATION",
            "filePath": "fs/os/Users/中国新闻网新闻中/Shared/a.txt",
            "timestamp": "0"
          }
        ]
      },
      "test_class": "ApiGetVfsTimelineHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-timeline/fs/os/Users/%E4%B8%AD%E5%9B%BD%E6%96%B0%E9%97%BB%E7%BD%91%E6%96%B0%E9%97%BB%E4%B8%AD/Shared"
    }
  ],
  "ApiGrantClientApprovalHandler": [
    {
      "api_method": "GrantClientApproval",
      "method": "POST",
      "response": {
        "approvers": [
          "api_test_user",
          "requestor"
        ],
        "emailMessageId": "<message id stub>",
        "expirationTimeUs": "2419244000000",
        "id": "approval:111111",
        "isValid": true,
        "notifiedUsers": [
          "api_test_user"
        ],
        "reason": "foo",
        "requestor": "requestor",
        "subject": {
          "age": "42000000",
          "agentInfo": {
            "buildTime": "1980-01-01T12:00:00.000000+00:00",
            "clientName": "GRR Monitor",
            "clientVersion": 1234,
            "labels": [
              "label1",
              "label2"
            ]
          },
          "clientId": "C.1000000000000000",
          "hardwareInfo": {
            "biosVersion": "Bios-Version-0",
            "systemManufacturer": "System-Manufacturer-0"
          },
          "interfaces": [
            {
              "addresses": [
                {
                  "addressType": "INET",
                  "packedBytes": "wKgAAA=="
                },
                {
                  "addressType": "INET6",
                  "packedBytes": "IAGrzQAAAAAAAAAAAAAAAA=="
                }
              ],
              "ifname": "if0"
            },
            {
              "ifname": "if1",
              "macAddress": "qrvM3e4A"
            },
            {
              "ifname": "if2",
              "macAddress": "u8zd7v8A"
            }
          ],
          "knowledgeBase": {
            "fqdn": "Host-0.example.com",
            "os": "Linux",
            "users": [
              {
                "username": "user1"
              },
              {
                "username": "user2"
              }
            ]
          },
          "lastSeenAt": "42000000",
          "osInfo": {
            "fqdn": "Host-0.example.com",
            "kernel": "4.0.0",
            "machine": "x86_64",
            "system": "Linux",
            "version": "buster/sid"
          },
          "urn": "aff4:/C.1000000000000000"
        }
      },
      "test_class": "ApiGrantClientApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/requestor/approvals/client/C.1000000000000000/approval:111111/actions/grant"
    }
  ],
  "ApiGrantCronJobApprovalHandler": [
    {
      "api_method": "GrantCronJobApproval",
      "method": "POST",
      "response": {
        "approvers": [
          "api_test_user",
          "requestor"
        ],
        "emailMessageId": "<message id stub>",
        "id": "approval:111111",
        "isValid": true,
        "notifiedUsers": [
          "api_test_user"
        ],
        "reason": "foo",
        "requestor": "requestor",
        "subject": {
          "allowOverruns": false,
          "args": {
            "actionType": "HUNT_CRON_ACTION",
            "huntCronAction": {
              "flowArgs": "",
              "flowName": "Interrogate",
              "huntRunnerArgs": {
                "avgCpuSecondsPerClientLimit": "60",
                "avgNetworkBytesPerClientLimit": "10485760",
                "avgResultsPerClientLimit": "1000",
                "clientRate": 20.0,
                "crashLimit": "100"
              }
            }
          },
          "cronJobId": "CronJob_123456",
          "description": "",
          "enabled": true,
          "frequency": "86400",
          "isFailing": false
        }
      },
      "test_class": "ApiGrantCronJobApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/requestor/approvals/cron-job/CronJob_123456/approval:111111/actions/grant"
    }
  ],
  "ApiGrantHuntApprovalHandler": [
    {
      "api_method": "GrantHuntApproval",
      "method": "POST",
      "response": {
        "approvers": [
          "api_test_user",
          "requestor"
        ],
        "emailMessageId": "<message id stub>",
        "expirationTimeUs": "2419244000000",
        "id": "approval:111111",
        "isValid": true,
        "notifiedUsers": [
          "api_test_user"
        ],
        "reason": "foo",
        "requestor": "requestor",
        "subject": {
          "allClientsCount": "0",
          "clientLimit": "100",
          "clientRate": 0.0,
          "clientRuleSet": {
            "rules": [
              {
                "regex": {
                  "attributeRegex": "GRR",
                  "field": "CLIENT_NAME"
                },
                "ruleType": "REGEX"
              }
            ]
          },
          "clientsWithResultsCount": "0",
          "completedClientsCount": "0",
          "crashLimit": "100",
          "crashedClientsCount": "0",
          "created": "42000000",
          "creator": "api_test_user",
          "description": "a hunt",
          "duration": "1209600",
          "failedClientsCount": "0",
          "flowArgs": {
            "@type": "type.googleapis.com/grr.FileFinderArgs",
            "action": {
              "actionType": "DOWNLOAD",
              "download": {
                "collectExtAttrs": false
              }
            },
            "paths": [
              "/tmp/evil.txt"
            ],
            "pathtype": "OS"
          },
          "flowName": "ClientFileFinder",
          "huntId": "H:123456",
          "huntRunnerArgs": {
            "avgCpuSecondsPerClientLimit": "60",
            "avgNetworkBytesPerClientLimit": "10485760",
            "avgResultsPerClientLimit": "1000",
            "clientLimit": "100",
            "clientRate": 0.0,
            "clientRuleSet": {
              "rules": [
                {
                  "regex": {
                    "attributeRegex": "GRR",
                    "field": "CLIENT_NAME"
                  },
                  "ruleType": "REGEX"
                }
              ]
            },
            "crashLimit": "100",
            "description": "a hunt",
            "expiryTime": "1209600",
            "huntName": "GenericHunt",
            "originalObject": {}
          },
          "huntType": "STANDARD",
          "isRobot": false,
          "name": "GenericHunt",
          "remainingClientsCount": "0",
          "resultsCount": "0",
          "state": "PAUSED",
          "stateComment": "",
          "stateReason": "UNKNOWN",
          "totalCpuUsage": 0.0,
          "totalNetUsage": "0",
          "urn": "aff4:/hunts/H:123456"
        }
      },
      "test_class": "ApiGrantHuntApprovalHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/requestor/approvals/hunt/H:123456/approval:111111/actions/grant"
    }
  ],
  "ApiListAndResetUserNotificationsHandler": [
    {
      "api_method": "ListAndResetUserNotifications",
      "method": "POST",
      "response": {
        "items": [
          {
            "isPending": true,
            "message": "Host-0.example.com: <some other message>",
            "notificationType": "TYPE_VFS_FILE_COLLECTION_FAILED",
            "reference": {
              "type": "VFS",
              "vfs": {
                "clientId": "C.1000000000000000",
                "vfsPath": "fs/os/foo"
              }
            },
            "timestamp": "44000000"
          },
          {
            "isPending": true,
            "message": "Host-0.example.com: <some message>",
            "notificationType": "TYPE_CLIENT_INTERROGATED",
            "reference": {
              "client": {
                "clientId": "C.1000000000000000"
              },
              "type": "CLIENT"
            },
            "timestamp": "42000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListAndResetUserNotificationsHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me/notifications"
    },
    {
      "api_method": "ListAndResetUserNotifications",
      "method": "POST",
      "request_payload": {
        "count": "1",
        "offset": "1"
      },
      "response": {
        "items": [
          {
            "isPending": false,
            "message": "Host-0.example.com: <some message>",
            "notificationType": "TYPE_CLIENT_INTERROGATED",
            "reference": {
              "client": {
                "clientId": "C.1000000000000000"
              },
              "type": "CLIENT"
            },
            "timestamp": "42000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListAndResetUserNotificationsHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me/notifications"
    },
    {
      "api_method": "ListAndResetUserNotifications",
      "method": "POST",
      "request_payload": {
        "filter": "other"
      },
      "response": {
        "items": [
          {
            "isPending": false,
            "message": "Host-0.example.com: <some other message>",
            "notificationType": "TYPE_VFS_FILE_COLLECTION_FAILED",
            "reference": {
              "type": "VFS",
              "vfs": {
                "clientId": "C.1000000000000000",
                "vfsPath": "fs/os/foo"
              }
            },
            "timestamp": "44000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListAndResetUserNotificationsHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me/notifications"
    }
  ],
  "ApiListApproverSuggestionsHandler": [
    {
      "api_method": "ListApproverSuggestions",
      "method": "GET",
      "response": {},
      "test_class": "ApiListApproverSuggestionsHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/approver-suggestions?username_query=foo"
    },
    {
      "api_method": "ListApproverSuggestions",
      "method": "GET",
      "response": {
        "suggestions": [
          {
            "username": "sanchezmorty"
          },
          {
            "username": "sanchezrick"
          },
          {
            "username": "sanchezsummer"
          }
        ]
      },
      "test_class": "ApiListApproverSuggestionsHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/approver-suggestions?username_query=sanchez"
    }
  ],
  "ApiListArtifactsHandler": [
    {
      "api_method": "ListArtifacts",
      "method": "GET",
      "response": {
        "items": [
          {
            "artifact": {
              "doc": "Extract the installed drivers on Windows via WMI.",
              "name": "TestDrivers",
              "sources": [
                {
                  "attributes": {
                    "dat": [
                      {
                        "k": {
                          "string": "query"
                        },
                        "v": {
                          "string": "SELECT * from Win32_SystemDriver"
                        }
                      }
                    ]
                  },
                  "type": "WMI"
                }
              ],
              "supportedOs": [
                "Windows"
              ],
              "urls": [
                "http://www.example.com"
              ]
            },
            "errorMessage": "",
            "isCustom": false
          }
        ],
        "totalCount": "1"
      },
      "test_class": "ApiListArtifactsHandlerRegressionTest_http_v2",
      "url": "/api/v2/artifacts"
    }
  ],
  "ApiListClientApprovalsHandler": [
    {
      "api_method": "ListClientApprovals",
      "method": "GET",
      "response": {
        "items": [
          {
            "approvers": [
              "api_test_user",
              "approver"
            ],
            "emailMessageId": "<message id stub>",
            "expirationTimeUs": "2419245000000",
            "id": "approval:222222",
            "isValid": true,
            "notifiedUsers": [
              "approver"
            ],
            "reason": "Running tests",
            "requestor": "api_test_user",
            "subject": {
              "age": "42000000",
              "agentInfo": {
                "buildTime": "1980-01-01T12:00:00.000000+00:00",
                "clientName": "GRR Monitor",
                "clientVersion": 1234,
                "labels": [
                  "label1",
                  "label2"
                ]
              },
              "clientId": "C.1000000000000001",
              "hardwareInfo": {
                "biosVersion": "Bios-Version-1",
                "systemManufacturer": "System-Manufacturer-1"
              },
              "interfaces": [
                {
                  "addresses": [
                    {
                      "addressType": "INET",
                      "packedBytes": "wKgAAQ=="
                    },
                    {
                      "addressType": "INET6",
                      "packedBytes": "IAGrzQAAAAAAAAAAAAAAAQ=="
                    }
                  ],
                  "ifname": "if0"
                },
                {
                  "ifname": "if1",
                  "macAddress": "qrvM3e4B"
                },
                {
                  "ifname": "if2",
                  "macAddress": "u8zd7v8B"
                }
              ],
              "knowledgeBase": {
                "fqdn": "Host-1.example.com",
                "os": "Linux",
                "users": [
                  {
                    "username": "user1"
                  },
                  {
                    "username": "user2"
                  }
                ]
              },
              "lastSeenAt": "42000000",
              "osInfo": {
                "fqdn": "Host-1.example.com",
                "kernel": "4.0.0",
                "machine": "x86_64",
                "system": "Linux",
                "version": "buster/sid"
              },
              "urn": "aff4:/C.1000000000000001"
            }
          },
          {
            "approvers": [
              "api_test_user"
            ],
            "emailMessageId": "<message id stub>",
            "expirationTimeUs": "2419244000000",
            "id": "approval:111111",
            "isValid": false,
            "isValidMessage": "Need at least 1 additional approver for access.",
            "notifiedUsers": [
              "approver"
            ],
            "reason": "Running tests",
            "requestor": "api_test_user",
            "subject": {
              "age": "42000000",
              "agentInfo": {
                "buildTime": "1980-01-01T12:00:00.000000+00:00",
                "clientName": "GRR Monitor",
                "clientVersion": 1234,
                "labels": [
                  "label1",
                  "label2"
                ]
              },
              "clientId": "C.1000000000000000",
              "hardwareInfo": {
                "biosVersion": "Bios-Version-0",
                "systemManufacturer": "System-Manufacturer-0"
              },
              "interfaces": [
                {
                  "addresses": [
                    {
                      "addressType": "INET",
                      "packedBytes": "wKgAAA=="
                    },
                    {
                      "addressType": "INET6",
                      "packedBytes": "IAGrzQAAAAAAAAAAAAAAAA=="
                    }
                  ],
                  "ifname": "if0"
                },
                {
                  "ifname": "if1",
                  "macAddress": "qrvM3e4A"
                },
                {
                  "ifname": "if2",
                  "macAddress": "u8zd7v8A"
                }
              ],
              "knowledgeBase": {
                "fqdn": "Host-0.example.com",
                "os": "Linux",
                "users": [
                  {
                    "username": "user1"
                  },
                  {
                    "username": "user2"
                  }
                ]
              },
              "lastSeenAt": "42000000",
              "osInfo": {
                "fqdn": "Host-0.example.com",
                "kernel": "4.0.0",
                "machine": "x86_64",
                "system": "Linux",
                "version": "buster/sid"
              },
              "urn": "aff4:/C.1000000000000000"
            }
          }
        ]
      },
      "test_class": "ApiListClientApprovalsHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me/approvals/client"
    },
    {
      "api_method": "ListClientApprovals",
      "method": "GET",
      "response": {
        "items": [
          {
            "approvers": [
              "api_test_user"
            ],
            "emailMessageId": "<message id stub>",
            "expirationTimeUs": "2419244000000",
            "id": "approval:111111",
            "isValid": false,
            "isValidMessage": "Need at least 1 additional approver for access.",
            "notifiedUsers": [
              "approver"
            ],
            "reason": "Running tests",
            "requestor": "api_test_user",
            "subject": {
              "age": "42000000",
              "agentInfo": {
                "buildTime": "1980-01-01T12:00:00.000000+00:00",
                "clientName": "GRR Monitor",
                "clientVersion": 1234,
                "labels": [
                  "label1",
                  "label2"
                ]
              },
              "clientId": "C.1000000000000000",
              "hardwareInfo": {
                "biosVersion": "Bios-Version-0",
                "systemManufacturer": "System-Manufacturer-0"
              },
              "interfaces": [
                {
                  "addresses": [
                    {
                      "addressType": "INET",
                      "packedBytes": "wKgAAA=="
                    },
                    {
                      "addressType": "INET6",
                      "packedBytes": "IAGrzQAAAAAAAAAAAAAAAA=="
                    }
                  ],
                  "ifname": "if0"
                },
                {
                  "ifname": "if1",
                  "macAddress": "qrvM3e4A"
                },
                {
                  "ifname": "if2",
                  "macAddress": "u8zd7v8A"
                }
              ],
              "knowledgeBase": {
                "fqdn": "Host-0.example.com",
                "os": "Linux",
                "users": [
                  {
                    "username": "user1"
                  },
                  {
                    "username": "user2"
                  }
                ]
              },
              "lastSeenAt": "42000000",
              "osInfo": {
                "fqdn": "Host-0.example.com",
                "kernel": "4.0.0",
                "machine": "x86_64",
                "system": "Linux",
                "version": "buster/sid"
              },
              "urn": "aff4:/C.1000000000000000"
            }
          }
        ]
      },
      "test_class": "ApiListClientApprovalsHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me/approvals/client?client_id=C.1000000000000000"
    }
  ],
  "ApiListClientCrashesHandler": [
    {
      "api_method": "ListClientCrashes",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "aff4:/C.1000000000000000",
            "clientInfo": {
              "buildTime": "1980-01-01T12:00:00.000000+00:00",
              "clientName": "GRR Monitor",
              "clientVersion": 1234,
              "labels": [
                "label1",
                "label2"
              ]
            },
            "crashMessage": "Client killed during transaction",
            "crashType": "Client Crash",
            "sessionId": "<some session id>",
            "timestamp": "45000000"
          }
        ],
        "totalCount": "1"
      },
      "test_class": "ApiListClientCrashesHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/crashes"
    },
    {
      "api_method": "ListClientCrashes",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "aff4:/C.1000000000000000",
            "clientInfo": {
              "buildTime": "1980-01-01T12:00:00.000000+00:00",
              "clientName": "GRR Monitor",
              "clientVersion": 1234,
              "labels": [
                "label1",
                "label2"
              ]
            },
            "crashMessage": "Client killed during transaction",
            "crashType": "Client Crash",
            "sessionId": "<some session id>",
            "timestamp": "45000000"
          }
        ],
        "totalCount": "1"
      },
      "test_class": "ApiListClientCrashesHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/crashes?count=1"
    },
    {
      "api_method": "ListClientCrashes",
      "method": "GET",
      "response": {
        "totalCount": "1"
      },
      "test_class": "ApiListClientCrashesHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/crashes?count=1&offset=1"
    }
  ],
  "ApiListClientsLabelsHandler": [
    {
      "api_method": "ListClientsLabels",
      "method": "GET",
      "response": {
        "items": [
          {
            "name": "bar"
          },
          {
            "name": "foo"
          }
        ]
      },
      "test_class": "ApiListClientsLabelsHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/labels"
    }
  ],
  "ApiListCronJobRunsHandler": [
    {
      "api_method": "ListCronJobRuns",
      "method": "GET",
      "response": {
        "items": [
          {
            "cronJobId": "InterrogateClientsCronJob",
            "finishedAt": "44000000",
            "logMessage": "Started hunt ABCDEFGH12.",
            "runId": "F:ABCDEF11",
            "startedAt": "44000000",
            "status": "FINISHED"
          }
        ]
      },
      "test_class": "ApiListCronJobRunsHandlerRegressionTest_http_v2",
      "url": "/api/v2/cron-jobs/InterrogateClientsCronJob/runs"
    }
  ],
  "ApiListCronJobsHandler": [
    {
      "api_method": "ListCronJobs",
      "method": "GET",
      "response": {
        "items": [
          {
            "allowOverruns": false,
            "args": {
              "actionType": "HUNT_CRON_ACTION",
              "huntCronAction": {
                "flowArgs": "",
                "flowName": "ClientFileFinder",
                "huntRunnerArgs": {
                  "avgCpuSecondsPerClientLimit": "60",
                  "avgNetworkBytesPerClientLimit": "10485760",
                  "avgResultsPerClientLimit": "1000",
                  "clientRate": 20.0,
                  "crashLimit": "100"
                }
              }
            },
            "cronJobId": "ClientFileFinder",
            "description": "bar",
            "enabled": true,
            "frequency": "604800",
            "isFailing": false,
            "lifetime": "86400"
          },
          {
            "allowOverruns": false,
            "args": {
              "actionType": "HUNT_CRON_ACTION",
              "huntCronAction": {
                "flowArgs": "",
                "flowName": "FileFinder",
                "huntRunnerArgs": {
                  "avgCpuSecondsPerClientLimit": "60",
                  "avgNetworkBytesPerClientLimit": "10485760",
                  "avgResultsPerClientLimit": "1000",
                  "clientRate": 20.0,
                  "crashLimit": "100"
                }
              }
            },
            "cronJobId": "FileFinder",
            "description": "foo",
            "enabled": false,
            "frequency": "86400",
            "isFailing": false,
            "lifetime": "7200"
          },
          {
            "allowOverruns": false,
            "args": {
              "actionType": "HUNT_CRON_ACTION",
              "huntCronAction": {
                "flowArgs": "",
                "flowName": "ListDirectory",
                "huntRunnerArgs": {
                  "avgCpuSecondsPerClientLimit": "60",
                  "avgNetworkBytesPerClientLimit": "10485760",
                  "avgResultsPerClientLimit": "1000",
                  "clientRate": 20.0,
                  "crashLimit": "100"
                }
              }
            },
            "cronJobId": "ListDirectory",
            "description": "",
            "enabled": true,
            "frequency": "604800",
            "isFailing": true,
            "lastRunStatus": "ERROR",
            "lastRunTime": "230000000",
            "lifetime": "86400"
          }
        ],
        "totalCount": "3"
      },
      "test_class": "ApiListCronJobsHandlerRegressionTest_http_v2",
      "url": "/api/v2/cron-jobs"
    }
  ],
  "ApiListFilesHandler": [
    {
      "api_method": "ListFiles",
      "method": "GET",
      "response": {
        "items": [
          {
            "age": "42000000",
            "isDirectory": false,
            "lastCollected": "42000000",
            "lastCollectedSize": "11",
            "name": "bash",
            "path": "fs/tsk/c/bin/bash"
          },
          {
            "age": "42000000",
            "isDirectory": false,
            "lastCollected": "42000000",
            "lastCollectedSize": "11",
            "name": "rbash",
            "path": "fs/tsk/c/bin/rbash"
          }
        ]
      },
      "test_class": "ApiListFilesHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-index/?file_path=fs%2Ftsk%2Fc%2Fbin"
    },
    {
      "api_method": "ListFiles",
      "method": "GET",
      "response": {
        "items": [
          {
            "age": "42000000",
            "isDirectory": false,
            "lastCollected": "42000000",
            "lastCollectedSize": "11",
            "name": "bash",
            "path": "fs/tsk/c/bin/bash"
          },
          {
            "age": "42000000",
            "isDirectory": false,
            "lastCollected": "42000000",
            "lastCollectedSize": "11",
            "name": "rbash",
            "path": "fs/tsk/c/bin/rbash"
          }
        ]
      },
      "test_class": "ApiListFilesHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-index/?file_path=fs%2Ftsk%2Fc%2Fbin&timestamp=172800000042"
    }
  ],
  "ApiListFlowDescriptorsHandler": [
    {
      "api_method": "ListFlowDescriptors",
      "method": "GET",
      "response": {
        "items": [
          {
            "argsType": "FileFinderArgs",
            "behaviours": [
              "ADVANCED",
              "BASIC"
            ],
            "blockHuntCreation": false,
            "category": "Filesystem",
            "defaultArgs": {
              "@type": "type.googleapis.com/grr.FileFinderArgs"
            },
            "doc": "An alias for ClientFileFinder.\n\n  Call Spec:\n    flow.StartFlow(client_id=client_id, flow_cls=file_finder.FileFinder, paths=paths, pathtype=pathtype, conditions=conditions, action=action, process_non_regular_files=process_non_regular_files, follow_links=follow_links, xdev=xdev, implementation_type=implementation_type)\n\n  Args:\n    action\n      description: \n      type: FileFinderAction\n      default: None\n\n    conditions\n      description: These conditions will be applied to all files that match the path arguments.\n      type: \n      default: None\n\n    follow_links\n      description: Should symbolic links be followed in recursive directory listings.\n      type: bool\n      default: False\n\n    implementation_type\n      description: Force use of an implementation.\n      type: EnumNamedValue\n      default: 0\n\n    paths\n      description: A path to glob that can contain %% expansions.\n      type: \n      default: None\n\n    pathtype\n      description: Path type to glob in.\n      type: EnumNamedValue\n      default: OS\n\n    process_non_regular_files\n      description: Look both into regular files and non-regular files (devices, named pipes, sockets). NOTE: This is very dangerous and should be used with care.\n      type: bool\n      default: 0\n\n    xdev\n      description: Behavior when ecountering device boundaries while doing recursive searches.\n      type: EnumNamedValue\n      default: LOCAL\n",
            "friendlyName": "File Finder",
            "name": "FileFinder"
          },
          {
            "argsType": "ListProcessesArgs",
            "behaviours": [
              "ADVANCED",
              "BASIC"
            ],
            "blockHuntCreation": false,
            "category": "Processes",
            "defaultArgs": {
              "@type": "type.googleapis.com/grr.ListProcessesArgs"
            },
            "doc": "List running processes on a system.\n\n  Call Spec:\n    flow.StartFlow(client_id=client_id, flow_cls=processes.ListProcesses, filename_regex=filename_regex, fetch_binaries=fetch_binaries, connection_states=connection_states, pids=pids)\n\n  Args:\n    connection_states\n      description: Network connection states to match. If a process has any network connections in any status listed here, it will be considered a match\n      type: \n      default: None\n\n    fetch_binaries\n      description: \n      type: bool\n      default: False\n\n    filename_regex\n      description: Regex used to filter the list of processes. The regex is applied to the full path and not only to the filename.\n      type: RegularExpression\n      default: .\n\n    pids\n      description: \n      type: \n      default: None\n",
            "name": "ListProcesses"
          }
        ]
      },
      "test_class": "ApiListFlowDescriptorsHandlerRegressionTest_http_v2",
      "url": "/api/v2/flows/descriptors"
    }
  ],
  "ApiListFlowLogsHandler": [
    {
      "api_method": "ListFlowLogs",
      "method": "GET",
      "response": {
        "items": [
          {
            "flowId": "W:ABCDEF",
            "logMessage": "Sample message: foo.",
            "timestamp": "52000000"
          },
          {
            "flowId": "W:ABCDEF",
            "logMessage": "Sample message: bar.",
            "timestamp": "55000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListFlowLogsHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows/W:ABCDEF/log"
    },
    {
      "api_method": "ListFlowLogs",
      "method": "GET",
      "response": {
        "items": [
          {
            "flowId": "W:ABCDEF",
            "logMessage": "Sample message: foo.",
            "timestamp": "52000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListFlowLogsHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows/W:ABCDEF/log?count=1"
    },
    {
      "api_method": "ListFlowLogs",
      "method": "GET",
      "response": {
        "items": [
          {
            "flowId": "W:ABCDEF",
            "logMessage": "Sample message: bar.",
            "timestamp": "55000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListFlowLogsHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows/W:ABCDEF/log?count=1&offset=1"
    }
  ],
  "ApiListFlowRequestsHandler": [
    {
      "api_method": "ListFlowRequests",
      "method": "GET",
      "response": {
        "items": [
          {
            "requestId": "1",
            "requestState": {
              "clientId": "aff4:/C.1000000000000000",
              "id": 1,
              "nextState": "IterateProcesses",
              "sessionId": "aff4:/C.1000000000000000/flows/W:ABCDEF"
            },
            "responses": [
              {
                "requestId": "1",
                "responseId": "1",
                "sessionId": "aff4:/C.1000000000000000/flows/W:ABCDEF",
                "timestamp": "42000000",
                "type": "MESSAGE"
              },
              {
                "requestId": "1",
                "responseId": "2",
                "sessionId": "aff4:/C.1000000000000000/flows/W:ABCDEF",
                "timestamp": "42000000",
                "type": "STATUS"
              }
            ]
          }
        ]
      },
      "test_class": "ApiListFlowRequestsHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows/W:ABCDEF/requests"
    }
  ],
  "ApiListFlowResultsHandler": [
    {
      "api_method": "ListFlowResults",
      "method": "GET",
      "response": {
        "items": [
          {
            "payload": {
              "@type": "type.googleapis.com/grr.FileFinderResult",
              "statEntry": {
                "pathspec": {
                  "path": "/tmp/evil.txt",
                  "pathtype": "OS"
                },
                "stAtime": "1336469177",
                "stCtime": "1336129892",
                "stDev": "64512",
                "stGid": 5000,
                "stIno": "1063090",
                "stMode": "33184",
                "stMtime": "1336129892",
                "stNlink": "1",
                "stSize": "12",
                "stUid": 139592
              }
            },
            "timestamp": "42000000"
          }
        ]
      },
      "test_class": "ApiListFlowResultsHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows/W:ABCDEF/results?filter=evil"
    },
    {
      "api_method": "ListFlowResults",
      "method": "GET",
      "response": {},
      "test_class": "ApiListFlowResultsHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows/W:ABCDEF/results?filter=benign"
    }
  ],
  "ApiListFlowsHandler": [
    {
      "api_method": "ListFlows",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000000",
            "creator": "api_test_user",
            "flowId": "F:ABCDEF12",
            "isRobot": false,
            "lastActiveAt": "45000000",
            "name": "FlowWithTwoLevelsOfNestedFlows",
            "nestedFlows": [
              {
                "clientId": "C.1000000000000000",
                "creator": "api_test_user",
                "flowId": "F:ABCDEF13",
                "isRobot": false,
                "lastActiveAt": "45000000",
                "name": "FlowWithOneNestedFlow",
                "nestedFlows": [
                  {
                    "clientId": "C.1000000000000000",
                    "creator": "api_test_user",
                    "flowId": "F:ABCDEF14",
                    "isRobot": false,
                    "lastActiveAt": "45000000",
                    "name": "DummyFlow",
                    "runnerArgs": {
                      "clientId": "aff4:/C.1000000000000000",
                      "flowName": "DummyFlow"
                    },
                    "startedAt": "45000000",
                    "state": "TERMINATED",
                    "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF12/F:ABCDEF13/F:ABCDEF14"
                  }
                ],
                "runnerArgs": {
                  "clientId": "aff4:/C.1000000000000000",
                  "flowName": "FlowWithOneNestedFlow"
                },
                "startedAt": "45000000",
                "state": "RUNNING",
                "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF12/F:ABCDEF13"
              }
            ],
            "runnerArgs": {
              "clientId": "aff4:/C.1000000000000000",
              "flowName": "FlowWithTwoLevelsOfNestedFlows"
            },
            "startedAt": "45000000",
            "state": "RUNNING",
            "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF12"
          },
          {
            "clientId": "C.1000000000000000",
            "creator": "GRRWorker",
            "flowId": "F:ABCDEF11",
            "isRobot": true,
            "lastActiveAt": "44000000",
            "name": "ListProcesses",
            "runnerArgs": {
              "clientId": "aff4:/C.1000000000000000",
              "flowName": "ListProcesses"
            },
            "startedAt": "44000000",
            "state": "RUNNING",
            "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF11"
          },
          {
            "clientId": "C.1000000000000000",
            "creator": "api_test_user",
            "flowId": "F:ABCDEF10",
            "isRobot": false,
            "lastActiveAt": "43000000",
            "name": "Interrogate",
            "runnerArgs": {
              "clientId": "aff4:/C.1000000000000000",
              "flowName": "Interrogate"
            },
            "startedAt": "43000000",
            "state": "RUNNING",
            "store": {
              "@type": "type.googleapis.com/grr.InterrogateStore"
            },
            "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF10"
          }
        ]
      },
      "test_class": "ApiListFlowsHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows"
    },
    {
      "api_method": "ListFlows",
      "method": "GET",
      "response": {
        "items": [
          {
            "args": {
              "@type": "type.googleapis.com/grr.EmptyFlowArgs"
            },
            "clientId": "C.1000000000000000",
            "creator": "api_test_user",
            "flowId": "F:ABCDEF12",
            "isRobot": false,
            "lastActiveAt": "45000000",
            "name": "FlowWithTwoLevelsOfNestedFlows",
            "progress": {
              "@type": "type.googleapis.com/grr.DefaultFlowProgress"
            },
            "resultMetadata": {
              "isMetadataSet": true
            },
            "runnerArgs": {
              "clientId": "aff4:/C.1000000000000000",
              "flowName": "FlowWithTwoLevelsOfNestedFlows"
            },
            "startedAt": "45000000",
            "state": "RUNNING",
            "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF12"
          },
          {
            "args": {
              "@type": "type.googleapis.com/grr.ListProcessesArgs"
            },
            "clientId": "C.1000000000000000",
            "creator": "GRRWorker",
            "flowId": "F:ABCDEF11",
            "isRobot": true,
            "lastActiveAt": "44000000",
            "name": "ListProcesses",
            "progress": {
              "@type": "type.googleapis.com/grr.DefaultFlowProgress"
            },
            "resultMetadata": {
              "isMetadataSet": true
            },
            "runnerArgs": {
              "clientId": "aff4:/C.1000000000000000",
              "flowName": "ListProcesses"
            },
            "startedAt": "44000000",
            "state": "RUNNING",
            "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF11"
          },
          {
            "args": {
              "@type": "type.googleapis.com/grr.InterrogateArgs"
            },
            "clientId": "C.1000000000000000",
            "creator": "api_test_user",
            "flowId": "F:ABCDEF10",
            "isRobot": false,
            "lastActiveAt": "43000000",
            "name": "Interrogate",
            "progress": {
              "@type": "type.googleapis.com/grr.DefaultFlowProgress"
            },
            "resultMetadata": {
              "isMetadataSet": true
            },
            "runnerArgs": {
              "clientId": "aff4:/C.1000000000000000",
              "flowName": "Interrogate"
            },
            "startedAt": "43000000",
            "state": "RUNNING",
            "store": {
              "@type": "type.googleapis.com/grr.InterrogateStore"
            },
            "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF10"
          }
        ]
      },
      "test_class": "ApiListFlowsHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows?top_flows_only=1"
    },
    {
      "api_method": "ListFlows",
      "method": "GET",
      "response": {
        "items": [
          {
            "args": {
              "@type": "type.googleapis.com/grr.EmptyFlowArgs"
            },
            "clientId": "C.1000000000000000",
            "creator": "api_test_user",
            "flowId": "F:ABCDEF12",
            "isRobot": false,
            "lastActiveAt": "45000000",
            "name": "FlowWithTwoLevelsOfNestedFlows",
            "progress": {
              "@type": "type.googleapis.com/grr.DefaultFlowProgress"
            },
            "resultMetadata": {
              "isMetadataSet": true
            },
            "runnerArgs": {
              "clientId": "aff4:/C.1000000000000000",
              "flowName": "FlowWithTwoLevelsOfNestedFlows"
            },
            "startedAt": "45000000",
            "state": "RUNNING",
            "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF12"
          },
          {
            "args": {
              "@type": "type.googleapis.com/grr.ListProcessesArgs"
            },
            "clientId": "C.1000000000000000",
            "creator": "GRRWorker",
            "flowId": "F:ABCDEF11",
            "isRobot": true,
            "lastActiveAt": "44000000",
            "name": "ListProcesses",
            "progress": {
              "@type": "type.googleapis.com/grr.DefaultFlowProgress"
            },
            "resultMetadata": {
              "isMetadataSet": true
            },
            "runnerArgs": {
              "clientId": "aff4:/C.1000000000000000",
              "flowName": "ListProcesses"
            },
            "startedAt": "44000000",
            "state": "RUNNING",
            "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF11"
          }
        ]
      },
      "test_class": "ApiListFlowsHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows?min_started_at=44000000&top_flows_only=1"
    },
    {
      "api_method": "ListFlows",
      "method": "GET",
      "response": {
        "items": [
          {
            "args": {
              "@type": "type.googleapis.com/grr.InterrogateArgs"
            },
            "clientId": "C.1000000000000000",
            "creator": "api_test_user",
            "flowId": "F:ABCDEF10",
            "isRobot": false,
            "lastActiveAt": "43000000",
            "name": "Interrogate",
            "progress": {
              "@type": "type.googleapis.com/grr.DefaultFlowProgress"
            },
            "resultMetadata": {
              "isMetadataSet": true
            },
            "runnerArgs": {
              "clientId": "aff4:/C.1000000000000000",
              "flowName": "Interrogate"
            },
            "startedAt": "43000000",
            "state": "RUNNING",
            "store": {
              "@type": "type.googleapis.com/grr.InterrogateStore"
            },
            "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF10"
          }
        ]
      },
      "test_class": "ApiListFlowsHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows?max_started_at=43000000&top_flows_only=1"
    },
    {
      "api_method": "ListFlows",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000000",
            "creator": "api_test_user",
            "flowId": "F:ABCDEF12",
            "isRobot": false,
            "lastActiveAt": "45000000",
            "name": "FlowWithTwoLevelsOfNestedFlows",
            "nestedFlows": [
              {
                "clientId": "C.1000000000000000",
                "creator": "api_test_user",
                "flowId": "F:ABCDEF13",
                "isRobot": false,
                "lastActiveAt": "45000000",
                "name": "FlowWithOneNestedFlow",
                "nestedFlows": [
                  {
                    "clientId": "C.1000000000000000",
                    "creator": "api_test_user",
                    "flowId": "F:ABCDEF14",
                    "isRobot": false,
                    "lastActiveAt": "45000000",
                    "name": "DummyFlow",
                    "runnerArgs": {
                      "clientId": "aff4:/C.1000000000000000",
                      "flowName": "DummyFlow"
                    },
                    "startedAt": "45000000",
                    "state": "TERMINATED",
                    "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF12/F:ABCDEF13/F:ABCDEF14"
                  }
                ],
                "runnerArgs": {
                  "clientId": "aff4:/C.1000000000000000",
                  "flowName": "FlowWithOneNestedFlow"
                },
                "startedAt": "45000000",
                "state": "RUNNING",
                "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF12/F:ABCDEF13"
              }
            ],
            "runnerArgs": {
              "clientId": "aff4:/C.1000000000000000",
              "flowName": "FlowWithTwoLevelsOfNestedFlows"
            },
            "startedAt": "45000000",
            "state": "RUNNING",
            "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF12"
          },
          {
            "clientId": "C.1000000000000000",
            "creator": "api_test_user",
            "flowId": "F:ABCDEF10",
            "isRobot": false,
            "lastActiveAt": "43000000",
            "name": "Interrogate",
            "runnerArgs": {
              "clientId": "aff4:/C.1000000000000000",
              "flowName": "Interrogate"
            },
            "startedAt": "43000000",
            "state": "RUNNING",
            "store": {
              "@type": "type.googleapis.com/grr.InterrogateStore"
            },
            "urn": "aff4:/C.1000000000000000/flows/F:ABCDEF10"
          }
        ]
      },
      "test_class": "ApiListFlowsHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/flows?human_flows_only=1"
    }
  ],
  "ApiListGrrBinariesHandler": [
    {
      "api_method": "ListGrrBinaries",
      "method": "GET",
      "response": {
        "items": [
          {
            "hasValidSignature": true,
            "path": "windows/test.exe",
            "size": "18",
            "timestamp": "42000000",
            "type": "EXECUTABLE"
          },
          {
            "hasValidSignature": true,
            "path": "test",
            "size": "17",
            "timestamp": "43000000",
            "type": "PYTHON_HACK"
          }
        ]
      },
      "test_class": "ApiListGrrBinariesHandlerRegressionTest_http_v2",
      "url": "/api/v2/config/binaries"
    }
  ],
  "ApiListHuntApprovalsHandler": [
    {
      "api_method": "ListHuntApprovals",
      "method": "GET",
      "response": {
        "items": [
          {
            "approvers": [
              "api_test_user"
            ],
            "emailMessageId": "<message id stub>",
            "expirationTimeUs": "2419243000000",
            "id": "approval:112233",
            "isValid": false,
            "isValidMessage": "Need at least 1 additional approver for access.",
            "notifiedUsers": [
              "approver"
            ],
            "reason": "Running tests",
            "requestor": "api_test_user",
            "subject": {
              "allClientsCount": "0",
              "clientLimit": "100",
              "clientRate": 0.0,
              "clientRuleSet": {
                "rules": [
                  {
                    "regex": {
                      "attributeRegex": "GRR",
                      "field": "CLIENT_NAME"
                    },
                    "ruleType": "REGEX"
                  }
                ]
              },
              "clientsWithResultsCount": "0",
              "completedClientsCount": "0",
              "crashLimit": "100",
              "crashedClientsCount": "0",
              "created": "42000000",
              "creator": "api_test_user",
              "description": "foo",
              "duration": "1209600",
              "failedClientsCount": "0",
              "flowArgs": {
                "@type": "type.googleapis.com/grr.FileFinderArgs",
                "action": {
                  "actionType": "DOWNLOAD",
                  "download": {
                    "collectExtAttrs": false
                  }
                },
                "paths": [
                  "/tmp/evil.txt"
                ],
                "pathtype": "OS"
              },
              "flowName": "ClientFileFinder",
              "huntId": "H:123456",
              "huntRunnerArgs": {
                "avgCpuSecondsPerClientLimit": "60",
                "avgNetworkBytesPerClientLimit": "10485760",
                "avgResultsPerClientLimit": "1000",
                "clientLimit": "100",
                "clientRate": 0.0,
                "clientRuleSet": {
                  "rules": [
                    {
                      "regex": {
                        "attributeRegex": "GRR",
                        "field": "CLIENT_NAME"
                      },
                      "ruleType": "REGEX"
                    }
                  ]
                },
                "crashLimit": "100",
                "description": "foo",
                "expiryTime": "1209600",
                "huntName": "GenericHunt",
                "originalObject": {}
              },
              "huntType": "STANDARD",
              "isRobot": false,
              "name": "GenericHunt",
              "remainingClientsCount": "0",
              "resultsCount": "0",
              "state": "PAUSED",
              "stateComment": "",
              "stateReason": "UNKNOWN",
              "totalCpuUsage": 0.0,
              "totalNetUsage": "0",
              "urn": "aff4:/hunts/H:123456"
            }
          }
        ]
      },
      "test_class": "ApiListHuntApprovalsHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me/approvals/hunt"
    }
  ],
  "ApiListHuntClientsHandler": [
    {
      "api_method": "ListHuntClients",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000000",
            "flowId": "H:123456"
          },
          {
            "clientId": "C.1000000000000001",
            "flowId": "H:123456"
          },
          {
            "clientId": "C.1000000000000002",
            "flowId": "H:123456"
          },
          {
            "clientId": "C.1000000000000003",
            "flowId": "H:123456"
          },
          {
            "clientId": "C.1000000000000004",
            "flowId": "H:123456"
          }
        ],
        "totalCount": "5"
      },
      "test_class": "ApiListHuntClientsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/clients/started"
    },
    {
      "api_method": "ListHuntClients",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000000",
            "flowId": "H:123456"
          },
          {
            "clientId": "C.1000000000000001",
            "flowId": "H:123456"
          },
          {
            "clientId": "C.1000000000000002",
            "flowId": "H:123456"
          },
          {
            "clientId": "C.1000000000000003",
            "flowId": "H:123456"
          }
        ],
        "totalCount": "4"
      },
      "test_class": "ApiListHuntClientsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/clients/outstanding"
    },
    {
      "api_method": "ListHuntClients",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000004",
            "flowId": "H:123456"
          }
        ],
        "totalCount": "1"
      },
      "test_class": "ApiListHuntClientsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/clients/completed"
    }
  ],
  "ApiListHuntCrashesHandler": [
    {
      "api_method": "ListHuntCrashes",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "aff4:/C.1000000000000000",
            "clientInfo": {
              "buildTime": "1980-01-01T12:00:00.000000+00:00",
              "clientName": "GRR Monitor",
              "clientVersion": 1234,
              "labels": [
                "label1",
                "label2"
              ]
            },
            "crashMessage": "Client killed during transaction",
            "crashType": "Client Crash",
            "sessionId": "aff4:/hunts/H:123456/C.1000000000000000/H:11223344",
            "timestamp": "45000000"
          }
        ],
        "totalCount": "1"
      },
      "test_class": "ApiListHuntCrashesHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/crashes"
    },
    {
      "api_method": "ListHuntCrashes",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "aff4:/C.1000000000000000",
            "clientInfo": {
              "buildTime": "1980-01-01T12:00:00.000000+00:00",
              "clientName": "GRR Monitor",
              "clientVersion": 1234,
              "labels": [
                "label1",
                "label2"
              ]
            },
            "crashMessage": "Client killed during transaction",
            "crashType": "Client Crash",
            "sessionId": "aff4:/hunts/H:123456/C.1000000000000000/H:11223344",
            "timestamp": "45000000"
          }
        ],
        "totalCount": "1"
      },
      "test_class": "ApiListHuntCrashesHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/crashes?count=1"
    },
    {
      "api_method": "ListHuntCrashes",
      "method": "GET",
      "response": {
        "totalCount": "1"
      },
      "test_class": "ApiListHuntCrashesHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/crashes?count=1&offset=1"
    }
  ],
  "ApiListHuntErrorsHandler": [
    {
      "api_method": "ListHuntErrors",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000000",
            "logMessage": "Error foo.",
            "timestamp": "52000000"
          },
          {
            "backtrace": "<some backtrace>",
            "clientId": "C.1000000000000001",
            "logMessage": "Error bar.",
            "timestamp": "55000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListHuntErrorsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/errors"
    },
    {
      "api_method": "ListHuntErrors",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000000",
            "logMessage": "Error foo.",
            "timestamp": "52000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListHuntErrorsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/errors?count=1"
    },
    {
      "api_method": "ListHuntErrors",
      "method": "GET",
      "response": {
        "items": [
          {
            "backtrace": "<some backtrace>",
            "clientId": "C.1000000000000001",
            "logMessage": "Error bar.",
            "timestamp": "55000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListHuntErrorsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/errors?count=1&offset=1"
    }
  ],
  "ApiListHuntLogsHandler": [
    {
      "api_method": "ListHuntLogs",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000000",
            "flowId": "H:123456",
            "flowName": "GenericHunt",
            "logMessage": "Sample message: foo",
            "timestamp": "52000000"
          },
          {
            "clientId": "C.1000000000000000",
            "flowId": "H:123456",
            "flowName": "GenericHunt",
            "logMessage": "Sample message: bar",
            "timestamp": "55000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListHuntLogsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/log"
    },
    {
      "api_method": "ListHuntLogs",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000000",
            "flowId": "H:123456",
            "flowName": "GenericHunt",
            "logMessage": "Sample message: foo",
            "timestamp": "52000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListHuntLogsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/log?count=1"
    },
    {
      "api_method": "ListHuntLogs",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000000",
            "flowId": "H:123456",
            "flowName": "GenericHunt",
            "logMessage": "Sample message: bar",
            "timestamp": "55000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListHuntLogsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/log?count=1&offset=1"
    }
  ],
  "ApiListHuntResultsHandler": [
    {
      "api_method": "ListHuntResults",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000000",
            "payload": {
              "@type": "type.googleapis.com/grr.DummyFlowResult",
              "flowOutput": "blah1"
            },
            "timestamp": "2000000"
          },
          {
            "clientId": "C.1000000000000000",
            "payload": {
              "@type": "type.googleapis.com/grr.DummyFlowResult",
              "flowOutput": "blah2-foo"
            },
            "timestamp": "43000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListHuntResultsRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/results"
    },
    {
      "api_method": "ListHuntResults",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000000",
            "payload": {
              "@type": "type.googleapis.com/grr.DummyFlowResult",
              "flowOutput": "blah1"
            },
            "timestamp": "2000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListHuntResultsRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/results?count=1"
    },
    {
      "api_method": "ListHuntResults",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000000",
            "payload": {
              "@type": "type.googleapis.com/grr.DummyFlowResult",
              "flowOutput": "blah2-foo"
            },
            "timestamp": "43000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListHuntResultsRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/results?count=1&offset=1"
    },
    {
      "api_method": "ListHuntResults",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientId": "C.1000000000000000",
            "payload": {
              "@type": "type.googleapis.com/grr.DummyFlowResult",
              "flowOutput": "blah2-foo"
            },
            "timestamp": "43000000"
          }
        ],
        "totalCount": "2"
      },
      "test_class": "ApiListHuntResultsRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456/results?filter=foo"
    }
  ],
  "ApiListHuntsHandler": [
    {
      "api_method": "ListHunts",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientLimit": "100",
            "clientRate": 0.0,
            "created": "2000000000",
            "creator": "api_test_user",
            "description": "hunt_1",
            "duration": "1209600",
            "huntId": "H:000001",
            "isRobot": false,
            "state": "STOPPED",
            "urn": "aff4:/hunts/H:000001"
          },
          {
            "clientLimit": "100",
            "clientRate": 0.0,
            "created": "1000000000",
            "creator": "GRRWorker",
            "description": "hunt_0",
            "duration": "1209600",
            "huntId": "H:000000",
            "isRobot": true,
            "state": "PAUSED",
            "urn": "aff4:/hunts/H:000000"
          }
        ]
      },
      "test_class": "ApiListHuntsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts"
    },
    {
      "api_method": "ListHunts",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientLimit": "100",
            "clientRate": 0.0,
            "created": "2000000000",
            "creator": "api_test_user",
            "description": "hunt_1",
            "duration": "1209600",
            "huntId": "H:000001",
            "isRobot": false,
            "state": "STOPPED",
            "urn": "aff4:/hunts/H:000001"
          }
        ]
      },
      "test_class": "ApiListHuntsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts?count=1"
    },
    {
      "api_method": "ListHunts",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientLimit": "100",
            "clientRate": 0.0,
            "created": "1000000000",
            "creator": "GRRWorker",
            "description": "hunt_0",
            "duration": "1209600",
            "huntId": "H:000000",
            "isRobot": true,
            "state": "PAUSED",
            "urn": "aff4:/hunts/H:000000"
          }
        ]
      },
      "test_class": "ApiListHuntsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts?count=1&offset=1"
    },
    {
      "api_method": "ListHunts",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientLimit": "100",
            "clientRate": 0.0,
            "created": "2000000000",
            "creator": "api_test_user",
            "description": "hunt_1",
            "duration": "1209600",
            "huntId": "H:000001",
            "isRobot": false,
            "state": "STOPPED",
            "urn": "aff4:/hunts/H:000001"
          }
        ]
      },
      "test_class": "ApiListHuntsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts?count=2&offset=0&robot_filter=no_robots"
    },
    {
      "api_method": "ListHunts",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientLimit": "100",
            "clientRate": 0.0,
            "created": "1000000000",
            "creator": "GRRWorker",
            "description": "hunt_0",
            "duration": "1209600",
            "huntId": "H:000000",
            "isRobot": true,
            "state": "PAUSED",
            "urn": "aff4:/hunts/H:000000"
          }
        ]
      },
      "test_class": "ApiListHuntsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts?count=2&offset=0&robot_filter=only_robots"
    },
    {
      "api_method": "ListHunts",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientLimit": "100",
            "clientRate": 0.0,
            "created": "2000000000",
            "creator": "api_test_user",
            "description": "hunt_1",
            "duration": "1209600",
            "huntId": "H:000001",
            "isRobot": false,
            "state": "STOPPED",
            "urn": "aff4:/hunts/H:000001"
          },
          {
            "clientLimit": "100",
            "clientRate": 0.0,
            "created": "1000000000",
            "creator": "GRRWorker",
            "description": "hunt_0",
            "duration": "1209600",
            "huntId": "H:000000",
            "isRobot": true,
            "state": "PAUSED",
            "urn": "aff4:/hunts/H:000000"
          }
        ]
      },
      "test_class": "ApiListHuntsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts?count=2&offset=0&robot_filter=unknown"
    },
    {
      "api_method": "ListHunts",
      "method": "GET",
      "response": {
        "items": [
          {
            "clientLimit": "100",
            "clientRate": 0.0,
            "created": "2000000000",
            "creator": "api_test_user",
            "description": "hunt_1",
            "duration": "1209600",
            "huntId": "H:000001",
            "isRobot": false,
            "state": "STOPPED",
            "urn": "aff4:/hunts/H:000001"
          },
          {
            "clientLimit": "100",
            "clientRate": 0.0,
            "created": "1000000000",
            "creator": "GRRWorker",
            "description": "hunt_0",
            "duration": "1209600",
            "huntId": "H:000000",
            "isRobot": true,
            "state": "PAUSED",
            "urn": "aff4:/hunts/H:000000"
          }
        ]
      },
      "test_class": "ApiListHuntsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts?count=2&offset=0&with_state=paused"
    },
    {
      "api_method": "ListHunts",
      "method": "GET",
      "response": {},
      "test_class": "ApiListHuntsHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts?count=2&offset=0&with_state=started"
    }
  ],
  "ApiListKbFieldsHandler": [
    {
      "api_method": "ListKbFields",
      "method": "GET",
      "response": {
        "items": [
          "code_page",
          "current_control_set",
          "domain",
          "environ_allusersappdata",
          "environ_allusersprofile",
          "environ_commonprogramfiles",
          "environ_commonprogramfilesx86",
          "environ_comspec",
          "environ_driverdata",
          "environ_path",
          "environ_profilesdirectory",
          "environ_programdata",
          "environ_programfiles",
          "environ_programfilesx86",
          "environ_systemdrive",
          "environ_systemroot",
          "environ_temp",
          "environ_windir",
          "fqdn",
          "hostname",
          "os",
          "os_major_version",
          "os_minor_version",
          "os_release",
          "time_zone",
          "users.appdata",
          "users.cookies",
          "users.desktop",
          "users.full_name",
          "users.gid",
          "users.gids",
          "users.homedir",
          "users.internet_cache",
          "users.last_logon",
          "users.localappdata",
          "users.localappdata_low",
          "users.personal",
          "users.pw_entry",
          "users.recent",
          "users.shell",
          "users.sid",
          "users.startup",
          "users.temp",
          "users.uid",
          "users.userdomain",
          "users.username",
          "users.userprofile"
        ]
      },
      "test_class": "ApiListKbFieldsHandlerTest_http_v2",
      "url": "/api/v2/clients/kb-fields"
    }
  ],
  "ApiListKnownEncodingsHandler": [
    {
      "api_method": "ListKnownEncodings",
      "method": "GET",
      "response": {
        "encodings": [
          "BASE64_CODEC",
          "BIG5",
          "BIG5HKSCS",
          "CP037",
          "CP1006",
          "CP1026",
          "CP1140",
          "CP1250",
          "CP1251",
          "CP1252",
          "CP1253",
          "CP1254",
          "CP1255",
          "CP1256",
          "CP1257",
          "CP1258",
          "CP424",
          "CP437",
          "CP500",
          "CP737",
          "CP775",
          "CP850",
          "CP852",
          "CP855",
          "CP856",
          "CP857",
          "CP860",
          "CP861",
          "CP862",
          "CP863",
          "CP864",
          "CP865",
          "CP866",
          "CP869",
          "CP874",
          "CP875",
          "CP932",
          "CP949",
          "CP950",
          "IDNA",
          "ROT_13",
          "UTF_16",
          "UTF_16_BE",
          "UTF_16_LE",
          "UTF_32",
          "UTF_32_BE",
          "UTF_32_LE",
          "UTF_7",
          "UTF_8",
          "UTF_8_SIG",
          "UU_CODEC",
          "ZLIB_CODEC"
        ]
      },
      "test_class": "ApiListKnownEncodingsHandlerRegressionTest_http_v2",
      "url": "/api/v2/reflection/file-encodings"
    }
  ],
  "ApiListOutputPluginDescriptorsHandler": [
    {
      "api_method": "ListOutputPluginDescriptors",
      "method": "GET",
      "response": {
        "items": [
          {
            "description": "Output ZIP archive with CSV files.",
            "friendlyName": "CSV (zipped)",
            "name": "CSVInstantOutputPlugin",
            "pluginType": "INSTANT"
          },
          {
            "argsType": "EmailOutputPluginArgs",
            "description": "Send an email for each result.",
            "name": "EmailOutputPlugin",
            "pluginType": "LEGACY"
          }
        ]
      },
      "test_class": "ApiListOutputPluginDescriptorsHandlerTest_http_v2",
      "url": "/api/v2/output-plugins/all"
    }
  ],
  "ApiListPendingUserNotificationsHandler": [
    {
      "api_method": "ListPendingUserNotifications",
      "method": "GET",
      "response": {
        "items": [
          {
            "isPending": true,
            "message": "Host-0.example.com: <some message>",
            "notificationType": "TYPE_CLIENT_INTERROGATED",
            "reference": {
              "client": {
                "clientId": "C.1000000000000000"
              },
              "type": "CLIENT"
            },
            "timestamp": "42000000"
          },
          {
            "isPending": true,
            "message": "Host-0.example.com: <some other message>",
            "notificationType": "TYPE_VFS_FILE_COLLECTION_FAILED",
            "reference": {
              "type": "VFS",
              "vfs": {
                "clientId": "C.1000000000000000",
                "vfsPath": "fs/os/foo"
              }
            },
            "timestamp": "44000000"
          }
        ]
      },
      "test_class": "ApiListPendingUserNotificationsHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me/notifications/pending"
    },
    {
      "api_method": "ListPendingUserNotifications",
      "method": "GET",
      "response": {
        "items": [
          {
            "isPending": true,
            "message": "Host-0.example.com: <some other message>",
            "notificationType": "TYPE_VFS_FILE_COLLECTION_FAILED",
            "reference": {
              "type": "VFS",
              "vfs": {
                "clientId": "C.1000000000000000",
                "vfsPath": "fs/os/foo"
              }
            },
            "timestamp": "44000000"
          }
        ]
      },
      "test_class": "ApiListPendingUserNotificationsHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me/notifications/pending?timestamp=43000000"
    },
    {
      "api_method": "ListPendingUserNotifications",
      "method": "GET",
      "response": {},
      "test_class": "ApiListPendingUserNotificationsHandlerRegressionTest_http_v2",
      "url": "/api/v2/users/me/notifications/pending?timestamp=44000000"
    }
  ],
  "ApiListReportsHandler": [
    {
      "api_method": "ListReports",
      "method": "GET",
      "response": {
        "reports": [
          {
            "desc": {
              "name": "FooReportPlugin",
              "requiresTimeRange": false,
              "summary": "Reports all foos.",
              "title": "Foo",
              "type": "CLIENT"
            }
          },
          {
            "desc": {
              "name": "BarReportPlugin",
              "requiresTimeRange": true,
              "summary": "Reports bars' activity in the given time range.",
              "title": "Bar Activity",
              "type": "SERVER"
            }
          }
        ]
      },
      "test_class": "ApiListReportsHandlerRegressionTest_http_v2",
      "url": "/api/v2/stats/reports"
    }
  ],
  "ApiModifyCronJobHandler": [
    {
      "api_method": "ModifyCronJob",
      "method": "PATCH",
      "request_payload": {
        "enabled": true
      },
      "response": {
        "allowOverruns": false,
        "args": {
          "actionType": "HUNT_CRON_ACTION",
          "huntCronAction": {
            "flowArgs": "",
            "flowName": "FileFinder",
            "huntRunnerArgs": {
              "avgCpuSecondsPerClientLimit": "60",
              "avgNetworkBytesPerClientLimit": "10485760",
              "avgResultsPerClientLimit": "1000",
              "clientRate": 20.0,
              "crashLimit": "100"
            }
          }
        },
        "cronJobId": "FileFinder",
        "description": "",
        "enabled": true,
        "frequency": "86400",
        "isFailing": false,
        "lifetime": "604800"
      },
      "test_class": "ApiModifyCronJobRegressionTest_http_v2",
      "url": "/api/v2/cron-jobs/FileFinder"
    },
    {
      "api_method": "ModifyCronJob",
      "method": "PATCH",
      "request_payload": {
        "enabled": false
      },
      "response": {
        "allowOverruns": false,
        "args": {
          "actionType": "HUNT_CRON_ACTION",
          "huntCronAction": {
            "flowArgs": "",
            "flowName": "ClientFileFinder",
            "huntRunnerArgs": {
              "avgCpuSecondsPerClientLimit": "60",
              "avgNetworkBytesPerClientLimit": "10485760",
              "avgResultsPerClientLimit": "1000",
              "clientRate": 20.0,
              "crashLimit": "100"
            }
          }
        },
        "cronJobId": "ClientFileFinder",
        "description": "",
        "enabled": false,
        "frequency": "86400",
        "isFailing": false,
        "lifetime": "604800"
      },
      "test_class": "ApiModifyCronJobRegressionTest_http_v2",
      "url": "/api/v2/cron-jobs/ClientFileFinder"
    }
  ],
  "ApiModifyHuntHandler": [
    {
      "api_method": "ModifyHunt",
      "method": "PATCH",
      "request_payload": {
        "clientLimit": "142"
      },
      "response": {
        "allClientsCount": "0",
        "clientLimit": "142",
        "clientRate": 0.0,
        "clientRuleSet": {
          "rules": [
            {
              "regex": {
                "attributeRegex": "GRR",
                "field": "CLIENT_NAME"
              },
              "ruleType": "REGEX"
            }
          ]
        },
        "clientsWithResultsCount": "0",
        "completedClientsCount": "0",
        "crashLimit": "100",
        "crashedClientsCount": "0",
        "created": "42000000",
        "creator": "api_test_user",
        "description": "the hunt",
        "duration": "1209600",
        "failedClientsCount": "0",
        "flowArgs": {
          "@type": "type.googleapis.com/grr.FileFinderArgs",
          "action": {
            "actionType": "DOWNLOAD",
            "download": {
              "collectExtAttrs": false
            }
          },
          "paths": [
            "/tmp/evil.txt"
          ],
          "pathtype": "OS"
        },
        "flowName": "ClientFileFinder",
        "huntId": "H:123456",
        "huntRunnerArgs": {
          "avgCpuSecondsPerClientLimit": "60",
          "avgNetworkBytesPerClientLimit": "10485760",
          "avgResultsPerClientLimit": "1000",
          "clientLimit": "142",
          "clientRate": 0.0,
          "clientRuleSet": {
            "rules": [
              {
                "regex": {
                  "attributeRegex": "GRR",
                  "field": "CLIENT_NAME"
                },
                "ruleType": "REGEX"
              }
            ]
          },
          "crashLimit": "100",
          "description": "the hunt",
          "expiryTime": "1209600",
          "huntName": "GenericHunt",
          "originalObject": {}
        },
        "huntType": "STANDARD",
        "isRobot": false,
        "name": "GenericHunt",
        "remainingClientsCount": "0",
        "resultsCount": "0",
        "state": "PAUSED",
        "stateComment": "",
        "stateReason": "UNKNOWN",
        "totalCpuUsage": 0.0,
        "totalNetUsage": "0",
        "urn": "aff4:/hunts/H:123456"
      },
      "test_class": "ApiModifyHuntHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456"
    },
    {
      "api_method": "ModifyHunt",
      "method": "PATCH",
      "request_payload": {
        "state": "STOPPED"
      },
      "response": {
        "allClientsCount": "0",
        "clientLimit": "142",
        "clientRate": 0.0,
        "clientRuleSet": {
          "rules": [
            {
              "regex": {
                "attributeRegex": "GRR",
                "field": "CLIENT_NAME"
              },
              "ruleType": "REGEX"
            }
          ]
        },
        "clientsWithResultsCount": "0",
        "completedClientsCount": "0",
        "crashLimit": "100",
        "crashedClientsCount": "0",
        "created": "42000000",
        "creator": "api_test_user",
        "description": "the hunt",
        "duration": "1209600",
        "failedClientsCount": "0",
        "flowArgs": {
          "@type": "type.googleapis.com/grr.FileFinderArgs",
          "action": {
            "actionType": "DOWNLOAD",
            "download": {
              "collectExtAttrs": false
            }
          },
          "paths": [
            "/tmp/evil.txt"
          ],
          "pathtype": "OS"
        },
        "flowName": "ClientFileFinder",
        "huntId": "H:123456",
        "huntRunnerArgs": {
          "avgCpuSecondsPerClientLimit": "60",
          "avgNetworkBytesPerClientLimit": "10485760",
          "avgResultsPerClientLimit": "1000",
          "clientLimit": "142",
          "clientRate": 0.0,
          "clientRuleSet": {
            "rules": [
              {
                "regex": {
                  "attributeRegex": "GRR",
                  "field": "CLIENT_NAME"
                },
                "ruleType": "REGEX"
              }
            ]
          },
          "crashLimit": "100",
          "description": "the hunt",
          "expiryTime": "1209600",
          "huntName": "GenericHunt",
          "originalObject": {}
        },
        "huntType": "STANDARD",
        "isRobot": false,
        "name": "GenericHunt",
        "remainingClientsCount": "0",
        "resultsCount": "0",
        "state": "STOPPED",
        "stateComment": "Cancelled by user",
        "stateReason": "TRIGGERED_BY_USER",
        "totalCpuUsage": 0.0,
        "totalNetUsage": "0",
        "urn": "aff4:/hunts/H:123456"
      },
      "test_class": "ApiModifyHuntHandlerRegressionTest_http_v2",
      "url": "/api/v2/hunts/H:123456"
    }
  ],
  "ApiSearchClientsHandler": [
    {
      "api_method": "SearchClients",
      "method": "GET",
      "response": {
        "items": [
          {
            "age": "42000000",
            "agentInfo": {
              "buildTime": "1980-01-01T12:00:00.000000+00:00",
              "clientName": "GRR Monitor",
              "clientVersion": 1234,
              "labels": [
                "label1",
                "label2"
              ]
            },
            "clientId": "C.1000000000000000",
            "hardwareInfo": {
              "biosVersion": "Bios-Version-0",
              "systemManufacturer": "System-Manufacturer-0"
            },
            "interfaces": [
              {
                "addresses": [
                  {
                    "addressType": "INET",
                    "packedBytes": "wKgAAA=="
                  },
                  {
                    "addressType": "INET6",
                    "packedBytes": "IAGrzQAAAAAAAAAAAAAAAA=="
                  }
                ],
                "ifname": "if0"
              },
              {
                "ifname": "if1",
                "macAddress": "qrvM3e4A"
              },
              {
                "ifname": "if2",
                "macAddress": "u8zd7v8A"
              }
            ],
            "knowledgeBase": {
              "fqdn": "Host-0.example.com",
              "os": "Linux",
              "users": [
                {
                  "username": "user1"
                },
                {
                  "username": "user2"
                }
              ]
            },
            "lastSeenAt": "42000000",
            "osInfo": {
              "fqdn": "Host-0.example.com",
              "kernel": "4.0.0",
              "machine": "x86_64",
              "system": "Linux",
              "version": "buster/sid"
            },
            "urn": "aff4:/C.1000000000000000"
          }
        ]
      },
      "test_class": "ApiSearchClientsHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients?query=C.1000000000000000"
    }
  ],
  "ApiUpdateVfsFileContentHandler": [
    {
      "api_method": "UpdateVfsFileContent",
      "method": "POST",
      "request_payload": {
        "filePath": "fs/os/c/bin/bash"
      },
      "response": {
        "operationId": "ABCDEF"
      },
      "test_class": "ApiUpdateVfsFileContentHandlerRegressionTest_http_v2",
      "url": "/api/v2/clients/C.1000000000000000/vfs-update"
    }
  ]
}