Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9345594
D7929.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
8 KB
Subscribers
None
D7929.diff
View Options
diff --git a/swh/vault/tests/conftest.py b/swh/vault/tests/conftest.py
--- a/swh/vault/tests/conftest.py
+++ b/swh/vault/tests/conftest.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2020 The Software Heritage developers
+# Copyright (C) 2020-2022 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
@@ -12,7 +12,6 @@
from pytest_postgresql import factories
from swh.core.db.pytest_plugin import initialize_database_for_module, postgresql_fact
-from swh.storage.postgresql.db import Db as StorageDb
from swh.vault import get_vault
from swh.vault.backend import VaultBackend
@@ -35,13 +34,6 @@
yield pathlib.Path(tmpdir)
-storage_postgresql_proc = factories.postgresql_proc(
- dbname="storage",
- load=[
- partial(initialize_database_for_module, "storage", StorageDb.current_version)
- ],
-)
-
vault_postgresql_proc = factories.postgresql_proc(
dbname="vault",
load=[
@@ -50,25 +42,15 @@
)
postgres_vault = postgresql_fact("vault_postgresql_proc")
-postgres_storage = postgresql_fact(
- "storage_postgresql_proc",
- no_db_drop=True, # keep the db for performance reasons
-)
@pytest.fixture
-def swh_vault_config(postgres_vault, postgres_storage, tmp_path) -> Dict[str, Any]:
+def swh_vault_config(postgres_vault, tmp_path) -> Dict[str, Any]:
tmp_path = str(tmp_path)
return {
"db": postgres_vault.dsn,
"storage": {
- "cls": "postgresql",
- "db": postgres_storage.dsn,
- "objstorage": {
- "cls": "pathslicing",
- "root": tmp_path,
- "slicing": "0:1/1:5",
- },
+ "cls": "memory",
},
"cache": {
"cls": "pathslicing",
diff --git a/swh/vault/tests/test_cookers.py b/swh/vault/tests/test_cookers.py
--- a/swh/vault/tests/test_cookers.py
+++ b/swh/vault/tests/test_cookers.py
@@ -17,6 +17,7 @@
import unittest
import unittest.mock
+import attrs
import dulwich.fastexport
import dulwich.index
import dulwich.objects
@@ -31,6 +32,7 @@
Release,
Revision,
RevisionType,
+ SkippedContent,
Snapshot,
SnapshotBranch,
TargetType,
@@ -437,32 +439,25 @@
obj_id = hashutil.hash_to_bytes(obj_id_hex)
swhid = CoreSWHID(object_type=ObjectType.DIRECTORY, object_id=obj_id)
- # FIXME: storage.content_update() should be changed to allow things
- # like that
- with loader.storage.get_db().transaction() as cur:
- cur.execute(
- """update content set status = 'visible'
- where sha1 = %s""",
- (id_1,),
- )
- cur.execute(
- """update content set status = 'hidden'
- where sha1 = %s""",
- (id_2,),
- )
-
- cur.execute(
- """
- insert into skipped_content
- (sha1, sha1_git, sha256, blake2s256, length, reason)
- select sha1, sha1_git, sha256, blake2s256, length, 'no reason'
- from content
- where sha1 = %s
- """,
- (id_3,),
- )
-
- cur.execute("delete from content where sha1 = %s", (id_3,))
+ # alter the content of the storage
+ # 1/ make file 2 an hidden file object
+ loader.storage._allow_overwrite = True
+ cnt2 = attrs.evolve(
+ loader.storage.content_get([id_2])[0], status="hidden", data=file_2
+ )
+ loader.storage.content_add([cnt2])
+ assert loader.storage.content_get([id_2])[0].status == "hidden"
+
+ # 2/ make file 3 an skipped file object
+ cnt3 = loader.storage.content_get([id_3])[0].to_dict()
+ cnt3["status"] = "absent"
+ cnt3["reason"] = "no reason"
+ sk_cnt3 = SkippedContent.from_dict(cnt3)
+ loader.storage.skipped_content_add([sk_cnt3])
+ # dirty dirty dirty... let's pretend it is the equivalent of writing sql
+ # queries in the postgresql backend
+ for hashkey in loader.storage._cql_runner._content_indexes:
+ loader.storage._cql_runner._content_indexes[hashkey].pop(cnt3[hashkey])
with cook_extract_directory(loader.storage, swhid) as p:
assert (p / "file").read_bytes() == b"test1"
@@ -828,32 +823,26 @@
loader = git_loader(str(rp))
loader.load()
- # FIXME: storage.content_update() should be changed to allow things
- # like that
- with loader.storage.get_db().transaction() as cur:
- cur.execute(
- """update content set status = 'visible'
- where sha1 = %s""",
- (id_1,),
- )
- cur.execute(
- """update content set status = 'hidden'
- where sha1 = %s""",
- (id_2,),
- )
-
- cur.execute(
- """
- insert into skipped_content
- (sha1, sha1_git, sha256, blake2s256, length, reason)
- select sha1, sha1_git, sha256, blake2s256, length, 'no reason'
- from content
- where sha1 = %s
- """,
- (id_3,),
- )
+ # alter the content of the storage
+ # 1/ make file 2 an hidden file object
+ loader.storage._allow_overwrite = True
+ cnt2 = attrs.evolve(
+ loader.storage.content_get([id_2])[0], status="hidden", data=file_2
+ )
+ loader.storage.content_add([cnt2])
+ assert loader.storage.content_get([id_2])[0].status == "hidden"
+
+ # 2/ make file 3 an skipped file object
+ cnt3 = loader.storage.content_get([id_3])[0].to_dict()
+ cnt3["status"] = "absent"
+ cnt3["reason"] = "no reason"
+ sk_cnt3 = SkippedContent.from_dict(cnt3)
+ loader.storage.skipped_content_add([sk_cnt3])
+ # dirty dirty dirty... let's pretend it is the equivalent of writing sql
+ # queries in the postgresql backend
+ for hashkey in loader.storage._cql_runner._content_indexes:
+ loader.storage._cql_runner._content_indexes[hashkey].pop(cnt3[hashkey])
- cur.execute("delete from content where sha1 = %s", (id_3,))
return (loader, swhid)
def check_revision_filtered_objects(self, ert, p, swhid):
diff --git a/swh/vault/tests/test_git_bare_cooker.py b/swh/vault/tests/test_git_bare_cooker.py
--- a/swh/vault/tests/test_git_bare_cooker.py
+++ b/swh/vault/tests/test_git_bare_cooker.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2021 The Software Heritage developers
+# Copyright (C) 2021-2022 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
@@ -11,6 +11,7 @@
import datetime
import enum
+from functools import partial
import io
import subprocess
import tarfile
@@ -21,7 +22,9 @@
import dulwich.repo
import pytest
from pytest import param
+from pytest_postgresql import factories
+from swh.core.db.pytest_plugin import initialize_database_for_module, postgresql_fact
from swh.model.from_disk import DentryPerms
from swh.model.model import (
Content,
@@ -38,9 +41,27 @@
Timestamp,
TimestampWithTimezone,
)
+from swh.storage import get_storage
+from swh.storage.postgresql.db import Db as StorageBackend
from swh.vault.cookers.git_bare import GitBareCooker
from swh.vault.in_memory_backend import InMemoryVaultBackend
+storage_postgresql_proc = factories.postgresql_proc(
+ dbname="storage",
+ load=[
+ partial(
+ initialize_database_for_module, "storage", StorageBackend.current_version
+ )
+ ],
+)
+
+storage_postgresql = postgresql_fact("storage_postgresql_proc", no_db_drop=True)
+
+
+@pytest.fixture
+def swh_storage(storage_postgresql):
+ return get_storage("local", db=storage_postgresql.dsn, objstorage={"cls": "memory"})
+
class RootObjects(enum.Enum):
REVISION = enum.auto()
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Jul 3, 3:26 PM (1 w, 19 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3223915
Attached To
D7929: use an in-memory storage for tests
Event Timeline
Log In to Comment