def test29(self): """test NewAsciiReader: modify FileWrapper while reading""" fname = self.fixture_file('new_ascii_reader1.cpio') f = FileWrapper(filename=fname) archive_reader = NewAsciiReader(f) self.assertIsNotNone(archive_reader.next_header()) # seeking _after_ the calculated next header position is not # allowed (even if the file is seekable) # next header position: 156 f.seek(158, os.SEEK_SET) self.assertRaises(CpioError, archive_reader.next_header)
def test18(self): """test NewAsciiWriter's append method""" fname = self.fixture_file('foo') st = os.stat(fname) sio = StringIO() archive_writer = NewAsciiWriter(sio) archive_writer.append(fname) self.assertEqual(archive_writer._bytes_written, 128) fname = self.fixture_file('new_ascii_writer_foo_header') # we can only compare the sizes because the inode, dev_maj and dev_min # of the foo file has changed (because it was copied to a # tmpdir - that's how our testsuite works...) self.assertEqual(len(sio.getvalue()), len(open(fname, 'r').read())) # check manually... sio.seek(0, os.SEEK_SET) f = FileWrapper(fobj=sio) archive_reader = NewAsciiReader(f) hdr = archive_reader.next_header() self.assertEqual(hdr.magic, '070701') # self.assertEqual(hdr.ino, 1788176) self.assertEqual(hdr.mode, st.st_mode) self.assertEqual(hdr.uid, st.st_uid) self.assertEqual(hdr.gid, st.st_gid) self.assertEqual(hdr.nlink, 1) self.assertEqual(hdr.mtime, int(st.st_mtime)) self.assertEqual(hdr.filesize, 9) # self.assertEqual(hdr.dev_maj, 8) # self.assertEqual(hdr.dev_min, 10) self.assertEqual(hdr.rdev_maj, 0) self.assertEqual(hdr.rdev_min, 0) self.assertEqual(hdr.namesize, 4) self.assertEqual(hdr.chksum, 0) self.assertEqual(hdr.name, 'foo')
def test16(self): """test CpioFile's copyin method unseekable fobj (dest is directory)""" # identical to test14 except that the input is not seekable dest = self.fixture_file('copyin') os.mkdir(dest) fname = self.fixture_file('new_ascii_reader3.cpio') st = os.stat(fname) sio = StringIO(open(fname, 'r').read()) f = FileWrapper(fobj=sio) archive_reader = NewAsciiReader(f) # copyin file foo archive_file = archive_reader.next_file() archive_file.copyin(dest) fname = self.fixture_file('copyin', archive_file.hdr.name) self.assertTrue(os.path.isfile(fname)) self.assertEqualFile('file foo\n', fname) # check mode, mtime, uid and gid st = os.stat(fname) self.assertEqual(st.st_mode, 33188) self.assertEqual(st.st_mtime, 1340493596) self.assertEqual(st.st_uid, uid(1000)) self.assertEqual(st.st_gid, gid(100)) # copyin file foobar archive_file = archive_reader.next_file() archive_file.copyin(dest) fname = self.fixture_file('copyin', archive_file.hdr.name) self.assertTrue(os.path.isfile(fname)) self.assertEqualFile('This is file\nbar.\n', fname) # check mode, mtime, uid and gid st = os.stat(fname) self.assertEqual(st.st_mode, 33188) self.assertEqual(st.st_mtime, 1340493602) self.assertEqual(st.st_uid, uid(1000)) self.assertEqual(st.st_gid, gid(100))
def test15(self): """test CpioFile's copyin method (dest is directory)""" dest = self.fixture_file('copyin') os.mkdir(dest) fname = self.fixture_file('new_ascii_reader3.cpio') f = FileWrapper(filename=fname) archive_reader = NewAsciiReader(f) # copyin file foo archive_file = archive_reader.next_file() archive_file.copyin(dest) fname = self.fixture_file('copyin', archive_file.hdr.name) self.assertTrue(os.path.isfile(fname)) self.assertEqualFile('file foo\n', fname) # check mode, mtime, uid and gid st = os.stat(fname) self.assertEqual(st.st_mode, 33188) self.assertEqual(st.st_mtime, 1340493596) self.assertEqual(st.st_uid, uid(1000)) self.assertEqual(st.st_gid, gid(100)) # copyin file foobar archive_file = archive_reader.next_file() archive_file.copyin(dest) fname = self.fixture_file('copyin', archive_file.hdr.name) self.assertTrue(os.path.isfile(fname)) self.assertEqualFile('This is file\nbar.\n', fname) # check mode, mtime, uid and gid st = os.stat(fname) self.assertEqual(st.st_mode, 33188) self.assertEqual(st.st_mtime, 1340493602) self.assertEqual(st.st_uid, uid(1000)) self.assertEqual(st.st_gid, gid(100))
def test14(self): """test NewAsciiReader read files (unseekable fobj)""" # the read sequence is identical to test12 # but the expected results are different because the fobj # is not seekable fname = self.fixture_file('new_ascii_reader3.cpio') sio = StringIO(open(fname, 'r').read()) sio.seek = None f = FileWrapper(fobj=sio) self.assertFalse(f.is_seekable()) archive_reader = NewAsciiReader(f) foo_file = archive_reader.next_file() self.assertEqual(foo_file.hdr.name, 'foo') foobar_file = archive_reader.next_file() self.assertEqual(foobar_file.hdr.name, 'foobar') # read around in both files self.assertEqual(foobar_file.read(7), 'This is') self.assertRaises(IOError, foo_file.read, 3) self.assertEqual(foobar_file.read(6), ' file\n') # read rest of file foo self.assertRaises(IOError, foo_file.read) # read rest of file foobar self.assertEqual(foobar_file.read(), 'bar.\n')
def test7_1(self): """test FileWrapper's peek method (peek data and complete read)""" fname = self.fixture_file('filewrapper1.txt') with open(fname, 'r') as fobj: f = FileWrapper(fobj=fobj, use_mmap=False) self.assertFalse(isinstance(f._fobj, mmap.mmap)) self.assertEqual(f.peek(5), 'This ') self.assertEqual(f.tell(), 0) # read 3 bytes (arbitrarily chosen) self.assertEqual(f.read(3), 'Thi') self.assertEqual(f.tell(), 3) # read rest of file (2 bytes of peek data are still available) self.assertEqual(f.read(), 's is a simple\ntext file.\n')
def test17(self): """test CpioFile's copyin method (dest is a file-like object)""" fname = self.fixture_file('new_ascii_reader3.cpio') f = FileWrapper(filename=fname) archive_reader = NewAsciiReader(f) # copyin file foo sio = StringIO() archive_file = archive_reader.next_file() archive_file.copyin(sio) self.assertEqual(sio.getvalue(), 'file foo\n') # copyin file foobar sio = StringIO() archive_file = archive_reader.next_file() archive_file.copyin(sio) self.assertEqual(sio.getvalue(), 'This is file\nbar.\n')
def test13(self): """test NewAsciiReader read files""" fname = self.fixture_file('new_ascii_reader3.cpio') f = FileWrapper(filename=fname) archive_reader = NewAsciiReader(f) foo_file = archive_reader.next_file() self.assertEqual(foo_file.hdr.name, 'foo') foobar_file = archive_reader.next_file() self.assertEqual(foobar_file.hdr.name, 'foobar') # read around in both files self.assertEqual(foobar_file.read(7), 'This is') self.assertEqual(foo_file.read(3), 'fil') self.assertEqual(foobar_file.read(6), ' file\n') # read rest of file foo self.assertEqual(foo_file.read(), 'e foo\n') # read rest of file foobar self.assertEqual(foobar_file.read(), 'bar.\n')
def test10(self): """test NewAsciiReader (unseekable file object)""" # identical to test8 but this time a unseekable fobj is used fname = self.fixture_file('new_ascii_reader2.cpio') sio = StringIO(open(fname, 'r').read()) sio.seek = None f = FileWrapper(fobj=sio) archive_reader = NewAsciiReader(f) hdr = archive_reader.next_header() self.assertEqual(hdr.magic, '070701') self.assertEqual(hdr.ino, 1788112) self.assertEqual(hdr.mode, 33188) self.assertEqual(hdr.uid, 1000) self.assertEqual(hdr.gid, 100) self.assertEqual(hdr.nlink, 1) self.assertEqual(hdr.mtime, 1340459653) self.assertEqual(hdr.filesize, 28) self.assertEqual(hdr.dev_maj, 8) self.assertEqual(hdr.dev_min, 10) self.assertEqual(hdr.rdev_maj, 0) self.assertEqual(hdr.rdev_min, 0) self.assertEqual(hdr.namesize, 14) self.assertEqual(hdr.chksum, 0) self.assertEqual(hdr.name, 'filewrapper_1') # self.assertTrue(hdr.is_regular_file()) # next header is trailer hdr = archive_reader.next_header() self.assertEqual(hdr.magic, '070701') self.assertEqual(hdr.ino, 0) self.assertEqual(hdr.mode, 0) self.assertEqual(hdr.uid, 0) self.assertEqual(hdr.gid, 0) self.assertEqual(hdr.nlink, 1) self.assertEqual(hdr.mtime, 0) self.assertEqual(hdr.filesize, 0) self.assertEqual(hdr.dev_maj, 0) self.assertEqual(hdr.dev_min, 0) self.assertEqual(hdr.rdev_maj, 0) self.assertEqual(hdr.rdev_min, 0) self.assertEqual(hdr.namesize, 11) self.assertEqual(hdr.chksum, 0) self.assertEqual(hdr.name, 'TRAILER!!!') # self.assertFalse(hdr.is_regular_file()) # no more headers available self.assertIsNone(archive_reader.next_header())
def test9(self): """test NewAsciiReader (no padding except for trailer)""" # nearly identical to test7 but the filename differ fname = self.fixture_file('new_ascii_reader2.cpio') f = FileWrapper(filename=fname) archive_reader = NewAsciiReader(f) hdr = archive_reader.next_header() self.assertEqual(hdr.magic, '070701') self.assertEqual(hdr.ino, 1788112) self.assertEqual(hdr.mode, 33188) self.assertEqual(hdr.uid, 1000) self.assertEqual(hdr.gid, 100) self.assertEqual(hdr.nlink, 1) self.assertEqual(hdr.mtime, 1340459653) self.assertEqual(hdr.filesize, 28) self.assertEqual(hdr.dev_maj, 8) self.assertEqual(hdr.dev_min, 10) self.assertEqual(hdr.rdev_maj, 0) self.assertEqual(hdr.rdev_min, 0) self.assertEqual(hdr.namesize, 14) self.assertEqual(hdr.chksum, 0) self.assertEqual(hdr.name, 'filewrapper_1') # self.assertTrue(hdr.is_regular_file()) # next header is trailer hdr = archive_reader.next_header() self.assertEqual(hdr.magic, '070701') self.assertEqual(hdr.ino, 0) self.assertEqual(hdr.mode, 0) self.assertEqual(hdr.uid, 0) self.assertEqual(hdr.gid, 0) self.assertEqual(hdr.nlink, 1) self.assertEqual(hdr.mtime, 0) self.assertEqual(hdr.filesize, 0) self.assertEqual(hdr.dev_maj, 0) self.assertEqual(hdr.dev_min, 0) self.assertEqual(hdr.rdev_maj, 0) self.assertEqual(hdr.rdev_min, 0) self.assertEqual(hdr.namesize, 11) self.assertEqual(hdr.chksum, 0) self.assertEqual(hdr.name, 'TRAILER!!!') # self.assertFalse(hdr.is_regular_file()) # no more headers available self.assertIsNone(archive_reader.next_header())
def test28(self): """test NewAsciiReader: premature end of archive""" fname = self.fixture_file('new_ascii_reader1_premature_end.cpio') f = FileWrapper(filename=fname) archive_reader = NewAsciiReader(f) # first header is ok hdr = archive_reader.next_header() self.assertEqual(hdr.magic, '070701') self.assertEqual(hdr.ino, 1788112) self.assertEqual(hdr.mode, 33188) self.assertEqual(hdr.uid, 1000) self.assertEqual(hdr.gid, 100) self.assertEqual(hdr.nlink, 1) self.assertEqual(hdr.mtime, 1340459653) self.assertEqual(hdr.filesize, 28) self.assertEqual(hdr.dev_maj, 8) self.assertEqual(hdr.dev_min, 10) self.assertEqual(hdr.rdev_maj, 0) self.assertEqual(hdr.rdev_min, 0) self.assertEqual(hdr.namesize, 17) self.assertEqual(hdr.chksum, 0) self.assertEqual(hdr.name, 'filewrapper1.txt') # second header is incomplete self.assertRaises(CpioError, archive_reader.next_header)
def test1(self): """test FileWrapper with filename (no mmap)""" fname = self.fixture_file('filewrapper1.txt') f = FileWrapper(filename=fname, use_mmap=False) self.assertFalse(isinstance(f._fobj, mmap.mmap)) self.assertTrue(f.is_seekable()) self.assertEqual(f.tell(), 0) self.assertEqual(f.read(1), 'T') self.assertEqual(f.tell(), 1) # seek to position 0 again f.seek(0) self.assertEqual(f.read(5), 'This ') self.assertEqual(f.tell(), 5) # read rest of the file self.assertEqual(f.read(), 'is a simple\ntext file.\n') f.close()
def test7(self): """test FileWrapper's peek method""" fname = self.fixture_file('filewrapper1.txt') with open(fname, 'r') as fobj: f = FileWrapper(fobj=fobj, use_mmap=False) self.assertFalse(isinstance(f._fobj, mmap.mmap)) self.assertEqual(f.peek(3), 'Thi') self.assertEqual(f.tell(), 0) # seeking is not allowed unless all peek'ed bytes are read self.assertRaises(IOError, f.seek, 8, os.SEEK_SET) self.assertEqual(f.read(2), 'Th') self.assertEqual(f.tell(), 2) # seek is still not possible (1 peek byte left) self.assertRaises(IOError, f.seek, 8, os.SEEK_SET) self.assertEqual(f.read(2), 'is') self.assertEqual(f.tell(), 4) # seek is possible f.seek(8, os.SEEK_SET) self.assertEqual(f.read(), 'a simple\ntext file.\n')
def test12(self): """test NewAsciiReader read file content""" # identical to test10 but this time we read the file contents fname = self.fixture_file('new_ascii_reader3.cpio') f = FileWrapper(filename=fname) archive_reader = NewAsciiReader(f) # check file foo archv_file = archive_reader.next_file() self.assertEqual(archv_file.hdr.magic, '070701') self.assertEqual(archv_file.hdr.ino, 1788176) self.assertEqual(archv_file.hdr.mode, 33188) self.assertEqual(archv_file.hdr.uid, 1000) self.assertEqual(archv_file.hdr.gid, 100) self.assertEqual(archv_file.hdr.nlink, 1) self.assertEqual(archv_file.hdr.mtime, 1340493596) self.assertEqual(archv_file.hdr.filesize, 9) self.assertEqual(archv_file.hdr.dev_maj, 8) self.assertEqual(archv_file.hdr.dev_min, 10) self.assertEqual(archv_file.hdr.rdev_maj, 0) self.assertEqual(archv_file.hdr.rdev_min, 0) self.assertEqual(archv_file.hdr.namesize, 4) self.assertEqual(archv_file.hdr.chksum, 0) self.assertEqual(archv_file.hdr.name, 'foo') # read file content self.assertEqual(archv_file.read(4), 'file') self.assertEqual(archv_file.read(), ' foo\n') # self.assertTrue(archv_file.hdr.is_regular_file()) # check file foobar archv_file = archive_reader.next_file() self.assertEqual(archv_file.hdr.magic, '070701') self.assertEqual(archv_file.hdr.ino, 1788110) self.assertEqual(archv_file.hdr.mode, 33188) self.assertEqual(archv_file.hdr.uid, 1000) self.assertEqual(archv_file.hdr.gid, 100) self.assertEqual(archv_file.hdr.nlink, 1) self.assertEqual(archv_file.hdr.mtime, 1340493602) self.assertEqual(archv_file.hdr.filesize, 18) self.assertEqual(archv_file.hdr.dev_maj, 8) self.assertEqual(archv_file.hdr.dev_min, 10) self.assertEqual(archv_file.hdr.rdev_maj, 0) self.assertEqual(archv_file.hdr.rdev_min, 0) self.assertEqual(archv_file.hdr.namesize, 7) self.assertEqual(archv_file.hdr.chksum, 0) self.assertEqual(archv_file.hdr.name, 'foobar') # read file content self.assertEqual(archv_file.read(13), 'This is file\n') self.assertEqual(archv_file.read(), 'bar.\n') # self.assertTrue(archv_file.hdr.is_regular_file()) # next header is trailer archv_file = archive_reader.next_file() self.assertEqual(archv_file.hdr.magic, '070701') self.assertEqual(archv_file.hdr.ino, 0) self.assertEqual(archv_file.hdr.mode, 0) self.assertEqual(archv_file.hdr.uid, 0) self.assertEqual(archv_file.hdr.gid, 0) self.assertEqual(archv_file.hdr.nlink, 1) self.assertEqual(archv_file.hdr.mtime, 0) self.assertEqual(archv_file.hdr.filesize, 0) self.assertEqual(archv_file.hdr.dev_maj, 0) self.assertEqual(archv_file.hdr.dev_min, 0) self.assertEqual(archv_file.hdr.rdev_maj, 0) self.assertEqual(archv_file.hdr.rdev_min, 0) self.assertEqual(archv_file.hdr.namesize, 11) self.assertEqual(archv_file.hdr.chksum, 0) self.assertEqual(archv_file.hdr.name, 'TRAILER!!!') # self.assertFalse(archv_file.hdr.is_regular_file()) # no more headers available self.assertIsNone(archive_reader.next_file())
def test11(self): """test NewAsciiReader (2 files)""" fname = self.fixture_file('new_ascii_reader3.cpio') f = FileWrapper(filename=fname) archive_reader = NewAsciiReader(f) # check file foo hdr = archive_reader.next_header() self.assertEqual(hdr.magic, '070701') self.assertEqual(hdr.ino, 1788176) self.assertEqual(hdr.mode, 33188) self.assertEqual(hdr.uid, 1000) self.assertEqual(hdr.gid, 100) self.assertEqual(hdr.nlink, 1) self.assertEqual(hdr.mtime, 1340493596) self.assertEqual(hdr.filesize, 9) self.assertEqual(hdr.dev_maj, 8) self.assertEqual(hdr.dev_min, 10) self.assertEqual(hdr.rdev_maj, 0) self.assertEqual(hdr.rdev_min, 0) self.assertEqual(hdr.namesize, 4) self.assertEqual(hdr.chksum, 0) self.assertEqual(hdr.name, 'foo') # self.assertTrue(hdr.is_regular_file()) # check file foobar hdr = archive_reader.next_header() self.assertEqual(hdr.magic, '070701') self.assertEqual(hdr.ino, 1788110) self.assertEqual(hdr.mode, 33188) self.assertEqual(hdr.uid, 1000) self.assertEqual(hdr.gid, 100) self.assertEqual(hdr.nlink, 1) self.assertEqual(hdr.mtime, 1340493602) self.assertEqual(hdr.filesize, 18) self.assertEqual(hdr.dev_maj, 8) self.assertEqual(hdr.dev_min, 10) self.assertEqual(hdr.rdev_maj, 0) self.assertEqual(hdr.rdev_min, 0) self.assertEqual(hdr.namesize, 7) self.assertEqual(hdr.chksum, 0) self.assertEqual(hdr.name, 'foobar') # self.assertTrue(hdr.is_regular_file()) # next header is trailer hdr = archive_reader.next_header() self.assertEqual(hdr.magic, '070701') self.assertEqual(hdr.ino, 0) self.assertEqual(hdr.mode, 0) self.assertEqual(hdr.uid, 0) self.assertEqual(hdr.gid, 0) self.assertEqual(hdr.nlink, 1) self.assertEqual(hdr.mtime, 0) self.assertEqual(hdr.filesize, 0) self.assertEqual(hdr.dev_maj, 0) self.assertEqual(hdr.dev_min, 0) self.assertEqual(hdr.rdev_maj, 0) self.assertEqual(hdr.rdev_min, 0) self.assertEqual(hdr.namesize, 11) self.assertEqual(hdr.chksum, 0) self.assertEqual(hdr.name, 'TRAILER!!!') # self.assertFalse(hdr.is_regular_file()) # no more headers available self.assertIsNone(archive_reader.next_header())
def test2(self): """test FileWrapper with file object (no mmap)""" fname = self.fixture_file('filewrapper1.txt') with open(fname, 'r') as fobj: f = FileWrapper(fobj=fobj, use_mmap=False) self.assertFalse(isinstance(f._fobj, mmap.mmap)) self.assertTrue(f.is_seekable()) self.assertEqual(f.tell(), 0) self.assertEqual(f.read(1), 'T') self.assertEqual(f.tell(), 1) # seek to position 0 again f.seek(-1, os.SEEK_CUR) self.assertEqual(f.tell(), 0) self.assertEqual(f.read(5), 'This ') self.assertEqual(f.tell(), 5) # read rest of the file self.assertEqual(f.read(), 'is a simple\ntext file.\n') f.close() # the fobj should not be closed in this case self.assertFalse(fobj.closed)
def test5(self): """test FileWrapper with unseekable file object""" sio = StringIO('Simple test file') sio.seek = None f = FileWrapper(fobj=sio, use_mmap=False) self.assertFalse(f.is_seekable()) self.assertFalse(isinstance(f._fobj, mmap.mmap)) self.assertEqual(f.tell(), 0) self.assertEqual(f.read(3), 'Sim') self.assertEqual(f.tell(), 3) # seeking backward is not supposed to work self.assertRaises(IOError, f.seek, 0, os.SEEK_SET) self.assertRaises(IOError, f.seek, -2, os.SEEK_SET) self.assertRaises(IOError, f.seek, -2, os.SEEK_CUR) self.assertRaises(IOError, f.seek, 5, os.SEEK_END) # seeking forward (absolute) does work (skip 'pl') f.seek(5, os.SEEK_SET) self.assertEqual(f.read(3), 'e t') # seeking forward (relative) does work (skip 'est') f.seek(3, os.SEEK_CUR) # read the rest of the file self.assertEqual(f.read(), ' file') f.close() # sio should not be closed self.assertFalse(sio.closed)