Example #1
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_files(self.temp_dir))
     self.assertEqual(context.exception.first_path, "Dir")
     self.assertEqual(context.exception.second_path, self.ospath("Dir/Self"))
Example #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_files(self.temp_dir))
        self.assertEqual(
            results,
            set(
                map(self.ospath, [
                    'a',
                    'b',
                    'Dir/c',
                    'Dir/d',
                    'Dir/Inner/e',
                    'Dir/Inner/f',
                ])))
Example #3
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_files(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])
Example #4
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_files(self.temp_dir))
        self.assertEqual(
            results,
            set(
                map(
                    self.ospath,
                    [
                        "a",
                        "b",
                        "Dir/c",
                        "Dir/d",
                        "Dir/Inner/e",
                        "Dir/Inner/f",
                    ],
                )),
        )
Example #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_files(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],
        )
Example #6
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_files(self.temp_dir))
        self.assertEqual(results, set())
Example #7
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_files(self.temp_dir, on_error=reraise))
        self.assertEqual(context.exception.errno, errno.ENOENT)
Example #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"),
             ("DirX", "Dir"),
         ]
     )
     results = set(iter_tree_files(self.temp_dir))
     self.assertEqual(
         results,
         set(
             map(
                 self.ospath,
                 [
                     "a",
                     "ax",
                     "b",
                     "bx",
                     "Dir/c",
                     "Dir/cx",
                     "Dir/d",
                     "Dir/dx",
                     "DirX/c",
                     "DirX/cx",
                     "DirX/d",
                     "DirX/dx",
                 ],
             )
         ),
     )
Example #9
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_files(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",
                 ],
             )
         ),
     )
Example #10
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_files(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",
                     "DirX",
                 ],
             )
         ),
     )
Example #11
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'),
            ('DirX', 'Dir'),
        ])
        results = set(iter_tree_files(self.temp_dir))
        self.assertEqual(
            results,
            set(
                map(self.ospath, [
                    'a',
                    'ax',
                    'b',
                    'bx',
                    'Dir/c',
                    'Dir/cx',
                    'Dir/d',
                    'Dir/dx',
                    'DirX/c',
                    'DirX/cx',
                    'DirX/d',
                    'DirX/dx',
                ])))
Example #12
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_files(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',
                ])))
Example #13
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_files(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',
                    'DirX',
                ])))