Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add range tests for blob #34384

Merged
merged 1 commit into from
Feb 20, 2023
Merged

Conversation

dlrobertson
Copy link
Member

@dlrobertson dlrobertson commented Jun 11, 2022

Add basic tests for a blob range request.

Related To: whatwg/fetch#1070

@dlrobertson
Copy link
Member Author

Current status:

Test Firefox Safari Chrome
Blob range request slices the blob ✔️ ✔️
Blob range request with multiple range values ✔️
Blob range request with short range end
Blob range with no start or end
Blob range with no end ✔️ ✔️
Blob range with no start ✔️ ✔️
Blob range request with multiple range headers

fetch/range/blob.any.js Outdated Show resolved Hide resolved
fetch/range/blob.any.js Outdated Show resolved Hide resolved
fetch/range/blob.any.js Show resolved Hide resolved
Copy link
Member

@annevk annevk left a comment

Choose a reason for hiding this comment

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

Thanks for making these!

It would be nice to assert response.text() in all of these as well.

Have you considered creating an array-of-objects structure that you then for each so you can share all the assert and test boilerplate code? That might also make it easier to spot additional cases that need testing.

@jakearchibald might also want to take a look.

fetch/range/blob.any.js Outdated Show resolved Hide resolved
fetch/range/blob.any.js Show resolved Hide resolved
fetch/range/blob.any.js Outdated Show resolved Hide resolved
fetch/range/blob.any.js Outdated Show resolved Hide resolved
fetch/range/blob.any.js Outdated Show resolved Hide resolved
"Range": "bytes=10-5"
}
},
];
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 great! I suggest we add some more invalid cases here to cover more parts of the parser:

  • bytes=x
  • bytes 5-
  • 5-
  • bytes=5-x
  • bytes=x-5

Other places we could add more coverage for is whitespace handling between the various tokens.

Let me know if you'd like some help. I can make some time to push a few tests.

Copy link
Member Author

Choose a reason for hiding this comment

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

Other places we could add more coverage for is whitespace handling between the various tokens.

RFC 7233 doesn't seem to indicate a position on whitespace. Is this specified somewhere?

Copy link
Member

Choose a reason for hiding this comment

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

It does although in a convoluted way. See https://httpwg.org/specs/rfc7233.html#rfc.section.1.2 and https://httpwg.org/specs/rfc7233.html#collected.abnf for "normal" ABNF. It seems it allows whitespace in only a few places.

Copy link
Member

Choose a reason for hiding this comment

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

It seems I was wrong here, but I think we should still test cases like:

  • bytes=5 - 10
  • bytes= - \t5

They should probably fail given the RFC, but it seems like implementations are already not following the RFC for whitespace after bytes= so who knows.

Perhaps this is also a thing we can still tighten however.

Copy link
Member Author

Choose a reason for hiding this comment

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

Based on some recent tests WebKit and Blink do seem to allow range specifications with whitespace like this...

Copy link
Member

@annevk annevk left a comment

Choose a reason for hiding this comment

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

This looks great.

Optional: add a test whereby the end is greater than the length (e.g., it's 100000) and test that it is clipped to the length.

Nit: (const) variables can just be called supportedBlobRange or some such, no need for all caps. Essentially think of const as variables that are not reassigned, not literally constants.

annevk pushed a commit to whatwg/fetch that referenced this pull request Feb 20, 2023
@annevk annevk merged commit edc7cac into web-platform-tests:master Feb 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants