Troubleshooting

Why isn’t Hoverfly matching my request?

When Hoverfly cannot match a response to an incoming request, it will return information on the closest match:

Hoverfly Error!

There was an error when matching

Got error: Could not find a match for request, create or record a valid matcher first!

The following request was made, but was not matched by Hoverfly:

{
    "Path": "/closest-miss",
    "Method": "GET",
    "Destination": "destination.com",
    "Scheme": "http",
    "Query": "",
    "Body": "",
    "Headers": {
        "Accept-Encoding": [
            "gzip"
        ],
        "User-Agent": [
            "Go-http-client/1.1"
        ]
    }
}

The matcher which came closest was:

{
    "path": [
        {
            "matcher": "exact",
            "value": "/closest-miss"
        }
    ],
    "destination": [
        {
            "matcher": "exact",
            "value": "destination.com"
        }
    ],
    "body": [
        {
            "matcher": "exact",
            "value": "body"
        }
    ]
}

But it did not match on the following fields:

[body]

Which if hit would have given the following response:

{
    "status": 200,
    "body": "",
    "encodedBody": false,
    "headers": null
}`

Here, you can see which fields did not match. In this case, it was the body. You can also view this information by running hoverctl logs.

Why isn’t Hoverfly returning the closest match when it cannot match a request?

Hoverfly will only provide this information when the matching strategy is set to strongest match (the default). If you are using the first match matching strategy, the closet match information will not be returned.

How can I view the Hoverfly logs?

hoverctl logs

Why does my simulation have a deprecatedQuery field?

Older simulations that have been upgraded through newer versions of Hoverfly may now contain a field on requests called deprecatedQuery. With the v5 simulation schema, the request query field was updated to more fully represent request query paramters. This involves storing queries based on query keys, similarly to how headers are stored in a simulation.

Currently the deprecatedQuery field will work and works alongside the query field and support for this field will eventually be dropped.

If you have deprecatedQuery field, you should remove it by splitting it by query keys.

"deprecatedQuery": "page=20&pageSize=15"
"query": {
    "page": [
        {
            "matcher": "exact",
            "value": "20"
        }
    ],
    "pageSize": [
        {
            "matcher": "exact",
            "value": "15"
        }
    ],
}

If you cannot update your deprecatedQuery from your simulation for a technical reason, feel free to raise an issue on Hoverfly.

Why am I not able to access my Hoverfly remotely?

That’s because Hoverfly is bind to loopback interface by default, meaning that you can only access to it on localhost. To access it remotely, you can specify the IP address it listens on. For example, setting 0.0.0.0 to listen on all network interfaces.

hoverfly -listen-on-host 0.0.0.0

My simulation file is very large because of response bodies, what can I do with that?

You can move those response bodies into separate files and specify bodyFile in the response instead of body. Please refer to Request Responses Pairs.