Ejemplo n.º 1
0
    def test_2_5_recursive_circular_links(self):
        """
		Tests detection of recursion through circular links.
		"""
        self.require_symlink()
        self.require_realpath()
        self.make_dirs([
            'A',
            'B',
            'C',
        ])
        self.make_files(['A/d', 'B/e', 'C/f'])
        self.make_links([
            ('A/Bx', 'B'),
            ('B/Cx', 'C'),
            ('C/Ax', 'A'),
        ])
        with self.assertRaises(RecursionError) as context:
            set(iter_tree(self.temp_dir))
        self.assertIn(context.exception.first_path, ('A', 'B', 'C'))
        self.assertEqual(
            context.exception.second_path, {
                'A': self.ospath('A/Bx/Cx/Ax'),
                'B': self.ospath('B/Cx/Ax/Bx'),
                'C': self.ospath('C/Ax/Bx/Cx'),
            }[context.exception.first_path])
Ejemplo n.º 2
0
    def test_1_files(self):
        """
		Tests to make sure all files are found.
		"""
        self.make_dirs([
            'Empty',
            'Dir',
            'Dir/Inner',
        ])
        self.make_files([
            'a',
            'b',
            'Dir/c',
            'Dir/d',
            'Dir/Inner/e',
            'Dir/Inner/f',
        ])
        results = set(iter_tree(self.temp_dir))
        self.assertEqual(
            results,
            set(
                map(self.ospath, {
                    'a',
                    'b',
                    'Dir/c',
                    'Dir/d',
                    'Dir/Inner/e',
                    'Dir/Inner/f',
                })))
Ejemplo n.º 3
0
	def test_1_files(self):
		"""
		Tests to make sure all files are found.
		"""
		self.make_dirs([
			'Empty',
			'Dir',
			'Dir/Inner',
		])
		self.make_files([
			'a',
			'b',
			'Dir/c',
			'Dir/d',
			'Dir/Inner/e',
			'Dir/Inner/f',
		])
		results = set(iter_tree(self.temp_dir))
		self.assertEqual(results, set(map(self.ospath, [
			'a',
			'b',
			'Dir/c',
			'Dir/d',
			'Dir/Inner/e',
			'Dir/Inner/f',
		])))
Ejemplo n.º 4
0
    def test_2_2_links(self):
        """
		Tests to make sure links to directories and files work.
		"""
        self.require_symlink()
        self.make_dirs(['Dir'])
        self.make_files([
            'a',
            'b',
            'Dir/c',
            'Dir/d',
        ])
        self.make_links([
            ('ax', 'a'),
            ('bx', 'b'),
            ('Dir/cx', 'Dir/c'),
            ('Dir/dx', 'Dir/d'),
        ])
        results = set(iter_tree(self.temp_dir))
        self.assertEqual(
            results,
            set(
                map(self.ospath, {
                    'a',
                    'ax',
                    'b',
                    'bx',
                    'Dir/c',
                    'Dir/cx',
                    'Dir/d',
                    'Dir/dx',
                })))
Ejemplo n.º 5
0
	def test_2_5_recursive_circular_links(self):
		"""
		Tests detection of recursion through circular links.
		"""
		self.require_symlink()
		self.require_realpath()
		self.make_dirs([
			'A',
			'B',
			'C',
		])
		self.make_files([
			'A/d',
			'B/e',
			'C/f',
		])
		self.make_links([
			('A/Bx', 'B'),
			('B/Cx', 'C'),
			('C/Ax', 'A'),
		])
		with self.assertRaises(RecursionError) as context:
			set(iter_tree(self.temp_dir))
		self.assertIn(context.exception.first_path, ('A', 'B', 'C'))
		self.assertEqual(context.exception.second_path, {
			'A': self.ospath('A/Bx/Cx/Ax'),
			'B': self.ospath('B/Cx/Ax/Bx'),
			'C': self.ospath('C/Ax/Bx/Cx'),
		}[context.exception.first_path])
Ejemplo n.º 6
0
	def test_2_8_no_follow_links(self):
		"""
		Tests to make sure directory links can be ignored.
		"""
		self.require_symlink()
		self.make_dirs([
			'Dir',
		])
		self.make_files([
			'A',
			'B',
			'Dir/C',
			'Dir/D',
		])
		self.make_links([
			('Ax', 'A'),
			('Bx', 'B'),
			('Dir/Cx', 'Dir/C'),
			('Dir/Dx', 'Dir/D'),
			('DirX', 'Dir'),
		])
		results = set(iter_tree(self.temp_dir, follow_links=False))
		self.assertEqual(results, set(map(self.ospath, [
			'A',
			'Ax',
			'B',
			'Bx',
			'Dir/C',
			'Dir/Cx',
			'Dir/D',
			'Dir/Dx',
		])))
Ejemplo n.º 7
0
	def test_2_3_sideways_links(self):
		"""
		Tests to make sure the same directory can be encountered multiple
		times via links.
		"""
		self.require_symlink()
		self.make_dirs([
			'Dir',
			'Dir/Target',
		])
		self.make_files([
			'Dir/Target/file',
		])
		self.make_links([
			('Ax', 'Dir'),
			('Bx', 'Dir'),
			('Cx', 'Dir/Target'),
			('Dx', 'Dir/Target'),
			('Dir/Ex', 'Dir/Target'),
			('Dir/Fx', 'Dir/Target'),
		])
		results = set(iter_tree(self.temp_dir))
		self.assertEqual(results, set(map(self.ospath, [
			'Ax/Ex/file',
			'Ax/Fx/file',
			'Ax/Target/file',
			'Bx/Ex/file',
			'Bx/Fx/file',
			'Bx/Target/file',
			'Cx/file',
			'Dx/file',
			'Dir/Ex/file',
			'Dir/Fx/file',
			'Dir/Target/file',
		])))
Ejemplo n.º 8
0
	def test_2_2_links(self):
		"""
		Tests to make sure links to directories and files work.
		"""
		self.require_symlink()
		self.make_dirs([
			'Dir',
		])
		self.make_files([
			'a',
			'b',
			'Dir/c',
			'Dir/d',
		])
		self.make_links([
			('ax', 'a'),
			('bx', 'b'),
			('Dir/cx', 'Dir/c'),
			('Dir/dx', 'Dir/d'),
		])
		results = set(iter_tree(self.temp_dir))
		self.assertEqual(results, set(map(self.ospath, [
			'a',
			'ax',
			'b',
			'bx',
			'Dir/c',
			'Dir/cx',
			'Dir/d',
			'Dir/dx',
		])))
Ejemplo n.º 9
0
    def test_2_7_ignore_broken_links(self):
        """
		Tests that broken links are ignored.
		"""
        self.require_symlink()
        self.make_links([('A', 'DOES_NOT_EXIST')])
        results = set(iter_tree(self.temp_dir))
        self.assertEqual(results, set())
Ejemplo n.º 10
0
	def test_2_7_ignore_broken_links(self):
		"""
		Tests that broken links are ignored.
		"""
		self.require_symlink()
		self.make_links([
			('A', 'DOES_NOT_EXIST'),
		])
		results = set(iter_tree(self.temp_dir))
		self.assertEqual(results, set())
Ejemplo n.º 11
0
    def test_2_6_detect_broken_links(self):
        """
		Tests that broken links are detected
		"""
        def reraise(e):
            raise e

        self.require_symlink()
        self.make_links([('A', 'DOES_NOT_EXIST')])
        with self.assertRaises(OSError) as context:
            set(iter_tree(self.temp_dir, on_error=reraise))
        self.assertEqual(context.exception.errno, errno.ENOENT)
Ejemplo n.º 12
0
	def test_2_6_detect_broken_links(self):
		"""
		Tests that broken links are detected.
		"""
		def reraise(e):
			raise e

		self.require_symlink()
		self.make_links([
			('A', 'DOES_NOT_EXIST'),
		])
		with self.assertRaises(OSError) as context:
			set(iter_tree(self.temp_dir, on_error=reraise))
		self.assertEqual(context.exception.errno, errno.ENOENT)
Ejemplo n.º 13
0
	def test_2_4_recursive_links(self):
		"""
		Tests detection of recursive links.
		"""
		self.require_symlink()
		self.require_realpath()
		self.make_dirs([
			'Dir',
		])
		self.make_files([
			'Dir/file',
		])
		self.make_links([
			('Dir/Self', 'Dir'),
		])
		with self.assertRaises(RecursionError) as context:
			set(iter_tree(self.temp_dir))
		self.assertEqual(context.exception.first_path, 'Dir')
		self.assertEqual(context.exception.second_path, self.ospath('Dir/Self'))