def test_no_content_length_then_a_content_length(self): self.mock_swift = mock.Mock() self.mock_swift.get_object.side_effect = [ (200, {}, FakeStream()), (200, { 'Content-Length': '1024' }, FakeStream()), ] wrapper = utils.FileWrapper(self.mock_swift, 'account', 'container', 'key', headers={'a': 'b'}) with self.assertRaises(TypeError): len(wrapper) chunk_size = wrapper._swift_stream.chunk_size self.assertEqual('A' * (2 * chunk_size), wrapper.read(4000) + next(wrapper)) wrapper.seek(0, 'ignored') self.assertEqual(1024, len(wrapper)) self.assertEqual('A' * 1024, wrapper.read())
def test_no_content_length(self): content = 'shimmyjimmy' * 3 self.mock_swift = FakeSwiftClient(content_length=None, content=content) wrapper = utils.FileWrapper(self.mock_swift, 'account', 'container', 'key', headers={'a': 'b'}) with self.assertRaises(TypeError): len(wrapper) self.assertEqual({ 'X-Object-Meta-Foo': 'baR', }, wrapper.get_headers()) self.assertEqual( { # gets lowercased, I guess 'foo': 'baR', }, wrapper.get_s3_headers()) self.assertEqual({'a': 'b'}, self.mock_swift.got_headers) chunk_size = wrapper._swift_stream.chunk_size self.assertGreater(chunk_size, 2) self.assertEqual(content[:2], wrapper.read(2)) self.assertEqual(content[2:chunk_size], wrapper.next()) wrapper.reset() self.assertEqual(content, wrapper.read()) wrapper.reset() self.assertEqual(content, ''.join(wrapper))
def test_failed_req(self): self.mock_swift = FakeSwiftClient(status=401) with self.assertRaises(RuntimeError) as cm: utils.FileWrapper(self.mock_swift, 'account', 'container', 'key', headers={'a': 'b'}) self.assertEqual('Failed to get the object', cm.exception.message)
def test_reads_extra_byte(self): content = 'deadbeef' * 12 self.mock_swift = FakeSwiftClient(content_length=len(content), content=content) wrapper = utils.FileWrapper(self.mock_swift, 'account', 'container', 'key') self.assertEqual(len(content), len(wrapper)) recvd_content = '' while len(recvd_content) < len(content): recvd_content += wrapper.read(len(content) - len(recvd_content)) self.assertTrue(wrapper._swift_stream.raised_stop_iter) self.assertEqual(content, recvd_content)
def test_close(self): wrapper = utils.FileWrapper(self.mock_swift, 'account', 'container', 'key', headers={'a': 'b'}) self.assertEqual(1024, len(wrapper)) chunk_size = self.mock_swift.fake_stream.chunk_size self.assertEqual('A' * chunk_size, next(wrapper)) self.assertNotEqual(None, wrapper._swift_stream) wrapper.close() self.assertEqual(None, wrapper._swift_stream) wrapper.close() # idemptotent self.assertRaises(ValueError, wrapper.read) self.assertRaises(ValueError, wrapper.readlines) self.assertRaises(ValueError, wrapper.next) with self.assertRaises(ValueError): next(wrapper)
def test_open(self): wrapper = utils.FileWrapper(self.mock_swift, 'account', 'container', 'key', headers={'a': 'b'}) self.assertEqual(1024, len(wrapper)) self.assertEqual( { 'Content-Length': '1024', 'X-Object-Meta-Foo': 'baR', }, wrapper.get_headers()) self.assertEqual( { # gets lowercased, I guess 'foo': 'baR', }, wrapper.get_s3_headers()) self.assertEqual({'a': 'b'}, self.mock_swift.got_headers)
def test_seek(self): wrapper = utils.FileWrapper(self.mock_swift, 'account', 'container', 'key') chunk_size = self.mock_swift.fake_stream.chunk_size self.assertGreater(256, chunk_size) # sanity check self.assertEqual('A' * chunk_size, wrapper.read(256)) self.assertEqual(chunk_size, wrapper.tell()) self.assertEqual(None, wrapper.buf) # A short read will be of that length, leaving remainder in a buffer self.assertEqual('A', wrapper.read(1)) self.assertEqual('A' * (chunk_size - 1), wrapper.buf) self.assertEqual(chunk_size + 1, wrapper.tell()) # A turn of the crank will just return remaining buffer got_next = wrapper.next() self.assertEqual( 'A' * (chunk_size - 1), got_next, 'Exp %d bytes, got %d' % (chunk_size - 1, len(got_next))) self.assertEqual(2 * chunk_size, wrapper.tell()) wrapper.seek(0) self.assertEqual(0, wrapper.tell()) got_all = ''.join(wrapper) self.assertEqual('A' * 1024, got_all, 'Exp %d bytes, got %d' % (1024, len(got_all))) self.assertEqual(1024, wrapper.tell())
def test_seek(self): wrapper = utils.FileWrapper(self.mock_swift, 'account', 'container', 'key') wrapper.read(256) wrapper.seek(0) self.assertEqual(0, self.mock_swift.fake_stream.current_pos)
def test_open(self): wrapper = utils.FileWrapper(self.mock_swift, 'account', 'container', 'key') self.assertEqual(1024, len(wrapper))