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")
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)
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