def test_get_range(self):
        get_range = RangeOperations.get_range_spec([(100,200)])
        self.assertEqual(get_range, "bytes=100-200",
                         "Incorrect byte range spec \'%s\' returned from get_range_spec" % get_range)

        get_range = RangeOperations.get_range_spec([(100,200),(201,400)])
        self.assertEqual(get_range, "bytes=100-200,201-400",
                         "Incorrect byte range spec \'%s\' returned from get_range_spec" % get_range)
    def test_byte_range_creation(self):
        logging.info("Testing byte range creation for : %s" % SINGLE_BYTE_RANGE)
        created_range = RangeOperations.create_range(SINGLE_BYTE_RANGE)
        self.assertEqual(created_range,[(656708,656999)],"Failed to create single byte range")

        logging.info("Testing byte range creation for : %s" % SINGLE_SUFFIX_BYTE_RANGE)
        created_range = RangeOperations.create_range(SINGLE_SUFFIX_BYTE_RANGE)
        self.assertEqual(created_range,[(0,-1)], "Failed to create single suffix byte range")

        logging.info("Testing byte range creation for : %s" % SINGLE_PREFIX_BYTE_RANGE)
        created_range = RangeOperations.create_range(SINGLE_PREFIX_BYTE_RANGE)
        self.assertEqual(created_range,[(1000,sys.maxsize)], "Failed to create single prefix byte range")

        logging.info("Testing byte range creation for : %s" % MULTIPLE_BYTE_RANGE)
        created_range = RangeOperations.create_range(MULTIPLE_BYTE_RANGE)
        self.assertEqual(created_range,[(1000,2000),(2001,4000), (4001, 5000)], "Failed to create multiple byte ranges")
Beispiel #3
0
    def check_for_range_params(self):
        range_in_query = self.get_query_argument("range", None)
        if not range_in_query:
            range_in_query = self.get_query_argument("Range", None)
        logging.info("Range %s received as query param " % range_in_query)

        requested_range = self.request.headers.get("Range", None)
        logging.info("Range %s received as request header " % requested_range)

        if range_in_query and requested_range:
            if range_in_query != requested_range:
                logging.error(
                    "Mismatch in ranges -> Range in header %s, rang in query param %s"
                    % (requested_range, range_in_query))
                return False
        elif range_in_query:
            requested_range = range_in_query

        logging.info("Received range  %s for uri %s " %
                     (requested_range, self.request.path))
        if requested_range:
            logging.info("Adding to range list %s" % requested_range)
            self.range_list = RangeOperations.create_range(requested_range)
            for range in self.range_list:
                logging.info("Range added to list with start %s end %s" %
                             (range[0], range[1]))
        return True
    def send_request_to_origin(self, request):
        path = request.path
        remote_ip = request.remote_ip
        logging.info("Get resource %s" % path)
        #try:

        out_req = tornado.httpclient.HTTPRequest(path, method="GET")
        for item, value in request.headers.iteritems():
            out_req.headers[item] = value

        # If there are items in range list, copy them into headers field.
        # This takes care of sending range requests sent by client as query param
        if  self.range_list:
            out_req.headers.add("Range", RangeOperations.get_range_spec(self.range_list))

        out_req.request_timeout = self.request_timeout
        response = yield self.http_client.fetch(out_req, raise_error=False)
        raise tornado.gen.Return(response)
Beispiel #5
0
    def send_request_to_origin(self, request):
        path = request.path
        remote_ip = request.remote_ip
        logging.info("Get resource %s" % path)
        #try:

        out_req = tornado.httpclient.HTTPRequest(path, method="GET")
        for item, value in request.headers.iteritems():
            out_req.headers[item] = value

        # If there are items in range list, copy them into headers field.
        # This takes care of sending range requests sent by client as query param
        if self.range_list:
            out_req.headers.add(
                "Range", RangeOperations.get_range_spec(self.range_list))

        out_req.request_timeout = self.request_timeout
        response = yield self.http_client.fetch(out_req, raise_error=False)
        raise tornado.gen.Return(response)
    def check_for_range_params(self):
        range_in_query = self.get_query_argument("range", None)
        if not range_in_query:
            range_in_query = self.get_query_argument("Range", None)
        logging.info("Range %s received as query param " % range_in_query)

        requested_range = self.request.headers.get("Range", None)
        logging.info("Range %s received as request header " % requested_range)

        if range_in_query and requested_range:
            if range_in_query != requested_range:
                logging.error("Mismatch in ranges -> Range in header %s, rang in query param %s" %
                                                    (requested_range, range_in_query))
                return False
        elif range_in_query:
            requested_range = range_in_query

        logging.info("Received range  %s for uri %s " % (requested_range, self.request.path))
        if requested_range:
            logging.info("Adding to range list %s" % requested_range)
            self.range_list = RangeOperations.create_range(requested_range)
            for range in self.range_list:
                logging.info("Range added to list with start %s end %s" % (range[0], range[1]))
        return True