예제 #1
0
 def test_File(self):
     # Check that one file works.
     with working_directory.TemporaryWorkingDirectory() as work_dir:
         filename1 = os.path.join(work_dir, 'myfile1')
         filename2 = os.path.join(work_dir, 'myfile2')
         file_tools.WriteFile('booga', filename1)
         file_tools.WriteFile('booga', filename2)
         h1 = hashing_tools.StableHashPath(filename1)
         h2 = hashing_tools.StableHashPath(filename2)
         self.assertEqual(h1, h2)
         self.assertEqual(40, len(h1))
예제 #2
0
def GenerateTestTree(noise, path):
    """Generate an interesting tree for testing.

  Args:
    noise: A string to inject to vary tree content.
    path: Location to emit tree (should not exist).
  """
    os.mkdir(path)
    b = os.path.join(path, 'b' + noise)
    os.mkdir(b)
    b1 = os.path.join(path, 'b1' + noise)
    os.mkdir(b1)
    b2 = os.path.join(path, 'b2' + noise)
    file_tools.WriteFile('inside b2' + noise, b2)
    c = os.path.join(b, 'c' + noise)
    file_tools.WriteFile('inside c' + noise, c)
예제 #3
0
 def GetFile(self, key, path):
     data = self.GetData(key)
     if data is not None:
         file_tools.WriteFile(data, path)
         # Use form: fake://<key> for make-believe URLs.
         return 'fake://' + key
     else:
         return None
 def test_WriteFileRead(self):
     # Check that things written with PutFile can be read back.
     with working_directory.TemporaryWorkingDirectory() as work_dir:
         mem_storage = fake_storage.FakeStorage()
         storage = local_storage_cache.LocalStorageCache(
             cache_path=os.path.join(work_dir, 'db'), storage=mem_storage)
         bar = os.path.join(work_dir, 'bar_file')
         file_tools.WriteFile('bar', bar)
         storage.PutFile(bar, 'foo')
         self.CanBeReadBothWays(storage, 'foo',
                                os.path.join(work_dir, 'out'), 'bar')
 def test_WriteOnlyToLocal(self):
     # Check that things written hit local storage, not the network.
     with working_directory.TemporaryWorkingDirectory() as work_dir:
         mem_storage = fake_storage.FakeStorage()
         storage = local_storage_cache.LocalStorageCache(
             cache_path=os.path.join(work_dir, 'db'), storage=mem_storage)
         storage.PutData('bar', 'foo')
         self.assertEquals(None, mem_storage.GetData('foo'))
         bar = os.path.join(work_dir, 'bar_file')
         file_tools.WriteFile('bar', bar)
         storage.PutFile(bar, 'foo')
         self.assertEquals(None, mem_storage.GetData('foo'))
 def test_InvalidKey(self):
     # Check that an invalid key asserts.
     with working_directory.TemporaryWorkingDirectory() as work_dir:
         mem_storage = fake_storage.FakeStorage()
         storage = local_storage_cache.LocalStorageCache(
             cache_path=os.path.join(work_dir, 'db'), storage=mem_storage)
         bar = os.path.join(work_dir, 'bar_file')
         file_tools.WriteFile('bar', bar)
         self.assertRaises(KeyError, storage.PutData, 'bar', 'foo$')
         self.assertRaises(KeyError, storage.GetData, 'foo^')
         self.assertRaises(KeyError, storage.PutFile, bar, 'foo#')
         self.assertRaises(KeyError, storage.GetFile, 'foo!', 'bar')
예제 #7
0
  def GetFile(self, key, path):
    """Read a file from storage.

    Args:
      key: Key to store file under.
      path: Destination filename.
    Returns:
      URL used on success or None for failure.
    """
    ValidateKey(key)
    cache_file = os.path.join(self._cache_path, key)
    if os.path.exists(cache_file):
      data = file_tools.ReadFile(cache_file)
      file_tools.WriteFile(data, path)
      return 'LOCAL_CACHE_NO_URL_AVAILABLE'
    else:
      return self._storage.GetFile(key, path)
예제 #8
0
    def PutData(self, data, key, clobber=True):
        """Write data to global storage.

    Args:
      data: Data to store.
      key: Key to store file under.
    Raises:
      GSDStorageError if the underlying storage fails.
    Returns:
      URL written to.
    """
        handle, path = tempfile.mkstemp(prefix='gdstore', suffix='.tmp')
        try:
            os.close(handle)
            file_tools.WriteFile(data, path)
            return self.PutFile(path, key, clobber=clobber)
        finally:
            os.remove(path)
예제 #9
0
 def GenerateTestData(self, noise, work_dir):
     self._input_dirs = {}
     self._input_files = []
     for i in range(2):
         dir_name = os.path.join(work_dir, noise + 'input%d_dir' % i)
         os.mkdir(dir_name)
         filename = os.path.join(dir_name, 'in%d' % i)
         file_tools.WriteFile(noise + 'data%d' % i, filename)
         self._input_dirs['input%d' % i] = dir_name
         self._input_files.append(filename)
     self._output_dirs = []
     self._output_files = []
     for i in range(2):
         dir_name = os.path.join(work_dir, noise + 'output%d_dir' % i)
         os.mkdir(dir_name)
         filename = os.path.join(dir_name, 'out')
         self._output_dirs.append(dir_name)
         self._output_files.append(filename)
예제 #10
0
 def download(url, target):
     if 'badbucket' in url:
         raise Exception('fail download %s to %s' % (url, target))
     else:
         file_tools.WriteFile('bar', target)
예제 #11
0
 def download(url, target):
     self.assertEqual('https://storage.googleapis.com/mybucket/bar',
                      url)
     file_tools.WriteFile('baz', target)