186 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Python
		
	
	
	
| import py
 | |
| 
 | |
| class TestPOSIXLocalPath:
 | |
|     #root = local(TestLocalPath.root)
 | |
|     disabled = py.std.sys.platform == 'win32'
 | |
| 
 | |
|     def setup_class(cls):
 | |
|         cls.root = py.test.ensuretemp(cls.__name__) 
 | |
| 
 | |
|     def setup_method(self, method): 
 | |
|         name = method.im_func.func_name
 | |
|         self.tmpdir = self.root.ensure(name, dir=1) 
 | |
| 
 | |
|     def test_hardlink(self):
 | |
|         tmpdir = self.tmpdir 
 | |
|         linkpath = tmpdir.join('test')
 | |
|         filepath = tmpdir.join('file')
 | |
|         filepath.write("Hello")
 | |
|         nlink = filepath.stat().st_nlink 
 | |
|         linkpath.mklinkto(filepath)
 | |
|         assert filepath.stat().st_nlink == nlink + 1 
 | |
| 
 | |
|     def test_symlink_are_identical(self):
 | |
|         tmpdir = self.tmpdir 
 | |
|         filepath = tmpdir.join('file')
 | |
|         filepath.write("Hello")
 | |
|         linkpath = tmpdir.join('test')
 | |
|         linkpath.mksymlinkto(filepath)
 | |
|         assert linkpath.readlink() == str(filepath) 
 | |
| 
 | |
|     def test_symlink_isfile(self):
 | |
|         tmpdir = self.tmpdir 
 | |
|         linkpath = tmpdir.join('test')
 | |
|         filepath = tmpdir.join('file')
 | |
|         filepath.write("")
 | |
|         linkpath.mksymlinkto(filepath)
 | |
|         assert linkpath.check(file=1)
 | |
|         assert not linkpath.check(link=0, file=1)
 | |
| 
 | |
|     def test_symlink_relative(self):
 | |
|         tmpdir = self.tmpdir 
 | |
|         linkpath = tmpdir.join('test')
 | |
|         filepath = tmpdir.join('file')
 | |
|         filepath.write("Hello")
 | |
|         linkpath.mksymlinkto(filepath, absolute=False)
 | |
|         assert linkpath.readlink() == "file"
 | |
|         assert filepath.read() == linkpath.read()
 | |
| 
 | |
|     def test_symlink_not_existing(self):
 | |
|         tmpdir = self.tmpdir 
 | |
|         linkpath = tmpdir.join('testnotexisting')
 | |
|         assert not linkpath.check(link=1)
 | |
|         assert linkpath.check(link=0)
 | |
| 
 | |
|     def test_relto_with_root(self):
 | |
|         y = self.root.join('x').relto(py.path.local('/'))
 | |
|         assert y[0] == str(self.root)[1]
 | |
| 
 | |
|     def test_visit_recursive_symlink(self):
 | |
|         tmpdir = self.tmpdir 
 | |
|         linkpath = tmpdir.join('test')
 | |
|         linkpath.mksymlinkto(tmpdir)
 | |
|         visitor = tmpdir.visit(None, lambda x: x.check(link=0))
 | |
|         assert list(visitor) == [linkpath]
 | |
| 
 | |
|     def test_symlink_isdir(self):
 | |
|         tmpdir = self.tmpdir 
 | |
|         linkpath = tmpdir.join('test')
 | |
|         linkpath.mksymlinkto(tmpdir)
 | |
|         assert linkpath.check(dir=1)
 | |
|         assert not linkpath.check(link=0, dir=1)
 | |
| 
 | |
|     def test_symlink_remove(self):
 | |
|         tmpdir = self.tmpdir.realpath() 
 | |
|         linkpath = tmpdir.join('test')
 | |
|         linkpath.mksymlinkto(linkpath) # point to itself
 | |
|         assert linkpath.check(link=1)
 | |
|         linkpath.remove()
 | |
|         assert not linkpath.check()
 | |
| 
 | |
|     def test_realpath_file(self):
 | |
|         tmpdir = self.tmpdir 
 | |
|         linkpath = tmpdir.join('test')
 | |
|         filepath = tmpdir.join('file')
 | |
|         filepath.write("")
 | |
|         linkpath.mksymlinkto(filepath)
 | |
|         realpath = linkpath.realpath()
 | |
|         assert realpath.basename == 'file'
 | |
| 
 | |
|     def test_owner(self):
 | |
|         from pwd import getpwuid
 | |
|         from grp import getgrgid
 | |
|         stat = self.root.stat()
 | |
|         assert stat.path == self.root 
 | |
| 
 | |
|         uid = stat.st_uid 
 | |
|         gid = stat.st_gid 
 | |
|         owner = getpwuid(uid)[0]
 | |
|         group = getgrgid(gid)[0]
 | |
| 
 | |
|         assert uid == stat.uid 
 | |
|         assert owner == stat.owner 
 | |
|         assert gid == stat.gid 
 | |
|         assert group == stat.group 
 | |
| 
 | |
|     def XXXtest_atime(self):
 | |
|         # XXX disabled. this test is just not platform independent enough
 | |
|         #     because acesstime resolution is very different through
 | |
|         #     filesystems even on one platform.
 | |
|         import time
 | |
|         path = self.root.join('samplefile')
 | |
|         atime = path.atime()
 | |
|         time.sleep(1)
 | |
|         path.read(1)
 | |
|         assert path.atime() != atime
 | |
| 
 | |
|     def test_commondir(self):
 | |
|         # XXX This is here in local until we find a way to implement this
 | |
|         #     using the subversion command line api.
 | |
|         p1 = self.root.join('something')
 | |
|         p2 = self.root.join('otherthing')
 | |
|         assert p1.common(p2) == self.root
 | |
|         assert p2.common(p1) == self.root
 | |
| 
 | |
|     def test_commondir_nocommon(self):
 | |
|         # XXX This is here in local until we find a way to implement this
 | |
|         #     using the subversion command line api.
 | |
|         p1 = self.root.join('something')
 | |
|         p2 = py.path.local(self.root.sep+'blabla')
 | |
|         assert p1.common(p2) == '/' 
 | |
| 
 | |
|     def test_join_to_root(self): 
 | |
|         root = self.root.parts()[0]
 | |
|         assert len(str(root)) == 1
 | |
|         assert str(root.join('a')) == '/a'
 | |
| 
 | |
|     def test_join_root_to_root_with_no_abs(self): 
 | |
|         nroot = self.root.join('/')
 | |
|         assert str(self.root) == str(nroot) 
 | |
|         assert self.root == nroot 
 | |
| 
 | |
|     def test_chmod_simple_int(self):
 | |
|         print "self.root is", self.root
 | |
|         mode = self.root.mode()
 | |
|         self.root.chmod(mode/2)
 | |
|         try:
 | |
|             assert self.root.mode() != mode
 | |
|         finally:
 | |
|             self.root.chmod(mode)
 | |
|             assert self.root.mode() == mode
 | |
| 
 | |
|     def test_chmod_rec_int(self):
 | |
|         # XXX fragile test
 | |
|         print "self.root is", self.root
 | |
|         recfilter = lambda x: x.check(dotfile=0, link=0)
 | |
|         oldmodes = {}
 | |
|         for x in self.root.visit(rec=recfilter):
 | |
|             oldmodes[x] = x.mode()
 | |
|         self.root.chmod(0772, rec=recfilter)
 | |
|         try:
 | |
|             for x in self.root.visit(rec=recfilter):
 | |
|                 assert x.mode() & 0777 == 0772
 | |
|         finally:
 | |
|             for x,y in oldmodes.items():
 | |
|                 x.chmod(y)
 | |
| 
 | |
|     def test_chown_identity(self):
 | |
|         owner = self.root.owner()
 | |
|         group = self.root.group()
 | |
|         self.root.chown(owner, group)
 | |
| 
 | |
|     def test_chown_dangling_link(self):
 | |
|         owner = self.root.owner()
 | |
|         group = self.root.group()
 | |
|         x = self.root.join('hello')
 | |
|         x.mksymlinkto('qlwkejqwlek')
 | |
|         try:
 | |
|             self.root.chown(owner, group, rec=1)
 | |
|         finally:
 | |
|             x.remove(rec=0)
 | |
| 
 | |
|     def test_chown_identity_rec_mayfail(self):
 | |
|         owner = self.root.owner()
 | |
|         group = self.root.group()
 | |
|         self.root.chown(owner, group)
 |