'Notifications of NTFY_TUNNEL NTFY_REMOVE should report candidates even though they are no longer tracked
The notification should still have a valid Candidate object for the reference of third parties.
For example, Dispersy might determine a Candidate is no longer needed for the TunnelCommunity, but the
TrustChainCommunity will still be interested in the Candidate object tied to a removed circuit.'

@blocking_call_on_reactor_thread
def test_reconstruct_candidate_on_tunnel_remove(self):

    class MockNotifier(object, ):
        def __init__(self):
            self.candidate = None
            self.called = False
        def notify(self, subject, change_type, tunnel, candidate):
            self.called = True
            self.candidate = candidate
    tunnel_crypto = object.__new__(TunnelCrypto)
    self.tunnel_community.notifier = MockNotifier()
    circuit = Circuit(42L)
    circuit.first_hop = ('127.0.0.1', 1337)
    hop = Hop(tunnel_crypto.generate_key(u'curve25519').pub())
    circuit.add_hop(hop)
    circuit.mid = self.tunnel_community.dispersy.get_member(public_key=hop.node_public_key).mid.encode('HEX')
    self.tunnel_community.create_or_update_walkcandidate(circuit.first_hop, circuit.first_hop, circuit.first_hop, True, u'unknown')
    self.tunnel_community.circuits[42] = circuit
    self.tunnel_community.remove_candidate(circuit.first_hop)
    self.tunnel_community.remove_circuit(42)
    self.assertTrue(self.tunnel_community.notifier.called)
    self.assertNotEqual(self.tunnel_community.notifier.candidate, None)
