Error assertion semantics#
For unsatisfiable tests, this suite deliberately asserts more than conda’s
own test suite does when running under conda-libmamba-solver.
Upstream’s assert_unsatisfiable helper only checks that the raised
exception is an UnsatisfiableError subclass there, because its entries
comparison is gated on the exact UnsatisfiableError type — libmamba raises
a different subclass with a different message shape, so upstream’s own
assertion on the conflict entries is effectively skipped for that backend.
This project’s runner goes further: it additionally checks that the endpoint
package names of each expected conflict chain appear in the libmamba error
message, and the message_includes / message_excludes fields in the YAML
add further content checks. Those fields may be given as a single value or
list that applies to every solver, or as a mapping keyed by solver name when
upstream itself asserts solver-specific message content — a missing key for
a solver a test runs on is treated as an error, rather than silently skipping
the check for that backend.
This strengthening is intentional. Cross-solver consistency of error
reporting — not just of the final decision to fail — is part of what this
plugin exists to verify (see Motivation). See
Adding a test for the general convention of
documenting this kind of strengthening in a case’s description field, and
the test schema for the full shape of the four
error types.