musli-tests

Crates.iomusli-tests
lib.rsmusli-tests
version0.0.26
sourcesrc
created_at2023-05-18 04:55:16.322336
updated_at2023-10-15 23:09:51.157854
descriptionMüsli is a flexible and generic binary serialization framework.
homepagehttps://github.com/udoprog/musli
repositoryhttps://github.com/udoprog/musli
max_upload_size
id867459
size142,948
John-John Tedro (udoprog)

documentation

https://docs.rs/musli

README

musli-tests

github crates.io docs.rs build status

Helper utilities for ensuring that musli is safe to use and behaves as expected.

This does include a fairly sophisticated benchmarking suite.


Benchmarking

Now this includes the extra category, which requires model_minimal. This is not exactly a fair comparison, because it compares serialization formats which were designed to model data that others are not capable off.

The exact tradeoff can be seen by comparing the feature model_full with model_minimal.

cargo bench --no-default-features --features musli,full,extra,model_minimal,simdutf8

To run benchmarks for serialization suites which do support all features, do:

cargo bench --features full

Fuzz testing

This comes with the fuzz binary which can do the following things.

Run serialization for a long time against a lot of random data. Both with and without miri. When run with miri, the size of the datasets is drastically reduced.

cargo run --bin fuzz
cargo +nightly miri run --bin fuzz

Run deserialization against randomly generated bytes. Both with and without miri. When run with miri, the size of the datasets is drastically reduced.

cargo run --bin fuzz -- --random
cargo +nightly miri run --bin fuzz -- --random

Note you can add the running of optional crates by enabling its corresponding feature, such as --features bincode.


Potential security issues discovered by this crate

  • dlhn: Allocating and initializing large arrays based on untrusted input (DoS): dlhn#11.

Size comparison

To perform a one-off size comparison:

cargo run --bin fuzz -- --size

This will for now just take the first generated field of a given type, serialize it, and print out its size. In the future it will perform an average over the entire set with more statistics.

Commit count: 755

cargo fmt