def test_10_rename(self): v = hw3.mkdir('dir1', 0o000755) v = hw3.create('dir1/file.A', 0o100777) v = hw3.create('dir1/file.C', 0o100777) print "Test 10a - rename a file:" v = hw3.rename('dir1/file.A', 'dir1/file.B') v, sb = hw3.getattr('dir1/file.A') self.assertTrue(v == -hw3.ENOENT) v, sb = hw3.getattr('dir1/file.B') self.assertTrue(v == 0) print "Test 10b - rename a directory:" v = hw3.rename('dir1', 'dir2') v, sb = hw3.getattr('dir1') self.assertTrue(v == -hw3.ENOENT) v, sb = hw3.getattr('dir2') self.assertTrue(v == 0) print "Test 10c - cannot a rename to a current:" v = hw3.rename('dir2/file.B', 'dir2/file.C') self.assertTrue(v == -hw3.EEXIST) print "Test 10d - rename a bogus name fails:" v = hw3.rename('dir2/file.D', 'dir2/file.E') self.assertTrue(v == -hw3.ENOENT) self.fsck()
def test_stress_write_unlink(self): v, res = hw3.statfs() self.assertEqual(v, 0) blocks_free = res.f_bavail sizes = [12, 577, 1011, 1024, 1025, 2001, 8099, 37000, 289150, 1024 * 1024] writes = [17, 100, 1000, 1024, 1970] cases = [(size, write, "/%s-%s" % (size, write)) for size in sizes for write in writes] bigdata = b'123456789' * 33333333 for size, write, name in cases: towrite = bigdata[0:size] v = hw3.create(name, 0) self.assertEqual(v, 0) idx = 0 while idx < size: maxwrite = min(size, idx + write) data = towrite[idx:maxwrite] v = hw3.write(name, data, idx) self.assertEqual(v, len(data)) idx += write v, data = hw3.read(name, size + 10000, 0) self.assertEqual(v, size) self.assertEqual(len(data), size) self.assertEqual(data, towrite, name) # Truncate before the unlink roughly half of the time if size % 2 == 0: v = hw3.truncate(name, 0) self.assertEqual(v, 0) v, attr = hw3.getattr(name) self.assertEqual(v, 0) self.assertEqual(attr.st_size, 0) v = hw3.unlink(name) self.assertEqual(v, 0) v, attr = hw3.getattr(name) self.assertEqual(v, -hw3.ENOENT) v, stat = hw3.statfs() self.assertEqual(v, 0) self.assertEqual(stat.f_bavail, blocks_free)
def test_chmod(self): v = hw3.chmod("/dir1", 0o723) self.assertEqual(v, 0) v, attr = hw3.getattr("/dir1") self.assertEqual(v, 0) self.assertEqual(attr.st_mode & ~hw3.S_IFMT, 0o723) v = hw3.chmod("/file.A", 0o611) self.assertEqual(v, 0) v, attr = hw3.getattr("/file.A") self.assertEqual(v, 0) self.assertEqual(attr.st_mode & ~hw3.S_IFMT, 0o611)
def test_rmdir_valid(self): hw3.mkdir("/hello", 0) v, attr = hw3.getattr("/hello") self.assertEqual(v, 0) v = hw3.rmdir("/hello") self.assertEqual(v, 0) v, attr = hw3.getattr("/hello") self.assertEqual(v, -hw3.ENOENT) v, dirs = hw3.readdir("/hello") self.assertEqual(v, -hw3.ENOENT)
def test_8_getattr(self): retval, sb = hw3.getattr("/dir3/subdir/file.4k-") self.assertTrue(retval == 0) self.assertTrue(sb.st_uid == 500) self.assertTrue(sb.st_gid == 500) self.assertTrue(sb.st_size == 4095) self.assertTrue(sb.st_mode == int("100666", 8))
def test_7_getattr(self): retval, sb = hw3.getattr("/dir-with-long-name/file.12k+") self.assertTrue(retval == 0) self.assertTrue(sb.st_uid == 0) self.assertTrue(sb.st_gid == 500) self.assertTrue(sb.st_size == 12289) self.assertTrue(sb.st_mode == int("100666", 8))
def test_3_getattr(self): retval, sb = hw3.getattr("/file.1k") self.assertTrue(retval == 0) self.assertTrue(sb.st_uid == 500) self.assertTrue(sb.st_gid == 500) self.assertTrue(sb.st_size == 1000) self.assertTrue(sb.st_mode == int("100666", 8))
def test_6_read_translate_case4(self): # print('Test 6 - test translate with ENOTDIR:- "/file.A/file.0"') table = [('/file.7/file.0', 0o040755, 1024, 0x50000191)] for path, mode, size, ctime in table: v, sb = hw3.getattr(path) self.assertEqual(v, -hw3.ENOTDIR) self.assertNotEqual(sb.st_mode, mode)
def test_5_read_translate_case3(self): # print('Test 5 - test translate with ENOENT: - "/not-a-dir/file.0"') table = [('/dir8/file.0', 0o040755, 1024, 0x50000191)] for path, mode, size, ctime in table: v, sb = hw3.getattr(path) self.assertEqual(v, -hw3.ENOENT) self.assertNotEqual(sb.st_mode, mode)
def test_4_getattr(self): retval, sb = hw3.getattr("/dir2/file.4k+") self.assertTrue(retval == 0) self.assertTrue(sb.st_uid == 500) self.assertTrue(sb.st_gid == 500) self.assertTrue(sb.st_size == 4098) self.assertTrue(sb.st_mode == int("100777", 8))
def test_2_read(self): print "Test 2 - getattr:" table = [('/dir1', 0o040755, 1024, 0x50000190), ('/file.A', 0o100777, 1000, 0x500000C8)] for path, mode, size, ctime in table: v, sb = hw3.getattr(path) self.assertTrue(v == 0) self.assertTrue(sb.st_mode == mode) self.assertTrue(sb.st_size == size) self.assertTrue(sb.st_ctime == ctime) v, sb = hw3.getattr('/not-a-file') self.assertTrue(v == -hw3.ENOENT) v, sb = hw3.getattr('/file.A/file.0') self.assertTrue(v == -hw3.ENOTDIR)
def test_rename_good(self): v = hw3.rename("/dir1", "/dir5") self.assertEqual(v, 0) v, attr = hw3.getattr("/dir5") self.assertEqual(v, 0) v, attr = hw3.getattr("/dir1") self.assertEqual(v, -hw3.ENOENT) v = hw3.rename("/dir5/file.270", "/bigfile") self.assertEqual(v, 0) v, attr = hw3.getattr("/bigfile") self.assertEqual(v, 0) v, attr = hw3.getattr("/dir5/file.270") self.assertEqual(v, -hw3.ENOENT)
def test_stress_write_truncate(self): v, res = hw3.statfs() self.assertEqual(v, 0) blocks_free = res.f_bfree sizes = [12, 577, 1011, 1024, 1025, 2001, 8099, 37000, 289150, 1024 * 1024] cases = [(size, "/%s" % (size)) for size in sizes] bigdata = b'123456789' * 33333333 for size, name in cases: towrite = bigdata[0:size] v = hw3.create(name, 0) self.assertEqual(v, 0) v = hw3.write(name, towrite, 0) self.assertEqual(v, size) v, data = hw3.read(name, size + 10000, 0) self.assertEqual(v, size) self.assertEqual(len(data), size) self.assertEqual(data, towrite, name) # Truncate before the unlink roughly half of the time v = hw3.truncate(name, 0) self.assertEqual(v, 0) v, attr = hw3.getattr(name) self.assertEqual(v, 0) self.assertEqual(attr.st_size, 0) v = hw3.unlink(name) self.assertEqual(v, 0) v, attr = hw3.getattr(name) self.assertEqual(v, -hw3.ENOENT) v, stat = hw3.statfs() self.assertEqual(v, 0) self.assertEqual(stat.f_bfree, blocks_free)
def test_2_read(self): # print('Test 2 - getattr():') table = [('/dir1', 0o040755, 1024, 0x50000190), ('/file.A', 0o100777, 1000, 0x500000C8), ('/file.7', 0o100777, 6644, 0x5000012C)] for path, mode, size, ctime in table: v, sb = hw3.getattr(path) self.assertEqual(sb.st_mode, mode) self.assertEqual(sb.st_size, size) self.assertEqual(sb.st_ctime, ctime)
def test_4_chmod(self): print "Test 4 - chmod:" table = [('/file.B', 0o000755), ('/dir1', 0o000777)] for path, mode in table: v = hw3.chmod(path, mode) self.assertTrue(v == 0) v, sb = hw3.getattr(path) self.assertTrue(v == 0) self.assertEqual((sb.st_mode & ~hw3.S_IFMT), mode) self.fsck()
def test_5_utime(self): print "Test 5 - utime:" table = [('/file.B', 0x500000C8), ('/dir1/file.A', 0x500000C8)] for path, time in table: v = hw3.utime(path, time, time) self.assertTrue(v == 0) v, sb = hw3.getattr(path) self.assertTrue(v == 0) self.assertTrue(sb.st_mtime == time) self.fsck()
def test_create(self): num = 500 for i in range(num): mode = i % 0o1000 v = hw3.create("/" + str(i), mode) self.assertEqual(v, 0) v, attr = hw3.getattr("/" + str(i)) self.assertEqual(v, 0) self.assertEqual(attr.st_size, 0) self.assertEqual(attr.st_mode, mode | hw3.S_IFREG)
def test_1_mkdir(self): print "Test 1 - mkdir:" table = [('/dir1', 0o000755), ('/dir1/dir2', 0o000755)] for path, mode in table: v = hw3.mkdir(path, mode) self.assertTrue(v == 0) v, sb = hw3.getattr(path) self.assertTrue(v == 0) self.assertTrue(sb.st_mode == hw3.S_IFDIR | mode) v, dirents = hw3.readdir(path) self.assertTrue(v == 0) self.assertTrue(len(dirents) == 0)
def test_7_truncate(self): print "Test 7 - truncate:" v, sfs = hw3.statfs() f_bfree = sfs.f_bfree hw3.create('/to_be_truncate', 0o100777) hw3.write('/to_be_truncate', 10000 * 'K', 0) v = hw3.truncate("/to_be_truncate", 0) self.assertTrue(v == 0) v, sb = hw3.getattr("/to_be_truncate") self.assertTrue(v == 0) self.assertTrue(sb.st_size == 0) v, sfs = hw3.statfs() self.assertTrue(sfs.f_bfree == f_bfree) self.fsck()
def test_9_readdir(self): # print('Test 9 - Test for readdir()') v, dirents = hw3.readdir("/") names = set([d.name.decode('utf-8') for d in dirents]) self.assertEqual(names, set(('file.A', 'dir1', 'file.7', 'file.10'))) table = [('/dir1', 0o040755, 1024, 0x50000190), ('/file.A', 0o100777, 1000, 0x500000C8), ('/file.7', 0o100777, 6644, 0x5000012C), ('/file.10', 0o100777, 10234, 0x5000012C)] for path, mode, size, ctime in table: v, sb = hw3.getattr(path) self.assertEqual(sb.st_mode, mode) self.assertEqual(sb.st_size, size) self.assertEqual(sb.st_ctime, ctime)
def test_long_name(self): files = {"Hello, world", "12345678901234567890", "123456789012345678901234567", "1" * 28, "2" * 35} endfiles = {f[0:27] for f in files} for file in files: v = hw3.create("/" + file, 0) self.assertEqual(v, 0) v, attr = hw3.getattr(file) self.assertEqual(v, 0) v, rd = hw3.readdir("/") self.assertEqual({s.name.decode("utf-8") for s in rd}, endfiles) for efile in endfiles: v, attr = hw3.getattr("/" + efile) self.assertEqual(v, 0) self.assertEqual(hw3.create("2" * 44, 0), -hw3.EEXIST)
def test_9_rmdir(self): print "Test 9a - rmdir:" v = hw3.rmdir('dir1/dir2') v, sb = hw3.getattr('dir1/dir2') self.assertTrue(v == -hw3.ENOENT) print "Test 9b - cannot rmdir a file:" v = hw3.rmdir('dir1/file.A') self.assertTrue(v == -hw3.ENOTDIR) print "Test 9c - cannot rmdir a non-empty directory:" v = hw3.rmdir('dir1') self.assertTrue(v == -hw3.ENOTEMPTY) v = hw3.unlink('dir1/file.A') v = hw3.rmdir('dir1') self.assertTrue(v == 0) self.fsck()
def test_2_create(self): print "Test 2a - create:" table = [('/file.B', 0o100777), ('/dir1/file.A', 0o100777)] for path, mode in table: v = hw3.create(path, mode) self.assertTrue(v == 0) v, sb = hw3.getattr(path) self.assertTrue(v == 0) self.assertTrue(sb.st_mode == hw3.S_IFREG | mode) self.assertTrue(sb.st_size == 0) print "Test 2b - create wired filename:" hw3.create('/thisisatwenty-eight-byte-name', 0o100777) v, dirents = hw3.readdir('/') for item in dirents: print item.name self.fsck()
def test_1_mkdir(self): # print('Test 1 - Mkdir on good path') attrs = [("/dir2", 0), ("/dir2/hello", 0o777), ("/dir2/hello/world", 0o744)] for path, perm in attrs: self.assertEqual(0, hw3.mkdir(path, perm)) for path, perm in attrs: v, attr = hw3.getattr(path) self.assertEqual(v, 0) self.assertEqual(attr.st_mode, perm | hw3.S_IFDIR) v, entries = hw3.readdir(path) numents = 0 if perm == 0o744 else 1 self.assertEqual(v, numents) self.assertEqual(numents, len(entries), path)
def test_8_unlink(self): print "Test 8a - unlink:" v, sfs = hw3.statfs() f_bfree = sfs.f_bfree path = 'to_be_delete' hw3.create(path, 0o100777) hw3.write(path, 10000 * 'K', 0) v = hw3.unlink(path) self.assertTrue(v == 0) v, sb = hw3.getattr(path) self.assertTrue(v == -hw3.ENOENT) v, sfs = hw3.statfs() self.assertTrue(sfs.f_bfree == f_bfree) print "Test 8b - cannot unlink a directory:" v = hw3.unlink('dir1/dir2') self.assertTrue(v == -hw3.EISDIR) self.fsck()
def test_utime(self): names = ["/dir1", "/file.A"] now = int(time()) times = [0, 1234534598, now] for name in names: for t in times: v = hw3.utime(name, 0, t) self.assertEqual(v, 0) v, attr = hw3.getattr(name) self.assertEqual(v, 0) theirtime = attr.st_mtime if t == 0: self.assertAlmostEqual(theirtime, now, delta=2) else: self.assertEqual(theirtime, t)
def test_6_getattr(self): retval, sb = hw3.getattr("/dir2/file.2k") self.assertTrue(retval == -hw3.ENOENT)
def test_30_getattr(self): retval, sb = hw3.getattr("/file.10") self.assertTrue(sb.st_mode == int("100777", 8))
def test_2_getattr(self): retval, sb = hw3.getattr("/") self.assertTrue(retval == 0) self.assertTrue(sb.st_uid == 0) self.assertTrue(sb.st_gid == 0) self.assertTrue(sb.st_mode == int("40777", 8))
def test_33_getattr(self): retval, sb = hw3.getattr("/dir2") self.assertTrue(sb.st_mode == int("40666", 8))