def test_verified_delete_retries_verification_until_timeout(self): """ If the verification fails until the timeout, log a failure and do not keep trying to verify. """ clock = Clock() self.treq.delete.return_value = succeed( mock.Mock(spec=['code'], code=204)) self.treq.content.side_effect = lambda *args: succeed("") self.treq.head.side_effect = lambda *args, **kwargs: succeed( mock.Mock(spec=['code'], code=204)) verified_delete(self.log, 'http://url/', 'my-auth-token', 'serverId', interval=5, timeout=11, clock=clock) clock.advance(11) self.treq.head.assert_has_calls([ mock.call('http://url/servers/serverId', headers=expected_headers), mock.call('http://url/servers/serverId', headers=expected_headers) ]) self.log.err.assert_called_once_with(CheckFailure(TimedOutError), instance_id='serverId') # the loop has stopped clock.advance(5) self.assertEqual(self.treq.head.call_count, 2)
def test_verified_delete_retries_verification_until_timeout(self): """ If the verification fails until the timeout, log a failure and do not keep trying to verify. """ clock = Clock() self.treq.delete.return_value = succeed( mock.Mock(spec=['code'], code=204)) self.treq.content.side_effect = lambda *args: succeed("") self.treq.head.side_effect = lambda *args, **kwargs: succeed( mock.Mock(spec=['code'], code=204)) verified_delete(self.log, 'http://url/', 'my-auth-token', 'serverId', interval=5, timeout=11, clock=clock) clock.advance(11) self.treq.head.assert_has_calls([ mock.call('http://url/servers/serverId', headers=expected_headers), mock.call('http://url/servers/serverId', headers=expected_headers) ]) self.log.err.assert_called_once_with(None, instance_id="serverId", why=mock.ANY, timeout=11, time_delete=11) # the loop has stopped clock.advance(5) self.assertEqual(self.treq.head.call_count, 2)
def test_verified_delete_retries_verification_until_success(self): """ If the first verification didn't work, wait a bit and see if it's been deleted, since a server can sit in DELETE state for a bit. It also logs deletion success, and deletion failure """ clock = Clock() self.treq.delete.return_value = succeed( mock.Mock(spec=['code'], code=204)) self.treq.content.side_effect = lambda *args: succeed("") self.treq.head.return_value = Deferred() verified_delete(self.log, 'http://url/', 'my-auth-token', 'serverId', interval=5, clock=clock) self.assertEqual(self.log.msg.call_count, 1) self.treq.head.return_value.callback(mock.Mock(spec=['code'], code=204)) self.treq.head.assert_called_once_with('http://url/servers/serverId', headers=expected_headers) self.treq.head.return_value = succeed( mock.Mock(spec=['code'], code=404)) clock.advance(5) self.treq.head.assert_has_calls([ mock.call('http://url/servers/serverId', headers=expected_headers), mock.call('http://url/servers/serverId', headers=expected_headers) ]) self.assertEqual(self.log.msg.call_count, 2) # the loop has stopped clock.advance(5) self.assertEqual(self.treq.head.call_count, 2)
def test_verified_delete_does_not_propagate_verification_failure(self): """ verified_delete propagates deletions from server deletion """ clock = Clock() self.treq.delete.return_value = succeed( mock.Mock(spec=['code'], code=204)) self.treq.head.return_value = fail(DummyException('failure')) self.treq.content.side_effect = lambda *args: succeed("") d = verified_delete(self.log, 'http://url/', 'my-auth-token', 'serverId', clock=clock) self.assertIsNone(self.successResultOf(d))
def test_verified_delete_propagates_delete_server_api_failures(self): """ verified_delete propagates deletions from server deletion """ clock = Clock() self.treq.delete.return_value = succeed( mock.Mock(spec=['code'], code=500)) self.treq.content.return_value = succeed(error_body) self.treq.head.return_value = Deferred() d = verified_delete(self.log, 'http://url/', 'my-auth-token', 'serverId', clock=clock) failure = self.failureResultOf(d, RequestError) self.assertEqual(failure.value.reason.value.code, 500)
def test_verified_delete_returns_after_delete_but_verifies_deletion(self): """ verified_delete returns as soon as the deletion succeeded, but also attempts to verify deleting the server. It also logs the deletion. """ clock = Clock() self.treq.delete.return_value = succeed( mock.Mock(spec=['code'], code=204)) self.treq.head.return_value = Deferred() d = verified_delete(self.log, 'http://url/', 'my-auth-token', 'serverId', clock=clock) self.assertIsNone(self.successResultOf(d)) self.treq.delete.assert_called_once_with('http://url/servers/serverId', headers=expected_headers) self.treq.head.assert_called_once_with('http://url/servers/serverId', headers=expected_headers) self.log.msg.assert_called_with(mock.ANY, instance_id='serverId')