예제 #1
0
    def test_add_remove_source_dir_with_files_only(self):
        dirname = join_path([self.test_dir, self.p('foo')])
        filenames = [self.p('bar'), self.p('baz')]
        file_paths = [join_path([dirname, filename]) for filename in filenames]

        self._init(PathMetaStore(), u'/%f')
        self.source_tree_rep.start()
        try:
            self._create_dir(dirname)
            self._create_files(file_paths)
            self.source_tree_rep.add_source_dir(dirname)

            # Seems like there is some variability in the order of entries
            # here on different systems.  It must be related to the source
            # filesystem type, even though I would think it would only depend
            # on the order the files are added (above).  It is not critical
            # that the order is what we'd expect, so we use set(...) here
            # to accomodate the variability.
            self.assertEqual(
                set(self.source_tree_rep.get_entries(u'/')),
                set(filenames),
            )

            self._remove_files(file_paths)
            self._remove_dir(dirname)
            self.source_tree_rep.remove_source_dir(dirname)
            self.assertEqual(self.source_tree_rep.get_entries(u'/'), [])
        finally:
            self.source_tree_rep.stop()
예제 #2
0
    def test_add_remove_source_dir_with_files_only(self):
        dirname = join_path([self.test_dir, self.p('foo')])
        filenames = [self.p('bar'), self.p('baz')]
        file_paths = [join_path([dirname, filename]) for filename in filenames]

        self._init(PathMetaStore(), u'/%f')
        self.source_tree_rep.start()
        try:
            self._create_dir(dirname)
            self._create_files(file_paths)
            self.source_tree_rep.add_source_dir(dirname)

            # Seems like there is some variability in the order of entries
            # here on different systems.  It must be related to the source
            # filesystem type, even though I would think it would only depend
            # on the order the files are added (above).  It is not critical
            # that the order is what we'd expect, so we use set(...) here
            # to accomodate the variability.
            self.assertEqual(
              set(self.source_tree_rep.get_entries(u'/')),
              set(filenames),
            )

            self._remove_files(file_paths)
            self._remove_dir(dirname)
            self.source_tree_rep.remove_source_dir(dirname)
            self.assertEqual(self.source_tree_rep.get_entries(u'/'), [])
        finally:
            self.source_tree_rep.stop()
예제 #3
0
    def test_populate_with_one_subdir(self):
        dirname = join_path([self.test_dir, self.p('foo')])
        filenames = [self.p('bar'), self.p('baz')]
        file_paths = [join_path([dirname, filename]) for filename in filenames]

        self._create_dir(dirname)
        try:
            self._create_files(file_paths)
            try:
                self._init(PathMetaStore(), u'/%f')
                self.source_tree_rep.start()
                try:
                    # Order of entries is dependent upon the order that files
                    # were read from the source filesystem.  This can vary
                    # depending on the filesystem type, so we use set(...)
                    # to compare irrespective of order.
                    self.assertEqual(
                        set(self.source_tree_rep.get_entries(u'/')),
                        set(filenames),
                    )
                finally:
                    self.source_tree_rep.stop()

            finally:
                self._remove_files(file_paths)
        finally:
            self._remove_dir(dirname)
예제 #4
0
    def test_populate_with_one_subdir(self):
        dirname = join_path([self.test_dir, self.p('foo')])
        filenames = [self.p('bar'), self.p('baz')]
        file_paths = [join_path([dirname, filename]) for filename in filenames]

        self._create_dir(dirname)
        try:
            self._create_files(file_paths)
            try:
                self._init(PathMetaStore(), u'/%f')
                self.source_tree_rep.start()
                try:
                    # Order of entries is dependent upon the order that files
                    # were read from the source filesystem.  This can vary
                    # depending on the filesystem type, so we use set(...)
                    # to compare irrespective of order.
                    self.assertEqual(
                      set(self.source_tree_rep.get_entries(u'/')),
                      set(filenames),
                    )
                finally:
                    self.source_tree_rep.stop()

            finally:
                self._remove_files(file_paths)
        finally:
            self._remove_dir(dirname)
예제 #5
0
 def test_stat_fake_directory_with_not_found_file(self):
     dir_path = join_path([self.test_dir, self.p(u'foo')])
     file_path = join_path([dir_path, self.p(u'bar')])
     self._create_dir(dir_path)
     try:
         self._create_file(file_path)
         self._init(PathMetaStore(), u'/%p/%f')
         self.source_tree_rep.start()
         try:
             self._remove_file(file_path)
             self.source_tree_rep.getattr(unicode_path_sep)
         finally:
             self.source_tree_rep.stop()
     finally:
         self._remove_dir(dir_path)
예제 #6
0
 def test_stat_fake_directory_with_not_found_file(self):
     dir_path = join_path([self.test_dir, self.p(u'foo')])
     file_path = join_path([dir_path, self.p(u'bar')])
     self._create_dir(dir_path)
     try:
         self._create_file(file_path)
         self._init(PathMetaStore(), u'/%p/%f')
         self.source_tree_rep.start()
         try:
             self._remove_file(file_path)
             self.source_tree_rep.getattr(unicode_path_sep)
         finally:
             self.source_tree_rep.stop()
     finally:
         self._remove_dir(dir_path)
예제 #7
0
 def test_rename_path_with_directory_containing_file_end_points(self):
     file_path = join_path([self.test_dir, self.p('foo')])
     content_old = self.p('klink\n')
     content_new = self.p('klank\n')
     self._create_file(file_path, content_old)
     self._init(
       DelegateMultiMetaStore([ContentMetaStore(), PathMetaStore()]),
       u'/%c/%f',
     )
     self.source_tree_rep.start()
     try:
         self.source_tree_rep.rename_path(
           join_path_abs([content_old.rstrip(u'\n')]),
           join_path_abs([content_new.rstrip(u'\n')]),
         )
         self.source_tree_rep.update_source_file(file_path)
         self.assertEqual(
           self.source_tree_rep.get_entries(u'/'),
           [content_new.rstrip(u'\n')],
         )
         self.assertEqual(
           self.source_tree_rep.get_entries(join_path_abs([content_new.rstrip(u'\n')])),
           [self.p('foo')],
         )
         self.assertEqual(self._get_file_content(file_path), content_new)
     finally:
         self.source_tree_rep.stop()
         self._remove_file(file_path)
예제 #8
0
    def test_getattr_with_file_end_point(self):
        filename = self.p('foo')
        real_path = join_path([self.test_dir, filename])
        self._create_file(real_path)

        try:
            self._init(PathMetaStore(), u'/%f/%f')
            fake_path = join_path_abs([filename, filename])

            self.source_tree_rep.start()
            try:
                lstat_result = os.lstat(real_path)
                getattr_result = self.source_tree_rep.getattr(fake_path)

                self.assertTrue(isinstance(getattr_result, os.stat_result))
                self.assertTrue(stat.S_ISREG(getattr_result.st_mode))

                self.assertEqual(
                  stat.S_IMODE(lstat_result.st_mode),
                  stat.S_IMODE(getattr_result.st_mode),
                )
                
                for attr in ('st_nlink', 'st_uid', 'st_gid', 'st_size'):
                    self._assert_lstat_getattr_attrs_are_equal(
                      attr, lstat_result, getattr_result)

                for attr in ('st_atime', 'st_mtime', 'st_ctime'):
                    self._assert_lstat_getattr_attrs_are_equal_plus_or_minus(
                      attr, lstat_result, getattr_result, 2)
            finally:
                self.source_tree_rep.stop()

        finally:
            self._remove_file(real_path)
예제 #9
0
    def test_directory_mid_point(self):
        filename = self.p('foo')
        real_path = join_path([self.test_dir, filename])
        self._create_file(real_path)
        try:
            self._init(PathMetaStore(), u'/%f/%f')
            fake_path = join_path_abs([filename])

            self.source_tree_rep.start()
            try:
                self.assertRaises(
                  IsADirectory, self.source_tree_rep.get_real_path, fake_path)
                self.assertEqual(
                  self.source_tree_rep.get_entries(fake_path), [filename])
                self.assertTrue(
                  self.source_tree_rep.path_exists(fake_path))
                self.assertFalse(
                  self.source_tree_rep.is_file(fake_path))
                self.assertTrue(
                  self.source_tree_rep.is_dir(fake_path))
                self.assertFalse(
                  self.source_tree_rep.is_empty_dir(fake_path))
            finally:
                self.source_tree_rep.stop()
        finally:
            self._remove_file(real_path)
예제 #10
0
    def test_getattr_with_file_end_point(self):
        filename = self.p('foo')
        real_path = join_path([self.test_dir, filename])
        self._create_file(real_path)

        try:
            self._init(PathMetaStore(), u'/%f/%f')
            fake_path = join_path_abs([filename, filename])

            self.source_tree_rep.start()
            try:
                lstat_result = os.lstat(real_path)
                getattr_result = self.source_tree_rep.getattr(fake_path)

                self.assertTrue(isinstance(getattr_result, os.stat_result))
                self.assertTrue(stat.S_ISREG(getattr_result.st_mode))

                self.assertEqual(
                    stat.S_IMODE(lstat_result.st_mode),
                    stat.S_IMODE(getattr_result.st_mode),
                )

                for attr in ('st_nlink', 'st_uid', 'st_gid', 'st_size'):
                    self._assert_lstat_getattr_attrs_are_equal(
                        attr, lstat_result, getattr_result)

                for attr in ('st_atime', 'st_mtime', 'st_ctime'):
                    self._assert_lstat_getattr_attrs_are_equal_plus_or_minus(
                        attr, lstat_result, getattr_result, 2)
            finally:
                self.source_tree_rep.stop()

        finally:
            self._remove_file(real_path)
예제 #11
0
    def test_file_end_point(self):
        filename = self.p('foo')
        real_path = join_path([self.test_dir, filename])
        self._create_file(real_path)
        try:
            self._init(PathMetaStore(), u'/%f/%f')
            fake_path = join_path_abs([filename, filename])

            self.source_tree_rep.start()
            try:
                self.assertEqual(self.source_tree_rep.get_real_path(fake_path),
                                 real_path)
                self.assertEqual(
                    self.source_tree_rep.get_fake_paths(real_path),
                    [fake_path])
                self.assertRaises(NotADirectory,
                                  self.source_tree_rep.get_entries, fake_path)
                self.assertTrue(self.source_tree_rep.path_exists(fake_path))
                self.assertTrue(self.source_tree_rep.is_file(fake_path))
                self.assertFalse(self.source_tree_rep.is_dir(fake_path))
                self.assertFalse(self.source_tree_rep.is_empty_dir(fake_path))
            finally:
                self.source_tree_rep.stop()
        finally:
            self._remove_file(real_path)
예제 #12
0
 def test_rename_path_with_directory_containing_file_end_points(self):
     file_path = join_path([self.test_dir, self.p('foo')])
     content_old = self.p('klink\n')
     content_new = self.p('klank\n')
     self._create_file(file_path, content_old)
     self._init(
         DelegateMultiMetaStore([ContentMetaStore(),
                                 PathMetaStore()]),
         u'/%c/%f',
     )
     self.source_tree_rep.start()
     try:
         self.source_tree_rep.rename_path(
             join_path_abs([content_old.rstrip(u'\n')]),
             join_path_abs([content_new.rstrip(u'\n')]),
         )
         self.source_tree_rep.update_source_file(file_path)
         self.assertEqual(
             self.source_tree_rep.get_entries(u'/'),
             [content_new.rstrip(u'\n')],
         )
         self.assertEqual(
             self.source_tree_rep.get_entries(
                 join_path_abs([content_new.rstrip(u'\n')])),
             [self.p('foo')],
         )
         self.assertEqual(self._get_file_content(file_path), content_new)
     finally:
         self.source_tree_rep.stop()
         self._remove_file(file_path)
예제 #13
0
    def test_populate_with_multiple_subdirs(self):
        dirname = join_path([self.test_dir, self.p('foo')])
        bar_dirname = join_path([dirname, self.p('bar')])
        baz_dirname = join_path([dirname, self.p('baz')])

        bar_paths = [
          join_path([bar_dirname, filename])
          for filename in [self.p('klink'), self.p('klank')]
        ]
        baz_paths = [
          join_path([baz_dirname, filename])
          for filename in [self.p('klonk'), self.p('klunk')]
        ]

        self._create_dirs([dirname, bar_dirname, baz_dirname])

        try:
            self._create_files(bar_paths + baz_paths)

            try:
                self._init(PathMetaStore(), u'/%f')
                self.source_tree_rep.start()
                try:
                    # We use set(...) here because we can't make assumptions
                    # about the order in which files are added via populate.
                    # This is dependent upon the source tree filesystem (HPFS+
                    # seems to always return them in alphabetical order, while
                    # ext3 returns them in the order that they were added).
                    self.assertEqual(
                      set(self.source_tree_rep.get_entries(u'/')),
                      set([
                        self.p('klink'),
                        self.p('klank'),
                        self.p('klonk'),
                        self.p('klunk'),
                      ]),
                    )
                finally:
                    self.source_tree_rep.stop()

            finally:
                self._remove_files(bar_paths + baz_paths)

        finally:
            self._remove_dirs([bar_dirname, baz_dirname, dirname])
예제 #14
0
    def test_populate_with_multiple_subdirs(self):
        dirname = join_path([self.test_dir, self.p('foo')])
        bar_dirname = join_path([dirname, self.p('bar')])
        baz_dirname = join_path([dirname, self.p('baz')])

        bar_paths = [
            join_path([bar_dirname, filename])
            for filename in [self.p('klink'), self.p('klank')]
        ]
        baz_paths = [
            join_path([baz_dirname, filename])
            for filename in [self.p('klonk'), self.p('klunk')]
        ]

        self._create_dirs([dirname, bar_dirname, baz_dirname])

        try:
            self._create_files(bar_paths + baz_paths)

            try:
                self._init(PathMetaStore(), u'/%f')
                self.source_tree_rep.start()
                try:
                    # We use set(...) here because we can't make assumptions
                    # about the order in which files are added via populate.
                    # This is dependent upon the source tree filesystem (HPFS+
                    # seems to always return them in alphabetical order, while
                    # ext3 returns them in the order that they were added).
                    self.assertEqual(
                        set(self.source_tree_rep.get_entries(u'/')),
                        set([
                            self.p('klink'),
                            self.p('klank'),
                            self.p('klonk'),
                            self.p('klunk'),
                        ]),
                    )
                finally:
                    self.source_tree_rep.stop()

            finally:
                self._remove_files(bar_paths + baz_paths)

        finally:
            self._remove_dirs([bar_dirname, baz_dirname, dirname])
예제 #15
0
 def test_remove_source_file_nonexistent(self):
     file_path = join_path([self.test_dir, self.p('foo')])
     self._init(PathMetaStore(), u'/%f')
     self.source_tree_rep.start()
     try:
         self.source_tree_rep.remove_source_file(file_path)
         self.assertEqual(self.source_tree_rep.get_entries(u'/'), [])
     finally:
         self.source_tree_rep.stop()
예제 #16
0
 def test_remove_source_file_nonexistent(self):
     file_path = join_path([self.test_dir, self.p('foo')])
     self._init(PathMetaStore(), u'/%f')
     self.source_tree_rep.start()
     try:
         self.source_tree_rep.remove_source_file(file_path)
         self.assertEqual(self.source_tree_rep.get_entries(u'/'), [])
     finally:
         self.source_tree_rep.stop()
예제 #17
0
 def test_fill_path_with_slash_in_values(self):
     self._init(NullMetaStore(), u'/%a/%b')
     values = {
         'a': join_path([self.p('foo'), self.p('bar')]),
     }
     self.assertRaises(
         UnrepresentablePath,
         self.source_tree_rep.fill_path,
         values,
     )
예제 #18
0
 def test_fill_path_with_slash_in_values(self):
     self._init(NullMetaStore(), u'/%a/%b')
     values = {
       'a': join_path([self.p('foo'), self.p('bar')]),
     }
     self.assertRaises(
       UnrepresentablePath,
       self.source_tree_rep.fill_path,
       values,
     )
예제 #19
0
 def test_get_fake_path_with_directory(self):
     real_path = join_path([self.test_dir, self.p('foo')])
     self._init(PathMetaStore(), u'/%f/%f')
     self._create_dir(real_path)
     try:
         self.source_tree_rep.start()
         try:
             self.assertRaises(
               PathNotFound, self.source_tree_rep.get_fake_paths, real_path)
         finally:
             self.source_tree_rep.stop()
     finally:
         self._remove_dir(real_path)
예제 #20
0
 def test_add_source_file_unrepresentable(self):
     file_path = join_path([self.test_dir, self.p('foo')])
     self._init(MutagenFileMetaStore(), u'/%t')
     self.source_tree_rep.start()
     try:
         self._create_file(file_path)
         try:
             self.source_tree_rep.add_source_file(file_path)
             self.assertEqual(self.source_tree_rep.get_entries(u'/'), [])
         finally:
             self._remove_file(file_path)
     finally:
         self.source_tree_rep.stop()
예제 #21
0
 def test_add_source_file_unrepresentable(self):
     file_path = join_path([self.test_dir, self.p('foo')])
     self._init(MutagenFileMetaStore(), u'/%t')
     self.source_tree_rep.start()
     try:
         self._create_file(file_path)
         try:
             self.source_tree_rep.add_source_file(file_path)
             self.assertEqual(self.source_tree_rep.get_entries(u'/'), [])
         finally:
             self._remove_file(file_path)
     finally:
         self.source_tree_rep.stop()
예제 #22
0
    def test_path_conflict_then_remove_second(self):
        self._init(PathMetaStore(), u'/%f')
        filename = self.p('foo')

        real_path1 = join_path([self.test_dir, self.p('bar'), filename])
        real_path2 = join_path([self.test_dir, self.p('baz'), filename])

        files = (real_path1, real_path2)
        dirs = [os.path.dirname(p) for p in files]

        fake_path = join_path_abs([filename])
        self.source_tree_rep.start()
        try:
            self._create_dirs(dirs)
            try:
                self._create_files(files)
                self.source_tree_rep.add_source_file(real_path1)
                self.source_tree_rep.add_source_file(real_path2)

                self._remove_file(real_path2)
                self.source_tree_rep.remove_source_file(real_path2)

                self.assertEqual(
                  self.source_tree_rep.get_real_path(fake_path),
                  real_path1,
                )

                self._remove_file(real_path1)
                self.source_tree_rep.remove_source_file(real_path1)
                self.assertRaises(
                  PathNotFound,
                  self.source_tree_rep.get_real_path,
                  fake_path,
                )
            finally:
                self._remove_dirs(dirs)
        finally:
            self.source_tree_rep.stop()
예제 #23
0
    def test_path_conflict_then_remove_second(self):
        self._init(PathMetaStore(), u'/%f')
        filename = self.p('foo')

        real_path1 = join_path([self.test_dir, self.p('bar'), filename])
        real_path2 = join_path([self.test_dir, self.p('baz'), filename])

        files = (real_path1, real_path2)
        dirs = [os.path.dirname(p) for p in files]

        fake_path = join_path_abs([filename])
        self.source_tree_rep.start()
        try:
            self._create_dirs(dirs)
            try:
                self._create_files(files)
                self.source_tree_rep.add_source_file(real_path1)
                self.source_tree_rep.add_source_file(real_path2)

                self._remove_file(real_path2)
                self.source_tree_rep.remove_source_file(real_path2)

                self.assertEqual(
                    self.source_tree_rep.get_real_path(fake_path),
                    real_path1,
                )

                self._remove_file(real_path1)
                self.source_tree_rep.remove_source_file(real_path1)
                self.assertRaises(
                    PathNotFound,
                    self.source_tree_rep.get_real_path,
                    fake_path,
                )
            finally:
                self._remove_dirs(dirs)
        finally:
            self.source_tree_rep.stop()
예제 #24
0
 def test_get_fake_path_with_directory(self):
     real_path = join_path([self.test_dir, self.p('foo')])
     self._init(PathMetaStore(), u'/%f/%f')
     self._create_dir(real_path)
     try:
         self.source_tree_rep.start()
         try:
             self.assertRaises(PathNotFound,
                               self.source_tree_rep.get_fake_paths,
                               real_path)
         finally:
             self.source_tree_rep.stop()
     finally:
         self._remove_dir(real_path)
예제 #25
0
 def test_rename_path_causing_value_change_on_last_of_two_values(self):
     self._init(ContentMetaStore(), u'/%c')
     file_path = join_path([self.test_dir, self.p('foo')])
     self._create_file(file_path, self.p('bar\nbaz\n'))
     try:
         self.source_tree_rep.start()
         self.source_tree_rep.rename_path(self.p('/baz'), self.p('/qux'))
         self.source_tree_rep.update_source_file(file_path)
         self.assertEqual(
           self.source_tree_rep.get_entries(u'/'),
           [self.p('bar'), self.p('qux')],
         )
     finally:
         self._remove_file(file_path)
예제 #26
0
 def test_rename_path_causing_value_change_on_last_of_two_values(self):
     self._init(ContentMetaStore(), u'/%c')
     file_path = join_path([self.test_dir, self.p('foo')])
     self._create_file(file_path, self.p('bar\nbaz\n'))
     try:
         self.source_tree_rep.start()
         self.source_tree_rep.rename_path(self.p('/baz'), self.p('/qux'))
         self.source_tree_rep.update_source_file(file_path)
         self.assertEqual(
             self.source_tree_rep.get_entries(u'/'),
             [self.p('bar'), self.p('qux')],
         )
     finally:
         self._remove_file(file_path)
예제 #27
0
    def test_getattr_with_directory_mid_point(self):
        filename = self.p('foo')
        real_path = join_path([self.test_dir, filename])
        self._create_file(real_path)

        try:
            self._init(PathMetaStore(), u'/%f/%f')
            fake_path = join_path_abs([self.p('foo')])
            fake_path_parent = os.path.dirname(fake_path)

            self.source_tree_rep.start()
            try:
                for test_path in (fake_path_parent, fake_path):
                    dir_lstat_result = os.lstat(self.test_dir)
                    file_lstat_result = os.lstat(real_path)
                    getattr_result = self.source_tree_rep.getattr(test_path)

                    self.assertTrue(isinstance(getattr_result, os.stat_result))
                    self.assertEqual(getattr_result.st_size, 0)

                    if test_path == fake_path:
                        # A directory containing one file has two links.
                        self.assertEqual(getattr_result.st_nlink, 2)
                    else:
                        # A directory containing one subdirectory has three links.
                        self.assertEqual(getattr_result.st_nlink, 3)

                    self.assertTrue(stat.S_ISDIR(getattr_result.st_mode))
                    self.assertEqual(
                        stat.S_IMODE(dir_lstat_result.st_mode),
                        stat.S_IMODE(getattr_result.st_mode),
                    )

                    # Ownership should be the same as the source directory.
                    for attr in ('st_uid', 'st_gid'):
                        self._assert_lstat_getattr_attrs_are_equal(
                            attr, dir_lstat_result, getattr_result)

                    # Times should be the same as the contained file.
                    for attr in ('st_atime', 'st_mtime', 'st_ctime'):
                        self._assert_lstat_getattr_attrs_are_equal_plus_or_minus(
                            attr, file_lstat_result, getattr_result, 2)
            finally:
                self.source_tree_rep.stop()

        finally:
            self._remove_file(real_path)
예제 #28
0
    def test_getattr_with_directory_mid_point(self):
        filename = self.p('foo')
        real_path = join_path([self.test_dir, filename])
        self._create_file(real_path)

        try:
            self._init(PathMetaStore(), u'/%f/%f')
            fake_path = join_path_abs([self.p('foo')])
            fake_path_parent = os.path.dirname(fake_path)

            self.source_tree_rep.start()
            try:
                for test_path in (fake_path_parent, fake_path):
                    dir_lstat_result = os.lstat(self.test_dir)
                    file_lstat_result = os.lstat(real_path)
                    getattr_result = self.source_tree_rep.getattr(test_path)

                    self.assertTrue(isinstance(getattr_result, os.stat_result))
                    self.assertEqual(getattr_result.st_size, 0)

                    if test_path == fake_path:
                        # A directory containing one file has two links.
                        self.assertEqual(getattr_result.st_nlink, 2)
                    else:
                        # A directory containing one subdirectory has three links.
                        self.assertEqual(getattr_result.st_nlink, 3)

                    self.assertTrue(stat.S_ISDIR(getattr_result.st_mode))
                    self.assertEqual(
                      stat.S_IMODE(dir_lstat_result.st_mode),
                      stat.S_IMODE(getattr_result.st_mode),
                    )
                    
                    # Ownership should be the same as the source directory.
                    for attr in ('st_uid', 'st_gid'):
                        self._assert_lstat_getattr_attrs_are_equal(
                          attr, dir_lstat_result, getattr_result)
                    
                    # Times should be the same as the contained file.
                    for attr in ('st_atime', 'st_mtime', 'st_ctime'):
                        self._assert_lstat_getattr_attrs_are_equal_plus_or_minus(
                          attr, file_lstat_result, getattr_result, 2)
            finally:
                self.source_tree_rep.stop()

        finally:
            self._remove_file(real_path)
예제 #29
0
    def test_utime_with_file_end_point(self):
        filename = self.p('foo')
        real_path = join_path([self.test_dir, filename])
        self._create_file(real_path)

        self._init(PathMetaStore(), u'/%f/%f')
        fake_path = join_path_abs([filename, filename])

        self.source_tree_rep.start()
        try:
            times = (1, 2)
            self.source_tree_rep.utime(fake_path, times)
            lstat_result = os.lstat(real_path)
            self.assertEqual(lstat_result.st_atime, times[0])
            self.assertEqual(lstat_result.st_mtime, times[1])
        finally:
            self.source_tree_rep.stop()
        self._remove_file(real_path)
예제 #30
0
    def test_utime_with_file_end_point(self):
        filename = self.p('foo')
        real_path = join_path([self.test_dir, filename])
        self._create_file(real_path)

        self._init(PathMetaStore(), u'/%f/%f')
        fake_path = join_path_abs([filename, filename])

        self.source_tree_rep.start()
        try:
            times = (1, 2)
            self.source_tree_rep.utime(fake_path, times)
            lstat_result = os.lstat(real_path)
            self.assertEqual(lstat_result.st_atime, times[0])
            self.assertEqual(lstat_result.st_mtime, times[1])
        finally:
            self.source_tree_rep.stop()
        self._remove_file(real_path)
예제 #31
0
 def test_add_source_file_excluded_by_real_path(self):
     file_path = join_path([self.test_dir, self.p('foo')])
     content = u'bar'
     self._init(
       ContentMetaStore(), u'/%c',
       filters = [
         (self.p(r'!^/%s$' % self.p('foo')), True),
       ],
     )
     self.source_tree_rep.start()
     try:
         self._create_file(file_path, content)
         try:
             self.source_tree_rep.add_source_file(file_path)
             self.assertEqual(self.source_tree_rep.get_entries(u'/'), [])
         finally:
             self._remove_file(file_path)
     finally:
         self.source_tree_rep.stop()
예제 #32
0
 def test_add_remove_source_file_same_real_path_twice(self):
     file_path = join_path([self.test_dir, self.p('foo')])
     self._init(PathMetaStore(), u'/%f')
     self.source_tree_rep.start()
     try:
         self._create_file(file_path)
         try:
             self.source_tree_rep.add_source_file(file_path)
             self.source_tree_rep.add_source_file(file_path)
             self.assertEqual(
               self.source_tree_rep.get_entries(u'/'),
               [self.p('foo')],
             )
             self.source_tree_rep.remove_source_file(file_path)
             self.assertEqual(self.source_tree_rep.get_entries(u'/'), [])
         finally:
             self._remove_file(file_path)
     finally:
         self.source_tree_rep.stop()
예제 #33
0
 def test_add_remove_source_file_same_real_path_twice(self):
     file_path = join_path([self.test_dir, self.p('foo')])
     self._init(PathMetaStore(), u'/%f')
     self.source_tree_rep.start()
     try:
         self._create_file(file_path)
         try:
             self.source_tree_rep.add_source_file(file_path)
             self.source_tree_rep.add_source_file(file_path)
             self.assertEqual(
                 self.source_tree_rep.get_entries(u'/'),
                 [self.p('foo')],
             )
             self.source_tree_rep.remove_source_file(file_path)
             self.assertEqual(self.source_tree_rep.get_entries(u'/'), [])
         finally:
             self._remove_file(file_path)
     finally:
         self.source_tree_rep.stop()
예제 #34
0
 def test_rename_path_with_file_end_point(self):
     file_path = join_path([self.test_dir, self.p('foo')])
     content_old = self.p('bar\n')
     content_new = self.p('baz\n')
     self._create_file(file_path, content_old)
     self._init(ContentMetaStore(), u'/%c')
     self.source_tree_rep.start()
     try:
         self.source_tree_rep.rename_path(
             join_path_abs([content_old.rstrip(u'\n')]),
             join_path_abs([content_new.rstrip(u'\n')]),
         )
         self.assertEqual(
             self.source_tree_rep.get_entries(u'/'),
             [content_old.rstrip(u'\n')],
         )
         self.assertEqual(self._get_file_content(file_path), content_new)
     finally:
         self.source_tree_rep.stop()
         self._remove_file(file_path)
예제 #35
0
 def test_add_source_file_excluded_by_real_path(self):
     file_path = join_path([self.test_dir, self.p('foo')])
     content = u'bar'
     self._init(
         ContentMetaStore(),
         u'/%c',
         filters=[
             (self.p(r'!^/%s$' % self.p('foo')), True),
         ],
     )
     self.source_tree_rep.start()
     try:
         self._create_file(file_path, content)
         try:
             self.source_tree_rep.add_source_file(file_path)
             self.assertEqual(self.source_tree_rep.get_entries(u'/'), [])
         finally:
             self._remove_file(file_path)
     finally:
         self.source_tree_rep.stop()
예제 #36
0
 def test_rename_path_with_file_end_point(self):
     file_path = join_path([self.test_dir, self.p('foo')])
     content_old = self.p('bar\n')
     content_new = self.p('baz\n')
     self._create_file(file_path, content_old)
     self._init(ContentMetaStore(), u'/%c')
     self.source_tree_rep.start()
     try:
         self.source_tree_rep.rename_path(
           join_path_abs([content_old.rstrip(u'\n')]),
           join_path_abs([content_new.rstrip(u'\n')]),
         )
         self.assertEqual(
           self.source_tree_rep.get_entries(u'/'),
           [content_old.rstrip(u'\n')],
         )
         self.assertEqual(self._get_file_content(file_path), content_new)
     finally:
         self.source_tree_rep.stop()
         self._remove_file(file_path)
예제 #37
0
    def test_update_source_file_causing_path_rename(self):
        file_path = join_path([self.test_dir, self.p('foo')])
        content = self.p('foo')
        new_content = self.p('bar')

        self._create_file(file_path, content)
        self._init(ContentMetaStore(), u'/%c')
        self.source_tree_rep.start()
        try:
            f = open(file_path, 'w')
            try:
                f.write(new_content.encode('utf-8'))
            finally:
                f.close()
            self.source_tree_rep.update_source_file(file_path)
            self.assertEqual(
                self.source_tree_rep.get_entries(u'/'),
                [new_content],
            )
        finally:
            self.source_tree_rep.stop()
            self._remove_file(file_path)
예제 #38
0
    def test_update_source_file_causing_path_rename(self):
        file_path = join_path([self.test_dir, self.p('foo')])
        content = self.p('foo')
        new_content = self.p('bar')

        self._create_file(file_path, content)
        self._init(ContentMetaStore(), u'/%c')
        self.source_tree_rep.start()
        try:
            f = open(file_path, 'w')
            try:
                f.write(new_content.encode('utf-8'))
            finally:
                f.close()
            self.source_tree_rep.update_source_file(file_path)
            self.assertEqual(
              self.source_tree_rep.get_entries(u'/'),
              [new_content],
            )
        finally:
            self.source_tree_rep.stop()
            self._remove_file(file_path)
예제 #39
0
 def test_real_path_with_multiple_tag_values(self):
     real_path = join_path([self.test_dir, self.p('foo')])
     content = self.p('bar\nbaz\nqux\n')
     fake_path1 = join_path_abs([self.p('bar')])
     fake_path2 = join_path_abs([self.p('baz')])
     fake_path3 = join_path_abs([self.p('qux')])
     self._create_file(real_path, content)
     try:
         self._init(ContentMetaStore(), u'/%c')
         self.source_tree_rep.start()
         try:
             self.assertEqual(
               self.source_tree_rep.get_real_path(fake_path1), real_path)
             self.assertEqual(
               self.source_tree_rep.get_real_path(fake_path2), real_path)
             self.assertEqual(
               self.source_tree_rep.get_real_path(fake_path3), real_path)
             self.assertEqual(
               self.source_tree_rep.get_fake_paths(
                 real_path), [fake_path1, fake_path2, fake_path3])
         finally:
             self.source_tree_rep.stop()
     finally:
         self._remove_file(real_path)
예제 #40
0
 def test_real_path_with_multiple_tag_values(self):
     real_path = join_path([self.test_dir, self.p('foo')])
     content = self.p('bar\nbaz\nqux\n')
     fake_path1 = join_path_abs([self.p('bar')])
     fake_path2 = join_path_abs([self.p('baz')])
     fake_path3 = join_path_abs([self.p('qux')])
     self._create_file(real_path, content)
     try:
         self._init(ContentMetaStore(), u'/%c')
         self.source_tree_rep.start()
         try:
             self.assertEqual(
                 self.source_tree_rep.get_real_path(fake_path1), real_path)
             self.assertEqual(
                 self.source_tree_rep.get_real_path(fake_path2), real_path)
             self.assertEqual(
                 self.source_tree_rep.get_real_path(fake_path3), real_path)
             self.assertEqual(
                 self.source_tree_rep.get_fake_paths(real_path),
                 [fake_path1, fake_path2, fake_path3])
         finally:
             self.source_tree_rep.stop()
     finally:
         self._remove_file(real_path)