Hello everyone,

There have been recurring discussions about minimizing the usage of caplog
in unit tests. If logs are necessary for a test, we should mock them unless
the test strictly requires actual log output. Otherwise, the caplog tests
should be removed and logs should be mocked.

During recent large migrations, changes and ongoing CI/CD efforts, caplog
has proven to be flaky in unit tests. They frequently cause red pipelines
in PRs and scheduled CI/CD runs. There have been local discussions on
removing caplog from unit tests. To formalize this, I propose a lazy
consensus to remove and prevent caplog usage in unit tests, ensuring logs
are mocked when needed and disallowing caplog without mocking unless
explicitly approved.

*Why should caplog be avoided?*

   - Big maintenance effort on CI/CD
   - Instability


*What should we do instead if we use caplog in a unit test?*

   - Mocking the Log

*In the Scope of this consensus*

   - Remove caplog usage from unit tests if possible
   - Mock logs and remove caplog from unit tests if possible
   - Exceptional cases will be subject to maintainer approval
   - Prevent caplog to be included in unit tests without explicitly mocking
   the log

*Action Items related to the above Scope:*

   - Scan and replace caplog tests with mocking where possible
   - Scan and remove caplog tests where possible
   - Include CI check to prevent adding additional caplog tests without
   Mocking and/or without approval from a maintainer to allow flexibility in
   some exceptional cases
   - Create documentation with examples for implementing tests using logs
   without caplog (e.g., using mocking or avoiding logs entirely)


The lazy consensus will be reached on 2025-02-04,  (unless someone surfaces
an objection).
--
Bugra Ozturk

Reply via email to