'Verify that calling cancel multiple times on a deferred with a
canceller that does not errback results in a
L{defer.CancelledError} and that subsequent calls to cancel do not
cause an error and that after all that, the canceller was only
called once.'

def test_cancellerMultipleCancel(self):

    def cancel(d):
        self.cancellerCallCount += 1
    d = defer.Deferred(canceller=cancel)
    d.addCallbacks(self._callback, self._errback)
    d.cancel()
    self.assertEqual(self.errbackResults.type, defer.CancelledError)
    currentFailure = self.errbackResults
    d.cancel()
    self.assertIs(currentFailure, self.errbackResults)
    self.assertEqual(self.cancellerCallCount, 1)
