)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f9cd3c7602f870756ae83f876626584151d0ac11","unresolved":false,"context_lines":[{"line_number":15,"context_line":"such test is failing by looking for describption of unstability"},{"line_number":16,"context_line":"reason set in decorator."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"As an example of usage for this decorator it is added to"},{"line_number":19,"context_line":"tempest.scenario.test_network_basic_ops.TestNetworkBasicOps.test_subnet_details"},{"line_number":20,"context_line":"because it is recently failing very often and there is already"},{"line_number":21,"context_line":"proposed patch which may fix it potentially [1]."},{"line_number":22,"context_line":"That way we can check in some time if fix [1] helped to solve issue"},{"line_number":23,"context_line":"with this test and not break gates with failure of it."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"[1] https://review.openstack.org/#/c/633502/"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9fdfeff1_4a8409b2","line":23,"range":{"start_line":18,"start_character":0,"end_line":23,"end_character":54},"updated":"2019-02-05 08:56:22.000000000","message":"let\u0027s test the decorator with unit test. and later we analyze each test mark as unstable_test because this decorator can easily be used to hide the failure as not easy to check how many times it is skipped or run.","commit_id":"39d2f6ad1b793f40175e901fd4726609343a1cd7"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"247c2b25de441870bc882e01b03f3262a546d529","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add unstable_test decorator"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This decorator can be used to temporary mark some tests as unstable."},{"line_number":10,"context_line":"This may help sometimes to debug such test which is failing often"},{"line_number":11,"context_line":"but not always in the gate because it will still be run but will"},{"line_number":12,"context_line":"not cause all job failure when it fails."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5fc1f717_77681220","line":9,"range":{"start_line":9,"start_character":30,"end_line":9,"end_character":39},"updated":"2019-04-10 09:14:45.000000000","message":"nit: temporarily","commit_id":"40b530d9b2f2cc17a2412dbd190fa84b658bb544"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1a8107715da935b49b9778fd28f838ac73786414","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add unstable_test decorator"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This decorator can be used to temporary mark some tests as unstable."},{"line_number":10,"context_line":"This may help sometimes to debug such test which is failing often"},{"line_number":11,"context_line":"but not always in the gate because it will still be run but will"},{"line_number":12,"context_line":"not cause all job failure when it fails."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3fce034c_b2c08652","line":9,"range":{"start_line":9,"start_character":30,"end_line":9,"end_character":39},"in_reply_to":"5fc1f717_77681220","updated":"2019-04-11 17:41:51.000000000","message":"Done","commit_id":"40b530d9b2f2cc17a2412dbd190fa84b658bb544"}],"tempest/lib/decorators.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"668aed353de70a7c8eeaa036b77de4490edf637c","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    return decorator"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"def unstable_test(reason):"},{"line_number":153,"context_line":"    def decor(f):"},{"line_number":154,"context_line":"        @functools.wraps(f)"},{"line_number":155,"context_line":"        def inner(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_cf31425c","line":152,"range":{"start_line":152,"start_character":18,"end_line":152,"end_character":24},"updated":"2019-01-30 13:54:00.000000000","message":"You may consider using the same signature (bug, bug_type, condition) as @skip_because(). It\u0027d be simpler to switch between them if that\u0027s ever needed.","commit_id":"73414b05abb38373284fb364dedb0526da80476e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"050fe6a92f09c6702c86c1b1d50d38e0f5ea3e38","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    return decorator"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"def unstable_test(reason):"},{"line_number":153,"context_line":"    def decor(f):"},{"line_number":154,"context_line":"        @functools.wraps(f)"},{"line_number":155,"context_line":"        def inner(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_e98c2f37","line":152,"range":{"start_line":152,"start_character":18,"end_line":152,"end_character":24},"in_reply_to":"9fdfeff1_cf31425c","updated":"2019-02-01 16:47:28.000000000","message":"Done","commit_id":"73414b05abb38373284fb364dedb0526da80476e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a6aa3834c5d0e935354b4dbdbc8871609272057d","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    ``bug`` must be a number and ``condition`` must be true for the test to"},{"line_number":156,"context_line":"    skip."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"},{"line_number":159,"context_line":"    :param bug_type: \u0027launchpad\u0027 or \u0027storyboard\u0027, default \u0027launchpad\u0027"},{"line_number":160,"context_line":"    :param condition: optional condition to be True for the skip to have place"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_aa29f5f2","line":157,"range":{"start_line":157,"start_character":0,"end_line":157,"end_character":0},"updated":"2019-02-05 08:52:30.000000000","message":"can you add few more line about how it is different from \u0027skip_because\u0027 and recommendation about when to use this?\n\nI hope this decorator will be used when \n- we have skipped tests with some bug and now bug is claimed to be fixed. Now we want to check the test stability so we use this decorator. The number of skipped cases with that bug can be counted to mark test stable again. Counting/Analyzing the skipped number is hard as of now until we add that support in elastic-recheck.","commit_id":"39d2f6ad1b793f40175e901fd4726609343a1cd7"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c50a136438037b8910b784649ce3374825a62fb7","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    ``bug`` must be a number and ``condition`` must be true for the test to"},{"line_number":156,"context_line":"    skip."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"},{"line_number":159,"context_line":"    :param bug_type: \u0027launchpad\u0027 or \u0027storyboard\u0027, default \u0027launchpad\u0027"},{"line_number":160,"context_line":"    :param condition: optional condition to be True for the skip to have place"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_80aab66e","line":157,"range":{"start_line":157,"start_character":0,"end_line":157,"end_character":0},"in_reply_to":"9fdfeff1_aa29f5f2","updated":"2019-02-20 14:27:42.000000000","message":"Done","commit_id":"39d2f6ad1b793f40175e901fd4726609343a1cd7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a6aa3834c5d0e935354b4dbdbc8871609272057d","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            except Exception as e:"},{"line_number":170,"context_line":"                skip \u003d False"},{"line_number":171,"context_line":"                msg \u003d \u0027\u0027"},{"line_number":172,"context_line":"                if \"condition\" in kwargs:"},{"line_number":173,"context_line":"                    if kwargs[\"condition\"] is True:"},{"line_number":174,"context_line":"                        skip \u003d True"},{"line_number":175,"context_line":"                else:"},{"line_number":176,"context_line":"                    skip \u003d True"},{"line_number":177,"context_line":"                if \"bug\" in kwargs and skip is True:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_4a23a906","line":174,"range":{"start_line":172,"start_character":0,"end_line":174,"end_character":35},"updated":"2019-02-05 08:52:30.000000000","message":"what can be condition here for this decorator? I hope only test failing with known bug and their fix can be tested with this decorator without affecting the gate failure.","commit_id":"39d2f6ad1b793f40175e901fd4726609343a1cd7"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c50a136438037b8910b784649ce3374825a62fb7","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            except Exception as e:"},{"line_number":170,"context_line":"                skip \u003d False"},{"line_number":171,"context_line":"                msg \u003d \u0027\u0027"},{"line_number":172,"context_line":"                if \"condition\" in kwargs:"},{"line_number":173,"context_line":"                    if kwargs[\"condition\"] is True:"},{"line_number":174,"context_line":"                        skip \u003d True"},{"line_number":175,"context_line":"                else:"},{"line_number":176,"context_line":"                    skip \u003d True"},{"line_number":177,"context_line":"                if \"bug\" in kwargs and skip is True:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_191ac26e","line":174,"range":{"start_line":172,"start_character":0,"end_line":174,"end_character":35},"in_reply_to":"9fdfeff1_4a23a906","updated":"2019-02-20 14:27:42.000000000","message":"You\u0027re right. Removed","commit_id":"39d2f6ad1b793f40175e901fd4726609343a1cd7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a6aa3834c5d0e935354b4dbdbc8871609272057d","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                    bug_type \u003d kwargs.get(\u0027bug_type\u0027, \u0027launchpad\u0027)"},{"line_number":180,"context_line":"                    bug_url \u003d _get_bug_url(bug, bug_type)"},{"line_number":181,"context_line":"                    msg \u003d (\"Marked as unstable and skipped because of bug: \""},{"line_number":182,"context_line":"                           \"%s, failure was: %s\") % (bug_url, e)"},{"line_number":183,"context_line":"                    raise testtools.TestCase.skipException(msg)"},{"line_number":184,"context_line":"        return inner"},{"line_number":185,"context_line":"    return decor"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_8a38b13d","line":183,"range":{"start_line":182,"start_character":0,"end_line":183,"end_character":63},"updated":"2019-02-05 08:52:30.000000000","message":"skipped data cannot be collected for audit the test for its stability. I expect if elastic-recheck can add such skip tests data also then this decorator can be used to check the test stability.","commit_id":"39d2f6ad1b793f40175e901fd4726609343a1cd7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"0043d490a828c0507c9af550354928bbfa9956fd","unresolved":false,"context_lines":[{"line_number":152,"context_line":"def unstable_test(*args, **kwargs):"},{"line_number":153,"context_line":"    \"\"\"A decorator useful to run tests hitting known bugs and skip it if fails"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    This decorator can be used in cases like:"},{"line_number":156,"context_line":"    * We have skipped tests with some bug and now bug is claimed to be fixed."},{"line_number":157,"context_line":"      Now we want to check the test stability so we use this decorator."},{"line_number":158,"context_line":"      The number of skipped cases with that bug can be counted to mark test"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_29aa9318","line":155,"updated":"2019-02-23 23:03:44.000000000","message":"nit: need newline here for sphinx to render the bullets correctly","commit_id":"f640fedde3ee29da1efb410fb2fd744a78b3e206"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c1060083d5152ab5688be26e8f692be82b8478b6","unresolved":false,"context_lines":[{"line_number":152,"context_line":"def unstable_test(*args, **kwargs):"},{"line_number":153,"context_line":"    \"\"\"A decorator useful to run tests hitting known bugs and skip it if fails"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    This decorator can be used in cases like:"},{"line_number":156,"context_line":"    * We have skipped tests with some bug and now bug is claimed to be fixed."},{"line_number":157,"context_line":"      Now we want to check the test stability so we use this decorator."},{"line_number":158,"context_line":"      The number of skipped cases with that bug can be counted to mark test"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_36b14b90","line":155,"in_reply_to":"9fdfeff1_29aa9318","updated":"2019-02-27 11:33:53.000000000","message":"Done","commit_id":"f640fedde3ee29da1efb410fb2fd744a78b3e206"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"0043d490a828c0507c9af550354928bbfa9956fd","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"},{"line_number":170,"context_line":"    :param bug_type: \u0027launchpad\u0027 or \u0027storyboard\u0027, default \u0027launchpad\u0027"},{"line_number":171,"context_line":"    :raises: testtools.TestCase.skipException if test actally failes,"},{"line_number":172,"context_line":"        ``condition`` is True and ``bug`` is included"},{"line_number":173,"context_line":"    \"\"\""},{"line_number":174,"context_line":"    def decor(f):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_c9b98779","line":171,"range":{"start_line":171,"start_character":62,"end_line":171,"end_character":68},"updated":"2019-02-23 23:03:44.000000000","message":"fails","commit_id":"f640fedde3ee29da1efb410fb2fd744a78b3e206"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c1060083d5152ab5688be26e8f692be82b8478b6","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"},{"line_number":170,"context_line":"    :param bug_type: \u0027launchpad\u0027 or \u0027storyboard\u0027, default \u0027launchpad\u0027"},{"line_number":171,"context_line":"    :raises: testtools.TestCase.skipException if test actally failes,"},{"line_number":172,"context_line":"        ``condition`` is True and ``bug`` is included"},{"line_number":173,"context_line":"    \"\"\""},{"line_number":174,"context_line":"    def decor(f):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_f6a66354","line":171,"range":{"start_line":171,"start_character":62,"end_line":171,"end_character":68},"in_reply_to":"9fdfeff1_c9b98779","updated":"2019-02-27 11:33:53.000000000","message":"Done","commit_id":"f640fedde3ee29da1efb410fb2fd744a78b3e206"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"0043d490a828c0507c9af550354928bbfa9956fd","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"},{"line_number":170,"context_line":"    :param bug_type: \u0027launchpad\u0027 or \u0027storyboard\u0027, default \u0027launchpad\u0027"},{"line_number":171,"context_line":"    :raises: testtools.TestCase.skipException if test actally failes,"},{"line_number":172,"context_line":"        ``condition`` is True and ``bug`` is included"},{"line_number":173,"context_line":"    \"\"\""},{"line_number":174,"context_line":"    def decor(f):"},{"line_number":175,"context_line":"        @functools.wraps(f)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_e961eb12","line":172,"range":{"start_line":172,"start_character":10,"end_line":172,"end_character":19},"updated":"2019-02-23 23:03:44.000000000","message":"`condition` isn\u0027t used in here. This is a copy/paste from above.","commit_id":"f640fedde3ee29da1efb410fb2fd744a78b3e206"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c1060083d5152ab5688be26e8f692be82b8478b6","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"},{"line_number":170,"context_line":"    :param bug_type: \u0027launchpad\u0027 or \u0027storyboard\u0027, default \u0027launchpad\u0027"},{"line_number":171,"context_line":"    :raises: testtools.TestCase.skipException if test actally failes,"},{"line_number":172,"context_line":"        ``condition`` is True and ``bug`` is included"},{"line_number":173,"context_line":"    \"\"\""},{"line_number":174,"context_line":"    def decor(f):"},{"line_number":175,"context_line":"        @functools.wraps(f)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_966d9704","line":172,"range":{"start_line":172,"start_character":10,"end_line":172,"end_character":19},"in_reply_to":"9fdfeff1_e961eb12","updated":"2019-02-27 11:33:53.000000000","message":"right, sorry :)","commit_id":"f640fedde3ee29da1efb410fb2fd744a78b3e206"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"0043d490a828c0507c9af550354928bbfa9956fd","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            try:"},{"line_number":178,"context_line":"                return f(self, *func_args, **func_kwargs)"},{"line_number":179,"context_line":"            except Exception as e:"},{"line_number":180,"context_line":"                msg \u003d \u0027\u0027"},{"line_number":181,"context_line":"                if \"bug\" in kwargs:"},{"line_number":182,"context_line":"                    bug \u003d kwargs[\u0027bug\u0027]"},{"line_number":183,"context_line":"                    bug_type \u003d kwargs.get(\u0027bug_type\u0027, \u0027launchpad\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_a9b68389","line":180,"range":{"start_line":180,"start_character":16,"end_line":180,"end_character":24},"updated":"2019-02-23 23:03:44.000000000","message":"This can be removed; overwritten on L185.","commit_id":"f640fedde3ee29da1efb410fb2fd744a78b3e206"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c1060083d5152ab5688be26e8f692be82b8478b6","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            try:"},{"line_number":178,"context_line":"                return f(self, *func_args, **func_kwargs)"},{"line_number":179,"context_line":"            except Exception as e:"},{"line_number":180,"context_line":"                msg \u003d \u0027\u0027"},{"line_number":181,"context_line":"                if \"bug\" in kwargs:"},{"line_number":182,"context_line":"                    bug \u003d kwargs[\u0027bug\u0027]"},{"line_number":183,"context_line":"                    bug_type \u003d kwargs.get(\u0027bug_type\u0027, \u0027launchpad\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_36762bda","line":180,"range":{"start_line":180,"start_character":16,"end_line":180,"end_character":24},"in_reply_to":"9fdfeff1_a9b68389","updated":"2019-02-27 11:33:53.000000000","message":"Done","commit_id":"f640fedde3ee29da1efb410fb2fd744a78b3e206"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"f182417e4c2c4169544d53ea9e25440f1af1a8b3","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                    bug_url \u003d _get_bug_url(bug, bug_type)"},{"line_number":185,"context_line":"                    msg \u003d (\"Marked as unstable and skipped because of bug: \""},{"line_number":186,"context_line":"                           \"%s, failure was: %s\") % (bug_url, e)"},{"line_number":187,"context_line":"                    raise testtools.TestCase.skipException(msg)"},{"line_number":188,"context_line":"        return inner"},{"line_number":189,"context_line":"    return decor"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_aea24afb","line":187,"updated":"2019-04-02 06:32:24.000000000","message":"+1","commit_id":"7ed0b88705b4855cbdbd9633667ad709dff6309c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6007a17531912f6c7a3ab4d9f973089ce9df5e63","unresolved":false,"context_lines":[{"line_number":178,"context_line":"            try:"},{"line_number":179,"context_line":"                return f(self, *func_args, **func_kwargs)"},{"line_number":180,"context_line":"            except Exception as e:"},{"line_number":181,"context_line":"                if \"bug\" in kwargs:"},{"line_number":182,"context_line":"                    bug \u003d kwargs[\u0027bug\u0027]"},{"line_number":183,"context_line":"                    bug_type \u003d kwargs.get(\u0027bug_type\u0027, \u0027launchpad\u0027)"},{"line_number":184,"context_line":"                    bug_url \u003d _get_bug_url(bug, bug_type)"},{"line_number":185,"context_line":"                    msg \u003d (\"Marked as unstable and skipped because of bug: \""},{"line_number":186,"context_line":"                           \"%s, failure was: %s\") % (bug_url, e)"},{"line_number":187,"context_line":"                    raise testtools.TestCase.skipException(msg)"},{"line_number":188,"context_line":"        return inner"},{"line_number":189,"context_line":"    return decor"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_0af92a7f","line":187,"range":{"start_line":181,"start_character":0,"end_line":187,"end_character":63},"updated":"2019-03-06 04:45:50.000000000","message":"we need to re-raise the exception in else part. otherwise it will be false pass when bug is not mentioned for this decorator.","commit_id":"7ed0b88705b4855cbdbd9633667ad709dff6309c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7a39b1baa1e5031cde7448e82b8dd9f63e235a4d","unresolved":false,"context_lines":[{"line_number":178,"context_line":"            try:"},{"line_number":179,"context_line":"                return f(self, *func_args, **func_kwargs)"},{"line_number":180,"context_line":"            except Exception as e:"},{"line_number":181,"context_line":"                if \"bug\" in kwargs:"},{"line_number":182,"context_line":"                    bug \u003d kwargs[\u0027bug\u0027]"},{"line_number":183,"context_line":"                    bug_type \u003d kwargs.get(\u0027bug_type\u0027, \u0027launchpad\u0027)"},{"line_number":184,"context_line":"                    bug_url \u003d _get_bug_url(bug, bug_type)"},{"line_number":185,"context_line":"                    msg \u003d (\"Marked as unstable and skipped because of bug: \""},{"line_number":186,"context_line":"                           \"%s, failure was: %s\") % (bug_url, e)"},{"line_number":187,"context_line":"                    raise testtools.TestCase.skipException(msg)"},{"line_number":188,"context_line":"        return inner"},{"line_number":189,"context_line":"    return decor"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_fec868a8","line":187,"range":{"start_line":181,"start_character":0,"end_line":187,"end_character":63},"in_reply_to":"5fc1f717_0af92a7f","updated":"2019-04-09 21:32:10.000000000","message":"Done","commit_id":"7ed0b88705b4855cbdbd9633667ad709dff6309c"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"247c2b25de441870bc882e01b03f3262a546d529","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"},{"line_number":171,"context_line":"    :param bug_type: \u0027launchpad\u0027 or \u0027storyboard\u0027, default \u0027launchpad\u0027"},{"line_number":172,"context_line":"    :raises: testtools.TestCase.skipException if test actally fails,"},{"line_number":173,"context_line":"        and ``bug`` is included"},{"line_number":174,"context_line":"    \"\"\""},{"line_number":175,"context_line":"    def decor(f):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5fc1f717_5756365e","line":172,"range":{"start_line":172,"start_character":54,"end_line":172,"end_character":61},"updated":"2019-04-10 09:14:45.000000000","message":"nit: actually","commit_id":"40b530d9b2f2cc17a2412dbd190fa84b658bb544"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1a8107715da935b49b9778fd28f838ac73786414","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    :param bug: bug number causing the test to skip (launchpad or storyboard)"},{"line_number":171,"context_line":"    :param bug_type: \u0027launchpad\u0027 or \u0027storyboard\u0027, default \u0027launchpad\u0027"},{"line_number":172,"context_line":"    :raises: testtools.TestCase.skipException if test actally fails,"},{"line_number":173,"context_line":"        and ``bug`` is included"},{"line_number":174,"context_line":"    \"\"\""},{"line_number":175,"context_line":"    def decor(f):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fce034c_d2ef52e7","line":172,"range":{"start_line":172,"start_character":54,"end_line":172,"end_character":61},"in_reply_to":"5fc1f717_5756365e","updated":"2019-04-11 17:41:51.000000000","message":"Done. fixing this as this is doc string.","commit_id":"40b530d9b2f2cc17a2412dbd190fa84b658bb544"}],"tempest/scenario/test_network_basic_ops.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a6aa3834c5d0e935354b4dbdbc8871609272057d","unresolved":false,"context_lines":[{"line_number":544,"context_line":"            should_connect\u003dTrue, msg\u003d\"after updating \""},{"line_number":545,"context_line":"            \"admin_state_up of router to True\")"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    @decorators.unstable_test(bug\u003d\u00271813198\u0027)"},{"line_number":548,"context_line":"    @decorators.idempotent_id(\u0027d8bb918e-e2df-48b2-97cd-b73c95450980\u0027)"},{"line_number":549,"context_line":"    @testtools.skipIf(CONF.network.shared_physical_network,"},{"line_number":550,"context_line":"                      \u0027network isolation not available\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_eae29da0","line":547,"range":{"start_line":547,"start_character":0,"end_line":547,"end_character":44},"updated":"2019-02-05 08:52:30.000000000","message":"we should add this decorator in tests in another patch after analyzing whether it is a good candidate or not (with failure data etc).","commit_id":"39d2f6ad1b793f40175e901fd4726609343a1cd7"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c50a136438037b8910b784649ce3374825a62fb7","unresolved":false,"context_lines":[{"line_number":544,"context_line":"            should_connect\u003dTrue, msg\u003d\"after updating \""},{"line_number":545,"context_line":"            \"admin_state_up of router to True\")"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    @decorators.unstable_test(bug\u003d\u00271813198\u0027)"},{"line_number":548,"context_line":"    @decorators.idempotent_id(\u0027d8bb918e-e2df-48b2-97cd-b73c95450980\u0027)"},{"line_number":549,"context_line":"    @testtools.skipIf(CONF.network.shared_physical_network,"},{"line_number":550,"context_line":"                      \u0027network isolation not available\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_00b006dd","line":547,"range":{"start_line":547,"start_character":0,"end_line":547,"end_character":44},"in_reply_to":"9fdfeff1_eae29da0","updated":"2019-02-20 14:27:42.000000000","message":"ok, removed it from here now","commit_id":"39d2f6ad1b793f40175e901fd4726609343a1cd7"}],"tempest/tests/lib/test_decorators.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"0043d490a828c0507c9af550354928bbfa9956fd","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        fail_test_reason \u003d \"test_bar failed\""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        class TestFoo(test.BaseTestCase):"},{"line_number":119,"context_line":"            _interface \u003d \u0027json\u0027"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"            @decorators.unstable_test(**decorator_args)"},{"line_number":122,"context_line":"            def test_bar(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_297ff3ab","line":119,"range":{"start_line":119,"start_character":12,"end_line":119,"end_character":31},"updated":"2019-02-23 23:03:44.000000000","message":"nit: curious whether this is needed.","commit_id":"f640fedde3ee29da1efb410fb2fd744a78b3e206"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c1060083d5152ab5688be26e8f692be82b8478b6","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        fail_test_reason \u003d \"test_bar failed\""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        class TestFoo(test.BaseTestCase):"},{"line_number":119,"context_line":"            _interface \u003d \u0027json\u0027"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"            @decorators.unstable_test(**decorator_args)"},{"line_number":122,"context_line":"            def test_bar(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_3624ebc5","line":119,"range":{"start_line":119,"start_character":12,"end_line":119,"end_character":31},"in_reply_to":"9fdfeff1_297ff3ab","updated":"2019-02-27 11:33:53.000000000","message":"Looks that it\u0027s not. Removed :)","commit_id":"f640fedde3ee29da1efb410fb2fd744a78b3e206"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"f182417e4c2c4169544d53ea9e25440f1af1a8b3","unresolved":false,"context_lines":[{"line_number":54,"context_line":"class BaseSkipDecoratorTests(object):"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test_skip_launchpad_bug(self):"},{"line_number":57,"context_line":"        self._test_skip_helper(bug\u003d\u002712345\u0027)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def test_skip_storyboard_bug(self):"},{"line_number":60,"context_line":"        self._test_skip_helper(bug\u003d\u00271992\u0027, bug_type\u003d\u0027storyboard\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_0e9efeb7","line":57,"updated":"2019-04-02 06:32:24.000000000","message":"hmm, I feel this is a bit weird because thers no `_test_skip_helper()` in this class. So, how about using @six.add_metaclass/abstractmethod like this? https://github.com/openstack/tempest/blob/master/tempest/lib/common/cred_provider.py#L23","commit_id":"7ed0b88705b4855cbdbd9633667ad709dff6309c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7a39b1baa1e5031cde7448e82b8dd9f63e235a4d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"class BaseSkipDecoratorTests(object):"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test_skip_launchpad_bug(self):"},{"line_number":57,"context_line":"        self._test_skip_helper(bug\u003d\u002712345\u0027)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def test_skip_storyboard_bug(self):"},{"line_number":60,"context_line":"        self._test_skip_helper(bug\u003d\u00271992\u0027, bug_type\u003d\u0027storyboard\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_dee24c01","line":57,"in_reply_to":"5fc1f717_0e9efeb7","updated":"2019-04-09 21:32:10.000000000","message":"Done","commit_id":"7ed0b88705b4855cbdbd9633667ad709dff6309c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6007a17531912f6c7a3ab4d9f973089ce9df5e63","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"            @decorators.unstable_test(**decorator_args)"},{"line_number":121,"context_line":"            def test_bar(self):"},{"line_number":122,"context_line":"                if expected_to_skip:"},{"line_number":123,"context_line":"                    raise Exception(fail_test_reason)"},{"line_number":124,"context_line":"                else:"},{"line_number":125,"context_line":"                    return 0"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_4a34124b","line":122,"range":{"start_line":122,"start_character":19,"end_line":122,"end_character":35},"updated":"2019-03-06 04:45:50.000000000","message":"you need to take this in separate arg to cover the case where the exception is raised and it is not expected to skip the tests (using this decorator without bug number).","commit_id":"7ed0b88705b4855cbdbd9633667ad709dff6309c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7a39b1baa1e5031cde7448e82b8dd9f63e235a4d","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"            @decorators.unstable_test(**decorator_args)"},{"line_number":121,"context_line":"            def test_bar(self):"},{"line_number":122,"context_line":"                if expected_to_skip:"},{"line_number":123,"context_line":"                    raise Exception(fail_test_reason)"},{"line_number":124,"context_line":"                else:"},{"line_number":125,"context_line":"                    return 0"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_7ec6b86a","line":122,"range":{"start_line":122,"start_character":19,"end_line":122,"end_character":35},"in_reply_to":"5fc1f717_4a34124b","updated":"2019-04-09 21:32:10.000000000","message":"Done","commit_id":"7ed0b88705b4855cbdbd9633667ad709dff6309c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6007a17531912f6c7a3ab4d9f973089ce9df5e63","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        else:"},{"line_number":139,"context_line":"            # assert that test_bar returned 0"},{"line_number":140,"context_line":"            self.assertEqual(TestFoo(\u0027test_bar\u0027).test_bar(), 0)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"class TestIdempotentIdDecorator(base.TestCase):"},{"line_number":144,"context_line":"    def _test_helper(self, _id, **decorator_args):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_ea44deb9","line":141,"range":{"start_line":141,"start_character":0,"end_line":141,"end_character":0},"updated":"2019-03-06 04:45:50.000000000","message":"can we add one more test case for- bug is mentioned and no exception so test pass.","commit_id":"7ed0b88705b4855cbdbd9633667ad709dff6309c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7a39b1baa1e5031cde7448e82b8dd9f63e235a4d","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        else:"},{"line_number":139,"context_line":"            # assert that test_bar returned 0"},{"line_number":140,"context_line":"            self.assertEqual(TestFoo(\u0027test_bar\u0027).test_bar(), 0)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"class TestIdempotentIdDecorator(base.TestCase):"},{"line_number":144,"context_line":"    def _test_helper(self, _id, **decorator_args):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_fefce872","line":141,"range":{"start_line":141,"start_character":0,"end_line":141,"end_character":0},"in_reply_to":"5fc1f717_ea44deb9","updated":"2019-04-09 21:32:10.000000000","message":"Done","commit_id":"7ed0b88705b4855cbdbd9633667ad709dff6309c"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"247c2b25de441870bc882e01b03f3262a546d529","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self._test_attr_helper(expected_attrs\u003d[\u0027foo\u0027], type\u003d[\u0027foo\u0027, \u0027foo\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":58,"context_line":"class BaseSkipDecoratorTests(object):"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @abc.abstractmethod"},{"line_number":61,"context_line":"    def _test_skip_helper(self, raise_exception\u003dTrue, expected_to_skip\u003dTrue,"},{"line_number":62,"context_line":"                          **decorator_args):"},{"line_number":63,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":7,"id":"5fc1f717_57b2b695","line":60,"range":{"start_line":57,"start_character":0,"end_line":60,"end_character":23},"updated":"2019-04-10 09:14:45.000000000","message":"side note: I spent quite some time understanding why we need all this. Reading back the comments now I see. However I  think Python allows simpler ways to achieve the same (that is forgetting about abstract and simply naming the class WhateverMixin and that sets the programmers expectations). This is kind of C++ code written in Python. Where I find the formal correctness comes at the price of easy readabilty. But I won\u0027t vote -1 because of this. Just food for thought.","commit_id":"40b530d9b2f2cc17a2412dbd190fa84b658bb544"}]}
