-
Notifications
You must be signed in to change notification settings - Fork 915
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
[FEA] Implement cuIO fuzz tests #6001
Comments
In this design we have the data generators implemented only in C++, including the parameter serialization to/from an XML file. The tests implemented in Python/Java are supposed to use the generator API through interop. The idea is to avoid duplicating the serialization code and get the best performance when generating inputs. @kkraus14 does this sound viable, at least for Python? |
@nvdbaranec you suggested that there needs to be a way to replay the failing tests in C++ environment to facilitate debugging. The design here should allow that since the data generators are deterministic and the data profile and seed can be saved and passed to a C++ API to regenerate the same input. |
That seems fine to me. It would be particularly useful if any failure message also included a quick blurb about how to reproduce. Something like: "Test XYZ failed : Test was run with these parameters [5236783, 34217, etc]. To reproduce, call ABC() with these values" |
Yeah, I neglected the call parameters in the diagram and the description here because we can get started with random data + defaults. You're right, the API and its parameters should definitely be included. |
Random comment on the kinds of things that seem to dig up bugs:
|
"In the ideal case we would save the call parameters in a machine readable format and have a utility that executes the test based on all of this input." I am a big fan of being able to reproduce the testing outside of the testing framework itself. I like working in my own little (debuggable) seperate test app. So consideration for providing simple code hooks that can be called would be great. |
Out of the cases you listed, I see a potential problem with one:
For this type of testing (en masse) we have to rely on the reference implementation to validate the output. And I don't think the other Parquet implementations support row selection (outside of row group selection). I guess in this case we can crop the reference output before comparison. I think we will hit all of the listed corner cases eventually with random parameter sampling as long as we set up the data profile parameters' ranges correctly. |
True. If this really saturates the parameter space (implying long scale run times as you mentioned) it'll probably catch the interesting stuff. I would reiterate the point to make sure that we parameterize things that aren't specifically the data itself (eg page sizes). |
Thought of another thing. This is probably not super relevant right now, but if we ever did overlapped reads with decoding (that is, read/decompress blob N+1 while decoding blob N) having tests that use both memory mapped files and true spinning-disk files might yield some race condition stuff. |
Item : One of the tests I added to the python code for the parquet reader went long enough that it occasionally was causing the build machines to time out. The conclusion was that in the future we should be doing this kind of exhaustive/stress testing in the cpp tests instead of python, which makes sense. As such, it would be pretty handy if whatever reference reader/writer code you use for this new test framework was also readily available in the normal cudf test framework. |
Just a note that the 5 minute timeout is specifically defined for the Python unit tests and isn't a limitation of the CI framework / machine. |
Depends on #6000
Python tests:
To get started, tests can only vary the data profile, and keep the reader/writer parameters to defaults.
The text was updated successfully, but these errors were encountered: