    @Test(timeout = 30000)
    public void failRandomQuarterOfNodes() throws IOException, InterruptedException {

        useStaticFd = true;
        final int numNodes = 50;
        final int numFailingNodes = 12;
        final Endpoint seedEndpoint = Utils.hostFromParts("127.0.0.1", basePort);
        createCluster(numNodes, seedEndpoint);
        verifyCluster(numNodes);
        // Fail the first 3 nodes.
        final Set<Endpoint> failingNodes = getRandomHosts(numFailingNodes);
        staticFds.values().forEach(e -> e.addFailedNodes(failingNodes));
        failingNodes.forEach(h -> instances.remove(h).shutdown());
        waitAndVerifyAgreement(numNodes - failingNodes.size(), 20, 1000);
        // Nodes do not actually shutdown(), but are detected faulty. The faulty nodes have active
        // cluster instances and identify themselves as kicked out.
        verifyNumClusterInstances(numNodes - failingNodes.size());
    }