Beispiel #1
0
 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)
Beispiel #2
0
    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')
Beispiel #3
0
 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))
Beispiel #4
0
 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))
Beispiel #5
0
 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')
Beispiel #6
0
 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')
Beispiel #7
0
 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')
Beispiel #8
0
 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')
Beispiel #9
0
    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())
Beispiel #10
0
    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())
Beispiel #11
0
 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)
Beispiel #12
0
 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()
Beispiel #13
0
 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')
Beispiel #14
0
    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())
Beispiel #15
0
    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())
Beispiel #16
0
 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)
Beispiel #17
0
 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)