blob: 9cfd28bacf069e4e35e95fd8194684249ac529a5 [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests of range_response."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import unittest
import mock
import range_response
import tarfile_utils
# pylint: disable=protected-access
class FileIteratorTest(unittest.TestCase):
"""Test class for FileIterator."""
def setUp(self):
self.response = mock.MagicMock()
self.file_info_list = [
tarfile_utils.TarMemberInfo('foo', '', '', '10', '10'),
tarfile_utils.TarMemberInfo('bar', '', '', '123', '1000')]
def test_iter_files_empty_response(self):
self.response.iter_content.return_value = iter([''])
files = list(range_response.FileIterator(self.response, mock.MagicMock()))
self.assertListEqual(files, [])
def test_iter_files(self):
"""Test iterating files in the response."""
self.response.iter_content.return_value = iter([
'\r\nboundary\r\nContent-Type: some/type\r',
'\nContent-Range: bytes 10-19/T\r\n\r\n012',
'3456789\r\nboundary\r\nContent-Type: some',
'/type\r\nContent-Range: bytes 123-1122/T\r'
'\n\r\n' + 'a' * 400,
'a' * 600,
'\r\nboundary--\r\n',
])
files = list(range_response.FileIterator(self.response,
self.file_info_list))
self.assertListEqual(files, [('foo', '0123456789'), ('bar', 'a' * 1000)])
def test_iter_files_file_not_found(self):
"""Test iter_files which cannot find file names."""
self.response.iter_content.return_value = iter([
'\r\nboundary\r\nContent-Type: some/type\r',
'\nContent-Range: bytes 10-19/T\r\n\r\n012',
'3456789\r\n',
'\r\nboundary--\r\n',
])
with self.assertRaises(range_response.NoFileFoundError):
list(range_response.FileIterator(self.response, []))
def test_iter_files_bad_range_header(self):
"""Test iter_files with bad range header."""
self.response.iter_content.return_value = iter([
'\r\nboundary\r\nContent-Type: some/type\r',
'\nContent-RangeXXXXXXXXXXXXXXX'
])
with self.assertRaises(range_response.FormatError):
list(range_response.FileIterator(self.response, []))
def test_iter_files_bad_size(self):
"""Test iter_files with bad file size."""
self.response.iter_content.return_value = iter([
'\r\nboundary\r\nContent-Type: some/type\r',
'\nContent-Range: bytes 10-19/T\r\n\r\n012',
'34\r\n',
'\r\nboundary--\r\n',
])
with self.assertRaises(range_response.FormatError):
list(range_response.FileIterator(self.response, self.file_info_list))