)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"e1b223928b3140ae8bce4f38035aeaf3d532761a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1511d5f0_d78582e2","updated":"2026-10-05 15:11:16.000000000","message":"Hi Takashi,\n\nThanks for your always awesome reviews, they are often head-scratching (in a good way).\n\nThe comment is dropped as you suggested, and the listing-time failure is now recorded in a new AUTH_FAIL global defined in heat_tempest_plugin/common/test.py (both the API test module and its consumers already import it, so this avoids a circular import). That\u0027s IMO much nicer than the previous hidden \"conf.auth_url is None means auth failure\" btw.\n\nload_tests() sets it on a Keystone failure, and HeatIntegrationTest.setUp, requires_resource_type, requires_service_type and the gabbi AuthenticationFixture now consult it. They keep failing fast or skipping instead of re-attempting Keystone on every test, without mutating the shared configuration.","commit_id":"d520e2d26174528ab6eeeebe0d2b86bd1d67a5ac"}],"heat_tempest_plugin/tests/api/fixtures.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"03c7cffb3f3136cd6a8ea2d97d2c8316f1802be6","unresolved":true,"context_lines":[{"line_number":26,"context_line":"            raise unittest.case.SkipTest(\"Heat is not available\")"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        if test.AUTH_FAIL:"},{"line_number":29,"context_line":"            raise unittest.case.SkipTest(\"Keystone authentication failed\")"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        conf \u003d config.CONF.heat_plugin"},{"line_number":32,"context_line":"        manager \u003d clients.ClientManager(conf)"}],"source_content_type":"text/x-python","patch_set":2,"id":"2cf3b666_165ac16f","line":29,"range":{"start_line":29,"start_character":18,"end_line":29,"end_character":40},"updated":"2026-10-06 12:50:54.000000000","message":"I wonder if we should rather fail here ?","commit_id":"6c555c0da7104fe1748ee0cd60c8e387fc33d496"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"babda90114905cdd058e542c7442795fd98de81c","unresolved":true,"context_lines":[{"line_number":26,"context_line":"            raise unittest.case.SkipTest(\"Heat is not available\")"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        if test.AUTH_FAIL:"},{"line_number":29,"context_line":"            raise unittest.case.SkipTest(\"Keystone authentication failed\")"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        conf \u003d config.CONF.heat_plugin"},{"line_number":32,"context_line":"        manager \u003d clients.ClientManager(conf)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ee78f2e7_74dccdcc","line":29,"range":{"start_line":29,"start_character":18,"end_line":29,"end_character":40},"in_reply_to":"2cf3b666_165ac16f","updated":"2026-10-06 14:31:36.000000000","message":"I\u0027m trying to fix the test listing, the unit test itself is probably out of scope of this patch.","commit_id":"6c555c0da7104fe1748ee0cd60c8e387fc33d496"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"fe3cb8db59a0ce10dee7c3c62a143c0577afda60","unresolved":true,"context_lines":[{"line_number":26,"context_line":"            raise unittest.case.SkipTest(\"Heat is not available\")"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        if test.AUTH_FAIL:"},{"line_number":29,"context_line":"            raise unittest.case.SkipTest(\"Keystone authentication failed\")"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        conf \u003d config.CONF.heat_plugin"},{"line_number":32,"context_line":"        manager \u003d clients.ClientManager(conf)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3477125a_0345e91c","line":29,"range":{"start_line":29,"start_character":18,"end_line":29,"end_character":40},"in_reply_to":"ee78f2e7_74dccdcc","updated":"2026-10-06 15:32:10.000000000","message":"But do we really need this to fix listing ? It raises exception so may likely break it.\n\nThis is used for API tests, not unit tests of this repo. If you do this then all API tests may be skipped, instead of failing, when authentication fails.","commit_id":"6c555c0da7104fe1748ee0cd60c8e387fc33d496"}],"heat_tempest_plugin/tests/api/test_heat_api.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"b895947f48575e72e188c36d66d5835ecfa8d990","unresolved":true,"context_lines":[{"line_number":64,"context_line":"                keystoneauth1.exceptions.connection.ConnectFailure):"},{"line_number":65,"context_line":"            LOG.warning(\"Keystone auth exception: %s: %s\" %"},{"line_number":66,"context_line":"                        (sys.exc_info()[0], sys.exc_info()[1]))"},{"line_number":67,"context_line":"            # Do not clear the global conf.auth_url here: this hook runs"},{"line_number":68,"context_line":"            # at test-listing time and the configuration is shared"},{"line_number":69,"context_line":"            # process-wide. Test discovery imports every test module in"},{"line_number":70,"context_line":"            # every worker, so clearing it permanently disables the whole"},{"line_number":71,"context_line":"            # heat suite, which then fails with \"No auth_url configured\""},{"line_number":72,"context_line":"            # instead of reporting real authentication errors."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        except Exception:"},{"line_number":75,"context_line":"            LOG.error(\"Fatal exception: %s: %s\" % (sys.exc_info()[0],"}],"source_content_type":"text/x-python","patch_set":1,"id":"a28aebad_e5c3a60f","line":72,"range":{"start_line":67,"start_character":0,"end_line":72,"end_character":62},"updated":"2026-10-05 13:00:25.000000000","message":"We don\u0027t really need to maintain this comment after the existing clear logic is removed. It\u0027s global rule and is not quite specific to this.\nJust remove this and we keep enough context in the commit message.","commit_id":"d520e2d26174528ab6eeeebe0d2b86bd1d67a5ac"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"e1b223928b3140ae8bce4f38035aeaf3d532761a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                keystoneauth1.exceptions.connection.ConnectFailure):"},{"line_number":65,"context_line":"            LOG.warning(\"Keystone auth exception: %s: %s\" %"},{"line_number":66,"context_line":"                        (sys.exc_info()[0], sys.exc_info()[1]))"},{"line_number":67,"context_line":"            # Do not clear the global conf.auth_url here: this hook runs"},{"line_number":68,"context_line":"            # at test-listing time and the configuration is shared"},{"line_number":69,"context_line":"            # process-wide. Test discovery imports every test module in"},{"line_number":70,"context_line":"            # every worker, so clearing it permanently disables the whole"},{"line_number":71,"context_line":"            # heat suite, which then fails with \"No auth_url configured\""},{"line_number":72,"context_line":"            # instead of reporting real authentication errors."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        except Exception:"},{"line_number":75,"context_line":"            LOG.error(\"Fatal exception: %s: %s\" % (sys.exc_info()[0],"}],"source_content_type":"text/x-python","patch_set":1,"id":"6dc21427_f5f39443","line":72,"range":{"start_line":67,"start_character":0,"end_line":72,"end_character":62},"in_reply_to":"47832361_6befc0ae","updated":"2026-10-05 15:11:16.000000000","message":"Done","commit_id":"d520e2d26174528ab6eeeebe0d2b86bd1d67a5ac"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"307b3bd74aab6045b341aa22b34048e785b3dd59","unresolved":true,"context_lines":[{"line_number":64,"context_line":"                keystoneauth1.exceptions.connection.ConnectFailure):"},{"line_number":65,"context_line":"            LOG.warning(\"Keystone auth exception: %s: %s\" %"},{"line_number":66,"context_line":"                        (sys.exc_info()[0], sys.exc_info()[1]))"},{"line_number":67,"context_line":"            # Do not clear the global conf.auth_url here: this hook runs"},{"line_number":68,"context_line":"            # at test-listing time and the configuration is shared"},{"line_number":69,"context_line":"            # process-wide. Test discovery imports every test module in"},{"line_number":70,"context_line":"            # every worker, so clearing it permanently disables the whole"},{"line_number":71,"context_line":"            # heat suite, which then fails with \"No auth_url configured\""},{"line_number":72,"context_line":"            # instead of reporting real authentication errors."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        except Exception:"},{"line_number":75,"context_line":"            LOG.error(\"Fatal exception: %s: %s\" % (sys.exc_info()[0],"}],"source_content_type":"text/x-python","patch_set":1,"id":"47832361_6befc0ae","line":72,"range":{"start_line":67,"start_character":0,"end_line":72,"end_character":62},"in_reply_to":"a28aebad_e5c3a60f","updated":"2026-10-05 13:03:24.000000000","message":"Also could we create a global variable like AUTH_FAIL so that we keep the behavior about authentication failures ?","commit_id":"d520e2d26174528ab6eeeebe0d2b86bd1d67a5ac"}]}
