[criterion] [release] criterion 2.3.0

  • From: Franklin Mathieu <franklinmathieu+dev@xxxxxxxxx>
  • To: criterion@xxxxxxxxxxxxx
  • Date: Wed, 23 Nov 2016 14:45:14 +0100

Hello everyone,

Criterion v2.3.0 is finally out -- the full changelog (along with
the changes since rc2) is attached.

In addition to those changes, I have started to rewrite the internals
of criterion to allow better control over the test lifecycle.

The first major one is the rewrite of the I/O layer with a protobuf
definition and nanomsg, and while I wanted to limit the 2.3.0 release
to make everything work as 2.2.x and before, this change will bring
to the table a lot more for subsequent releases, such as:

* A standalone client-server mode.
* Multiple server transports (fifo, tcp, websocket, ...).
* External tests, embedded tests.
* Hierarchical subtests.

The second rewrite was around the fork() mechanics and test sandboxing
in general. It has always been *very* important for me to always run
the tests in a sandboxed process, because I wanted criterion to be
reliable and providing a way to disable that felt like a hack.

This, however, complicates debugging for users, and was a pain to
maintain on windows where fork() had to be emulated. This is why I
worked on a sandboxing library called BoxFort [1] to address this
in a *fast* and *convenient* way. The library takes care of creating
a new process, maps inherited data with copy-on-write, and runs an
arbitrary user function.

The introduction of BoxFort made possible a lot of awesome features
such as running tests in a dedicated debugging server or controlling
their quotas, and fixed a lot of details where we had to provide a
workaround for (for instance, --no-early-exit is now a no-op,
coverage works out of the box, and no resource leaks from the parent to
the child process can happen, ever).

Finally, I would like to also thank all of the contributors that helped
shape the new features of 2.3.0, you guys did an outstanding work.

[1]: https://github.com/Snaipe/BoxFort


Changes since 2.3.0-rc2:

* Fix: --debug=idle no longer hangs forever when debugging with visual
* Fix: Criterion no longer crashes when trying to instanciate a worker
  arena on 32-bit processes.
* Fix: Theories no longer crash when an assert fails on windows.
* Fix: Workers no longer crash randomly due to bad address denormalization.
* Fix: Workers no longer crash randomly when run in parallel on windows.


* criterion: version 2.3.0
* Addition: added German translation files (Matthias "ailu" Günzel).
* Addition: added a pkg-config file.
* Addition: allow tests to be skipped with cr_skip_test() (Matthias "ailu"
* Addition: assertions on wide-strings are now available (Kevin "kevinoid"
* Addition: crash-mode with --crash to raise a trap when an assertion
  fails for debugging purposes (Matthias "ailu" Günzel).
* Addition: debugging mode with --debug.
* Addition: global test timeout with --timeout.
* Addition: header files in the public API now have doxygen documentation
  (Matthias "ailu" Günzel).
* Addition: test filtering now works on windows.
* Addition: user logging API with cr_log, cr_log_info, cr_log_warning,
  and cr_log_error.
* Breaking: dropped support for MinGW, use MinGW-w64.
* Breaking: dropped support for Windows XP, use Windows 7 and later.
* Breaking: the SOVERSION now follows the SONAME major independently of
  the project version.
* Change: --pattern has been renamed to --filter.
* Change: removed dependency on PCRE for filtering (Matthias "ailu"
* Change: sections of all loaded shared modules are now inspected for
  tests and hooks.
* Change: setting .exit_code = 0 now enforces the exit code of the test
  to be 0.
* Change: string assertions now print the contents of string parameters
* Change: tests are no longer executed in parallel on windows by default
  to mitigate a nanomsg bug (see
  https://github.com/Snaipe/Criterion/issues/118 ;).
* Change: xml reports now includes elapsed times ("kaidowei").
* Deprecation: --no-early-exit is now a no-op and should no longer be
* Deprecation: internal logging API is no longer public, fallbacks to
  the new logging API.
* Fix: fail-fast now works correctly.
* Fix: fixed FindCriterion.cmake with the correct package name (László
  "MrAnno" Várady).
* Fix: position-independent executables now work.
* Fix: string assertions no longer crash with a NULL parameter
* Fix: the data pipe no longer gets corrupted when running a large
  quantity of assertions in parallel.
* Fix: using dmalloc on tests now works.
* Fix: using the GOLD linker rather than BFD now works.
* Fix: using the musl C library now works.

Franklin "Snaipe" Mathieu
🝰 https://diacritic.io

Other related posts:

  • » [criterion] [release] criterion 2.3.0 - Franklin Mathieu