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)
Exemple #2
0
    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)
Exemple #4
0
    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)
Exemple #7
0
    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))
Exemple #8
0
    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')
Exemple #10
0
    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')