)]}'
{"neutron/tests/common/helpers.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"69730f2f9ad750e861049318dc72ba93733b9a91","unresolved":false,"context_lines":[{"line_number":23,"context_line":"SUDO_TEST_SKIP \u003d \u0027testing with sudo is not enabled\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def check_sudo_enabled():"},{"line_number":27,"context_line":"    \"\"\"Check whether sudo privileges are enabled in tests."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    sudo privileges are enabled when OS_SUDO_TESTING is set to \u00271\u0027 or \u0027True\u0027 in"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_dcd9ed23","line":26,"updated":"2015-02-26 21:09:17.000000000","message":"This method name is no longer appropriate since a check is not being performed.   Please rename to \u0027is_sudo_enabled\u0027.","commit_id":"4a2e3652155565e014198058e18e5b016df79ff4"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"69730f2f9ad750e861049318dc72ba93733b9a91","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                tools.skipTest(SUDO_TEST_SKIP)"},{"line_number":48,"context_line":"            return original_create_process(*args, **kwargs)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        mock.patch.object(utils, \u0027create_process\u0027,"},{"line_number":51,"context_line":"                          checked_create_process).start()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_bc90b94f","line":50,"updated":"2015-02-26 21:09:17.000000000","message":"monkeypatching ftw!\n\nIn all seriousness, monkeypatching sucks and we only use it as a method of last resort.   enable_sudo_enabled_check is a bit too vague for my liking, so consider changing the name of the method to something like \u0027patch_create_process\u0027 so that it\u0027s apparent to anyone looking at the invocation what is happening.","commit_id":"4a2e3652155565e014198058e18e5b016df79ff4"}],"neutron/tests/functional/agent/linux/base.py":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"5a0c40bd49900f39c5915455785fa7e92fe12c32","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    SRC_ADDRESS \u003d \u0027192.168.0.1\u0027"},{"line_number":161,"context_line":"    DST_ADDRESS \u003d \u0027192.168.0.2\u0027"},{"line_number":162,"context_line":"    BROADCAST_ADDRESS \u003d \u0027192.168.0.255\u0027"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def setUp(self):"},{"line_number":165,"context_line":"        super(BaseIPVethTestCase, self).setUp()"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_a3afb193","line":163,"updated":"2015-02-27 00:29:41.000000000","message":"This setUp method can be removed like you did in the other files.","commit_id":"d4e9c3eb6cf8bdbfeb6f2c4e3a037239cd47a5f2"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"7156132c40f42d9c86b163333e1421e6fea777d2","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    SRC_ADDRESS \u003d \u0027192.168.0.1\u0027"},{"line_number":161,"context_line":"    DST_ADDRESS \u003d \u0027192.168.0.2\u0027"},{"line_number":162,"context_line":"    BROADCAST_ADDRESS \u003d \u0027192.168.0.255\u0027"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def setUp(self):"},{"line_number":165,"context_line":"        super(BaseIPVethTestCase, self).setUp()"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_c7a57cb6","line":163,"in_reply_to":"ba7be1f8_a3afb193","updated":"2015-02-27 11:24:51.000000000","message":"Done","commit_id":"d4e9c3eb6cf8bdbfeb6f2c4e3a037239cd47a5f2"}],"neutron/tests/functional/agent/linux/test_ovsdb_monitor.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"69730f2f9ad750e861049318dc72ba93733b9a91","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self.bridge \u003d self.create_ovs_bridge()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _check_test_requirements(self):"},{"line_number":53,"context_line":"        helpers.skip_if_sudo_disabled()"},{"line_number":54,"context_line":"        self.check_command([\u0027ovsdb-client\u0027, \u0027list-dbs\u0027],"},{"line_number":55,"context_line":"                           \u0027Exit code: 1\u0027,"},{"line_number":56,"context_line":"                           \u0027password-less sudo not granted for ovsdb-client\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_7c480188","line":53,"updated":"2015-02-26 21:09:17.000000000","message":"I\u0027m not sure why an explicit check is required here.  The implicit check would appear to already apply to this class.","commit_id":"4a2e3652155565e014198058e18e5b016df79ff4"}],"neutron/tests/functional/base.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"f5822cfd2f783a3425b7e70e93cb17fd5dc8adc9","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":"    Base class for tests requiring invocation of commands via a root helper."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    This class enables an implicit check in execute skipping tests requiring"},{"line_number":33,"context_line":"    sudo unless OS_SUDO_TESTING is set to \u00271\u0027 or \u0027True\u0027 in the test execution"},{"line_number":34,"context_line":"    environment.  Inheritors can also check explicitly sudo permissions by"},{"line_number":35,"context_line":"    calling check_sudo_enabled. This is intended to allow developers to run the"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_6c016869","line":32,"updated":"2015-02-25 21:01:11.000000000","message":"in execute skipping -\u003e for whether sudo privileges are required for functions that create subprocesses","commit_id":"d23e97b07fc6c292818d92e0b644b1c6f6af9d97"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"f5822cfd2f783a3425b7e70e93cb17fd5dc8adc9","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    This class enables an implicit check in execute skipping tests requiring"},{"line_number":33,"context_line":"    sudo unless OS_SUDO_TESTING is set to \u00271\u0027 or \u0027True\u0027 in the test execution"},{"line_number":34,"context_line":"    environment.  Inheritors can also check explicitly sudo permissions by"},{"line_number":35,"context_line":"    calling check_sudo_enabled. This is intended to allow developers to run the"},{"line_number":36,"context_line":"    functional suite (e.g. tox -e functional) without test failures if sudo"},{"line_number":37,"context_line":"    invocations are not allowed."}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_7115bf47","line":34,"updated":"2015-02-25 21:01:11.000000000","message":"Inheritors -\u003e subclasses\n\nexplicitly...by -\u003e explicitly whether sudo permissions are required by","commit_id":"d23e97b07fc6c292818d92e0b644b1c6f6af9d97"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"e739ba2e3dede71f8c4ba2f2b770e97205fad8f3","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @classmethod"},{"line_number":48,"context_line":"    def setUpClass(cls):"},{"line_number":49,"context_line":"        super(BaseSudoTestCase, cls).setUpClass()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        if not base.bool_from_env(\u0027OS_SUDO_TESTING\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_27b9dbe9","line":48,"updated":"2015-02-27 21:45:57.000000000","message":"setupClass should not be used, it doesn\u0027t work properly with testtools.  It is also preferable to see a skip for each test.\n\nhttps://bugs.launchpad.net/testtools/+bug/1393068","commit_id":"5c6aafa054570ea4e6dc46e792824af97ce63deb"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"0af83d0d0023fa788c75bb7550d9f778deaa0d9b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @classmethod"},{"line_number":48,"context_line":"    def setUpClass(cls):"},{"line_number":49,"context_line":"        super(BaseSudoTestCase, cls).setUpClass()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        if not base.bool_from_env(\u0027OS_SUDO_TESTING\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_a7eeabb2","line":48,"in_reply_to":"ba7be1f8_27b9dbe9","updated":"2015-02-27 21:51:26.000000000","message":"Done","commit_id":"5c6aafa054570ea4e6dc46e792824af97ce63deb"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"ff570cfa9a0a58dc9790bbe7b56a285a29008049","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        super(BaseSudoTestCase, self).setUp()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        if not base.bool_from_env(\u0027OS_SUDO_TESTING\u0027):"},{"line_number":51,"context_line":"            raise cls.skipException(\u0027Testing with sudo is not enabled\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.fail_on_missing_deps \u003d ("},{"line_number":54,"context_line":"            base.bool_from_env(\u0027OS_FAIL_ON_MISSING_DEPS\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba7be1f8_22f8e9e4","line":51,"updated":"2015-02-27 22:13:00.000000000","message":"cls -\u003e self","commit_id":"7bb8c215405c2f8733a0dcb8863bab7f737f9464"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"6f51b2be3ba0dec0707000c65e7a92186db2288a","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        super(BaseSudoTestCase, self).setUp()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        if not base.bool_from_env(\u0027OS_SUDO_TESTING\u0027):"},{"line_number":51,"context_line":"            raise cls.skipException(\u0027Testing with sudo is not enabled\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.fail_on_missing_deps \u003d ("},{"line_number":54,"context_line":"            base.bool_from_env(\u0027OS_FAIL_ON_MISSING_DEPS\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba7be1f8_826b5584","line":51,"in_reply_to":"ba7be1f8_22f8e9e4","updated":"2015-02-27 22:15:41.000000000","message":"arf \u003d\u003d\u003e Done","commit_id":"7bb8c215405c2f8733a0dcb8863bab7f737f9464"}],"neutron/tests/tools.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"69730f2f9ad750e861049318dc72ba93733b9a91","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    raise unittest.TestCase.failureException(msg)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def skipTest(reason):"},{"line_number":62,"context_line":"    \"\"\"Skip current test."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    This method is equivalent to TestCase.skipTest without requirig a"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba7be1f8_1c2b8534","line":61,"updated":"2015-02-26 21:09:17.000000000","message":"Please stick to our underscore_separated naming convention for functions when we\u0027re defining new functions (e.g. skip_test).","commit_id":"4a2e3652155565e014198058e18e5b016df79ff4"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"5a0c40bd49900f39c5915455785fa7e92fe12c32","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def skip_test(reason):"},{"line_number":62,"context_line":"    \"\"\"Skip current test."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    This method is equivalent to TestCase.skipTest without requirig a"},{"line_number":65,"context_line":"    testcase instance (usefully for reducing coupling)."},{"line_number":66,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_23ed81f0","line":63,"updated":"2015-02-27 00:29:41.000000000","message":"requiring","commit_id":"d4e9c3eb6cf8bdbfeb6f2c4e3a037239cd47a5f2"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"7156132c40f42d9c86b163333e1421e6fea777d2","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def skip_test(reason):"},{"line_number":62,"context_line":"    \"\"\"Skip current test."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    This method is equivalent to TestCase.skipTest without requirig a"},{"line_number":65,"context_line":"    testcase instance (usefully for reducing coupling)."},{"line_number":66,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_47918c51","line":63,"in_reply_to":"ba7be1f8_23ed81f0","updated":"2015-02-27 11:24:51.000000000","message":"removed","commit_id":"d4e9c3eb6cf8bdbfeb6f2c4e3a037239cd47a5f2"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"5a0c40bd49900f39c5915455785fa7e92fe12c32","unresolved":false,"context_lines":[{"line_number":61,"context_line":"def skip_test(reason):"},{"line_number":62,"context_line":"    \"\"\"Skip current test."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    This method is equivalent to TestCase.skipTest without requirig a"},{"line_number":65,"context_line":"    testcase instance (usefully for reducing coupling)."},{"line_number":66,"context_line":"    \"\"\""},{"line_number":67,"context_line":"    raise testtools.testcase.TestSkipped(reason)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_03f07dc8","line":64,"updated":"2015-02-27 00:29:41.000000000","message":"usefully -\u003e useful","commit_id":"d4e9c3eb6cf8bdbfeb6f2c4e3a037239cd47a5f2"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"7156132c40f42d9c86b163333e1421e6fea777d2","unresolved":false,"context_lines":[{"line_number":61,"context_line":"def skip_test(reason):"},{"line_number":62,"context_line":"    \"\"\"Skip current test."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    This method is equivalent to TestCase.skipTest without requirig a"},{"line_number":65,"context_line":"    testcase instance (usefully for reducing coupling)."},{"line_number":66,"context_line":"    \"\"\""},{"line_number":67,"context_line":"    raise testtools.testcase.TestSkipped(reason)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_879b8471","line":64,"in_reply_to":"ba7be1f8_03f07dc8","updated":"2015-02-27 11:24:51.000000000","message":"removed","commit_id":"d4e9c3eb6cf8bdbfeb6f2c4e3a037239cd47a5f2"}]}
