示例#1
0
    def test_etag_set_etag_in_response(self, app, schemas, paginate):
        blp = Blueprint('test', __name__)
        etag_schema = schemas.DocEtagSchema
        item = {'item_id': 1, 'db_field': 0}
        if paginate:
            extra_data = (('X-Pagination', 'Dummy pagination header'),)
        else:
            extra_data = tuple()
        etag = blp._generate_etag(item, extra_data=extra_data)
        etag_with_schema = blp._generate_etag(
            item, etag_schema, extra_data=extra_data)

        with app.test_request_context('/'):
            resp = Response()
            if extra_data:
                resp.headers['X-Pagination'] = 'Dummy pagination header'
            get_appcontext()['result_dump'] = item
            blp._set_etag_in_response(resp, None)
            assert resp.get_etag() == (etag, False)

        with app.test_request_context('/'):
            resp = Response()
            if extra_data:
                resp.headers['X-Pagination'] = 'Dummy pagination header'
            get_appcontext()['result_raw'] = item
            blp._set_etag_in_response(resp, etag_schema)
            assert resp.get_etag() == (etag_with_schema, False)
示例#2
0
    def test_etag_duplicate_header(self, app):
        """
        Check duplicate header results in a different ETag.
        """
        class CustomBlueprint(Blueprint):
            ETAG_INCLUDE_HEADERS = Blueprint.ETAG_INCLUDE_HEADERS + ['X-test']

        blp = CustomBlueprint('test', __name__, url_prefix='/test')

        with app.test_request_context('/'):
            resp = Response()
            resp.headers.add('X-test', 'Test')
            get_appcontext()['result_dump'] = {}
            blp._set_etag_in_response(resp, None)
            etag_1 = resp.get_etag()

        with app.test_request_context('/'):
            resp = Response()
            resp.headers.add('X-test', 'Test')
            resp.headers.add('X-test', 'Test')
            get_appcontext()['result_dump'] = {}
            blp._set_etag_in_response(resp, None)
            etag_2 = resp.get_etag()

        assert etag_1 != etag_2
    def test_etag_set_etag_in_response(self, app, schemas, paginate):
        blp = Blueprint("test", __name__)
        etag_schema = schemas.DocEtagSchema
        item = {"item_id": 1, "db_field": 0}
        if paginate:
            extra_data = (("X-Pagination", "Dummy pagination header"), )
        else:
            extra_data = tuple()
        etag = blp._generate_etag(item, extra_data=extra_data)
        etag_with_schema = blp._generate_etag(item,
                                              etag_schema,
                                              extra_data=extra_data)

        with app.test_request_context("/"):
            resp = Response()
            if extra_data:
                resp.headers["X-Pagination"] = "Dummy pagination header"
            get_appcontext()["result_dump"] = item
            blp._set_etag_in_response(resp, None)
            assert resp.get_etag() == (etag, False)

        with app.test_request_context("/"):
            resp = Response()
            if extra_data:
                resp.headers["X-Pagination"] = "Dummy pagination header"
            get_appcontext()["result_raw"] = item
            blp._set_etag_in_response(resp, etag_schema)
            assert resp.get_etag() == (etag_with_schema, False)
示例#4
0
def etag_match(inputs, rsp):
    headers = inputs.get("headers", None)
    etag = headers.get("Etag", None)
    etags_match = True
    if etag is not None:
        tmp = Response(json.dumps(rsp),
                       status=400,
                       content_type="application/json")
        tmp.add_etag()

        etags_match = werkzeug.http.unquote_etag(etag) == tmp.get_etag()
    return etags_match
示例#5
0
    def test_etag_set_etag_in_response(self, app, schemas, paginate):

        etag_schema = schemas.DocEtagSchema
        item = {'item_id': 1, 'db_field': 0}
        extra_data = ('Dummy pagination header', ) if paginate else tuple()
        etag = _generate_etag(item, extra_data=extra_data)
        etag_with_schema = _generate_etag(item,
                                          etag_schema,
                                          extra_data=extra_data)

        with app.test_request_context('/'):
            resp = Response()
            if extra_data:
                resp.headers['X-Pagination'] = 'Dummy pagination header'
            if is_etag_enabled(app):
                set_etag_in_response(resp, item, None)
                assert resp.get_etag() == (etag, False)
                set_etag_in_response(resp, item, etag_schema)
                assert resp.get_etag() == (etag_with_schema, False)
            else:
                set_etag_in_response(resp, item, None)
                assert resp.get_etag() == (None, None)
                set_etag_in_response(resp, item, etag_schema)
                assert resp.get_etag() == (None, None)
            disable_etag_for_request()
            resp = Response()
            set_etag_in_response(resp, item, None)
            assert resp.get_etag() == (None, None)
            set_etag_in_response(resp, item, etag_schema)
            assert resp.get_etag() == (None, None)
    def test_etag_duplicate_header(self, app):
        """Check duplicate header results in a different ETag"""
        class CustomBlueprint(Blueprint):
            ETAG_INCLUDE_HEADERS = Blueprint.ETAG_INCLUDE_HEADERS + ["X-test"]

        blp = CustomBlueprint("test", __name__, url_prefix="/test")

        with app.test_request_context("/"):
            resp = Response()
            resp.headers.add("X-test", "Test")
            get_appcontext()["result_dump"] = {}
            blp._set_etag_in_response(resp, None)
            etag_1 = resp.get_etag()

        with app.test_request_context("/"):
            resp = Response()
            resp.headers.add("X-test", "Test")
            resp.headers.add("X-test", "Test")
            get_appcontext()["result_dump"] = {}
            blp._set_etag_in_response(resp, None)
            etag_2 = resp.get_etag()

        assert etag_1 != etag_2