Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
 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))
Ejemplo n.º 6
0
 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))
Ejemplo n.º 7
0
 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))
Ejemplo n.º 8
0
 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)
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
 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))
Ejemplo n.º 11
0
    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)
Ejemplo n.º 12
0
    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)
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
0
 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)
Ejemplo n.º 15
0
 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()
Ejemplo n.º 16
0
 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()
Ejemplo n.º 17
0
    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)
Ejemplo n.º 18
0
 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)
Ejemplo n.º 19
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()
Ejemplo n.º 20
0
 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)
Ejemplo n.º 21
0
    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)
Ejemplo n.º 22
0
    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()
Ejemplo n.º 23
0
    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()
Ejemplo n.º 24
0
    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)
Ejemplo n.º 25
0
    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()
Ejemplo n.º 26
0
    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)
Ejemplo n.º 27
0
 def test_6_getattr(self):
     retval, sb = hw3.getattr("/dir2/file.2k")
     self.assertTrue(retval == -hw3.ENOENT)
Ejemplo n.º 28
0
 def test_30_getattr(self):
     retval, sb = hw3.getattr("/file.10")
     self.assertTrue(sb.st_mode == int("100777", 8))
Ejemplo n.º 29
0
 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))
Ejemplo n.º 30
0
 def test_33_getattr(self):
     retval, sb = hw3.getattr("/dir2")
     self.assertTrue(sb.st_mode == int("40666", 8))