If you have other idea how to avoid such problems in the future with caplog (other than careful review all the tests that can potentially modify loggers), I am all ears.
On Thu, Feb 6, 2025 at 8:41 PM Jarek Potiuk <ja...@potiuk.com> wrote: > BTW. Ash - good example of why we want to get rid of caplog is here: > > https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106 > > This is PR to move databricks provider to the new provider structure. > Suddenly in that PR ***WASB*** (yes - we moved **DATABRICKS**) tests are > failing: > > > =================================== FAILURES > =================================== > 2559 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2576>_______ > TestWasbHook.test_delete_container_generic_exception[ValueError] _______ > 2560 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2577> > providers/tests/microsoft/azure/hooks/test_wasb.py:539: in > test_delete_container_generic_exception > 2561 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2578> > assert "Error deleting container: mycontainer" in caplog.text > 2562 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2579>E > AssertionError: assert 'Error deleting container: mycontainer' in '' > 2563 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2580>E > + where '' = <_pytest.logging.LogCaptureFixture object at > 0x7fa7109dcbe0>.text > 2564 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2581>______ > TestWasbHook.test_delete_container_generic_exception[RuntimeError] ______ > 2565 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2582> > providers/tests/microsoft/azure/hooks/test_wasb.py:539: in > test_delete_container_generic_exception > 2566 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2583> > assert "Error deleting container: mycontainer" in caplog.text > 2567 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2584>E > AssertionError: assert 'Error deleting container: mycontainer' in '' > 2568 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2585>E > + where '' = <_pytest.logging.LogCaptureFixture object at > 0x7fa710a65040>.text > 2569 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2586>____________ > TestWasbHook.test_delete_container_resource_not_found _____________ > 2570 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2587> > providers/tests/microsoft/azure/hooks/test_wasb.py:548: in > test_delete_container_resource_not_found > 2571 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2588> > assert "Unable to delete container mycontainer (not found)" in caplog.text > 2572 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2589>E > AssertionError: assert 'Unable to delete container mycontainer (not found)' > in '' > 2573 > <https://github.com/apache/airflow/actions/runs/13185566641/job/36807274106#step:6:2590>E > + where '' = <_pytest.logging.LogCaptureFixture object at > 0x7fa710c37bb0>.text > > > And those are the failing tests. They are using caplog and I am not sure > if you can figure out why suddenly the expected log entries cannot be found > in caplog. > > My best guess is that somewhere, some tests (databricks) are reconfiguring > the loggers, and it messes up with caplog. Classic side effects. > > Mocking log methods directly avoids side-effects involved with logger > reconfiguraton. This is about 10th time we have this problem while moving > providers. > Here are the tests that are failing. > > @pytest.mark.parametrize("exc", [ValueError, RuntimeError]) > def test_delete_container_generic_exception(self, exc: > type[Exception], caplog): > hook = WasbHook(wasb_conn_id=self.azure_shared_key_test) > with mock.patch.object(WasbHook, "_get_container_client") as m: > m.return_value.delete_container.side_effect = > exc("FakeException") > caplog.clear() > caplog.set_level("ERROR") > with pytest.raises(exc, match="FakeException"): > hook.delete_container("mycontainer") > assert "Error deleting container: mycontainer" in caplog.text > > def test_delete_container_resource_not_found(self, caplog): > hook = WasbHook(wasb_conn_id=self.azure_shared_key_test) > with mock.patch.object(WasbHook, "_get_container_client") as m: > m.return_value.delete_container.side_effect = > ResourceNotFoundError("FakeException") > caplog.clear() > caplog.set_level("WARNING") > hook.delete_container("mycontainer") > assert "Unable to delete container mycontainer (not found)" in > caplog.text > > @mock.patch.object(WasbHook, "delete_blobs") > def test_delete_single_blob(self, delete_blobs, > mocked_blob_service_client): > hook = WasbHook(wasb_conn_id=self.azure_shared_key_test) > hook.delete_file("container", "blob", is_prefix=False) > delete_blobs.assert_called_once_with("container", "blob") > > > > > On Thu, Feb 6, 2025 at 3:56 PM Jarek Potiuk <ja...@potiuk.com> wrote: > >> Just - note that the 72 hrs are specifically designed to cover the >> weekend. So when there are such - rather insignificant - issues, I think we >> should be ok. We have had many of our votes - including the absolutely most >> important - releases - lasting 72 hours over weekend and it has never been >> a problem, we only extended it including weekends where the matters were >> really important and we expected them to be contentious (this one was not). >> >> Does it mean Ash that we propose extending all kinds of consensus and >> voting in this way ? It's the first time it has been raised, so maybe >> that's a good idea to make it longer now when we are all additionally busy >> with Airflow 3, but I don't see any reason why it should be a problem "in >> general". WDYT? >> >> Note that your objection is also 5 days after the initial message, so >> even if it would be 2 days more, that would not change anything. >> >> IMHO the consensus is reached. and If you want to revert that you should >> start a new thread Ash. >> >> J. >> >> On Thu, Feb 6, 2025 at 3:35 PM Ash Berlin-Taylor <a...@apache.org> wrote: >> >>> Please be aware of time when you are proposing this. 48 out of the 72 >>> hours your had here were over the weekend which doesn’t give many people >>> adequate time to read and think upon this. >>> >>> >>> Because I’m -1 on this as I don’t have enough info (see my other email) >>> to understand why this change makes the first bit of difference. >>> >>> > On 4 Feb 2025, at 22:38, Buğra Öztürk <ozturkbugr...@gmail.com> wrote: >>> > >>> > Hey all, >>> > >>> > The consensus has been reached. >>> > >>> > Regards, >>> > >>> > On Sat, Feb 1, 2025 at 5:38 PM Buğra Öztürk <ozturkbugr...@gmail.com> >>> wrote: >>> > >>> >> 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 >>> >> >>> > >>> > >>> > -- >>> > Bugra Ozturk >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: dev-unsubscr...@airflow.apache.org >>> For additional commands, e-mail: dev-h...@airflow.apache.org >>> >>>