def test_retry_inc_attempts(self):
        srv = yield ToyServer.from_test(self)

        @srv.app.route('/foo')
        def route(_):
            pass

        req = {
            'owner_id': '1234',
            'timestamp': 5,
            'attempts': 0,
            'intervals': [10, 20, 30],
            'request': {
                'url': "%s/foo" % (srv.url,),
                'method': 'GET'
            }
        }

        yield retry(req, persistent=False)
        self.assertEqual(req['attempts'], 1)

        yield retry(req, persistent=False)
        self.assertEqual(req['attempts'], 2)

        yield retry(req, persistent=False)
        self.assertEqual(req['attempts'], 3)
    def test_retry_unicode(self):
        srv = yield ToyServer.from_test(self)
        reqs = []

        @srv.app.route('/')
        def route(req):
            reqs.append({
                'method': req.method,
                'body': req.content.read(),
                'headers': {
                    'X-Bar': req.requestHeaders.getRawHeaders('X-Bar'),
                }
            })

        yield retry({
            'owner_id': '1234',
            'timestamp': 5,
            'attempts': 0,
            'intervals': [10, 20, 30],
            'request': {
                'url': u"%s" % (srv.url,),
                'method': u'POST',
                'body': u'foo',
                'headers': {u'X-Bar': [u'baz', u'quux']}
            }
        }, persistent=False)

        [req] = reqs
        self.assertEqual(req, {
            'method': 'POST',
            'body': 'foo',
            'headers': {'X-Bar': ['baz', 'quux']}
        })
    def test_retry_headers(self):
        srv = yield ToyServer.from_test(self)
        headers = []

        @srv.app.route('/foo')
        def route(req):
            headers.append({
                'X-Foo': req.requestHeaders.getRawHeaders('X-Foo'),
                'X-Bar': req.requestHeaders.getRawHeaders('X-Bar')
            })

        yield retry({
            'owner_id': '1234',
            'timestamp': 5,
            'attempts': 0,
            'intervals': [10],
            'request': {
                'url': "%s/foo" % (srv.url,),
                'method': 'POST',
                'headers': {
                    'X-Foo': ['a', 'b'],
                    'X-Bar': ['c', 'd'],
                }
            }
        }, persistent=False)

        self.assertEqual(headers, [{
            'X-Foo': ['a', 'b'],
            'X-Bar': ['c', 'd'],
        }])
    def test_retry(self):
        srv = yield ToyServer.from_test(self)
        reqs = []

        @srv.app.route('/foo')
        def route(req):
            reqs.append(req)
            return 'ok'

        resp = yield retry({
            'owner_id': '1234',
            'timestamp': 5,
            'attempts': 0,
            'intervals': [10],
            'request': {
                'url': "%s/foo" % (srv.url,),
                'method': 'POST'
            }
        }, persistent=False)

        self.assertEqual(resp.code, 200)
        self.assertEqual((yield resp.content()), 'ok')

        [req] = reqs
        self.assertEqual(req.method, 'POST')
    def test_retry_data(self):
        srv = yield ToyServer.from_test(self)
        contents = []

        @srv.app.route('/foo')
        def route(req):
            contents.append(req.content.read())

        yield retry({
            'owner_id': '1234',
            'timestamp': 5,
            'attempts': 0,
            'intervals': [10],
            'request': {
                'url': "%s/foo" % (srv.url,),
                'method': 'POST',
                'body': 'hi'
            }
        }, persistent=False)

        self.assertEqual(contents, ['hi'])