Exemple #1
0
 def test_prevent_delete_bucket_by_mistake(self):
     info = self.db.put(BytesIO(b"content"), get_id())
     id_mistake = None
     with self.assertRaises(ArgumentError):
         self.db.delete(id_mistake, mod.DEFAULT_BUCKET)
     # blobs in default bucket should not be deleted
     with self.db.get(info.identifier) as fh:
         self.assertEqual(fh.read(), b"content")
     self.assertTrue(self.db.delete(bucket=mod.DEFAULT_BUCKET))
 def test_put_and_size(self):
     identifier = get_id()
     with patch_datadog() as stats:
         info = self.db.put(BytesIO(b"content"), identifier)
     size = len(b'content')
     self.assertEqual(sum(s for s in stats["commcare.blobs.added.count"]),
                      1)
     self.assertEqual(sum(s for s in stats["commcare.blobs.added.bytes"]),
                      size)
     self.assertEqual(self.db.size(info.identifier), size)
Exemple #3
0
    def test_delete(self):
        bucket = "doc.4"
        info = self.db.put(StringIO(b"content"), get_id(), bucket=bucket)

        self.assertTrue(self.db.delete(info.identifier, bucket), 'delete failed')

        with self.assertRaises(mod.NotFound):
            self.db.get(info.identifier, bucket)

        return info, bucket
 def test_put_with_timeout(self):
     info = self.db.put(BytesIO(b"content"),
                        identifier=get_id(),
                        timeout=60)
     with self.db.get(identifier=info.identifier) as fh:
         self.assertEqual(fh.read(), b"content")
     exp = BlobExpiration.objects.get(identifier=info.identifier)
     self.assertLessEqual(
         exp.expires_on - datetime.utcnow(),
         timedelta(minutes=60),
     )
Exemple #5
0
 def test_copy_blob_masks_old_blob(self):
     content = StringIO(b"fs content")
     info = self.fsdb.put(content, get_id())
     content.seek(0)
     self.db.copy_blob(content, info, DEFAULT_BUCKET)
     self.assertEndsWith(
         self.fsdb.get_path(info.identifier), "/" + self.db.get_path(info.identifier))
     with replattr(self.fsdb, "get", blow_up, sigcheck=False):
         with self.assertRaises(Boom):
             self.fsdb.get(info.identifier)
         with self.db.get(info.identifier) as fh:
             self.assertEqual(fh.read(), b"fs content")
    def test_delete_bucket(self):
        bucket = join("doctype", "ys7v136b")
        info = self.db.put(BytesIO(b"content"), get_id(), bucket=bucket)
        with patch_datadog() as stats:
            self.assertTrue(self.db.delete(bucket=bucket))
        self.assertEqual(sum(s for s in stats["commcare.blobs.deleted.count"]),
                         1)
        self.assertEqual(sum(s for s in stats["commcare.blobs.deleted.bytes"]),
                         7)

        self.assertTrue(info.identifier)
        with self.assertRaises(mod.NotFound):
            self.db.get(info.identifier, bucket=bucket)
Exemple #7
0
    def test_bulk_delete(self):
        blobs = [
            ('test.5', 'doc.5'),
            ('test.6', 'doc.6'),
        ]
        infos = [
            self.db.put(StringIO(b"content-{}".format(blob[0])), get_id(), bucket=blob[1])
            for blob in blobs
        ]

        blob_infos = zip(blobs, infos)
        paths = [self.db.get_path(info.identifier, blob[1]) for blob, info in blob_infos]
        self.assertTrue(self.db.bulk_delete(paths), 'delete failed')

        for blob, info in blob_infos:
            with self.assertRaises(mod.NotFound):
                self.db.get(info.identifier, blob[1])

        return paths
 def test_put_with_bucket_and_get_without_bucket(self):
     bucket = "doc.3"
     info = self.db.put(BytesIO(b"content"), get_id(), bucket=bucket)
     with self.assertRaises(mod.NotFound):
         self.db.get(info.identifier)
 def test_put_and_get_with_bucket(self):
     bucket = "doc.2"
     info = self.db.put(BytesIO(b"content"), get_id(), bucket=bucket)
     with self.db.get(info.identifier, bucket) as fh:
         self.assertEqual(fh.read(), b"content")
Exemple #10
0
 def test_put_and_size(self):
     identifier = get_id()
     info = self.db.put(StringIO(b"content"), identifier)
     self.assertEqual(self.db.size(info.identifier), len(b'content'))
Exemple #11
0
 def test_put_and_get_with_unicode_names(self):
     bucket = "doc.4500"
     info = self.db.put(StringIO(b"content"), get_id(), bucket=bucket)
     with self.db.get(info.identifier, bucket) as fh:
         self.assertEqual(fh.read(), b"content")
 def test_bucket_path(self):
     bucket = join("doctype", "8cd98f0")
     self.db.put(BytesIO(b"content"), get_id(), bucket=bucket)
     path = self.db.get_path(bucket=bucket)
     self.assertTrue(isdir(path), path)
     self.assertTrue(os.listdir(path))
 def test_put_and_get(self):
     identifier = get_id()
     info = self.db.put(BytesIO(b"content"), identifier)
     self.assertEqual(identifier, info.identifier)
     with self.db.get(info.identifier) as fh:
         self.assertEqual(fh.read(), b"content")
Exemple #14
0
 def test_put(self):
     with AtomicBlobs(self.db) as db:
         info = db.put(StringIO(b"content"), get_id())
     with self.db.get(info.identifier) as fh:
         self.assertEqual(fh.read(), b"content")
 def test_empty_attachment_name(self):
     info = self.db.put(BytesIO(b"content"), get_id())
     self.assertNotIn(".", info.identifier)
     return info
Exemple #16
0
 def test_bucket_path(self):
     bucket = join("doctype", "8cd98f0")
     self.db.put(StringIO(b"content"), get_id(), bucket=bucket)
     self.assertEqual(self.db.get_path(bucket=bucket), bucket)
 def test_exists(self):
     bucket = "doc.3.0"
     info = self.db.put(BytesIO(b"content"), get_id(), bucket=bucket)
     self.assertTrue(self.db.exists(info.identifier, bucket), 'not found')
Exemple #18
0
 def test_delete(self):
     info = self.db.put(StringIO(b"content"), get_id())
     with AtomicBlobs(self.db) as db:
         db.delete(info.identifier)
     with self.assertRaises(NotFound):
         self.db.get(info.identifier)
Exemple #19
0
 def test_put_outside_context(self):
     with AtomicBlobs(self.db) as db:
         pass
     with self.assertRaises(InvalidContext):
         db.put(StringIO(b"content"), get_id())
Exemple #20
0
 def test_put_failed(self):
     with self.assertRaises(Boom), AtomicBlobs(self.db) as db:
         info = db.put(StringIO(b"content"), get_id())
         raise Boom()
     with self.assertRaises(NotFound):
         self.db.get(info.identifier)
 def test_put_with_double_dotted_name(self):
     info = self.db.put(BytesIO(b"content"), get_id())
     with self.db.get(info.identifier) as fh:
         self.assertEqual(fh.read(), b"content")
 def test_put_with_colliding_blob_id(self):
     ident = get_id()
     self.db.put(BytesIO(b"bing"), ident)
     self.db.put(BytesIO(b"bang"), ident)
     with self.db.get(ident) as fh:
         self.assertEqual(fh.read(), b"bang")
 def test_put_from_get_stream(self):
     old = self.db.put(BytesIO(b"content"), get_id(), bucket="old_bucket")
     with self.db.get(old.identifier, "old_bucket") as fh:
         new = self.db.put(fh, get_id(), bucket="new_bucket")
     with self.db.get(new.identifier, "new_bucket") as fh:
         self.assertEqual(fh.read(), b"content")
Exemple #24
0
 def test_fall_back_to_fsdb(self):
     info = self.fsdb.put(StringIO(b"content"), get_id())
     with self.db.get(info.identifier) as fh:
         self.assertEqual(fh.read(), b"content")
 def test_delete_not_exists(self):
     bucket = "doc.3.1"
     info = self.db.put(BytesIO(b"content"), get_id(), bucket=bucket)
     self.db.delete(info.identifier, bucket)
     self.assertFalse(self.db.exists(info.identifier, bucket),
                      'not deleted')
 def test_delete_identifier_in_default_bucket(self):
     info = self.db.put(BytesIO(b"content"), get_id())
     self.assertTrue(self.db.delete(info.identifier), 'delete failed')
     with self.assertRaises(mod.NotFound):
         self.db.get(info.identifier)