'Send a ``ClusterStatusCommand``.
:param initial_config: The expected configuration that the agent
already has.
:param initial_state: The expected state that the agent already has.
:param after_config: The desired resulting configuration.
:param after_state: The desired resulting state.
:returns: The ``Deferred`` returned from the ``callRemote`` call.'

def _send_cluster_status_diff(self, initial_config, initial_state, after_config, after_state):

    configuration_diff = create_diff(initial_config, after_config)
    state_diff = create_diff(initial_state, after_state)
    return self.server.callRemote(ClusterStatusDiffCommand, configuration_diff=configuration_diff, start_configuration_generation=make_generation_hash(initial_config), end_configuration_generation=make_generation_hash(after_config), state_diff=state_diff, start_state_generation=make_generation_hash(initial_state), end_state_generation=make_generation_hash(after_state), eliot_context=TEST_ACTION)
