def test_fsync(self): fsync_file_name = 'text_fsync.txt' fd = nt.open(fsync_file_name, nt.O_WRONLY | nt.O_CREAT) # negative test, make sure it raises on invalid (closed) fd try: nt.close(fd+1) except: pass self.assertRaises(OSError, nt.fsync, fd+1) # BUG (or implementation detail) # On a posix system, once written to a file descriptor # it can be read using another fd without any additional intervention. # In case of IronPython the data lingers in a stream which # is used to simulate file descriptor. fd2 = nt.open(fsync_file_name, nt.O_RDONLY) self.assertEqual(nt.read(fd2, 1), b'') nt.write(fd, b'1') if is_cli: self.assertEqual(nt.read(fd2, 1), b'') # this should be visible right away, but is not nt.fsync(fd) self.assertEqual(nt.read(fd2, 1), b'1') nt.close(fd) nt.close(fd2) # fsync on read file descriptor fd = nt.open(fsync_file_name, nt.O_RDONLY) if not is_cli: self.assertRaises(OSError, nt.fsync, fd) nt.close(fd) # fsync on rdwr file descriptor fd = nt.open(fsync_file_name, nt.O_RDWR) nt.fsync(fd) nt.close(fd) # fsync on derived fd if not is_cli: for mode in ('rb', 'r'): with open(fsync_file_name, mode) as f: self.assertRaises(OSError, nt.fsync, f.fileno()) for mode in ('wb', 'w'): with open(fsync_file_name, mode) as f: nt.fsync(f.fileno()) nt.unlink(fsync_file_name) # fsync on pipe ends r,w = nt.pipe() if not is_cli: self.assertRaises(OSError, nt.fsync, r) nt.write(w, b'1') if False: nt.fsync(w) # this blocks nt.close(w) nt.close(r)
def test_fsync(self): fsync_file_name = 'text_fsync.txt' fd = nt.open(fsync_file_name, nt.O_WRONLY | nt.O_CREAT) # negative test, make sure it raises on invalid (closed) fd try: nt.close(fd+1) except: pass self.assertRaises(OSError, nt.fsync, fd+1) # BUG (or implementation detail) # On a posix system, once written to a file descriptor # it can be read using another fd without any additional intervention. # In case of IronPython the data lingers in a stream which # is used to simulate file descriptor. fd2 = nt.open(fsync_file_name, nt.O_RDONLY) self.assertEqual(nt.read(fd2, 1), '') nt.write(fd, '1') self.assertEqual(nt.read(fd2, 1), '') # this should be visible right away, but is not nt.fsync(fd) self.assertEqual(nt.read(fd2, 1), '1') nt.close(fd) nt.close(fd2) # fsync on read file descriptor fd = nt.open(fsync_file_name, nt.O_RDONLY) self.assertRaises(OSError, nt.fsync, fd) nt.close(fd) # fsync on rdwr file descriptor fd = nt.open(fsync_file_name, nt.O_RDWR) nt.fsync(fd) nt.close(fd) # fsync on derived fd for mode in ('rb', 'r'): f = open(fsync_file_name, mode) self.assertRaises(OSError, nt.fsync, f.fileno()) f.close() for mode in ('wb', 'w'): f = open(fsync_file_name, mode) nt.fsync(f.fileno()) f.close() nt.unlink(fsync_file_name) # fsync on pipe ends r,w = nt.pipe() self.assertRaises(OSError, nt.fsync, r) nt.write(w, '1') nt.fsync(w) nt.close(w) nt.close(r)