'Even if the convergence fails, a new iteration is started anyway.'

@validate_logging((lambda test_case, logger: test_case.assertEqual(len(logger.flush_tracebacks(RuntimeError)), 1)))
def test_convergence_error_start_new_iteration(self, logger):

    local_state = NodeState(hostname=u'192.0.2.123')
    configuration = Deployment(nodes=frozenset([to_node(local_state)]))
    state = DeploymentState(nodes=[local_state])
    action = ControllableAction(result=fail(RuntimeError('Failed    action')))
    deployer = ControllableDeployer(local_state.hostname, [succeed(local_state), Deferred()], [action])
    client = self.make_amp_client([local_state])
    reactor = Clock()
    loop = build_convergence_loop_fsm(reactor, deployer)
    self.patch(loop, 'logger', logger)
    loop.receive(_ClientStatusUpdate(client=client, configuration=configuration, state=state))
    reactor.advance(_UNCONVERGED_DELAY)
    self.assertEqual(len(deployer.local_states), 0)
