)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"09592f0b522edef6f955917cae1aec6e9ed6a811","unresolved":false,"context_lines":[{"line_number":14,"context_line":"failures now because testers need to search the git history of the failed test"},{"line_number":15,"context_line":"and find the bug number from \"Related-Bug\" tag from the commit message."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This patch adds a new decorator to know launchpad bug reports more easily."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Partially implements blueprint bug-notification-decorator"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a71b18c_9ea3614f","line":17,"updated":"2016-12-08 01:30:41.000000000","message":"I think it\u0027s good to add the reason why you pick \u00271629110\u0027 and \u00271630783\u0027 in this patch. Are these all you know regression tests?","commit_id":"e40c5b88ec731e99640975fa1d4e023490651f84"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"54a9cdb46c4e08b2d295d1b7a18ed3b496c93a88","unresolved":false,"context_lines":[{"line_number":19,"context_line":"as a sample becauuse the test can detect the server internal error which"},{"line_number":20,"context_line":"makes operations harder on productions."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Partially implements blueprint bug-notification-decorator"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: Idc9ac0ebc61e230e4e014fb6476d1c74116511f7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a71b18c_a7828dfe","line":22,"updated":"2016-12-09 10:32:10.000000000","message":"Do we really need this? The spec is not approved, and the bp not started. What if we keep this just a patch?","commit_id":"f875a49721cd106a714ae711c7c9e9041c445b91"}],"tempest/api/compute/admin/test_networks.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f5062467a9bbe1fd1fc14812e9cdf6ac0e513a47","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.assertEqual(configured_network[\u0027label\u0027], network[\u0027label\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @test.idempotent_id(\u0027df3d1046-6fa5-4b2c-ad0c-cfa46a351cb9\u0027)"},{"line_number":57,"context_line":"oomichi"},{"line_number":58,"context_line":"    def test_list_all_networks(self):"},{"line_number":59,"context_line":"        networks \u003d self.client.list_networks()[\u0027networks\u0027]"},{"line_number":60,"context_line":"        # Check the configured network is in the list"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_34825795","line":57,"updated":"2016-12-02 04:08:20.000000000","message":"Ummm...","commit_id":"64d180410785e9721cc2b90752243eaf06a38ad2"}],"tempest/test.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f5062467a9bbe1fd1fc14812e9cdf6ac0e513a47","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    def decorator(f):"},{"line_number":150,"context_line":"        @functools.wraps(f)"},{"line_number":151,"context_line":"        def wrapper(self, *func_args, **func_kwargs):"},{"line_number":152,"context_line":"            bug_number \u003d kwargs[\u0027bug\u0027]"},{"line_number":153,"context_line":"            if not bug_number.isdigit():"},{"line_number":154,"context_line":"                raise ValueError(\u0027bug must be a valid bug number\u0027)"},{"line_number":155,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_67ffc301","line":152,"updated":"2016-12-02 04:08:20.000000000","message":"Why do we need this as a kwarg, isn\u0027t this always required?","commit_id":"64d180410785e9721cc2b90752243eaf06a38ad2"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f5062467a9bbe1fd1fc14812e9cdf6ac0e513a47","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        @functools.wraps(f)"},{"line_number":151,"context_line":"        def wrapper(self, *func_args, **func_kwargs):"},{"line_number":152,"context_line":"            bug_number \u003d kwargs[\u0027bug\u0027]"},{"line_number":153,"context_line":"            if not bug_number.isdigit():"},{"line_number":154,"context_line":"                raise ValueError(\u0027bug must be a valid bug number\u0027)"},{"line_number":155,"context_line":"            try:"},{"line_number":156,"context_line":"                return f(self, *func_args, **func_kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_74184f85","line":153,"updated":"2016-12-02 04:08:20.000000000","message":"Why not just make the arg an int? It is a number.","commit_id":"64d180410785e9721cc2b90752243eaf06a38ad2"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f5062467a9bbe1fd1fc14812e9cdf6ac0e513a47","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            try:"},{"line_number":156,"context_line":"                return f(self, *func_args, **func_kwargs)"},{"line_number":157,"context_line":"            except Exception as exc:"},{"line_number":158,"context_line":"                LOG.error(\u0027Hints: The failure reason could be shown on \u0027"},{"line_number":159,"context_line":"                          \u0027https://launchpad.net/bugs/%s , please see the \u0027"},{"line_number":160,"context_line":"                          \u0027detail and find the solution.\u0027 % bug_number)"},{"line_number":161,"context_line":"                raise exc"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_f4253fc2","line":158,"updated":"2016-12-02 04:08:20.000000000","message":"As I said in the spec, we should not do this. We can not ever assume there is a causal relationship between the bug which we added a regression test for and an exception being raised during a test. This is overly broad and just counterproductive there is no way tempest can ever assume a failure of any type is because of the same bug which made us add a regression test.\n\nIf you want to indicate a test was added because of a bug use a test attribute to indicate that. That\u0027s all we can do and is what this decorator should be doing.","commit_id":"64d180410785e9721cc2b90752243eaf06a38ad2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"29eed553536b23eca733069796305f88224d9eaa","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                return f(self, *func_args, **func_kwargs)"},{"line_number":155,"context_line":"            except Exception as exc:"},{"line_number":156,"context_line":"                exc_status_code \u003d getattr(exc, \u0027status_code\u0027, None)"},{"line_number":157,"context_line":"                if status_code is None or status_code \u003d\u003d exc_status_code:"},{"line_number":158,"context_line":"                    LOG.error(\u0027Hints: The failure reason could be shown on \u0027"},{"line_number":159,"context_line":"                              \u0027https://launchpad.net/bugs/%s , please see the \u0027"},{"line_number":160,"context_line":"                              \u0027detail and find the solution.\u0027 % bug)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_18b59ecf","line":157,"range":{"start_line":157,"start_character":19,"end_line":157,"end_character":42},"updated":"2016-12-08 07:46:45.000000000","message":"I feel we can remove this condition as if status code is matching then only show these details. because any other failure due to configuration or env issue will throw exception with status_code as None","commit_id":"e40c5b88ec731e99640975fa1d4e023490651f84"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"6018241e9ef8d06201b9c43ea92eb1a8164ff5bf","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                return f(self, *func_args, **func_kwargs)"},{"line_number":155,"context_line":"            except Exception as exc:"},{"line_number":156,"context_line":"                exc_status_code \u003d getattr(exc, \u0027status_code\u0027, None)"},{"line_number":157,"context_line":"                if status_code is None or status_code \u003d\u003d exc_status_code:"},{"line_number":158,"context_line":"                    LOG.error(\u0027Hints: The failure reason could be shown on \u0027"},{"line_number":159,"context_line":"                              \u0027https://launchpad.net/bugs/%s , please see the \u0027"},{"line_number":160,"context_line":"                              \u0027detail and find the solution.\u0027 % bug)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_d63e8328","line":157,"range":{"start_line":157,"start_character":19,"end_line":157,"end_character":42},"in_reply_to":"3a71b18c_18b59ecf","updated":"2016-12-08 14:47:12.000000000","message":"Mann-san,\n\nMaybe you are saying status_code should be required, not optional on the method, right?\n\nI can agree with that.","commit_id":"e40c5b88ec731e99640975fa1d4e023490651f84"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"29eed553536b23eca733069796305f88224d9eaa","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            except Exception as exc:"},{"line_number":156,"context_line":"                exc_status_code \u003d getattr(exc, \u0027status_code\u0027, None)"},{"line_number":157,"context_line":"                if status_code is None or status_code \u003d\u003d exc_status_code:"},{"line_number":158,"context_line":"                    LOG.error(\u0027Hints: The failure reason could be shown on \u0027"},{"line_number":159,"context_line":"                              \u0027https://launchpad.net/bugs/%s , please see the \u0027"},{"line_number":160,"context_line":"                              \u0027detail and find the solution.\u0027 % bug)"},{"line_number":161,"context_line":"                raise exc"},{"line_number":162,"context_line":"        return wrapper"},{"line_number":163,"context_line":"    return decorator"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_d8c32637","line":160,"range":{"start_line":158,"start_character":0,"end_line":160,"end_character":68},"updated":"2016-12-08 07:46:45.000000000","message":"Also As Matt mentioned about","commit_id":"e40c5b88ec731e99640975fa1d4e023490651f84"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"09592f0b522edef6f955917cae1aec6e9ed6a811","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                if status_code is None or status_code \u003d\u003d exc_status_code:"},{"line_number":158,"context_line":"                    LOG.error(\u0027Hints: The failure reason could be shown on \u0027"},{"line_number":159,"context_line":"                              \u0027https://launchpad.net/bugs/%s , please see the \u0027"},{"line_number":160,"context_line":"                              \u0027detail and find the solution.\u0027 % bug)"},{"line_number":161,"context_line":"                raise exc"},{"line_number":162,"context_line":"        return wrapper"},{"line_number":163,"context_line":"    return decorator"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_be881dc8","line":160,"updated":"2016-12-08 01:30:41.000000000","message":"I\u0027m very unsure that we should indicate to the launchpad. I think it could be misleading..\nBut yeah, it could be a regression, so I think it\u0027s better to add more careful words. How about like this?\n\n This regression test was made for bug xxxxx. The failure reason could be related to it.","commit_id":"e40c5b88ec731e99640975fa1d4e023490651f84"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"29eed553536b23eca733069796305f88224d9eaa","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                if status_code is None or status_code \u003d\u003d exc_status_code:"},{"line_number":158,"context_line":"                    LOG.error(\u0027Hints: The failure reason could be shown on \u0027"},{"line_number":159,"context_line":"                              \u0027https://launchpad.net/bugs/%s , please see the \u0027"},{"line_number":160,"context_line":"                              \u0027detail and find the solution.\u0027 % bug)"},{"line_number":161,"context_line":"                raise exc"},{"line_number":162,"context_line":"        return wrapper"},{"line_number":163,"context_line":"    return decorator"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_78021271","line":160,"in_reply_to":"3a71b18c_98cd2e89","updated":"2016-12-08 07:46:45.000000000","message":"Along with this error details, as Matt mentioned about adding bug as test attribute. That might be helpful to show related/origin bug in health-dashboard also?","commit_id":"e40c5b88ec731e99640975fa1d4e023490651f84"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"459583c10745d84d20c85fa5b25a4eaff9b0ca55","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                if status_code is None or status_code \u003d\u003d exc_status_code:"},{"line_number":158,"context_line":"                    LOG.error(\u0027Hints: The failure reason could be shown on \u0027"},{"line_number":159,"context_line":"                              \u0027https://launchpad.net/bugs/%s , please see the \u0027"},{"line_number":160,"context_line":"                              \u0027detail and find the solution.\u0027 % bug)"},{"line_number":161,"context_line":"                raise exc"},{"line_number":162,"context_line":"        return wrapper"},{"line_number":163,"context_line":"    return decorator"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_98cd2e89","line":160,"in_reply_to":"3a71b18c_be881dc8","updated":"2016-12-08 07:41:17.000000000","message":"yea, that might be better. Strong mapping of failure with bug might be over assumption. \n\n@Matt what do you think?","commit_id":"e40c5b88ec731e99640975fa1d4e023490651f84"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e9196eab0b14abb19d05d28eebbf0cdf6dfafa97","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            except Exception as exc:"},{"line_number":156,"context_line":"                exc_status_code \u003d getattr(exc, \u0027status_code\u0027, None)"},{"line_number":157,"context_line":"                if status_code is None or status_code \u003d\u003d exc_status_code:"},{"line_number":158,"context_line":"                    LOG.error(\u0027Hints: The failure reason could be shown on \u0027"},{"line_number":159,"context_line":"                              \u0027https://launchpad.net/bugs/%s , please see the \u0027"},{"line_number":160,"context_line":"                              \u0027detail and find the solution.\u0027 % bug)"},{"line_number":161,"context_line":"                raise exc"},{"line_number":162,"context_line":"        return wrapper"},{"line_number":163,"context_line":"    return decorator"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_38997a20","line":160,"range":{"start_line":158,"start_character":0,"end_line":160,"end_character":68},"in_reply_to":"3a71b18c_d8c32637","updated":"2016-12-08 07:51:50.000000000","message":"opps, please ignore last one.","commit_id":"e40c5b88ec731e99640975fa1d4e023490651f84"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"dd8c56990d92c0719a9a8d5e35ea229ce60ee8eb","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    return False"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"def related_bug(bug, status_code):"},{"line_number":145,"context_line":"    \"\"\"A decorator useful to know solutions from launchpad bug reports"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    @param bug: The launchpad bug number causing the test"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_472b7994","line":144,"updated":"2016-12-09 10:43:18.000000000","message":"TBH I don\u0027t see much value in the status_code part. Having an un-expected status code from an API is just one of the ways a test could fail, and also it could be that a bug causes a test to fail with different status codes depending on the point in time where a race condition triggers.","commit_id":"f875a49721cd106a714ae711c7c9e9041c445b91"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"347c2c23f13d68abbd9a47be8ba03cb2f880d36e","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    return False"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"def related_bug(bug, status_code):"},{"line_number":145,"context_line":"    \"\"\"A decorator useful to know solutions from launchpad bug reports"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    @param bug: The launchpad bug number causing the test"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_83864fd9","line":144,"in_reply_to":"3a71b18c_472b7994","updated":"2016-12-13 01:38:08.000000000","message":"An interesting point.\nThe point is based on your investigation experience for timeout/race issues.\nYeah, the test can fail on different status code or different exceptions.\nThe point seems reasonable for me, I think it is nice to make this status_code optional and select passing status_code or not on each test side.","commit_id":"f875a49721cd106a714ae711c7c9e9041c445b91"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"dd8c56990d92c0719a9a8d5e35ea229ce60ee8eb","unresolved":false,"context_lines":[{"line_number":144,"context_line":"def related_bug(bug, status_code):"},{"line_number":145,"context_line":"    \"\"\"A decorator useful to know solutions from launchpad bug reports"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    @param bug: The launchpad bug number causing the test"},{"line_number":148,"context_line":"    @param status_code: The status code related to the bug report"},{"line_number":149,"context_line":"    \"\"\""},{"line_number":150,"context_line":"    def decorator(f):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_27783df2","line":147,"range":{"start_line":147,"start_character":41,"end_line":147,"end_character":57},"updated":"2016-12-09 10:43:18.000000000","message":"NIT: perhaps \"for which the test was written\" ?","commit_id":"f875a49721cd106a714ae711c7c9e9041c445b91"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"dd8c56990d92c0719a9a8d5e35ea229ce60ee8eb","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                return f(self, *func_args, **func_kwargs)"},{"line_number":155,"context_line":"            except Exception as exc:"},{"line_number":156,"context_line":"                exc_status_code \u003d getattr(exc, \u0027status_code\u0027, None)"},{"line_number":157,"context_line":"                if status_code \u003d\u003d exc_status_code:"},{"line_number":158,"context_line":"                    LOG.error(\u0027Hints: This test was made for the bug %s. \u0027"},{"line_number":159,"context_line":"                              \u0027The failure could be related to \u0027"},{"line_number":160,"context_line":"                              \u0027https://launchpad.net/bugs/%s\u0027 % (bug, bug))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_6a267cbb","line":157,"updated":"2016-12-09 10:43:18.000000000","message":"If a test was written as a reproducer for a bug, the fact that that specific test starts to fail may indicate a regression, even if the status code does not match. So I think it would be more useful to log this all the time. \n\nIf you want to keep the status_code bit it\u0027s fine for me, but I would use it to enhance the log message rather than skip it in case of no match.","commit_id":"f875a49721cd106a714ae711c7c9e9041c445b91"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"347c2c23f13d68abbd9a47be8ba03cb2f880d36e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                return f(self, *func_args, **func_kwargs)"},{"line_number":155,"context_line":"            except Exception as exc:"},{"line_number":156,"context_line":"                exc_status_code \u003d getattr(exc, \u0027status_code\u0027, None)"},{"line_number":157,"context_line":"                if status_code \u003d\u003d exc_status_code:"},{"line_number":158,"context_line":"                    LOG.error(\u0027Hints: This test was made for the bug %s. \u0027"},{"line_number":159,"context_line":"                              \u0027The failure could be related to \u0027"},{"line_number":160,"context_line":"                              \u0027https://launchpad.net/bugs/%s\u0027 % (bug, bug))"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_aece3858","line":157,"in_reply_to":"3a71b18c_4394098a","updated":"2016-12-13 01:38:08.000000000","message":"As the above, it is fine to manage this kind of think on the caller side. So I feel it is fine to make the option status_code option at this time.","commit_id":"f875a49721cd106a714ae711c7c9e9041c445b91"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e59f83641bc11afeddd227b942b88bc5a4b36685","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                return f(self, *func_args, **func_kwargs)"},{"line_number":155,"context_line":"            except Exception as exc:"},{"line_number":156,"context_line":"                exc_status_code \u003d getattr(exc, \u0027status_code\u0027, None)"},{"line_number":157,"context_line":"                if status_code \u003d\u003d exc_status_code:"},{"line_number":158,"context_line":"                    LOG.error(\u0027Hints: This test was made for the bug %s. \u0027"},{"line_number":159,"context_line":"                              \u0027The failure could be related to \u0027"},{"line_number":160,"context_line":"                              \u0027https://launchpad.net/bugs/%s\u0027 % (bug, bug))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_820b89d5","line":157,"in_reply_to":"3a71b18c_6a267cbb","updated":"2016-12-12 00:58:09.000000000","message":"Thanks Andrea. actually logging this error msg in all failure case might be over info as failure can happen due to configuration issue or other new race condition or failure.\n\nThis error msg shows bugs number which might not be suitable when any failure occur. main purpose of this decorator is to show related bugs if that actually occurred due to that (which is actually not true as tempest cannot know actual cause of bug but with status code at least we can assume it might be related to previous bugs)","commit_id":"f875a49721cd106a714ae711c7c9e9041c445b91"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"f334912d5879d6d2e55d3911e0789865a3ea0684","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                return f(self, *func_args, **func_kwargs)"},{"line_number":155,"context_line":"            except Exception as exc:"},{"line_number":156,"context_line":"                exc_status_code \u003d getattr(exc, \u0027status_code\u0027, None)"},{"line_number":157,"context_line":"                if status_code \u003d\u003d exc_status_code:"},{"line_number":158,"context_line":"                    LOG.error(\u0027Hints: This test was made for the bug %s. \u0027"},{"line_number":159,"context_line":"                              \u0027The failure could be related to \u0027"},{"line_number":160,"context_line":"                              \u0027https://launchpad.net/bugs/%s\u0027 % (bug, bug))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_4394098a","line":157,"in_reply_to":"3a71b18c_820b89d5","updated":"2016-12-12 09:53:58.000000000","message":"If the test fails having the info about previous failures will be useful. I know it may fail for a very different reason, e.g. misconfiguration, but I think logging the error only in case of matching status code is too restrictive.\n\nTests may fail on an assert for instance, and for them a decorator written like this won\u0027t be very useful because it will never display the error message.","commit_id":"f875a49721cd106a714ae711c7c9e9041c445b91"}]}
