diff --git a/clients/python/tests/test_e2e.py b/clients/python/tests/test_e2e.py index 1290073f..7a378dd6 100644 --- a/clients/python/tests/test_e2e.py +++ b/clients/python/tests/test_e2e.py @@ -149,6 +149,22 @@ def test_full_cycle_uncompressed(server_url: str) -> None: assert decompressed_data == data +def test_full_cycle_structured_key(server_url: str) -> None: + client = Client(server_url) + test_usecase = Usecase( + "test-usecase", + expiration_policy=TimeToLive(timedelta(days=1)), + ) + + session = client.session(test_usecase, org=42, project=1337) + + object_key = session.put(b"test data", key="1/shard-0.json") + assert object_key == "1/shard-0.json" + + retrieved = session.get(object_key) + assert retrieved.payload.read() == b"test data" + + def test_connect_timeout() -> None: # this server accepts the connection # (even though the backlog is 0 and we never call `accept`), diff --git a/clients/rust/tests/e2e.rs b/clients/rust/tests/e2e.rs index 8101806f..1a3f1bf6 100644 --- a/clients/rust/tests/e2e.rs +++ b/clients/rust/tests/e2e.rs @@ -88,6 +88,24 @@ async fn stores_under_given_key() { assert_eq!(stored_id, "test-key123!!"); } +#[tokio::test] +async fn stores_structured_keys() { + let server = TestServer::new().await; + + let client = Client::builder(server.url("/")).build().unwrap(); + let usecase = Usecase::new("usecase"); + let session = client.session(usecase.for_project(12345, 1337)).unwrap(); + + let body = "oh hai!"; + let request = session.put(body).key("1/shard-0.json"); + let stored_id = request.send().await.unwrap().key; + assert_eq!(stored_id, "1/shard-0.json"); + + let response = session.get(&stored_id).send().await.unwrap().unwrap(); + let received = response.payload().await.unwrap(); + assert_eq!(received, body); +} + #[tokio::test] async fn overwrites_existing_key() { let server = TestServer::new().await; diff --git a/objectstore-service/src/backend/local_fs.rs b/objectstore-service/src/backend/local_fs.rs index a87012e5..2287a5b3 100644 --- a/objectstore-service/src/backend/local_fs.rs +++ b/objectstore-service/src/backend/local_fs.rs @@ -37,8 +37,8 @@ impl Backend for LocalFsBackend { metadata: &Metadata, stream: PayloadStream, ) -> anyhow::Result<()> { - tracing::debug!("Writing to local_fs backend"); let path = self.path.join(id.as_storage_path().to_string()); + tracing::debug!(path=%path.display(), "Writing to local_fs backend"); tokio::fs::create_dir_all(path.parent().unwrap()).await?; let file = OpenOptions::new() .create(true)