Ejemplo n.º 1
0
 def test_read_range(self):
     backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
     producer = FileBodyProducer(io.BytesIO("0123456789"))
     yield backend.write_blob('user', 'blob-id', producer)
     consumer = DummyRequest([''])
     yield backend.read_blob('user', 'blob-id', consumer, range=(1, 3))
     self.assertEqual(['12'], consumer.written)
Ejemplo n.º 2
0
    def test_count(self):
        backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
        content = 'blah'

        ids = range(5)

        def _write(namespace=''):
            producer = FileBodyProducer(io.BytesIO(content))
            d = backend.write_blob('user',
                                   str(ids.pop()),
                                   producer,
                                   namespace=namespace)
            return d

        yield _write()
        yield _write()
        yield _write()

        count = yield backend.count('user')
        self.assertEqual(3, count)

        yield _write(namespace='xfiles')
        yield _write(namespace='xfiles')

        count = yield backend.count('user', namespace='xfiles')
        self.assertEqual(2, count)
Ejemplo n.º 3
0
 def test_write_cannot_exceed_quota(self, isfile):
     isfile.return_value = False
     backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
     backend.get_total_storage = lambda x: defer.succeed(100)
     backend.quota = 90
     with pytest.raises(_blobs.QuotaExceeded):
         producer = FileBodyProducer(io.BytesIO('a' * 100))
         yield backend.write_blob('user', 'blob_id', producer)
Ejemplo n.º 4
0
 def test_cannot_overwrite(self, isfile):
     isfile.return_value = True
     backend = _blobs.FilesystemBlobsBackend()
     backend._get_path = Mock(return_value='path')
     request = DummyRequest([''])
     result = backend.write_blob('user', 'blob_id', request)
     self.assertEquals(result, "Blob already exists: blob_id")
     self.assertEquals(request.responseCode, 409)
Ejemplo n.º 5
0
 def test_list_blobs_limited_by_namespace(self, walk_mock):
     backend = _blobs.FilesystemBlobsBackend(self.tempdir)
     _ = None
     walk_mock.return_value = [('', _, ['blob_0']), ('', _, ['blob_1'])]
     result = yield backend.list_blobs('user', namespace='incoming')
     self.assertEquals(result, ['blob_0', 'blob_1'])
     target_dir = os.path.join(self.tempdir, 'user', 'incoming')
     walk_mock.assert_called_once_with(target_dir)
Ejemplo n.º 6
0
 def test_read_blob(self, get_path):
     path = os.path.join(self.tempdir, 'blob')
     with open(path, 'w') as f:
         f.write('bl0b')
     get_path.return_value = path
     backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
     consumer = DummyRequest([''])
     yield backend.read_blob('user', 'blob_id', consumer)
     self.assertEqual(['bl0b'], consumer.written)
Ejemplo n.º 7
0
    def test_tag_header(self, open_mock):
        open_mock.return_value = BytesIO('A' * 40 + 'B' * 16)
        expected_tag = base64.urlsafe_b64encode('B' * 16)
        expected_method = Mock()
        backend = _blobs.FilesystemBlobsBackend()
        request = Mock(responseHeaders=Mock(setRawHeaders=expected_method))
        backend.tag_header('user', 'blob_id', request)

        expected_method.assert_called_once_with('Tag', [expected_tag])
Ejemplo n.º 8
0
 def test_path_validation_on_write_blob(self):
     blobs_path, producer = self.tempdir, Mock()
     backend = _blobs.FilesystemBlobsBackend(blobs_path=blobs_path)
     with pytest.raises(Exception):
         yield backend.write_blob('..', '..', producer)
     with pytest.raises(Exception):
         yield backend.write_blob('user', '../../../', producer)
     with pytest.raises(Exception):
         yield backend.write_blob('../../../', 'id1', producer)
     with pytest.raises(Exception):
         yield backend.write_blob('user', 'id2', producer, namespace='..')
Ejemplo n.º 9
0
 def test_get_tag(self):
     expected_tag = base64.urlsafe_b64encode('B' * 16)
     backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
     # write a blob...
     path = backend._get_path('user', 'blob_id', '')
     mkdir_p(os.path.split(path)[0])
     with open(path, "w") as f:
         f.write('A' * 40 + 'B' * 16)
     # ...and get its tag
     tag = yield backend.get_tag('user', 'blob_id')
     self.assertEquals(expected_tag, tag)
Ejemplo n.º 10
0
 def test_get_blob_size(self):
     # get a backend
     backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
     # write a blob with size=10
     path = backend._get_path('user', 'blob_id', '')
     mkdir_p(os.path.split(path)[0])
     with open(path, "w") as f:
         f.write("0123456789")
     # check it's size
     size = yield backend.get_blob_size('user', 'blob_id', '')
     self.assertEquals(10, size)
Ejemplo n.º 11
0
 def test_write_blob_using_namespace(self):
     backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
     producer = FileBodyProducer(io.BytesIO('content'))
     yield backend.write_blob('user',
                              'blob_id',
                              producer,
                              namespace='custom')
     default = yield backend.list_blobs('user')
     custom = yield backend.list_blobs('user', namespace='custom')
     self.assertEquals([], default)
     self.assertEquals(['blob_id'], custom)
Ejemplo n.º 12
0
 def test_delete_blob(self, unlink_mock):
     backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
     # write a blob...
     path = backend._get_path('user', 'blob_id', '')
     mkdir_p(os.path.split(path)[0])
     with open(path, "w") as f:
         f.write("bl0b")
     # ...and delete it
     yield backend.delete_blob('user', 'blob_id')
     unlink_mock.assert_any_call(backend._get_path('user', 'blob_id'))
     unlink_mock.assert_any_call(
         backend._get_path('user', 'blob_id') + '.flags')
Ejemplo n.º 13
0
    def test_read_blob(self, file_mock):
        render_mock = Mock()
        file_mock.return_value = render_mock
        backend = _blobs.FilesystemBlobsBackend()
        request = DummyRequest([''])
        backend._get_path = Mock(return_value='path')
        backend.read_blob('user', 'blob_id', request)

        backend._get_path.assert_called_once_with('user', 'blob_id')
        ctype = 'application/octet-stream'
        _blobs.static.File.assert_called_once_with('path', defaultType=ctype)
        render_mock.render_GET.assert_called_once_with(request)
Ejemplo n.º 14
0
    def test_write_cannot_exceed_quota(self, isfile):
        isfile.return_value = False
        backend = _blobs.FilesystemBlobsBackend()
        backend._get_path = Mock(return_value=self.tempdir)
        request = Mock()

        backend.get_total_storage = lambda x: 100
        backend.quota = 90
        backend.write_blob('user', 'blob_id', request)

        request.setResponseCode.assert_called_once_with(507)
        request.write.assert_called_once_with('Quota Exceeded!')
        request.finish.assert_called_once()
Ejemplo n.º 15
0
 def test_get_path_partitioning_by_default(self):
     backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
     backend.path = '/somewhere/'
     path = backend._get_path('user', 'blob_id', '')
     expected = '/somewhere/user/default/b/blo/blob_i/blob_id'
     self.assertEquals(path, expected)
Ejemplo n.º 16
0
 def test_cannot_overwrite(self, isfile):
     isfile.return_value = True
     backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
     with pytest.raises(_blobs.BlobExists):
         producer = Mock()
         yield backend.write_blob('user', 'blob_id', producer)
Ejemplo n.º 17
0
 def test_get_path_partitioning(self):
     backend = _blobs.FilesystemBlobsBackend()
     backend.path = '/somewhere/'
     path = backend._get_path('user', 'blob_id')
     self.assertEquals(path, '/somewhere/user/b/blo/blob_i/blob_id')
Ejemplo n.º 18
0
 def test_list_blobs(self, walk_mock):
     backend, _ = _blobs.FilesystemBlobsBackend(self.tempdir), None
     walk_mock.return_value = [(_, _, ['blob_0']), (_, _, ['blob_1'])]
     result = json.loads(backend.list_blobs('user', DummyRequest([''])))
     self.assertEquals(result, ['blob_0', 'blob_1'])
Ejemplo n.º 19
0
 def test_get_path_custom(self):
     backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
     backend.path = '/somewhere/'
     path = backend._get_path('user', 'blob_id', 'wonderland')
     expected = '/somewhere/user/wonderland/b/blo/blob_i/blob_id'
     self.assertEquals(expected, path)
Ejemplo n.º 20
0
 def test_get_path_namespace_traversal_raises(self):
     backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
     backend.path = '/somewhere/'
     with pytest.raises(Exception):
         backend._get_path('user', 'blob_id', '..')
Ejemplo n.º 21
0
 def test_list_blobs(self, walk_mock):
     backend = _blobs.FilesystemBlobsBackend(blobs_path=self.tempdir)
     _ = None
     walk_mock.return_value = [('', _, ['blob_0']), ('', _, ['blob_1'])]
     result = yield backend.list_blobs('user')
     self.assertEquals(result, ['blob_0', 'blob_1'])