)]}'
{"neutron/agent/linux/interface.py":[{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"b585e46da41dad6290fd23ead9e978cf07468002","unresolved":false,"context_lines":[{"line_number":276,"context_line":"    def unplug(self, device_name, bridge\u003dNone, namespace\u003dNone, prefix\u003dNone):"},{"line_number":277,"context_line":"        \"\"\"Unplug the interface.\"\"\""},{"line_number":278,"context_line":""},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    @property"},{"line_number":281,"context_line":"    def bridged(self):"},{"line_number":282,"context_line":"        \"\"\"Whether the DHCP port is bridged to the VM TAP interfaces."}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_97160455","line":279,"updated":"2019-07-16 11:17:36.000000000","message":"nit: unintentional change","commit_id":"99e2496673e8eb7103b1fee1d9d0abb56327ac47"}],"neutron/privileged/agent/linux/ip_lib.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2c9007f1f0ed16ae8a9092c2103e4557f41d15c1","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    return _run_iproute_link(\"set\", device, namespace, **attributes)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"def _get_link_attributes(device, namespace):"},{"line_number":383,"context_line":"    link \u003d _run_iproute_link(\"get\", device, namespace)[0]"},{"line_number":384,"context_line":"    return {"},{"line_number":385,"context_line":"        \u0027mtu\u0027: link.get_attr(\u0027IFLA_MTU\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_35125a0b","line":382,"updated":"2019-07-22 08:04:37.000000000","message":"why do we need \"private\" and \"public\" function for this now?","commit_id":"7c91b76c83cc7b3f2df0ef8d4f93ed93eeee41ef"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"a38032868a1853c2da3304cd367e0c090b983e58","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    return _run_iproute_link(\"set\", device, namespace, **attributes)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"def _get_link_attributes(device, namespace):"},{"line_number":383,"context_line":"    link \u003d _run_iproute_link(\"get\", device, namespace)[0]"},{"line_number":384,"context_line":"    return {"},{"line_number":385,"context_line":"        \u0027mtu\u0027: link.get_attr(\u0027IFLA_MTU\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_4a5b9a53","line":382,"in_reply_to":"7faddb67_0f55b41d","updated":"2019-07-23 14:12:28.000000000","message":"unit test is intended to make sure keys from the dict are not silently modified.\n\nThat is, if someone decides to remove an attribute the unit-test will catch it.\n\nif this is not an interesting test i can revert this change, and remove the unit test.","commit_id":"7c91b76c83cc7b3f2df0ef8d4f93ed93eeee41ef"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3861e09c3ca2666660f9716fec0a570366116dc","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    return _run_iproute_link(\"set\", device, namespace, **attributes)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"def _get_link_attributes(device, namespace):"},{"line_number":383,"context_line":"    link \u003d _run_iproute_link(\"get\", device, namespace)[0]"},{"line_number":384,"context_line":"    return {"},{"line_number":385,"context_line":"        \u0027mtu\u0027: link.get_attr(\u0027IFLA_MTU\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_0f55b41d","line":382,"in_reply_to":"7faddb67_1b7c2f71","updated":"2019-07-23 12:55:57.000000000","message":"The UT [1] doesn\u0027t provide any useful output. In this case I recommend only to create a FT.\n\nAnd, at the same time, remove this private/public refactor.\n\n\n[1] https://review.opendev.org/#/c/670721/5/neutron/tests/unit/privileged/agent/linux/test_ip_lib.py","commit_id":"7c91b76c83cc7b3f2df0ef8d4f93ed93eeee41ef"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2b22d29d4a7d7f61e86daabff9e835027843e638","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    return _run_iproute_link(\"set\", device, namespace, **attributes)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"def _get_link_attributes(device, namespace):"},{"line_number":383,"context_line":"    link \u003d _run_iproute_link(\"get\", device, namespace)[0]"},{"line_number":384,"context_line":"    return {"},{"line_number":385,"context_line":"        \u0027mtu\u0027: link.get_attr(\u0027IFLA_MTU\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_6d7c6d20","line":382,"in_reply_to":"7faddb67_2a589b54","updated":"2019-07-23 15:53:52.000000000","message":"+1 to what Rodolfo said here","commit_id":"7c91b76c83cc7b3f2df0ef8d4f93ed93eeee41ef"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"6abee2b10ffb1596c54be8eb8895f5a45a824bfa","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    return _run_iproute_link(\"set\", device, namespace, **attributes)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"def _get_link_attributes(device, namespace):"},{"line_number":383,"context_line":"    link \u003d _run_iproute_link(\"get\", device, namespace)[0]"},{"line_number":384,"context_line":"    return {"},{"line_number":385,"context_line":"        \u0027mtu\u0027: link.get_attr(\u0027IFLA_MTU\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_1b7c2f71","line":382,"in_reply_to":"7faddb67_35125a0b","updated":"2019-07-22 11:44:37.000000000","message":"for the added unit test, as the privileged.default.entrypoint decorator prevented executing the method(required root permissions).","commit_id":"7c91b76c83cc7b3f2df0ef8d4f93ed93eeee41ef"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"40a1ff692c799cae6a08658a14c338f0d2b4c2d3","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    return _run_iproute_link(\"set\", device, namespace, **attributes)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"def _get_link_attributes(device, namespace):"},{"line_number":383,"context_line":"    link \u003d _run_iproute_link(\"get\", device, namespace)[0]"},{"line_number":384,"context_line":"    return {"},{"line_number":385,"context_line":"        \u0027mtu\u0027: link.get_attr(\u0027IFLA_MTU\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_2a589b54","line":382,"in_reply_to":"7faddb67_4a5b9a53","updated":"2019-07-23 15:35:50.000000000","message":"If we really need this kind of check, we can implement a FT checking all keys. If you want, you can implement this FT in other patch","commit_id":"7c91b76c83cc7b3f2df0ef8d4f93ed93eeee41ef"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"e15b323b6bd59694c848b3c135ce52eea3e2f5df","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    return _run_iproute_link(\"set\", device, namespace, **attributes)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"def _get_link_attributes(device, namespace):"},{"line_number":383,"context_line":"    link \u003d _run_iproute_link(\"get\", device, namespace)[0]"},{"line_number":384,"context_line":"    return {"},{"line_number":385,"context_line":"        \u0027mtu\u0027: link.get_attr(\u0027IFLA_MTU\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_800e4330","line":382,"in_reply_to":"7faddb67_6d7c6d20","updated":"2019-07-24 07:47:12.000000000","message":"Understood, so its more appropriate to test this as a functional test.\n\nwill undo the private method.","commit_id":"7c91b76c83cc7b3f2df0ef8d4f93ed93eeee41ef"}],"neutron/tests/functional/privileged/agent/linux/test_ip_lib.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3861e09c3ca2666660f9716fec0a570366116dc","unresolved":false,"context_lines":[{"line_number":594,"context_line":"            self._check_gateway(_ip)"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"class LinkAttributesTestCase(functional_base.BaseSudoTestCase):"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def setUp(self):"},{"line_number":600,"context_line":"        super(LinkAttributesTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_aa5ecee6","line":597,"range":{"start_line":597,"start_character":28,"end_line":597,"end_character":29},"updated":"2019-07-23 12:55:57.000000000","message":"If you are testing function get_link_attributes, this should be GetLinkAttributesTestCase","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"a38032868a1853c2da3304cd367e0c090b983e58","unresolved":false,"context_lines":[{"line_number":594,"context_line":"            self._check_gateway(_ip)"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"class LinkAttributesTestCase(functional_base.BaseSudoTestCase):"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"    def setUp(self):"},{"line_number":600,"context_line":"        super(LinkAttributesTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_459e2b55","line":597,"range":{"start_line":597,"start_character":28,"end_line":597,"end_character":29},"in_reply_to":"7faddb67_aa5ecee6","updated":"2019-07-23 14:12:28.000000000","message":"Done","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3861e09c3ca2666660f9716fec0a570366116dc","unresolved":false,"context_lines":[{"line_number":601,"context_line":"        self.namespace \u003d self.useFixture(net_helpers.NamespaceFixture()).name"},{"line_number":602,"context_line":"        self.device_name \u003d \u0027test_device\u0027"},{"line_number":603,"context_line":"        ip_lib.IPWrapper(self.namespace).add_dummy(self.device_name)"},{"line_number":604,"context_line":"        self.addCleanup(priv_ip_lib.remove_netns, self.namespace)"},{"line_number":605,"context_line":"        self.device \u003d ip_lib.IPDevice(self.device_name, self.namespace)"},{"line_number":606,"context_line":"        if_idx \u003d priv_ip_lib.get_link_id(self.device_name, self.namespace)"},{"line_number":607,"context_line":"        self.pyroute_dev \u003d priv_ip_lib.get_link_devices(self.namespace,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_af182084","line":604,"range":{"start_line":604,"start_character":8,"end_line":604,"end_character":65},"updated":"2019-07-23 12:55:57.000000000","message":"Not needed if using NamespaceFixture","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"a38032868a1853c2da3304cd367e0c090b983e58","unresolved":false,"context_lines":[{"line_number":601,"context_line":"        self.namespace \u003d self.useFixture(net_helpers.NamespaceFixture()).name"},{"line_number":602,"context_line":"        self.device_name \u003d \u0027test_device\u0027"},{"line_number":603,"context_line":"        ip_lib.IPWrapper(self.namespace).add_dummy(self.device_name)"},{"line_number":604,"context_line":"        self.addCleanup(priv_ip_lib.remove_netns, self.namespace)"},{"line_number":605,"context_line":"        self.device \u003d ip_lib.IPDevice(self.device_name, self.namespace)"},{"line_number":606,"context_line":"        if_idx \u003d priv_ip_lib.get_link_id(self.device_name, self.namespace)"},{"line_number":607,"context_line":"        self.pyroute_dev \u003d priv_ip_lib.get_link_devices(self.namespace,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_a5b6ffdb","line":604,"range":{"start_line":604,"start_character":8,"end_line":604,"end_character":65},"in_reply_to":"7faddb67_af182084","updated":"2019-07-23 14:12:28.000000000","message":"thanks ! missed that","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3861e09c3ca2666660f9716fec0a570366116dc","unresolved":false,"context_lines":[{"line_number":603,"context_line":"        ip_lib.IPWrapper(self.namespace).add_dummy(self.device_name)"},{"line_number":604,"context_line":"        self.addCleanup(priv_ip_lib.remove_netns, self.namespace)"},{"line_number":605,"context_line":"        self.device \u003d ip_lib.IPDevice(self.device_name, self.namespace)"},{"line_number":606,"context_line":"        if_idx \u003d priv_ip_lib.get_link_id(self.device_name, self.namespace)"},{"line_number":607,"context_line":"        self.pyroute_dev \u003d priv_ip_lib.get_link_devices(self.namespace,"},{"line_number":608,"context_line":"                                                        self.if_idx)"},{"line_number":609,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_6a26966b","line":606,"range":{"start_line":606,"start_character":8,"end_line":606,"end_character":74},"updated":"2019-07-23 12:55:57.000000000","message":"This is not going to work: this function must be executed inside a privsep context. BTW, you don\u0027t needed it","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"a38032868a1853c2da3304cd367e0c090b983e58","unresolved":false,"context_lines":[{"line_number":603,"context_line":"        ip_lib.IPWrapper(self.namespace).add_dummy(self.device_name)"},{"line_number":604,"context_line":"        self.addCleanup(priv_ip_lib.remove_netns, self.namespace)"},{"line_number":605,"context_line":"        self.device \u003d ip_lib.IPDevice(self.device_name, self.namespace)"},{"line_number":606,"context_line":"        if_idx \u003d priv_ip_lib.get_link_id(self.device_name, self.namespace)"},{"line_number":607,"context_line":"        self.pyroute_dev \u003d priv_ip_lib.get_link_devices(self.namespace,"},{"line_number":608,"context_line":"                                                        self.if_idx)"},{"line_number":609,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_25ca0f4f","line":606,"range":{"start_line":606,"start_character":8,"end_line":606,"end_character":74},"in_reply_to":"7faddb67_6a26966b","updated":"2019-07-23 14:12:28.000000000","message":"will use ifname instead.","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3861e09c3ca2666660f9716fec0a570366116dc","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        self.addCleanup(priv_ip_lib.remove_netns, self.namespace)"},{"line_number":605,"context_line":"        self.device \u003d ip_lib.IPDevice(self.device_name, self.namespace)"},{"line_number":606,"context_line":"        if_idx \u003d priv_ip_lib.get_link_id(self.device_name, self.namespace)"},{"line_number":607,"context_line":"        self.pyroute_dev \u003d priv_ip_lib.get_link_devices(self.namespace,"},{"line_number":608,"context_line":"                                                        self.if_idx)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def test_link_kind_attribute(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_8aa8b2db","line":607,"updated":"2019-07-23 12:55:57.000000000","message":"small nit: this result is part of the test. IMO (but that\u0027s only an opinion), this should be retrieved in the test itself.","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"a38032868a1853c2da3304cd367e0c090b983e58","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        self.addCleanup(priv_ip_lib.remove_netns, self.namespace)"},{"line_number":605,"context_line":"        self.device \u003d ip_lib.IPDevice(self.device_name, self.namespace)"},{"line_number":606,"context_line":"        if_idx \u003d priv_ip_lib.get_link_id(self.device_name, self.namespace)"},{"line_number":607,"context_line":"        self.pyroute_dev \u003d priv_ip_lib.get_link_devices(self.namespace,"},{"line_number":608,"context_line":"                                                        self.if_idx)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def test_link_kind_attribute(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_65e567dc","line":607,"in_reply_to":"7faddb67_8aa8b2db","updated":"2019-07-23 14:12:28.000000000","message":"my intention was to create the device and have its corresponding pyroute object (i expect only one link device) in the setUp phase\n\nthen test cases can focus on comparing the actual attributes.\n\nATM i only added a test for the link kind attribute, but this can be extended for the rest of the attributes that are retrieved in get_link_attributes","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3861e09c3ca2666660f9716fec0a570366116dc","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        self.device \u003d ip_lib.IPDevice(self.device_name, self.namespace)"},{"line_number":606,"context_line":"        if_idx \u003d priv_ip_lib.get_link_id(self.device_name, self.namespace)"},{"line_number":607,"context_line":"        self.pyroute_dev \u003d priv_ip_lib.get_link_devices(self.namespace,"},{"line_number":608,"context_line":"                                                        self.if_idx)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def test_link_kind_attribute(self):"},{"line_number":611,"context_line":"        ifla_linkinfo \u003d ip_lib.get_attr(self.pyroute_dev, \u0027IFLA_LINKINFO\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_4a1dda0d","line":608,"range":{"start_line":608,"start_character":56,"end_line":608,"end_character":67},"updated":"2019-07-23 12:55:57.000000000","message":"To retrieve only one device, you should specify the \"ifname\". This should be:\n\n  priv_ip_lib.get_link_devices(self.namespace,\n                               ifname\u003dself.device)","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"a38032868a1853c2da3304cd367e0c090b983e58","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        self.device \u003d ip_lib.IPDevice(self.device_name, self.namespace)"},{"line_number":606,"context_line":"        if_idx \u003d priv_ip_lib.get_link_id(self.device_name, self.namespace)"},{"line_number":607,"context_line":"        self.pyroute_dev \u003d priv_ip_lib.get_link_devices(self.namespace,"},{"line_number":608,"context_line":"                                                        self.if_idx)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def test_link_kind_attribute(self):"},{"line_number":611,"context_line":"        ifla_linkinfo \u003d ip_lib.get_attr(self.pyroute_dev, \u0027IFLA_LINKINFO\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_8538a33d","line":608,"range":{"start_line":608,"start_character":56,"end_line":608,"end_character":67},"in_reply_to":"7faddb67_4a1dda0d","updated":"2019-07-23 14:12:28.000000000","message":"Done, will also assert its len is 1 and take the 1st device as i expect exactly one link device for the created dummy netdev","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3861e09c3ca2666660f9716fec0a570366116dc","unresolved":false,"context_lines":[{"line_number":607,"context_line":"        self.pyroute_dev \u003d priv_ip_lib.get_link_devices(self.namespace,"},{"line_number":608,"context_line":"                                                        self.if_idx)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def test_link_kind_attribute(self):"},{"line_number":611,"context_line":"        ifla_linkinfo \u003d ip_lib.get_attr(self.pyroute_dev, \u0027IFLA_LINKINFO\u0027)"},{"line_number":612,"context_line":"        ifla_link_kind \u003d ip_lib.get_attr(ifla_linkinfo, \u0027IFLA_INFO_KIND\u0027)"},{"line_number":613,"context_line":"        self.assertEqual(ifla_link_kind, \u0027dummy\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_2a72de7d","line":610,"updated":"2019-07-23 12:55:57.000000000","message":"nit: test_get_link_attribute_kind","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"a38032868a1853c2da3304cd367e0c090b983e58","unresolved":false,"context_lines":[{"line_number":607,"context_line":"        self.pyroute_dev \u003d priv_ip_lib.get_link_devices(self.namespace,"},{"line_number":608,"context_line":"                                                        self.if_idx)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def test_link_kind_attribute(self):"},{"line_number":611,"context_line":"        ifla_linkinfo \u003d ip_lib.get_attr(self.pyroute_dev, \u0027IFLA_LINKINFO\u0027)"},{"line_number":612,"context_line":"        ifla_link_kind \u003d ip_lib.get_attr(ifla_linkinfo, \u0027IFLA_INFO_KIND\u0027)"},{"line_number":613,"context_line":"        self.assertEqual(ifla_link_kind, \u0027dummy\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_a54a7f80","line":610,"in_reply_to":"7faddb67_2a72de7d","updated":"2019-07-23 14:12:28.000000000","message":"Done","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3861e09c3ca2666660f9716fec0a570366116dc","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                                                        self.if_idx)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def test_link_kind_attribute(self):"},{"line_number":611,"context_line":"        ifla_linkinfo \u003d ip_lib.get_attr(self.pyroute_dev, \u0027IFLA_LINKINFO\u0027)"},{"line_number":612,"context_line":"        ifla_link_kind \u003d ip_lib.get_attr(ifla_linkinfo, \u0027IFLA_INFO_KIND\u0027)"},{"line_number":613,"context_line":"        self.assertEqual(ifla_link_kind, \u0027dummy\u0027)"},{"line_number":614,"context_line":"        self.assertEqual(self.device.link.link_kind, ifla_link_kind)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_aa9fae63","line":611,"range":{"start_line":611,"start_character":40,"end_line":611,"end_character":56},"updated":"2019-07-23 12:55:57.000000000","message":"This won\u0027t work. self.pyroute_dev is a tuple which represents all link devices in the namespace\n\nEven if you have filtered by name, this will be a tuple with only one element. You should:\n  self.assertEqual(1, len(self.pyroute_dev))\n  ifla_linkinfo \u003d ip_lib.get_attr(self.pyroute_dev[0],\n                                  \u0027IFLA_LINKINFO\u0027)","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"a38032868a1853c2da3304cd367e0c090b983e58","unresolved":false,"context_lines":[{"line_number":608,"context_line":"                                                        self.if_idx)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def test_link_kind_attribute(self):"},{"line_number":611,"context_line":"        ifla_linkinfo \u003d ip_lib.get_attr(self.pyroute_dev, \u0027IFLA_LINKINFO\u0027)"},{"line_number":612,"context_line":"        ifla_link_kind \u003d ip_lib.get_attr(ifla_linkinfo, \u0027IFLA_INFO_KIND\u0027)"},{"line_number":613,"context_line":"        self.assertEqual(ifla_link_kind, \u0027dummy\u0027)"},{"line_number":614,"context_line":"        self.assertEqual(self.device.link.link_kind, ifla_link_kind)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_a5c59f0c","line":611,"range":{"start_line":611,"start_character":40,"end_line":611,"end_character":56},"in_reply_to":"7faddb67_aa9fae63","updated":"2019-07-23 14:12:28.000000000","message":"Will be addressed in the next PS","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3861e09c3ca2666660f9716fec0a570366116dc","unresolved":false,"context_lines":[{"line_number":610,"context_line":"    def test_link_kind_attribute(self):"},{"line_number":611,"context_line":"        ifla_linkinfo \u003d ip_lib.get_attr(self.pyroute_dev, \u0027IFLA_LINKINFO\u0027)"},{"line_number":612,"context_line":"        ifla_link_kind \u003d ip_lib.get_attr(ifla_linkinfo, \u0027IFLA_INFO_KIND\u0027)"},{"line_number":613,"context_line":"        self.assertEqual(ifla_link_kind, \u0027dummy\u0027)"},{"line_number":614,"context_line":"        self.assertEqual(self.device.link.link_kind, ifla_link_kind)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_0ae28230","line":613,"range":{"start_line":613,"start_character":25,"end_line":613,"end_character":48},"updated":"2019-07-23 12:55:57.000000000","message":"small nit: first the value expected, then the value to compare.","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"a38032868a1853c2da3304cd367e0c090b983e58","unresolved":false,"context_lines":[{"line_number":610,"context_line":"    def test_link_kind_attribute(self):"},{"line_number":611,"context_line":"        ifla_linkinfo \u003d ip_lib.get_attr(self.pyroute_dev, \u0027IFLA_LINKINFO\u0027)"},{"line_number":612,"context_line":"        ifla_link_kind \u003d ip_lib.get_attr(ifla_linkinfo, \u0027IFLA_INFO_KIND\u0027)"},{"line_number":613,"context_line":"        self.assertEqual(ifla_link_kind, \u0027dummy\u0027)"},{"line_number":614,"context_line":"        self.assertEqual(self.device.link.link_kind, ifla_link_kind)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_650c8794","line":613,"range":{"start_line":613,"start_character":25,"end_line":613,"end_character":48},"in_reply_to":"7faddb67_0ae28230","updated":"2019-07-23 14:12:28.000000000","message":"Done","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"}],"neutron/tests/unit/privileged/agent/linux/test_ip_lib.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3861e09c3ca2666660f9716fec0a570366116dc","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            except OSError as e:"},{"line_number":212,"context_line":"                self.assertEqual(errno.EINVAL, e.errno)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def test_get_link_attributes(self):"},{"line_number":215,"context_line":"        expected_attr \u003d [\u0027mtu\u0027, \u0027qlen\u0027, \u0027state\u0027, \u0027qdisc\u0027, \u0027brd\u0027, \u0027link/ether\u0027,"},{"line_number":216,"context_line":"                         \u0027alias\u0027, \u0027allmulticast\u0027, \u0027link_kind\u0027]"},{"line_number":217,"context_line":"        with mock.patch.object(priv_lib, \"_run_iproute_link\"):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_0a69228a","line":214,"updated":"2019-07-23 12:55:57.000000000","message":"IMO, not needed. Doesn\u0027t provide testing value.","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"},{"author":{"_account_id":28714,"name":"Adrian Chiris","email":"adrianc@nvidia.com","username":"adrianc"},"change_message_id":"a38032868a1853c2da3304cd367e0c090b983e58","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            except OSError as e:"},{"line_number":212,"context_line":"                self.assertEqual(errno.EINVAL, e.errno)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def test_get_link_attributes(self):"},{"line_number":215,"context_line":"        expected_attr \u003d [\u0027mtu\u0027, \u0027qlen\u0027, \u0027state\u0027, \u0027qdisc\u0027, \u0027brd\u0027, \u0027link/ether\u0027,"},{"line_number":216,"context_line":"                         \u0027alias\u0027, \u0027allmulticast\u0027, \u0027link_kind\u0027]"},{"line_number":217,"context_line":"        with mock.patch.object(priv_lib, \"_run_iproute_link\"):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_0a8e02d0","line":214,"in_reply_to":"7faddb67_0a69228a","updated":"2019-07-23 14:12:28.000000000","message":"This test is intended to validate the attributes (the keys)\nthat is: in case someone modifies the return value (add/remove attribute) it will be caught here.\n\nif this is not an interesting test i can revert this change, and remove the unit test.","commit_id":"459bd946ce50e96f8e19702a105bc8558f742f37"}]}
