Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@erickguan
Copy link
Member

Which issue does this PR close?

Part of #5557.
Part of #2611.

Also, add a few features:

  • copy
  • stats ETag
  • rename
  • write returns metadata
  • list with limit
  • versions
  • write with If-Match

Rationale for this change

Mostly for the issues and to implement:

  • General improvements to the OneDrive service
  • Weekend learning :)

What changes are included in this PR?

I implemented features that I found easy to get to. Also, this PR addresses a few nuances about OneDrive API, including:

  • Some APIs require a particular Content-Type
  • A few bug fixes

Are there any user-facing changes?

Added a new option and doc.

Review

Sorry about making many changes across the OneDrive service, which makes this PR difficult to review. I made some efforts in structuring the change in a few commits. Reviewing this PR commit by commit is easier.

Also kudos to Microsoft's services I guess - they didn't ban me. I saw the behavior tests generated a huge load for their servers (50x from OneDrive).

OPENDAL_TEST=onedrive cargo test behavior --features tests,services-onedrive -- --show-output
running 140 tests
test behavior::test_delete_with_version                                ... ok
test behavior::test_batch_delete_with_version                          ... ok
test behavior::test_batch_delete                                       ... ok
test behavior::test_delete_with_not_existing_version                   ... ok
test behavior::test_list_with_start_after                              ... ok
test behavior::test_list_files_with_versions                           ... ok
test behavior::test_list_with_versions_and_limit                       ... ok
test behavior::test_list_with_versions_and_start_after                 ... ok
test behavior::test_list_files_with_deleted                            ... ok
test behavior::test_delete_not_existing                                ... ok
test behavior::test_list_non_exist_dir                                 ... ok
test behavior::test_list_non_exist_dir_with_recursive                  ... ok
test behavior::test_reader_with_if_match                               ... ok
test behavior::test_create_dir_existing                                ... ok
test behavior::test_reader_with_if_modified_since                      ... ok
test behavior::test_reader_with_if_unmodified_since                    ... ok
test behavior::test_copy_non_existing_source                           ... ok
test behavior::test_read_with_if_match                                 ... ok
test behavior::test_create_dir                                         ... ok
test behavior::test_read_with_if_modified_since                        ... ok
test behavior::test_read_with_if_unmodified_since                      ... ok
test behavior::test_copy_source_dir                                    ... ok
test behavior::test_delete_empty_dir                                   ... ok
test behavior::test_read_with_override_cache_control                   ... ok
test behavior::test_read_with_override_content_disposition             ... ok
test behavior::test_read_with_override_content_type                    ... ok
test behavior::test_read_with_version                                  ... ok
test behavior::test_read_with_not_existing_version                     ... ok
test behavior::test_delete_file                                        ... ok
test behavior::test_check                                              ... ok
test behavior::test_copy_target_dir                                    ... ok
test behavior::test_copy_self                                          ... ok
test behavior::test_read_with_dir_path                                 ... ok
test behavior::test_read_not_exist                                     ... ok
test behavior::test_list_prefix                                        ... ok
test behavior::test_rename_non_existing_source                         ... ok
test behavior::test_list_dir_with_file_path                            ... ok
test behavior::test_rename_source_dir                                  ... ok
test behavior::test_list_sub_dir                                       ... ok
test behavior::test_list_dir                                           ... ok
test behavior::test_read_range                                         ... ok
test behavior::test_stat_with_if_match                                 ... ok
test behavior::test_delete_with_special_chars                          ... ok
test behavior::test_stat_with_if_modified_since                        ... ok
test behavior::test_stat_with_if_unmodified_since                      ... ok
test behavior::test_stat_with_override_cache_control                   ... ok
test behavior::test_stat_with_override_content_disposition             ... ok
test behavior::test_stat_with_override_content_type                    ... ok
test behavior::test_stat_root                                          ... ok
test behavior::test_stat_with_version                                  ... ok
test behavior::test_read_full                                          ... ok
test behavior::test_write_with_empty_content                           ... ok
test behavior::test_write_with_dir_path                                ... ok
test behavior::test_stat_dir                                           ... ok
test behavior::test_write_with_cache_control                           ... ok
test behavior::test_write_with_content_type                            ... ok
test behavior::test_write_with_content_disposition                     ... ok
test behavior::test_write_with_content_encoding                        ... ok
test behavior::test_write_with_if_none_match                           ... ok
test behavior::test_write_with_if_not_exists                           ... ok
test behavior::test_stat_nested_parent_dir                             ... ok
test behavior::test_write_with_user_metadata                           ... ok
test behavior::test_read_with_special_chars                            ... ok
test behavior::test_writer_write                                       ... ok
test behavior::test_stat_not_exist                                     ... ok
test behavior::test_writer_write_with_concurrent                       ... ok
test behavior::test_writer_sink                                        ... ok
test behavior::test_writer_sink_with_concurrent                        ... ok
test behavior::test_stat_with_special_chars                            ... ok
test behavior::test_stat_not_cleaned_path                              ... ok
test behavior::test_writer_futures_copy                                ... ok
test behavior::test_writer_futures_copy_with_concurrent                ... ok
test behavior::test_writer_return_metadata                             ... ok
test behavior::test_writer_abort_with_concurrent                       ... ok
test behavior::test_writer_abort                                       ... ok
test behavior::test_stat_file                                          ... ok
test behavior::test_blocking_copy_non_existing_source                  ... ok
test behavior::test_read_with_if_none_match                            ... ok
test behavior::test_blocking_copy_source_dir                           ... ok
test behavior::test_copy_file_with_ascii_name                          ... ok
test behavior::test_write_only                                         ... ok
test behavior::test_rename_self                                        ... ok
test behavior::test_stat_with_if_none_match                            ... ok
test behavior::test_blocking_create_dir                                ... ok
test behavior::test_copy_nested                                        ... ok
test behavior::test_rename_target_dir                                  ... ok
test behavior::test_reader                                             ... ok
test behavior::test_blocking_copy_self                                 ... ok
test behavior::test_remove_one_file                                    ... ok
test behavior::test_blocking_list_non_exist_dir                        ... ok
test behavior::test_blocking_copy_target_dir                           ... ok
test behavior::test_blocking_create_dir_existing                       ... ok
test behavior::test_write_returns_metadata                             ... ok
test behavior::test_list_nested_dir                                    ... ok
test behavior::test_write_with_special_chars                           ... ok
test behavior::test_blocking_list_not_exist_dir_with_recursive         ... ok
test behavior::test_blocking_rename_source_dir                         ... ok
test behavior::test_rename_file                                        ... ok
test behavior::test_blocking_rename_non_existing_source                ... ok
test behavior::test_blocking_read_not_exist                            ... ok
test behavior::test_copy_overwrite                                     ... ok
test behavior::test_reader_with_if_none_match                          ... ok
test behavior::test_rename_nested                                      ... ok
test behavior::test_blocking_copy_file                                 ... ok
test behavior::test_blocking_rename_self                               ... ok
test behavior::test_blocking_delete_file                               ... ok
test behavior::test_blocking_stat_not_exist                            ... ok
test behavior::test_blocking_write_with_dir_path                       ... ok
test behavior::test_blocking_read_range                                ... ok
test behavior::test_blocking_list_file_with_recursive                  ... ok
test behavior::test_blocking_rename_target_dir                         ... ok
test behavior::test_blocking_remove_one_file                           ... ok
test behavior::test_writer_write_with_overwrite                        ... ok
test behavior::test_blocking_list_dir                                  ... ok
test behavior::test_blocking_stat_file                                 ... ok
test behavior::test_blocking_write_file                                ... ok
test behavior::test_rename_overwrite                                   ... ok
test behavior::test_blocking_stat_with_special_chars                   ... ok
test behavior::test_blocking_stat_dir                                  ... ok
test behavior::test_blocking_write_with_special_chars                  ... ok
test behavior::test_blocking_copy_nested                               ... ok
test behavior::test_list_dir_with_recursive                            ... ok
test behavior::test_blocking_read_full                                 ... ok
test behavior::test_list_file_with_recursive                           ... ok
test behavior::test_remove_all                                         ... ok
test behavior::test_blocking_rename_file                               ... ok
test behavior::test_blocking_write_returns_metadata                    ... ok
test behavior::test_write_with_if_match                                ... ok
test behavior::test_blocking_rename_nested                             ... ok
test behavior::test_copy_file_with_non_ascii_name                      ... ok
test behavior::test_blocking_copy_overwrite                            ... ok
test behavior::test_blocking_rename_overwrite                          ... ok
test behavior::test_blocking_list_dir_with_recursive                   ... ok
test behavior::test_list_dir_with_recursive_no_trailing_slash          ... ok
test behavior::test_blocking_list_dir_with_recursive_no_trailing_slash ... ok
test behavior::test_blocking_remove_all                                ... ok
test behavior::test_list_rich_dir                                      ... ok
test behavior::test_list_root_with_recursive                           ... ok
test behavior::test_list_empty_dir                                     ... ok
test behavior::test_delete_stream                                      ... ok

test result: ok. 140 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 154.67s

@erickguan erickguan requested a review from Xuanwo as a code owner March 16, 2025 22:15
@erickguan erickguan changed the title Implement OneDrive features feat(services/onedrive): implement additional OneDrive features Mar 16, 2025
@github-actions github-actions bot added the releases-note/feat The PR implements a new feature or has a title that begins with "feat" label Mar 16, 2025
Comment on lines 76 to 85
if let Some(version) = args.version() {
let versions = self.core.onedrive_list_versions(path).await?;
for item_version in versions {
if item_version.id == version {
meta.set_version(version);
return Ok(RpStat::new(meta));
}
}

return Err(Error::new(ErrorKind::NotFound, "item version not found"));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a big sad regarding this API.

I can imagine that list_with(path).versions(true) and stat_with(item).versions(abc) could be very slow.


I noticed that we're using id as the version ID. How about supporting onedrive_stat_by_id?

OneDrive supports two call conventions:

GET /me/drive/items/{item-id}
GET /me/drive/root:/{item-path}

If we already have the id, we can use it to make a direct call.

Copy link
Member Author

@erickguan erickguan Mar 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The item ID is not the same as the version ID, unfortunately. Using versions is going to generate lots of API calls indeed. I agree with you this implementation could be better. I'll work on the get version API. Will also look into if I can take advantage of the item ID.

Copy link
Member

@Xuanwo Xuanwo Mar 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The item ID is not the same as the version ID

Sorry I didn't take deep look over the onedrive API. The id is not unique across the entire onedrive? Or onedrive has other concept that similiar to version_id?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No worries, I'll explain. The id for a file is unique.

I noticed that we're using id as the version ID.

The version ID belongs to a file.

GET /me/drive/items/{item-id}/versions
GET /me/drive/root:/{item-path}/versions

An example response is:

{
  "value": [
    {
        "id": "2.0",
        "lastModifiedDateTime": "2025-03-16T17:02:49Z",
        "size": 74758
    },
    {
        "id": "1.0",
        "lastModifiedDateTime": "2025-03-12T21:59:54Z",
        "size": 74756
    }
  ]
}

This is a sub-resource for a file. I didn't find out until I tried
https://graph.microsoft.com/v1.0/me/drive/root:/test.json?$expand=versions. This is a stat_with_version. I am going to work on versions support based on this API parameter.

Listing items with versions is not supported. GET https://graph.microsoft.com/v1.0/me/drive/root/children?$expand=versions returns 400 and a message saying "Operation not supported".

In summary:

  • list_with(path).versions(true): no API support except N+1 HTTP calls
  • stat_with(item).versions(abc): one API call

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, onedrive...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The version ID belongs to a file.

Ok, I got it. So version ID can't be used as item-id.

list_with(path).versions(true): no API support except N+1 HTTP calls

Seems it's the best we can do by given APIs.

stat_with(item).versions(abc): one API call

Happy to know.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed it's a bit disappointing. Maybe we will find the list with version support from OneDrive a few years later.

// Read more at https://support.microsoft.com/en-us/office/restrictions-and-limitations-in-onedrive-and-sharepoint-64883a5d-228e-48f5-b3d2-eb39e07630fa#individualfilesize
// However, we can't enable this, otherwise OpenDAL behavior tests will try to test creating huge
// file up to this size.
// write_total_max_size: Some(250 * 1024 * 1024 * 1024),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would you like to submit an issue for this? I remember that S3 also set this.

Ok((
RpWrite::default(),
oio::OneShotWriter::new(OneDriveWriter::new(self.core.clone(), args, path)),
oio::OneShotWriter::new(OneDriveWriter::new(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we already support chunked writing, we could implement something like MultipartUploadWrite instead of OneShotWrite, which only allows a single write.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, a good time to work on this.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR is large enough, it's fine to split in another PR.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. I will fix your other comments this week and ping you. I'm tied up at the moment.


let status = response.status();
match status {
match response.status() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can implement read_with(path).version(id) in the same way like stat.

@erickguan
Copy link
Member Author

All fixed. Please have a look.

I must add a new commit to fix "copy"'s behavior. Not sure what OneDrive has updated.

I will rebase once you approve the PR.

OPENDAL_TEST=onedrive cargo test behavior --features tests,services-onedrive -- --show-output
Running tests/behavior/main.rs (target/debug/deps/behavior-452541199097b1cc)                                                                                                                                                                                                                                                                                       running 140 tests
test behavior::test_delete_with_not_existing_version                   ... ok
test behavior::test_batch_delete_with_version                          ... ok
test behavior::test_batch_delete                                       ... ok
test behavior::test_delete_with_version                                ... ok
test behavior::test_list_with_start_after                              ... ok
test behavior::test_list_files_with_versions                           ... ok
test behavior::test_list_with_versions_and_limit                       ... ok
test behavior::test_list_with_versions_and_start_after                 ... ok
test behavior::test_list_files_with_deleted                            ... ok
test behavior::test_delete_not_existing                                ... ok
test behavior::test_list_non_exist_dir_with_recursive                  ... ok
test behavior::test_copy_source_dir                                    ... ok
test behavior::test_reader_with_if_match                               ... ok
test behavior::test_check                                              ... ok
test behavior::test_reader_with_if_modified_since                      ... ok
test behavior::test_reader_with_if_unmodified_since                    ... ok
test behavior::test_copy_non_existing_source                           ... ok
test behavior::test_read_with_if_match                                 ... ok
test behavior::test_create_dir                                         ... ok
test behavior::test_read_with_if_modified_since                        ... ok
test behavior::test_read_with_if_unmodified_since                      ... ok
test behavior::test_read_not_exist                                     ... ok
test behavior::test_list_non_exist_dir                                 ... ok
test behavior::test_read_with_override_cache_control                   ... ok
test behavior::test_read_with_override_content_disposition             ... ok
test behavior::test_read_with_override_content_type                    ... ok
test behavior::test_read_with_version                                  ... ok
test behavior::test_read_with_not_existing_version                     ... ok
test behavior::test_delete_empty_dir                                   ... ok
test behavior::test_copy_self                                          ... ok
test behavior::test_list_file_with_recursive                           ... ok
test behavior::test_create_dir_existing                                ... ok
test behavior::test_rename_non_existing_source                         ... ok
test behavior::test_read_with_dir_path                                 ... ok
test behavior::test_read_full                                          ... ok
test behavior::test_list_prefix                                        ... ok
test behavior::test_read_range                                         ... ok
test behavior::test_delete_with_special_chars                          ... ok
test behavior::test_rename_source_dir                                  ... ok
test behavior::test_list_dir_with_file_path                            ... ok
test behavior::test_list_sub_dir                                       ... ok
test behavior::test_stat_with_if_match                                 ... ok
test behavior::test_rename_self                                        ... ok
test behavior::test_stat_with_if_modified_since                        ... ok
test behavior::test_stat_with_if_unmodified_since                      ... ok
test behavior::test_stat_with_override_cache_control                   ... ok
test behavior::test_stat_with_override_content_disposition             ... ok
test behavior::test_stat_with_override_content_type                    ... ok
test behavior::test_stat_root                                          ... ok
test behavior::test_stat_with_version                                  ... ok
test behavior::test_copy_target_dir                                    ... ok
test behavior::test_write_with_empty_content                           ... ok
test behavior::test_write_with_dir_path                                ... ok
test behavior::test_reader                                             ... ok
test behavior::test_write_with_cache_control                           ... ok
test behavior::test_write_with_content_type                            ... ok
test behavior::test_write_with_content_disposition                     ... ok
test behavior::test_write_with_content_encoding                        ... ok
test behavior::test_write_with_if_none_match                           ... ok
test behavior::test_write_with_if_not_exists                           ... ok
test behavior::test_stat_dir                                           ... ok
test behavior::test_write_with_user_metadata                           ... ok
test behavior::test_stat_not_exist                                     ... ok
test behavior::test_writer_write                                       ... ok
test behavior::test_rename_target_dir                                  ... ok
test behavior::test_writer_write_with_concurrent                       ... ok
test behavior::test_writer_sink                                        ... ok
test behavior::test_writer_sink_with_concurrent                        ... ok
test behavior::test_write_only                                         ... ok
test behavior::test_read_with_if_none_match                            ... ok
test behavior::test_writer_futures_copy                                ... ok
test behavior::test_writer_futures_copy_with_concurrent                ... ok
test behavior::test_writer_return_metadata                             ... ok
test behavior::test_writer_abort                                       ... ok
test behavior::test_delete_file                                        ... ok
test behavior::test_stat_not_cleaned_path                              ... ok
test behavior::test_write_returns_metadata                             ... ok
test behavior::test_list_dir                                           ... ok
test behavior::test_copy_file_with_non_ascii_name                      ... ok
test behavior::test_reader_with_if_none_match                          ... ok
test behavior::test_read_with_special_chars                            ... ok
test behavior::test_stat_with_special_chars                            ... ok
test behavior::test_blocking_copy_source_dir                           ... ok
test behavior::test_remove_one_file                                    ... ok
test behavior::test_write_with_special_chars                           ... ok
test behavior::test_stat_file                                          ... ok
test behavior::test_blocking_copy_non_existing_source                  ... ok
test behavior::test_writer_abort_with_concurrent                       ... ok
test behavior::test_blocking_list_non_exist_dir                        ... ok
test behavior::test_blocking_copy_self                                 ... ok
test behavior::test_stat_with_if_none_match                            ... ok
test behavior::test_blocking_create_dir                                ... ok
test behavior::test_stat_nested_parent_dir                             ... ok
test behavior::test_blocking_copy_target_dir                           ... ok
test behavior::test_blocking_list_not_exist_dir_with_recursive         ... ok
test behavior::test_blocking_read_not_exist                            ... ok
test behavior::test_blocking_create_dir_existing                       ... ok
test behavior::test_blocking_rename_non_existing_source                ... ok
test behavior::test_rename_file                                        ... ok
test behavior::test_copy_file_with_ascii_name                          ... ok
test behavior::test_blocking_rename_source_dir                         ... ok
test behavior::test_copy_nested                                        ... ok
test behavior::test_blocking_remove_one_file                           ... ok
test behavior::test_copy_overwrite                                     ... ok
test behavior::test_blocking_delete_file                               ... ok
test behavior::test_blocking_stat_not_exist                            ... ok
test behavior::test_blocking_stat_file                                 ... ok
test behavior::test_blocking_write_with_dir_path                       ... ok
test behavior::test_blocking_rename_target_dir                         ... ok
test behavior::test_blocking_stat_dir                                  ... ok
test behavior::test_blocking_copy_file                                 ... ok
test behavior::test_blocking_rename_self                               ... ok
test behavior::test_blocking_read_range                                ... ok
test behavior::test_blocking_stat_with_special_chars                   ... ok
test behavior::test_blocking_write_file                                ... ok
test behavior::test_list_nested_dir                                    ... ok
test behavior::test_blocking_write_with_special_chars                  ... ok
test behavior::test_blocking_read_full                                 ... ok
test behavior::test_writer_write_with_overwrite                        ... ok
test behavior::test_blocking_list_file_with_recursive                  ... ok
test behavior::test_rename_overwrite                                   ... ok
test behavior::test_write_with_if_match                                ... ok
test behavior::test_blocking_list_dir                                  ... ok
test behavior::test_blocking_write_returns_metadata                    ... ok
test behavior::test_blocking_rename_file                               ... ok
test behavior::test_blocking_copy_nested                               ... ok
test behavior::test_list_dir_with_recursive_no_trailing_slash          ... ok
test behavior::test_rename_nested                                      ... ok
test behavior::test_list_root_with_recursive                           ... ok
test behavior::test_blocking_rename_nested                             ... ok
test behavior::test_blocking_copy_overwrite                            ... ok
test behavior::test_blocking_rename_overwrite                          ... ok
test behavior::test_list_dir_with_recursive                            ... ok
test behavior::test_remove_all                                         ... ok
test behavior::test_blocking_list_dir_with_recursive                   ... ok
test behavior::test_blocking_list_dir_with_recursive_no_trailing_slash ... ok
test behavior::test_list_rich_dir                                      ... ok
test behavior::test_blocking_remove_all                                ... ok
test behavior::test_list_empty_dir                                     ... ok
test behavior::test_delete_stream                                      ... ok

test result: ok. 140 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 156.18s

@erickguan erickguan requested a review from Xuanwo March 21, 2025 21:09
@Xuanwo
Copy link
Member

Xuanwo commented Mar 24, 2025

Hi, thank you @erickguan for working on this. This PR is almost good to go, would you like to resolve conflicts?

Also:

- Add documentation about consistency
- Allow retry on 409 Conflict (for create_dir)

Technically, we can allow retries on more operations.
We wait bug reports or feature requests about this nuance since the
behavior tests is likely the most heavily operator among OpenDAL
OneDrive users.
@erickguan erickguan force-pushed the onedrive-features branch 2 times, most recently from 4a17e32 to 1e9bcd5 Compare March 24, 2025 18:26
@erickguan
Copy link
Member Author

@Xuanwo rebased. I don't know what happens to the huggingface test.

Test details
     Running tests/behavior/main.rs (target/debug/deps/behavior-3a82136f7c7127aa)

running 140 tests
test behavior::test_delete_with_not_existing_version                   ... ok
test behavior::test_batch_delete                                       ... ok
test behavior::test_batch_delete_with_version                          ... ok
test behavior::test_delete_with_version                                ... ok
test behavior::test_list_with_start_after                              ... ok
test behavior::test_list_files_with_versions                           ... ok
test behavior::test_list_with_versions_and_limit                       ... ok
test behavior::test_list_with_versions_and_start_after                 ... ok
test behavior::test_list_files_with_deleted                            ... ok
test behavior::test_list_non_exist_dir_with_recursive                  ... ok
test behavior::test_copy_non_existing_source                           ... ok
test behavior::test_delete_not_existing                                ... ok
test behavior::test_reader_with_if_match                               ... ok
test behavior::test_copy_source_dir                                    ... ok
test behavior::test_reader_with_if_modified_since                      ... ok
test behavior::test_reader_with_if_unmodified_since                    ... ok
test behavior::test_list_non_exist_dir                                 ... ok
test behavior::test_read_with_if_match                                 ... ok
test behavior::test_create_dir                                         ... ok
test behavior::test_read_with_if_modified_since                        ... ok
test behavior::test_read_with_if_unmodified_since                      ... ok
test behavior::test_read_not_exist                                     ... ok
test behavior::test_delete_empty_dir                                   ... ok
test behavior::test_read_with_override_cache_control                   ... ok
test behavior::test_read_with_override_content_disposition             ... ok
test behavior::test_read_with_override_content_type                    ... ok
test behavior::test_read_with_version                                  ... ok
test behavior::test_read_with_not_existing_version                     ... ok
test behavior::test_check                                              ... ok
test behavior::test_read_full                                          ... ok
test behavior::test_read_with_dir_path                                 ... ok
test behavior::test_read_range                                         ... ok
test behavior::test_delete_with_special_chars                          ... ok
test behavior::test_copy_self                                          ... ok
test behavior::test_rename_non_existing_source                         ... ok
test behavior::test_create_dir_existing                                ... ok
test behavior::test_rename_source_dir                                  ... ok
test behavior::test_list_file_with_recursive                           ... ok
test behavior::test_read_with_special_chars                            ... ok
test behavior::test_copy_target_dir                                    ... ok
test behavior::test_list_sub_dir                                       ... ok
test behavior::test_stat_with_if_match                                 ... ok
test behavior::test_rename_self                                        ... ok
test behavior::test_stat_with_if_modified_since                        ... ok
test behavior::test_stat_with_if_unmodified_since                      ... ok
test behavior::test_stat_with_override_cache_control                   ... ok
test behavior::test_stat_with_override_content_disposition             ... ok
test behavior::test_stat_with_override_content_type                    ... ok
test behavior::test_stat_root                                          ... ok
test behavior::test_stat_with_version                                  ... ok
test behavior::test_list_prefix                                        ... ok
test behavior::test_write_with_empty_content                           ... ok
test behavior::test_write_with_dir_path                                ... ok
test behavior::test_delete_file                                        ... ok
test behavior::test_write_with_cache_control                           ... ok
test behavior::test_write_with_content_type                            ... ok
test behavior::test_write_with_content_disposition                     ... ok
test behavior::test_write_with_content_encoding                        ... ok
test behavior::test_write_with_if_none_match                           ... ok
test behavior::test_write_with_if_not_exists                           ... ok
test behavior::test_stat_not_exist                                     ... ok
test behavior::test_write_with_user_metadata                           ... ok
test behavior::test_stat_with_special_chars                            ... ok
test behavior::test_writer_write                                       ... ok
test behavior::test_stat_not_cleaned_path                              ... ok
test behavior::test_writer_write_with_concurrent                       ... ok
test behavior::test_writer_sink                                        ... ok
test behavior::test_writer_sink_with_concurrent                        ... ok
test behavior::test_stat_file                                          ... ok
test behavior::test_writer_abort                                       ... ok
test behavior::test_writer_futures_copy                                ... ok
test behavior::test_writer_futures_copy_with_concurrent                ... ok
test behavior::test_writer_return_metadata                             ... ok
test behavior::test_list_dir_with_file_path                            ... ok
test behavior::test_list_dir                                           ... ok
test behavior::test_write_only                                         ... ok
test behavior::test_stat_nested_parent_dir                             ... ok
test behavior::test_blocking_copy_non_existing_source                  ... ok
test behavior::test_writer_abort_with_concurrent                       ... ok
test behavior::test_reader_with_if_none_match                          ... ok
test behavior::test_write_with_special_chars                           ... ok
test behavior::test_stat_dir                                           ... ok
test behavior::test_read_with_if_none_match                            ... ok
test behavior::test_blocking_copy_source_dir                           ... ok
test behavior::test_copy_nested                                        ... ok
test behavior::test_copy_file_with_non_ascii_name                      ... ok
test behavior::test_stat_with_if_none_match                            ... ok
test behavior::test_write_returns_metadata                             ... ok
test behavior::test_blocking_copy_target_dir                           ... ok
test behavior::test_blocking_list_not_exist_dir_with_recursive         ... ok
test behavior::test_blocking_list_non_exist_dir                        ... ok
test behavior::test_remove_one_file                                    ... ok
test behavior::test_blocking_create_dir_existing                       ... ok
test behavior::test_blocking_copy_self                                 ... ok
test behavior::test_copy_file_with_ascii_name                          ... ok
test behavior::test_blocking_read_not_exist                            ... ok
test behavior::test_blocking_rename_non_existing_source                ... ok
test behavior::test_copy_overwrite                                     ... ok
test behavior::test_list_nested_dir                                    ... ok
test behavior::test_rename_target_dir                                  ... ok
test behavior::test_blocking_create_dir                                ... ok
test behavior::test_blocking_delete_file                               ... ok
test behavior::test_rename_file                                        ... ok
test behavior::test_blocking_rename_source_dir                         ... ok
test behavior::test_reader                                             ... ok
test behavior::test_blocking_stat_not_exist                            ... ok
test behavior::test_blocking_stat_file                                 ... ok
test behavior::test_blocking_write_with_dir_path                       ... ok
test behavior::test_blocking_stat_dir                                  ... ok
test behavior::test_blocking_list_file_with_recursive                  ... ok
test behavior::test_blocking_remove_one_file                           ... ok
test behavior::test_blocking_rename_self                               ... ok
test behavior::test_blocking_rename_target_dir                         ... ok
test behavior::test_blocking_read_range                                ... ok
test behavior::test_write_with_if_match                                ... ok
test behavior::test_blocking_stat_with_special_chars                   ... ok
test behavior::test_rename_overwrite                                   ... ok
test behavior::test_rename_nested                                      ... ok
test behavior::test_writer_write_with_overwrite                        ... ok
test behavior::test_blocking_read_full                                 ... ok
test behavior::test_blocking_write_returns_metadata                    ... ok
test behavior::test_blocking_copy_overwrite                            ... ok
test behavior::test_blocking_copy_file                                 ... ok
test behavior::test_blocking_list_dir                                  ... ok
test behavior::test_blocking_write_file                                ... ok
test behavior::test_blocking_write_with_special_chars                  ... ok
test behavior::test_list_dir_with_recursive                            ... ok
test behavior::test_blocking_rename_file                               ... ok
test behavior::test_blocking_rename_nested                             ... ok
test behavior::test_blocking_copy_nested                               ... ok
test behavior::test_list_dir_with_recursive_no_trailing_slash          ... ok
test behavior::test_blocking_rename_overwrite                          ... ok
test behavior::test_list_rich_dir                                      ... ok
test behavior::test_blocking_list_dir_with_recursive                   ... ok
test behavior::test_remove_all                                         ... ok
test behavior::test_blocking_list_dir_with_recursive_no_trailing_slash ... ok
test behavior::test_blocking_remove_all                                ... ok
test behavior::test_list_root_with_recursive                           ... ok
test behavior::test_list_empty_dir                                     ... ok
test behavior::test_delete_stream                                      ... ok

test result: ok. 140 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 146.71s

Copy link
Member

@Xuanwo Xuanwo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @erickguan for working on this!

@Xuanwo Xuanwo merged commit 83bd850 into apache:main Mar 25, 2025
245 of 247 checks passed
@Xuanwo
Copy link
Member

Xuanwo commented Mar 25, 2025

the huggingface test.

A bit flaky 😆

@erickguan
Copy link
Member Author

No worries.

A bit flaky 😆

Alright!

@erickguan erickguan deleted the onedrive-features branch March 25, 2025 15:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

releases-note/feat The PR implements a new feature or has a title that begins with "feat"

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants