コード例 #1
0
    def test_delete_file_unlink_error(self):
        the_path = os.path.join(self.td, "vol0", "ufo47", "bar")
        the_file = os.path.join(the_path, "z")
        os.makedirs(the_path)
        with open(the_file, "wb") as fd:
            fd.write("1234")
        gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "z")
        assert gdf._obj == "z"
        assert gdf._data_file == the_file
        assert not gdf._is_dir

        later = float(gdf.read_metadata()['X-Timestamp']) + 1

        def _mock_os_unlink_eacces_err(f):
            raise OSError(errno.EACCES, os.strerror(errno.EACCES))

        stats = os.stat(the_path)
        try:
            os.chmod(the_path, stats.st_mode & (~stat.S_IWUSR))

            # Handle the case os_unlink() raises an OSError
            with patch("os.unlink", _mock_os_unlink_eacces_err):
                try:
                    gdf.delete(normalize_timestamp(later))
                except OSError as e:
                    assert e.errno == errno.EACCES
                else:
                    self.fail("Excepted an OSError when unlinking file")
        finally:
            os.chmod(the_path, stats.st_mode)

        assert os.path.isdir(gdf._put_datadir)
        assert os.path.exists(os.path.join(gdf._put_datadir, gdf._obj))
コード例 #2
0
 def test_open_no_metadata(self):
     the_path = os.path.join(self.td, "vol0", "ufo47", "bar")
     the_file = os.path.join(the_path, "z")
     os.makedirs(the_path)
     with open(the_file, "wb") as fd:
         fd.write("1234")
     stats = os.stat(the_file)
     ts = normalize_timestamp(stats.st_ctime)
     etag = md5("1234").hexdigest()
     exp_md = {
         'Content-Length': 4,
         'ETag': etag,
         'X-Timestamp': ts,
         'X-Object-Sysmeta-Update-Container': True,
         'Content-Type': 'application/octet-stream'}
     gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "z")
     assert gdf._obj == "z"
     assert gdf._fd is None
     assert gdf._metadata is None
     assert not gdf._is_dir
     with gdf.open():
         assert gdf._data_file == the_file
         assert not gdf._is_dir
         assert gdf._fd is not None
         assert gdf._metadata == exp_md
コード例 #3
0
 def test_delete_is_dir(self):
     the_path = os.path.join(self.td, "vol0", "ufo47", "bar")
     the_dir = os.path.join(the_path, "d")
     os.makedirs(the_dir)
     gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "d")
     assert gdf._data_file == the_dir
     later = float(gdf.read_metadata()['X-Timestamp']) + 1
     gdf.delete(normalize_timestamp(later))
     assert os.path.isdir(gdf._put_datadir)
     assert not os.path.exists(os.path.join(gdf._put_datadir, gdf._obj))
コード例 #4
0
 def test_delete_same_timestamp(self):
     the_path = os.path.join(self.td, "vol0", "ufo47", "bar")
     the_file = os.path.join(the_path, "z")
     os.makedirs(the_path)
     with open(the_file, "wb") as fd:
         fd.write("1234")
     gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "z")
     assert gdf._obj == "z"
     assert gdf._data_file == the_file
     assert not gdf._is_dir
     now = float(gdf.read_metadata()['X-Timestamp'])
     gdf.delete(normalize_timestamp(now))
     assert os.path.isdir(gdf._put_datadir)
     assert os.path.exists(os.path.join(gdf._put_datadir, gdf._obj))
コード例 #5
0
    def test_delete_file_not_found(self):
        the_path = os.path.join(self.td, "vol0", "ufo47", "bar")
        the_file = os.path.join(the_path, "z")
        os.makedirs(the_path)
        with open(the_file, "wb") as fd:
            fd.write("1234")
        gdf = self._get_diskfile("vol0", "p57", "ufo47", "bar", "z")
        assert gdf._obj == "z"
        assert gdf._data_file == the_file
        assert not gdf._is_dir
        later = float(gdf.read_metadata()['X-Timestamp']) + 1

        # Handle the case the file is not in the directory listing.
        os.unlink(the_file)

        gdf.delete(normalize_timestamp(later))
        assert os.path.isdir(gdf._put_datadir)
        assert not os.path.exists(os.path.join(gdf._put_datadir, gdf._obj))