Most recent failure [on master](https://cirrus-ci.com/task/6073953614561280) (https://github.com/bitcoin/bitcoin/commit/567670bec5ecf9bc252e91370382be53fd81ccee):
```bash
 test  2021-06-23T11:18:18.969000Z TestFramework.node0 (DEBUG): Node stopped 
 test  2021-06-23T11:18:18.969000Z TestFramework.bitcoincli (DEBUG): Running bitcoin-cli ['-rpcwait', '-rpcwaittimeout=5', 'echo'] 
 test  2021-06-23T11:18:23.001000Z TestFramework (ERROR): Assertion failed 
                                   Traceback (most recent call last):
                                     File "/tmp/cirrus-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/test/functional/test_framework/test_framework.py", line 128, in main
                                       self.run_test()
                                     File "/tmp/cirrus-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/test/functional/interface_bitcoin_cli.py", line 257, in run_test
                                       assert_greater_than_or_equal(time.time(), start_time + 5)
                                     File "/tmp/cirrus-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu/test/functional/test_framework/util.py", line 61, in assert_greater_than_or_equal
                                       raise AssertionError("%s < %s" % (str(thing1), str(thing2)))
                                   AssertionError: 1624447103.0015192 < 1624447103.969648
 test  2021-06-23T11:18:23.004000Z TestFramework (DEBUG): Closing down network thread 
 test  2021-06-23T11:18:23.055000Z TestFramework (INFO): Stopping nodes 
```
"Could not locate RPC credentials. No authentication cookie could be found, and RPC password is not set.  See -rpcpassword and -stdinrpcpass.  Configuration file: (%s)",
                GetConfigFile(gArgs.GetArg("-conf", BITCOIN_CONF_FILENAME)).string()));
        } else {
            throw std::runtime_error("Authorization failed: Incorrect rpcuser or rpcpassword");
        }
    } else if (response.status == HTTP_SERVICE_UNAVAILABLE) {
        throw std::runtime_error(strprintf("Server response: %s", response.body));
    } else if (response.status >= 400 && response.status != HTTP_BAD_REQUEST && response.status != HTTP_NOT_FOUND && response.status != HTTP_INTERNAL_SERVER_ERROR)
        throw std::runtime_error(strprintf("server returned HTTP error %d", response.status));
    else if (response.body.empty())
        throw std::runtime_error("no response from server");
    
    UniValue valReply(UniValue::VSTR);
    if (!valReply.read(response.body))
        throw std::runtime_error("couldn't parse reply from server");
    const UniValue reply = rh->ProcessReply(valReply);
    if (reply.empty())
        throw std::runtime_error("expected reply to have result, error and id properties");
    return reply;
}
/**
 * ConnectAndCallRPC wraps CallRPC with -rpcwait and an exception handler.
 *
 * @param[in] rh         Pointer to RequestHandler.
 * @param[in] strMethod  Reference to const string method to forward to CallRPC.
 * @param[in] rpcwallet  Reference to const optional string wallet name to forward to CallRPC.
 * @returns the RPC response as a UniValue object.
 * @throws a CConnectionFailed std::runtime_error if connection failed or RPC server still in warmup.
 */
static UniValue ConnectAndCallRPC(BaseRequestHandler* rh, const std::string& strMethod, const std::vector<std::string>& args, const std::optional<std::string>& rpcwallet = {})