diff --git a/src/lib.rs b/src/lib.rs index 341f88f..2663258 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -301,6 +301,13 @@ impl ObjectStore for HdfsObjectStore { .await .to_object_store_err()?; + if status.isdir { + return Err(HdfsError::IsADirectoryError( + "Head must be called on a file".to_string(), + )) + .to_object_store_err(); + } + Ok(ObjectMeta { location: location.clone(), last_modified: DateTime::::from_timestamp(status.modification_time as i64, 0) diff --git a/tests/test_object_store.rs b/tests/test_object_store.rs index 805bc5c..83959d8 100644 --- a/tests/test_object_store.rs +++ b/tests/test_object_store.rs @@ -30,6 +30,8 @@ mod test { file.write(buf.freeze()).await.unwrap(); file.close().await.unwrap(); + client.mkdirs("/testdir", 0o755, true).await.unwrap(); + let store = HdfsObjectStore::new(Arc::new(client)); test_object_store_head(&store).await?; @@ -51,6 +53,7 @@ mod test { assert_eq!(head.size, TEST_FILE_INTS * 4); assert!(store.head(&Path::from("/testfile2")).await.is_err()); + assert!(store.head(&Path::from("/testdir")).await.is_err()); Ok(()) }