)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"21968b4a8d459962d10d85537e4671de609ad4ed","unresolved":false,"context_lines":[{"line_number":10,"context_line":"This handles an arp packet responding locally an arp request in such a way"},{"line_number":11,"context_line":"that sends an arp request as a packet-in message to controller and"},{"line_number":12,"context_line":"build and send an arp reply packet."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partially implements: blueprint ofagent-l2pop"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ida714f30c0f02c54dda3402c0dbf6047bc182b22"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7adec928_381bef81","line":13,"updated":"2014-05-20 04:04:08.000000000","message":"please mention the limitation; this only supports tunnels at this point.","commit_id":"1c2beff24b5630654f64913baf02aab126840e10"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"f1b6c78e2fe6e67bf258992670a11cd230331de1","unresolved":false,"context_lines":[{"line_number":10,"context_line":"This handles an arp packet responding locally an arp request in such a way"},{"line_number":11,"context_line":"that sends an arp request as a packet-in message to controller and"},{"line_number":12,"context_line":"build and send an arp reply packet."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Partially implements: blueprint ofagent-l2pop"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ida714f30c0f02c54dda3402c0dbf6047bc182b22"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7adec928_205470c9","line":13,"in_reply_to":"7adec928_381bef81","updated":"2014-05-21 07:17:19.000000000","message":"Done","commit_id":"1c2beff24b5630654f64913baf02aab126840e10"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"47167d52caddb692b802aad6924ad505ca805f1e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"build and send an arp reply packet."},{"line_number":13,"context_line":"Currently this only supports tunnel."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Partially implements: blueprint ofagent-l2pop"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ida714f30c0f02c54dda3402c0dbf6047bc182b22"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"baada198_b2e494e0","line":15,"updated":"2014-07-21 23:17:01.000000000","message":"Is it the final implementation of this blueprint?","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":12,"context_line":"build and send an arp reply packet."},{"line_number":13,"context_line":"Currently this only supports tunnel."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Partially implements: blueprint ofagent-l2pop"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ida714f30c0f02c54dda3402c0dbf6047bc182b22"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"baada198_0ce5bc09","line":15,"in_reply_to":"baada198_b2e494e0","updated":"2014-07-23 12:22:41.000000000","message":"Yes it is.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"66e7e0253510098f249794173fa2d1ed099c9bdb","unresolved":false,"context_lines":[{"line_number":7,"context_line":"OFAgent: Implement arp responder"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is step 2 implementation of OFAgent l2-population."},{"line_number":10,"context_line":"This handles an arp packet responding locally an arp request in such a way"},{"line_number":11,"context_line":"that sends an arp request as a packet-in message to controller and"},{"line_number":12,"context_line":"build and send an arp reply packet."},{"line_number":13,"context_line":"Currently this only supports tunnel."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"baada198_ef99221f","line":10,"updated":"2014-08-01 02:19:22.000000000","message":"locally to an arp request","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"837538f71268533f28a102d5c403916029336e69","unresolved":false,"context_lines":[{"line_number":7,"context_line":"OFAgent: Implement arp responder"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is step 2 implementation of OFAgent l2-population."},{"line_number":10,"context_line":"This handles an arp packet responding locally an arp request in such a way"},{"line_number":11,"context_line":"that sends an arp request as a packet-in message to controller and"},{"line_number":12,"context_line":"build and send an arp reply packet."},{"line_number":13,"context_line":"Currently this only supports tunnel."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"baada198_146d8103","line":10,"in_reply_to":"baada198_ef99221f","updated":"2014-08-01 07:14:48.000000000","message":"Done","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"66e7e0253510098f249794173fa2d1ed099c9bdb","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This is step 2 implementation of OFAgent l2-population."},{"line_number":10,"context_line":"This handles an arp packet responding locally an arp request in such a way"},{"line_number":11,"context_line":"that sends an arp request as a packet-in message to controller and"},{"line_number":12,"context_line":"build and send an arp reply packet."},{"line_number":13,"context_line":"Currently this only supports tunnel."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Implements: blueprint ofagent-l2pop"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"baada198_0f9f3603","line":12,"updated":"2014-08-01 02:19:22.000000000","message":"builds and sends","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"837538f71268533f28a102d5c403916029336e69","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This is step 2 implementation of OFAgent l2-population."},{"line_number":10,"context_line":"This handles an arp packet responding locally an arp request in such a way"},{"line_number":11,"context_line":"that sends an arp request as a packet-in message to controller and"},{"line_number":12,"context_line":"build and send an arp reply packet."},{"line_number":13,"context_line":"Currently this only supports tunnel."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Implements: blueprint ofagent-l2pop"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"baada198_347525cc","line":12,"in_reply_to":"baada198_0f9f3603","updated":"2014-08-01 07:14:48.000000000","message":"Done","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"}],"neutron/agent/l2population_rpc.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"6a7575a30721e5f31b155269461b4396b4c49919","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        When the l2 population mechanism driver and OVS supports to edit ARP"},{"line_number":97,"context_line":"        fields, a table (ARP_RESPONDER) to resolve ARP locally is added to the"},{"line_number":98,"context_line":"        tunnel bridge."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        :param action: add or remove ARP entry."},{"line_number":101,"context_line":"        :param lvid: local VLAN map of network\u0027s ARP entry."}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_d6f27105","line":98,"updated":"2014-07-17 07:23:51.000000000","message":"this sentence seems OVS specific.","commit_id":"d73030d75e884cb8fad356ad3567623de81227d8"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"dafa06e700716f46c003e8bf178558f7c0eee39d","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \u0027\u0027\u0027Set the ARP respond entry."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        When the l2 population mechanism driver and an agent supports to edit"},{"line_number":97,"context_line":"        ARP fields, a table (ARP_RESPONDER) to resolve ARP locally is added"},{"line_number":98,"context_line":"        to the tunnel bridge."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        :param action: add or remove ARP entry."}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_3f0c4f94","line":97,"range":{"start_line":97,"start_character":29,"end_line":97,"end_character":42},"updated":"2014-07-17 15:06:46.000000000","message":"ARP_RESPONDER table is OVS agent specific.\nprobably it\u0027s easier to move this sentence back to OVS agent?\nthe rest (\"Set the ARP respond entry.\" and parameter descriptions) belong here IMO.","commit_id":"3e37b514fee3e1f8c58ad1e39c3fbd96a71a7cbb"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6b4e799d02ff65b4b4645fa248201f0ffde30e82","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \u0027\u0027\u0027Set the ARP respond entry."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        When the l2 population mechanism driver and an agent supports to edit"},{"line_number":97,"context_line":"        ARP fields, a table (ARP_RESPONDER) to resolve ARP locally is added"},{"line_number":98,"context_line":"        to the tunnel bridge."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        :param action: add or remove ARP entry."}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_b7b87412","line":97,"in_reply_to":"baada198_3f0c4f94","updated":"2014-07-17 22:09:37.000000000","message":"Done","commit_id":"3e37b514fee3e1f8c58ad1e39c3fbd96a71a7cbb"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d0b0717d8f9e8c3b73d8d90d8a9de514969837fc","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \u0027\u0027\u0027Set the ARP respond entry."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        :param action: add or remove ARP entry."},{"line_number":97,"context_line":"        :param lvid: local VLAN map of network\u0027s ARP entry."},{"line_number":98,"context_line":"        :param mac_str: MAC string value."},{"line_number":99,"context_line":"        :param ip_str: IP string value."},{"line_number":100,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c75a2181","line":97,"updated":"2014-07-22 02:02:02.000000000","message":"can we have a more meaningful name here rather than lvid? Is this meant to be an identifier or map, as implied by the comment?","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \u0027\u0027\u0027Set the ARP respond entry."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        :param action: add or remove ARP entry."},{"line_number":97,"context_line":"        :param lvid: local VLAN map of network\u0027s ARP entry."},{"line_number":98,"context_line":"        :param mac_str: MAC string value."},{"line_number":99,"context_line":"        :param ip_str: IP string value."},{"line_number":100,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_0685ad58","line":97,"in_reply_to":"baada198_c75a2181","updated":"2014-07-23 12:22:41.000000000","message":"Done","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d0b0717d8f9e8c3b73d8d90d8a9de514969837fc","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        :param action: add or remove ARP entry."},{"line_number":97,"context_line":"        :param lvid: local VLAN map of network\u0027s ARP entry."},{"line_number":98,"context_line":"        :param mac_str: MAC string value."},{"line_number":99,"context_line":"        :param ip_str: IP string value."},{"line_number":100,"context_line":"        \u0027\u0027\u0027"},{"line_number":101,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e7548555","line":98,"updated":"2014-07-22 02:02:02.000000000","message":"we don\u0027t need to expose the fact these are strings. mac_address and ip_address would be better.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        :param action: add or remove ARP entry."},{"line_number":97,"context_line":"        :param lvid: local VLAN map of network\u0027s ARP entry."},{"line_number":98,"context_line":"        :param mac_str: MAC string value."},{"line_number":99,"context_line":"        :param ip_str: IP string value."},{"line_number":100,"context_line":"        \u0027\u0027\u0027"},{"line_number":101,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_267ab177","line":98,"in_reply_to":"baada198_e7548555","updated":"2014-07-23 12:22:41.000000000","message":"Done","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"4219c915e4c0ed656f73d35a488ecf27b0d36148","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                               }"},{"line_number":167,"context_line":"        \u0027\u0027\u0027"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        # TODO(ethuleau): Use OVS defer apply flows for all rules will be an"},{"line_number":170,"context_line":"        # interesting improvement here. But actually, OVS lib defer apply flows"},{"line_number":171,"context_line":"        # methods doesn\u0027t ensure the add flows will be applied before delete."},{"line_number":172,"context_line":"        for network_id, agent_ports in fdb_entries.items():"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_bda2aeab","line":169,"updated":"2014-07-21 20:48:16.000000000","message":"This comment does not make sense in this context since this class is strictly OVS right?  Seems like we need to relocate it to the proper place.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d0b0717d8f9e8c3b73d8d90d8a9de514969837fc","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        # TODO(ethuleau): Use OVS defer apply flows for all rules will be an"},{"line_number":170,"context_line":"        # interesting improvement here. But actually, OVS lib defer apply flows"},{"line_number":171,"context_line":"        # methods doesn\u0027t ensure the add flows will be applied before delete."},{"line_number":172,"context_line":"        for network_id, agent_ports in fdb_entries.items():"},{"line_number":173,"context_line":"            lvm \u003d local_vlan_map.get(network_id)"},{"line_number":174,"context_line":"            if not lvm:"},{"line_number":175,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_a7ce0d2b","line":172,"updated":"2014-07-22 02:02:02.000000000","message":"O(n^3) complexity, are we sure we can\u0027t do better than this? these entries can get pretty big, I suspect. Have you considered the implications of running this at a greater scale? Maybe not something for now, but I\u0027d add a NOTE to signal that this might do with some improvement.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"66e7e0253510098f249794173fa2d1ed099c9bdb","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        pass"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @abc.abstractmethod"},{"line_number":140,"context_line":"    def ope_arp_respond_info(self, action, lvid, mac_address, ip_address):"},{"line_number":141,"context_line":"        \u0027\u0027\u0027Operate the ARP respond information."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        Do operation of arp respond infomation for an action"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_523551d9","line":140,"updated":"2014-08-01 02:19:22.000000000","message":"Nit: Would be nicer to spell out. Or consider renaming? update_flow_entry_for_arp_reply()?","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"837538f71268533f28a102d5c403916029336e69","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        pass"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @abc.abstractmethod"},{"line_number":140,"context_line":"    def ope_arp_respond_info(self, action, lvid, mac_address, ip_address):"},{"line_number":141,"context_line":"        \u0027\u0027\u0027Operate the ARP respond information."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        Do operation of arp respond infomation for an action"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_03946d34","line":140,"in_reply_to":"baada198_523551d9","updated":"2014-08-01 07:14:48.000000000","message":"Operations will be different by an agent. Please see the reply of next comment.","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"66e7e0253510098f249794173fa2d1ed099c9bdb","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def ope_arp_respond_info(self, action, lvid, mac_address, ip_address):"},{"line_number":141,"context_line":"        \u0027\u0027\u0027Operate the ARP respond information."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        Do operation of arp respond infomation for an action"},{"line_number":144,"context_line":"        In ovs do adding or removing flow entry to edit an arp reply."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        :param action: an action to operate for arp respond infomation."}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_2f879ab7","line":143,"updated":"2014-08-01 02:19:22.000000000","message":"infomation -\u003e information\n\nSomewhat difficult to understand. Do you mean to say this will do an add or remove operation in response to arp?","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"837538f71268533f28a102d5c403916029336e69","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    def ope_arp_respond_info(self, action, lvid, mac_address, ip_address):"},{"line_number":141,"context_line":"        \u0027\u0027\u0027Operate the ARP respond information."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        Do operation of arp respond infomation for an action"},{"line_number":144,"context_line":"        In ovs do adding or removing flow entry to edit an arp reply."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        :param action: an action to operate for arp respond infomation."}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_2341710a","line":143,"in_reply_to":"baada198_2f879ab7","updated":"2014-08-01 07:14:48.000000000","message":"In case of OVS, it is adding flow edit an arp reply and removing the flow to bridge. In case of OFA, it is adding and removing an entry to internal table","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"66e7e0253510098f249794173fa2d1ed099c9bdb","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            getattr(self, method)(context, values)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @log.log"},{"line_number":200,"context_line":"    def fdb_chg_ip_tun(self, context, fdb_entries, local_ip, local_vlan_map):"},{"line_number":201,"context_line":"        \u0027\u0027\u0027fdb update when an IP of a port is updated."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        The ML2 l2-pop mechanism driver send an fdb update rpc message when an"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_af61ea12","line":200,"updated":"2014-08-01 02:19:22.000000000","message":"Nit: Would be easier to understand if spelled out.","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"837538f71268533f28a102d5c403916029336e69","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            getattr(self, method)(context, values)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @log.log"},{"line_number":200,"context_line":"    def fdb_chg_ip_tun(self, context, fdb_entries, local_ip, local_vlan_map):"},{"line_number":201,"context_line":"        \u0027\u0027\u0027fdb update when an IP of a port is updated."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        The ML2 l2-pop mechanism driver send an fdb update rpc message when an"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_7eebfedc","line":200,"in_reply_to":"baada198_af61ea12","updated":"2014-08-01 07:14:48.000000000","message":"chg_ip is an action name specified from l2pop mechanism driver, so I think that keeping this name is better.","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"66e7e0253510098f249794173fa2d1ed099c9bdb","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    def fdb_chg_ip_tun(self, context, fdb_entries, local_ip, local_vlan_map):"},{"line_number":201,"context_line":"        \u0027\u0027\u0027fdb update when an IP of a port is updated."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        The ML2 l2-pop mechanism driver send an fdb update rpc message when an"},{"line_number":204,"context_line":"        IP of a port is updated."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        :param context: RPC context."}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_0f6d7603","line":203,"updated":"2014-08-01 02:19:22.000000000","message":"send -\u003e sends","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"837538f71268533f28a102d5c403916029336e69","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    def fdb_chg_ip_tun(self, context, fdb_entries, local_ip, local_vlan_map):"},{"line_number":201,"context_line":"        \u0027\u0027\u0027fdb update when an IP of a port is updated."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        The ML2 l2-pop mechanism driver send an fdb update rpc message when an"},{"line_number":204,"context_line":"        IP of a port is updated."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        :param context: RPC context."}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_838a3d63","line":203,"in_reply_to":"baada198_0f6d7603","updated":"2014-08-01 07:14:48.000000000","message":"Done","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"66e7e0253510098f249794173fa2d1ed099c9bdb","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        IP of a port is updated."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        :param context: RPC context."},{"line_number":207,"context_line":"        :param fdb_entries: fdb dicts that contain all mac/IP informations per"},{"line_number":208,"context_line":"                            agent and network."},{"line_number":209,"context_line":"                               {\u0027net1\u0027:"},{"line_number":210,"context_line":"                                {\u0027agent_ip\u0027:"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_f203c509","line":207,"updated":"2014-08-01 02:19:22.000000000","message":"Other parameters missing...","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"837538f71268533f28a102d5c403916029336e69","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        IP of a port is updated."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        :param context: RPC context."},{"line_number":207,"context_line":"        :param fdb_entries: fdb dicts that contain all mac/IP informations per"},{"line_number":208,"context_line":"                            agent and network."},{"line_number":209,"context_line":"                               {\u0027net1\u0027:"},{"line_number":210,"context_line":"                                {\u0027agent_ip\u0027:"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_6391a999","line":207,"in_reply_to":"baada198_f203c509","updated":"2014-08-01 07:14:48.000000000","message":"Done","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"66e7e0253510098f249794173fa2d1ed099c9bdb","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                if agent_ip \u003d\u003d local_ip:"},{"line_number":227,"context_line":"                    continue"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"                after \u003d state.get(\u0027after\u0027)"},{"line_number":230,"context_line":"                for mac, ip in after:"},{"line_number":231,"context_line":"                    self.ope_arp_respond_info(\u0027add\u0027, lvm.vlan, mac, ip)"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_b2fdcd0a","line":229,"updated":"2014-08-01 02:19:22.000000000","message":"Is after guaranteed to be an iterable? If not (e.g. it could be None), then consider doing:\n    after \u003d state.get(\u0027after\u0027, {})\n\nSame with before, on L233.","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"837538f71268533f28a102d5c403916029336e69","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                if agent_ip \u003d\u003d local_ip:"},{"line_number":227,"context_line":"                    continue"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"                after \u003d state.get(\u0027after\u0027)"},{"line_number":230,"context_line":"                for mac, ip in after:"},{"line_number":231,"context_line":"                    self.ope_arp_respond_info(\u0027add\u0027, lvm.vlan, mac, ip)"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_bedbd61f","line":229,"in_reply_to":"baada198_b2fdcd0a","updated":"2014-08-01 07:14:48.000000000","message":"Yes, currently it is guaranteed.","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9b8af4b7bfbb5a06ba7d05baf97e1c759ce09207","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        pass"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @abc.abstractmethod"},{"line_number":140,"context_line":"    def update_info_for_arp_reply(self, action, lvid, mac_address, ip_address):"},{"line_number":141,"context_line":"        \u0027\u0027\u0027Operate the ARP respond information."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        Do operation of arp respond information for an action"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_453ab0e6","line":140,"updated":"2014-08-04 00:30:30.000000000","message":"\"info\" is a bit ambiguous keyword. It seems better to use more clear keyword to indicate this is an operation on datapath behavior. For example,\n\n- update_datapath_for_arp_reply\n- setup_datapath_for_arp_reply\n- setup_entry_for_arp_reply\n\nPerhaps you would like to use a method name which covers not only ovs and ofagent but also linuxbridge.","commit_id":"4d1c1f1ebbe858c2fde880f10401c6cea1276dfd"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"19c7e4f5ff37a24beca04bd4c2e1eb30fd893612","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        pass"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @abc.abstractmethod"},{"line_number":140,"context_line":"    def update_info_for_arp_reply(self, action, lvid, mac_address, ip_address):"},{"line_number":141,"context_line":"        \u0027\u0027\u0027Operate the ARP respond information."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        Do operation of arp respond information for an action"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_9734fbdf","line":140,"in_reply_to":"baada198_453ab0e6","updated":"2014-08-04 00:52:04.000000000","message":"how about update_fdb_flow?\n- consistent with add_fdb_flow/del_fdb_flow\n- this isn\u0027t necessarily tied with arp responder","commit_id":"4d1c1f1ebbe858c2fde880f10401c6cea1276dfd"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"826901348357c48839fb9bdbaf57a54a96f5c35e","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        pass"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @abc.abstractmethod"},{"line_number":140,"context_line":"    def update_info_for_arp_reply(self, action, lvid, mac_address, ip_address):"},{"line_number":141,"context_line":"        \u0027\u0027\u0027Operate the ARP respond information."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        Do operation of arp respond information for an action"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_ada53249","line":140,"in_reply_to":"baada198_9734fbdf","updated":"2014-08-04 04:00:59.000000000","message":"I am a bit confused. Looking at patch set 17, the docstring and implementation of the method is tied to ARP operations. This method takes mac_address and ip_address as parameters, so I cannot imagine a use case where it is not tied to ARP operations. Could you elaborate more?","commit_id":"4d1c1f1ebbe858c2fde880f10401c6cea1276dfd"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"11c148565165813ef82294c303578198ffe51929","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        pass"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @abc.abstractmethod"},{"line_number":140,"context_line":"    def update_info_for_arp_reply(self, action, lvid, mac_address, ip_address):"},{"line_number":141,"context_line":"        \u0027\u0027\u0027Operate the ARP respond information."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        Do operation of arp respond information for an action"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_cb496eb9","line":140,"in_reply_to":"baada198_ada53249","updated":"2014-08-04 05:44:08.000000000","message":"Akihiro, If you prefer the above name, I will use it.","commit_id":"4d1c1f1ebbe858c2fde880f10401c6cea1276dfd"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"b6ec67ff94f0b4b6fdcf1bb5e20c221bdcc08574","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        pass"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @abc.abstractmethod"},{"line_number":140,"context_line":"    def update_info_for_arp_reply(self, action, lvid, mac_address, ip_address):"},{"line_number":141,"context_line":"        \u0027\u0027\u0027Operate the ARP respond information."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        Do operation of arp respond information for an action"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_706ccd36","line":140,"in_reply_to":"baada198_ada53249","updated":"2014-08-04 04:53:11.000000000","message":"for example, an agent can use this as a hint to route packets.\nyour point about the method arguments seems valid though.\nanyway i don\u0027t have a strong opinion about the name of this method.","commit_id":"4d1c1f1ebbe858c2fde880f10401c6cea1276dfd"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"19c7e4f5ff37a24beca04bd4c2e1eb30fd893612","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        In ovs do adding or removing flow entry to edit an arp reply."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        :param action: an action to operate for arp respond infomation."},{"line_number":147,"context_line":"            add or remove"},{"line_number":148,"context_line":"        :param lvid: id in local VLAN map of network\u0027s ARP entry."},{"line_number":149,"context_line":"        :param mac_address: MAC string value."},{"line_number":150,"context_line":"        :param ip_address: IP string value."}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_773927d7","line":147,"updated":"2014-08-04 00:52:04.000000000","message":"\"add\" or \"remove\"","commit_id":"4d1c1f1ebbe858c2fde880f10401c6cea1276dfd"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9b8af4b7bfbb5a06ba7d05baf97e1c759ce09207","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        :param action: an action to operate for arp respond infomation."},{"line_number":147,"context_line":"            add or remove"},{"line_number":148,"context_line":"        :param lvid: id in local VLAN map of network\u0027s ARP entry."},{"line_number":149,"context_line":"        :param mac_address: MAC string value."},{"line_number":150,"context_line":"        :param ip_address: IP string value."},{"line_number":151,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"baada198_250e9c3d","line":148,"updated":"2014-08-04 00:30:30.000000000","message":"I prefer to local_vlan_id or local_vid, but i am okay if it is already commonly used in OVS agent code.","commit_id":"4d1c1f1ebbe858c2fde880f10401c6cea1276dfd"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"73dbd9f628fa80220282d5ec825dd7b451acbe61","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        pass"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @abc.abstractmethod"},{"line_number":140,"context_line":"    def update_fdb_flow(self, action, local_vid, mac_address, ip_address):"},{"line_number":141,"context_line":"        \u0027\u0027\u0027Operate the ARP respond information."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        Do operation of arp respond information for an action"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_cd4ee68f","line":140,"updated":"2014-08-04 04:02:42.000000000","message":"As I commented in patch set 16, I am confused with this method name. Please reply in the previous patch set. I  think the previous name seems better compared to the new name.","commit_id":"fe80d6540a637aeb813552a7a2f964997df47168"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"b9a1fdaed0ab7d74bb630bd58a1caa326137a282","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        pass"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @abc.abstractmethod"},{"line_number":140,"context_line":"    def update_fdb_flow(self, action, local_vid, mac_address, ip_address):"},{"line_number":141,"context_line":"        \u0027\u0027\u0027Operate the ARP respond information."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        Do operation of arp respond information for an action"}],"source_content_type":"text/x-python","patch_set":17,"id":"baada198_b791f047","line":140,"in_reply_to":"baada198_cd4ee68f","updated":"2014-08-04 11:17:57.000000000","message":"Done","commit_id":"fe80d6540a637aeb813552a7a2f964997df47168"}],"neutron/plugins/ofagent/agent/arp_lib.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"d8158963f4db2300c274143d8924336d95398e0a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class OFANeutronAgentLib(object):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __init__(self, ryuapp):"},{"line_number":35,"context_line":"        self.ryuapp \u003d ryuapp"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_60875813","line":32,"updated":"2014-05-21 07:13:32.000000000","message":"can you rename this class to a less generic name as well?","commit_id":"06df86190651c3c2fda5f7bc0d8b6739dad04218"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"3794b7258a0c90ce18693514c418b5e8c7bf2075","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class OFANeutronAgentLib(object):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __init__(self, ryuapp):"},{"line_number":35,"context_line":"        self.ryuapp \u003d ryuapp"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_9b8219c7","line":32,"in_reply_to":"7adec928_60875813","updated":"2014-05-21 07:55:02.000000000","message":"Oops, thanks. Done","commit_id":"06df86190651c3c2fda5f7bc0d8b6739dad04218"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"58eff16aec95a4240896696d11a96c8e0d8b9ba5","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            network \u003d pkt_vlan.vid"},{"line_number":163,"context_line":"            pkt_arp \u003d pkt.get_protocol(arp.arp)"},{"line_number":164,"context_line":"            if not pkt_arp:"},{"line_number":165,"context_line":"                LOG.info(_(\"non-arp packet\"))"},{"line_number":166,"context_line":"                # add a flow to skip a packet-in to a controller."},{"line_number":167,"context_line":"                match \u003d ofpp.OFPMatch(eth_type\u003dether.ETH_TYPE_8021Q,"},{"line_number":168,"context_line":"                                      vlan_vid\u003dnetwork | ofp.OFPVID_PRESENT)"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_1f7fd5ac","line":165,"updated":"2014-07-16 06:16:25.000000000","message":"how can this happen?\nif this is only for packets sent before the agent installs flows, i prefer just dropping them.","commit_id":"3a24903199329a720f0ece1200719073a8774d07"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6ff42e405063b0365484f7a899b75877be54e2ed","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            network \u003d pkt_vlan.vid"},{"line_number":163,"context_line":"            pkt_arp \u003d pkt.get_protocol(arp.arp)"},{"line_number":164,"context_line":"            if not pkt_arp:"},{"line_number":165,"context_line":"                LOG.info(_(\"non-arp packet\"))"},{"line_number":166,"context_line":"                # add a flow to skip a packet-in to a controller."},{"line_number":167,"context_line":"                match \u003d ofpp.OFPMatch(eth_type\u003dether.ETH_TYPE_8021Q,"},{"line_number":168,"context_line":"                                      vlan_vid\u003dnetwork | ofp.OFPVID_PRESENT)"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_7b00b002","line":165,"in_reply_to":"baada198_1f7fd5ac","updated":"2014-07-17 13:35:05.000000000","message":"Done. Yes, I think that there is the only case a packet is sended while a flow table doesn\u0027t exist.","commit_id":"3a24903199329a720f0ece1200719073a8774d07"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"58eff16aec95a4240896696d11a96c8e0d8b9ba5","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            if not pkt_arp:"},{"line_number":165,"context_line":"                LOG.info(_(\"non-arp packet\"))"},{"line_number":166,"context_line":"                # add a flow to skip a packet-in to a controller."},{"line_number":167,"context_line":"                match \u003d ofpp.OFPMatch(eth_type\u003dether.ETH_TYPE_8021Q,"},{"line_number":168,"context_line":"                                      vlan_vid\u003dnetwork | ofp.OFPVID_PRESENT)"},{"line_number":169,"context_line":"                self._add_flow_to_avoid_unknown_packet(datapath, match)"},{"line_number":170,"context_line":"                # send a non-arp packet to the table."}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_bfa26949","line":167,"range":{"start_line":167,"start_character":38,"end_line":167,"end_character":67},"updated":"2014-07-16 06:16:25.000000000","message":"in case of VLAN, eth_type OXM means the inner ether type.","commit_id":"3a24903199329a720f0ece1200719073a8774d07"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d0b0717d8f9e8c3b73d8d90d8a9de514969837fc","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        self._arp_tbl \u003d {}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _send_arp_reply(self, datapath, port, pkt):"},{"line_number":45,"context_line":"        LOG.debug(\"packet-out %s\", pkt)"},{"line_number":46,"context_line":"        ofp \u003d datapath.ofproto"},{"line_number":47,"context_line":"        ofpp \u003d datapath.ofproto_parser"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_87f2e96c","line":44,"updated":"2014-07-22 02:02:02.000000000","message":"please call it packet!","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        self._arp_tbl \u003d {}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _send_arp_reply(self, datapath, port, pkt):"},{"line_number":45,"context_line":"        LOG.debug(\"packet-out %s\", pkt)"},{"line_number":46,"context_line":"        ofp \u003d datapath.ofproto"},{"line_number":47,"context_line":"        ofpp \u003d datapath.ofproto_parser"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_547f8b16","line":44,"in_reply_to":"baada198_87f2e96c","updated":"2014-07-23 12:22:41.000000000","message":"We use packet as a module name.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"4219c915e4c0ed656f73d35a488ecf27b0d36148","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        LOG.debug(\"added arp table entry: \""},{"line_number":121,"context_line":"                  \"network %(network)s ip %(ip)s mac %(mac)s\","},{"line_number":122,"context_line":"                  {\u0027network\u0027: network, \u0027ip\u0027: ip, \u0027mac\u0027: mac})"},{"line_number":123,"context_line":"        if network in self._arp_tbl:"},{"line_number":124,"context_line":"            self._arp_tbl[network][ip] \u003d mac"},{"line_number":125,"context_line":"        else:"},{"line_number":126,"context_line":"            self._arp_tbl[network] \u003d {ip: mac}"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_7d55761c","line":123,"updated":"2014-07-21 20:48:16.000000000","message":"replace 123-126 with:\n\nself._arp_tbl[network].setdefault(ip, {}) \u003d mac","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        LOG.debug(\"added arp table entry: \""},{"line_number":121,"context_line":"                  \"network %(network)s ip %(ip)s mac %(mac)s\","},{"line_number":122,"context_line":"                  {\u0027network\u0027: network, \u0027ip\u0027: ip, \u0027mac\u0027: mac})"},{"line_number":123,"context_line":"        if network in self._arp_tbl:"},{"line_number":124,"context_line":"            self._arp_tbl[network][ip] \u003d mac"},{"line_number":125,"context_line":"        else:"},{"line_number":126,"context_line":"            self._arp_tbl[network] \u003d {ip: mac}"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_54094b82","line":123,"in_reply_to":"baada198_7d55761c","updated":"2014-07-23 12:22:41.000000000","message":"self._arp_tbl[network] may not exist.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"4219c915e4c0ed656f73d35a488ecf27b0d36148","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        LOG.debug(\"deleted arp table entry: network %(network)s ip %(ip)s\","},{"line_number":130,"context_line":"                  {\u0027network\u0027: network, \u0027ip\u0027: ip})"},{"line_number":131,"context_line":"        del self._arp_tbl[network][ip]"},{"line_number":132,"context_line":"        if self._arp_tbl[network] \u003d\u003d {}:"},{"line_number":133,"context_line":"            del self._arp_tbl[network]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def packet_in_handler(self, ev):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_1d3c7ae0","line":132,"updated":"2014-07-21 20:48:16.000000000","message":"if not self._arp_tbl[network]:","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        LOG.debug(\"deleted arp table entry: network %(network)s ip %(ip)s\","},{"line_number":130,"context_line":"                  {\u0027network\u0027: network, \u0027ip\u0027: ip})"},{"line_number":131,"context_line":"        del self._arp_tbl[network][ip]"},{"line_number":132,"context_line":"        if self._arp_tbl[network] \u003d\u003d {}:"},{"line_number":133,"context_line":"            del self._arp_tbl[network]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def packet_in_handler(self, ev):"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_1c817cc3","line":132,"in_reply_to":"baada198_1d3c7ae0","updated":"2014-07-23 12:22:41.000000000","message":"Done","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"47167d52caddb692b802aad6924ad505ca805f1e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        LOG.info(_(\"packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s\"),"},{"line_number":149,"context_line":"                 {\u0027dpid\u0027: dpid_lib.dpid_to_str(datapath.id),"},{"line_number":150,"context_line":"                 \u0027port\u0027: port, \u0027pkt\u0027: pkt})"},{"line_number":151,"context_line":"        pkt_ethernet \u003d None"},{"line_number":152,"context_line":"        pkt_vlan \u003d None"},{"line_number":153,"context_line":"        pkt_arp \u003d None"},{"line_number":154,"context_line":"        pkt_ethernet \u003d pkt.get_protocol(ethernet.ethernet)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_9264f049","line":151,"updated":"2014-07-21 23:17:01.000000000","message":"pkt_ethernet in this line is unnecessary.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        LOG.info(_(\"packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s\"),"},{"line_number":149,"context_line":"                 {\u0027dpid\u0027: dpid_lib.dpid_to_str(datapath.id),"},{"line_number":150,"context_line":"                 \u0027port\u0027: port, \u0027pkt\u0027: pkt})"},{"line_number":151,"context_line":"        pkt_ethernet \u003d None"},{"line_number":152,"context_line":"        pkt_vlan \u003d None"},{"line_number":153,"context_line":"        pkt_arp \u003d None"},{"line_number":154,"context_line":"        pkt_ethernet \u003d pkt.get_protocol(ethernet.ethernet)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_54adcb82","line":151,"in_reply_to":"baada198_9264f049","updated":"2014-07-23 12:22:41.000000000","message":"Done","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"66e7e0253510098f249794173fa2d1ed099c9bdb","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __init__(self, ryuapp):"},{"line_number":35,"context_line":"        self.ryuapp \u003d ryuapp"},{"line_number":36,"context_line":"        \"\"\"self._arp_tbl: map an ip and a mac in a network."},{"line_number":37,"context_line":"            {network1: {ip_addr: mac, ...},"},{"line_number":38,"context_line":"             network2: {ip_addr: mac, ...},"},{"line_number":39,"context_line":"             ...,"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_d285e159","line":36,"updated":"2014-08-01 02:19:22.000000000","message":"Put as part of doc string at start of method?","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"837538f71268533f28a102d5c403916029336e69","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __init__(self, ryuapp):"},{"line_number":35,"context_line":"        self.ryuapp \u003d ryuapp"},{"line_number":36,"context_line":"        \"\"\"self._arp_tbl: map an ip and a mac in a network."},{"line_number":37,"context_line":"            {network1: {ip_addr: mac, ...},"},{"line_number":38,"context_line":"             network2: {ip_addr: mac, ...},"},{"line_number":39,"context_line":"             ...,"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_43002535","line":36,"in_reply_to":"baada198_d285e159","updated":"2014-08-01 07:14:48.000000000","message":"Done","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"66e7e0253510098f249794173fa2d1ed099c9bdb","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        LOG.debug(\"deleted arp table entry: network %(network)s ip %(ip)s\","},{"line_number":130,"context_line":"                  {\u0027network\u0027: network, \u0027ip\u0027: ip})"},{"line_number":131,"context_line":"        del self._arp_tbl[network][ip]"},{"line_number":132,"context_line":"        if not self._arp_tbl[network]:"},{"line_number":133,"context_line":"            del self._arp_tbl[network]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def packet_in_handler(self, ev):"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_120f59e1","line":132,"updated":"2014-08-01 02:19:22.000000000","message":"should this be...\n\n    if self._arp_tbl[network]:?","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"82965df4e052e3d185cadb132b0ed3d97fe90275","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        LOG.debug(\"deleted arp table entry: network %(network)s ip %(ip)s\","},{"line_number":130,"context_line":"                  {\u0027network\u0027: network, \u0027ip\u0027: ip})"},{"line_number":131,"context_line":"        del self._arp_tbl[network][ip]"},{"line_number":132,"context_line":"        if not self._arp_tbl[network]:"},{"line_number":133,"context_line":"            del self._arp_tbl[network]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def packet_in_handler(self, ev):"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_45202db0","line":132,"in_reply_to":"baada198_120f59e1","updated":"2014-08-01 03:32:32.000000000","message":"no.\nthis means \"if the dict is now empty, delete the dict\"","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"8850d4915034e3e3f914db061edc11e16851e81a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"             network2: {ip_addr: mac, ...},"},{"line_number":39,"context_line":"             ...,"},{"line_number":40,"context_line":"            }"},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        self.ryuapp \u003d ryuapp"},{"line_number":43,"context_line":"        self._arp_tbl \u003d {}"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_1a776b8f","line":41,"updated":"2014-08-01 07:16:36.000000000","message":"docstring on __init__ normally describes the class constructor.\nie. :param ryuapp: etc","commit_id":"77e1b973434b6fbd0389b96d6fc91719c4758ad4"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"8f3d57135ed3117cd0a6546a7dae2985f8296a0a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"             network2: {ip_addr: mac, ...},"},{"line_number":39,"context_line":"             ...,"},{"line_number":40,"context_line":"            }"},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        self.ryuapp \u003d ryuapp"},{"line_number":43,"context_line":"        self._arp_tbl \u003d {}"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_6f7263e4","line":41,"in_reply_to":"baada198_1a776b8f","updated":"2014-08-01 11:10:47.000000000","message":"Done","commit_id":"77e1b973434b6fbd0389b96d6fc91719c4758ad4"}],"neutron/plugins/ofagent/agent/ofa_neutron_agent.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"d8158963f4db2300c274143d8924336d95398e0a","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":170,"context_line":"        super(OFANeutronAgentRyuApp, self).__init__(*args, **kwargs)"},{"line_number":171,"context_line":"        self.ofalib \u003d arp_lib.OFANeutronAgentLib(self)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def start(self):"},{"line_number":174,"context_line":"        super(OFANeutronAgentRyuApp, self).start()"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_80baa4be","line":171,"updated":"2014-05-21 07:13:32.000000000","message":"how about self.arp?","commit_id":"06df86190651c3c2fda5f7bc0d8b6739dad04218"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"3794b7258a0c90ce18693514c418b5e8c7bf2075","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":170,"context_line":"        super(OFANeutronAgentRyuApp, self).__init__(*args, **kwargs)"},{"line_number":171,"context_line":"        self.ofalib \u003d arp_lib.OFANeutronAgentLib(self)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def start(self):"},{"line_number":174,"context_line":"        super(OFANeutronAgentRyuApp, self).start()"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_9b593991","line":171,"in_reply_to":"7adec928_80baa4be","updated":"2014-05-21 07:55:02.000000000","message":"Yes, thanks. Done.","commit_id":"06df86190651c3c2fda5f7bc0d8b6739dad04218"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"58eff16aec95a4240896696d11a96c8e0d8b9ba5","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from ryu.app.ofctl import api as ryu_api"},{"line_number":25,"context_line":"from ryu.base import app_manager"},{"line_number":26,"context_line":"from ryu.controller.handler import MAIN_DISPATCHER"},{"line_number":27,"context_line":"from ryu.controller.handler import set_ev_cls"},{"line_number":28,"context_line":"from ryu.controller import ofp_event"},{"line_number":29,"context_line":"from ryu.lib import hub"},{"line_number":30,"context_line":"from ryu.lib.packet import arp"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_1fb7d53b","line":27,"updated":"2014-07-16 06:16:25.000000000","message":"please avoid non-module imports.","commit_id":"3a24903199329a720f0ece1200719073a8774d07"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6ff42e405063b0365484f7a899b75877be54e2ed","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from ryu.app.ofctl import api as ryu_api"},{"line_number":25,"context_line":"from ryu.base import app_manager"},{"line_number":26,"context_line":"from ryu.controller.handler import MAIN_DISPATCHER"},{"line_number":27,"context_line":"from ryu.controller.handler import set_ev_cls"},{"line_number":28,"context_line":"from ryu.controller import ofp_event"},{"line_number":29,"context_line":"from ryu.lib import hub"},{"line_number":30,"context_line":"from ryu.lib.packet import arp"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_7b7b50be","line":27,"in_reply_to":"baada198_1fb7d53b","updated":"2014-07-17 13:35:05.000000000","message":"Done","commit_id":"3a24903199329a720f0ece1200719073a8774d07"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d0b0717d8f9e8c3b73d8d90d8a9de514969837fc","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                                  match\u003dmatch)"},{"line_number":460,"context_line":"            self.ryu_send_msg(msg)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def set_arp_responder(self, action, lvid, mac_str, ip_str):"},{"line_number":463,"context_line":"        if action \u003d\u003d \u0027add\u0027:"},{"line_number":464,"context_line":"            self.ryuapp.add_arp_table_entry(lvid, ip_str, mac_str)"},{"line_number":465,"context_line":"        elif action \u003d\u003d \u0027remove\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c79f8100","line":462,"updated":"2014-07-22 02:02:02.000000000","message":"please revisit method signature as suggested earlier","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                                  match\u003dmatch)"},{"line_number":460,"context_line":"            self.ryu_send_msg(msg)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def set_arp_responder(self, action, lvid, mac_str, ip_str):"},{"line_number":463,"context_line":"        if action \u003d\u003d \u0027add\u0027:"},{"line_number":464,"context_line":"            self.ryuapp.add_arp_table_entry(lvid, ip_str, mac_str)"},{"line_number":465,"context_line":"        elif action \u003d\u003d \u0027remove\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_bcdfb0d5","line":462,"in_reply_to":"baada198_c79f8100","updated":"2014-07-23 12:22:41.000000000","message":"Done","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"}],"neutron/plugins/ofagent/common/ofa_lib.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"21968b4a8d459962d10d85537e4671de609ad4ed","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2014 VA Linux Systems Japan K.K."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_58c27be9","line":1,"updated":"2014-05-20 04:04:08.000000000","message":"my understanding is that the \"common\" directory is for common code between agent and plugin.\nthis ofa_lib seems like purely agent code and thus \"agent\" directory is more appropriate.\n\nbesides that, as it only contains arp-related code, i prefer arp_lib.","commit_id":"1c2beff24b5630654f64913baf02aab126840e10"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"f1b6c78e2fe6e67bf258992670a11cd230331de1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2014 VA Linux Systems Japan K.K."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_4016dcf2","line":1,"in_reply_to":"7adec928_58c27be9","updated":"2014-05-21 07:17:19.000000000","message":"Done","commit_id":"1c2beff24b5630654f64913baf02aab126840e10"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"21968b4a8d459962d10d85537e4671de609ad4ed","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":"# @author: Fumihiko Kakuma, VA Linux Systems Japan K.K."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from ryu.app.ofctl import api as ryu_api"},{"line_number":17,"context_line":"from ryu.lib import dpid as dpid_lib"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_187b93be","line":14,"updated":"2014-05-20 04:04:08.000000000","message":"add me as a co-author of this module.\n\n@author: YAMAMOTO Takashi, VA Linux Systems Japan K.K.","commit_id":"1c2beff24b5630654f64913baf02aab126840e10"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"f1b6c78e2fe6e67bf258992670a11cd230331de1","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":"# @author: Fumihiko Kakuma, VA Linux Systems Japan K.K."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from ryu.app.ofctl import api as ryu_api"},{"line_number":17,"context_line":"from ryu.lib import dpid as dpid_lib"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_c02aec2b","line":14,"in_reply_to":"7adec928_187b93be","updated":"2014-05-21 07:17:19.000000000","message":"Sorry. Done.","commit_id":"1c2beff24b5630654f64913baf02aab126840e10"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"21968b4a8d459962d10d85537e4671de609ad4ed","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.ryuapp \u003d ryuapp"},{"line_number":35,"context_line":"        \"\"\"self._arp_tbl: map an ip and a mac in a netwok."},{"line_number":36,"context_line":"            {newtork1: {ip_addr: mac, ...},"},{"line_number":37,"context_line":"             newtork2: {ip_addr: mac, ...},"},{"line_number":38,"context_line":"             ...,"},{"line_number":39,"context_line":"            }"},{"line_number":40,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_f8042719","line":37,"updated":"2014-05-20 04:04:08.000000000","message":"network (3 places)","commit_id":"1c2beff24b5630654f64913baf02aab126840e10"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"f1b6c78e2fe6e67bf258992670a11cd230331de1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.ryuapp \u003d ryuapp"},{"line_number":35,"context_line":"        \"\"\"self._arp_tbl: map an ip and a mac in a netwok."},{"line_number":36,"context_line":"            {newtork1: {ip_addr: mac, ...},"},{"line_number":37,"context_line":"             newtork2: {ip_addr: mac, ...},"},{"line_number":38,"context_line":"             ...,"},{"line_number":39,"context_line":"            }"},{"line_number":40,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_00f5b4ca","line":37,"in_reply_to":"7adec928_f8042719","updated":"2014-05-21 07:17:19.000000000","message":"Done","commit_id":"1c2beff24b5630654f64913baf02aab126840e10"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"21968b4a8d459962d10d85537e4671de609ad4ed","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                return"},{"line_number":172,"context_line":"        else:"},{"line_number":173,"context_line":"            # flood an unknown packet."},{"line_number":174,"context_line":"            self._send_unknown_packet(msg, port, ofp.OFPP_FLOOD)"},{"line_number":175,"context_line":"            return"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        arptbl \u003d self._arp_tbl.get(network)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_3b02090a","line":174,"updated":"2014-05-20 04:04:08.000000000","message":"this flooding seems wrong.\nwhat kind of packets can come here?","commit_id":"1c2beff24b5630654f64913baf02aab126840e10"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"f1b6c78e2fe6e67bf258992670a11cd230331de1","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                return"},{"line_number":172,"context_line":"        else:"},{"line_number":173,"context_line":"            # flood an unknown packet."},{"line_number":174,"context_line":"            self._send_unknown_packet(msg, port, ofp.OFPP_FLOOD)"},{"line_number":175,"context_line":"            return"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        arptbl \u003d self._arp_tbl.get(network)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_e0f60890","line":174,"in_reply_to":"7adec928_3b02090a","updated":"2014-05-21 07:17:19.000000000","message":"It seems to receive several unknown packet after set-controller.\nBut I will change to do drop instead of flood.","commit_id":"1c2beff24b5630654f64913baf02aab126840e10"}],"neutron/plugins/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"58eff16aec95a4240896696d11a96c8e0d8b9ba5","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        :param action: add or remove ARP entry."},{"line_number":399,"context_line":"        :param lvid: local VLAN map of network\u0027s ARP entry."},{"line_number":400,"context_line":"        :param mac_str: MAC string value."},{"line_number":401,"context_line":"        :param ip_str: IP string value."},{"line_number":402,"context_line":"        \u0027\u0027\u0027"},{"line_number":403,"context_line":"        if not self.arp_responder_enabled:"},{"line_number":404,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_7fec512a","line":401,"updated":"2014-07-16 06:16:25.000000000","message":"better to move api descriptions to the abs method.","commit_id":"3a24903199329a720f0ece1200719073a8774d07"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6ff42e405063b0365484f7a899b75877be54e2ed","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        :param action: add or remove ARP entry."},{"line_number":399,"context_line":"        :param lvid: local VLAN map of network\u0027s ARP entry."},{"line_number":400,"context_line":"        :param mac_str: MAC string value."},{"line_number":401,"context_line":"        :param ip_str: IP string value."},{"line_number":402,"context_line":"        \u0027\u0027\u0027"},{"line_number":403,"context_line":"        if not self.arp_responder_enabled:"},{"line_number":404,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_5b804c8b","line":401,"in_reply_to":"baada198_7fec512a","updated":"2014-07-17 13:35:05.000000000","message":"Done","commit_id":"3a24903199329a720f0ece1200719073a8774d07"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"66e7e0253510098f249794173fa2d1ed099c9bdb","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                                 actions\u003d\"strip_vlan,set_tunnel:%s,\""},{"line_number":370,"context_line":"                                 \"output:%s\" % (lvm.segmentation_id, ofports))"},{"line_number":371,"context_line":"        else:"},{"line_number":372,"context_line":"            self.ope_arp_respond_info(\u0027add\u0027, lvm.vlan, port_info[0],"},{"line_number":373,"context_line":"                                      port_info[1])"},{"line_number":374,"context_line":"            if not self.dvr_agent.is_dvr_router_interface(port_info[1]):"},{"line_number":375,"context_line":"                self.tun_br.add_flow(table\u003dconstants.UCAST_TO_TUN,"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_92bfe9c9","line":372,"updated":"2014-08-01 02:19:22.000000000","message":"The older name seems clearer. Why the change?","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"837538f71268533f28a102d5c403916029336e69","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                                 actions\u003d\"strip_vlan,set_tunnel:%s,\""},{"line_number":370,"context_line":"                                 \"output:%s\" % (lvm.segmentation_id, ofports))"},{"line_number":371,"context_line":"        else:"},{"line_number":372,"context_line":"            self.ope_arp_respond_info(\u0027add\u0027, lvm.vlan, port_info[0],"},{"line_number":373,"context_line":"                                      port_info[1])"},{"line_number":374,"context_line":"            if not self.dvr_agent.is_dvr_router_interface(port_info[1]):"},{"line_number":375,"context_line":"                self.tun_br.add_flow(table\u003dconstants.UCAST_TO_TUN,"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_1ef3e209","line":372,"in_reply_to":"baada198_92bfe9c9","updated":"2014-08-01 07:14:48.000000000","message":"ope_arp_respond_info is abstract method in l2population_rpc_base.py. A process of this method will be different by agent.\n\nAnd Armando hoped to revisit a set_arp_responder method name in OFA on patchset 9","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"66e7e0253510098f249794173fa2d1ed099c9bdb","unresolved":false,"context_lines":[{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        When the l2 population mechanism driver and OVS supports to edit ARP"},{"line_number":413,"context_line":"        fields, a table (ARP_RESPONDER) to resolve ARP locally is added to the"},{"line_number":414,"context_line":"        tunnel bridge."},{"line_number":415,"context_line":"        \u0027\u0027\u0027"},{"line_number":416,"context_line":"        if not self.arp_responder_enabled:"},{"line_number":417,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_523ab134","line":414,"updated":"2014-08-01 02:19:22.000000000","message":"Any reason not to update the parameter docstring info?","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"82965df4e052e3d185cadb132b0ed3d97fe90275","unresolved":false,"context_lines":[{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        When the l2 population mechanism driver and OVS supports to edit ARP"},{"line_number":413,"context_line":"        fields, a table (ARP_RESPONDER) to resolve ARP locally is added to the"},{"line_number":414,"context_line":"        tunnel bridge."},{"line_number":415,"context_line":"        \u0027\u0027\u0027"},{"line_number":416,"context_line":"        if not self.arp_responder_enabled:"},{"line_number":417,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_45abcd1d","line":414,"in_reply_to":"baada198_523ab134","updated":"2014-08-01 03:32:32.000000000","message":"docstring was moved to the abstract method.\nit\u0027s redundant to have it on every overriding methods.","commit_id":"2a727e99ef8ea9e0e000f4cfb3522e4f485392af"}],"neutron/tests/unit/agent/test_l2population_rpc.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d0b0717d8f9e8c3b73d8d90d8a9de514969837fc","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def cleanup_tunnel_port(self, tun_ofport, tunnel_type):"},{"line_number":47,"context_line":"        pass"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def set_arp_responder(self, action, lvid, mac_str, ip_str):"},{"line_number":50,"context_line":"        pass"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e789e5ca","line":49,"updated":"2014-07-22 02:02:02.000000000","message":"ditto","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def cleanup_tunnel_port(self, tun_ofport, tunnel_type):"},{"line_number":47,"context_line":"        pass"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def set_arp_responder(self, action, lvid, mac_str, ip_str):"},{"line_number":50,"context_line":"        pass"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_7cfc3840","line":49,"in_reply_to":"baada198_e789e5ca","updated":"2014-07-23 12:22:41.000000000","message":"Done","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"36cd73ed642b99cae0cb0287acbce84bef2bee2d","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                      self.lvms[0].ip),"},{"line_number":208,"context_line":"            mock.call(\u0027add\u0027, self.lvm2.vlan, self.lvms[2].mac,"},{"line_number":209,"context_line":"                      self.lvms[2].ip),"},{"line_number":210,"context_line":"        ]"},{"line_number":211,"context_line":"        self.assertEqual(sorted(expected),"},{"line_number":212,"context_line":"                         sorted(m_update_info_for_arp_reply.call_args_list))"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_6aede723","line":210,"updated":"2014-08-01 15:36:29.000000000","message":"a more pythonesque way would be this:\nexpected \u003d [mock.call(m, self.lvm1.vlan, self.lvms[i].mac, self.lvms[i].ip)\n                  for m in [\u0027remove\u0027, \u0027add\u0027] for i in range(3)]","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6bbbf4e4db92f071d73d4f9e821bb2481cdf7fd8","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                      self.lvms[0].ip),"},{"line_number":208,"context_line":"            mock.call(\u0027add\u0027, self.lvm2.vlan, self.lvms[2].mac,"},{"line_number":209,"context_line":"                      self.lvms[2].ip),"},{"line_number":210,"context_line":"        ]"},{"line_number":211,"context_line":"        self.assertEqual(sorted(expected),"},{"line_number":212,"context_line":"                         sorted(m_update_info_for_arp_reply.call_args_list))"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_4bd74222","line":210,"in_reply_to":"baada198_6aede723","updated":"2014-08-02 15:26:34.000000000","message":"Above codes do not create a correct expected value.","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"36cd73ed642b99cae0cb0287acbce84bef2bee2d","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                      self.lvms[2].ip),"},{"line_number":210,"context_line":"        ]"},{"line_number":211,"context_line":"        self.assertEqual(sorted(expected),"},{"line_number":212,"context_line":"                         sorted(m_update_info_for_arp_reply.call_args_list))"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def test__fdb_chg_ip_no_lvm(self):"},{"line_number":215,"context_line":"        m_update_info_for_arp_reply \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_aada9f76","line":212,"updated":"2014-08-01 15:36:29.000000000","message":"you could instead:\nm_update_info_for_arp_reply.assert_has_calls(expected, any_order\u003dTrue)","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6bbbf4e4db92f071d73d4f9e821bb2481cdf7fd8","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                      self.lvms[2].ip),"},{"line_number":210,"context_line":"        ]"},{"line_number":211,"context_line":"        self.assertEqual(sorted(expected),"},{"line_number":212,"context_line":"                         sorted(m_update_info_for_arp_reply.call_args_list))"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def test__fdb_chg_ip_no_lvm(self):"},{"line_number":215,"context_line":"        m_update_info_for_arp_reply \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_7dcafa1a","line":212,"in_reply_to":"baada198_aada9f76","updated":"2014-08-02 15:26:34.000000000","message":"Done","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"}],"neutron/tests/unit/ofagent/fake_oflib.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"21968b4a8d459962d10d85537e4671de609ad4ed","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    ryu_packet_mod \u003d ryu_lib_mod.packet"},{"line_number":31,"context_line":"    ryu_packet_arp \u003d ryu_packet_mod.arp"},{"line_number":32,"context_line":"    ryu_packet_arp.ARP_REQUEST \u003d 1"},{"line_number":33,"context_line":"    ryu_packet_arp.ARP_REQUEST \u003d 2"},{"line_number":34,"context_line":"    ryu_packet_eth \u003d ryu_packet_mod.ethernet"},{"line_number":35,"context_line":"    ryu_packet_vlan \u003d ryu_packet_mod.vlan"},{"line_number":36,"context_line":"    ryu_packet_packet_mod \u003d ryu_packet_mod.packet"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_d8220bb8","line":33,"updated":"2014-05-20 04:04:08.000000000","message":"typo?","commit_id":"1c2beff24b5630654f64913baf02aab126840e10"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"f1b6c78e2fe6e67bf258992670a11cd230331de1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    ryu_packet_mod \u003d ryu_lib_mod.packet"},{"line_number":31,"context_line":"    ryu_packet_arp \u003d ryu_packet_mod.arp"},{"line_number":32,"context_line":"    ryu_packet_arp.ARP_REQUEST \u003d 1"},{"line_number":33,"context_line":"    ryu_packet_arp.ARP_REQUEST \u003d 2"},{"line_number":34,"context_line":"    ryu_packet_eth \u003d ryu_packet_mod.ethernet"},{"line_number":35,"context_line":"    ryu_packet_vlan \u003d ryu_packet_mod.vlan"},{"line_number":36,"context_line":"    ryu_packet_packet_mod \u003d ryu_packet_mod.packet"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_c013cc0b","line":33,"in_reply_to":"7adec928_d8220bb8","updated":"2014-05-21 07:17:19.000000000","message":"Done","commit_id":"1c2beff24b5630654f64913baf02aab126840e10"}],"neutron/tests/unit/ofagent/ofa_test_base.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"47167d52caddb692b802aad6924ad505ca805f1e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2014 VA Linux Systems Japan K.K."},{"line_number":2,"context_line":"# Based on test for openvswitch agent(test_ovs_neutron_agent.py)."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Copyright (c) 2012 OpenStack Foundation."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_55fb22bd","line":2,"updated":"2014-07-21 23:17:01.000000000","message":"I don\u0027t think this modules is based on OVS agent test.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2014 VA Linux Systems Japan K.K."},{"line_number":2,"context_line":"# Based on test for openvswitch agent(test_ovs_neutron_agent.py)."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Copyright (c) 2012 OpenStack Foundation."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_effa8cb8","line":2,"in_reply_to":"baada198_55fb22bd","updated":"2014-07-23 12:22:41.000000000","message":"Done","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"47167d52caddb692b802aad6924ad505ca805f1e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        super(OFAAgentTestBase, self).setUp()"},{"line_number":35,"context_line":"        self.fake_oflib_of \u003d fake_oflib.patch_fake_oflib_of()"},{"line_number":36,"context_line":"        self.fake_oflib_of.start()"},{"line_number":37,"context_line":"        self.mod_agent \u003d importutils.import_module(self._AGENT_NAME)"},{"line_number":38,"context_line":"        cfg.CONF.set_default(\u0027firewall_driver\u0027,"},{"line_number":39,"context_line":"                             \u0027neutron.agent.firewall.NoopFirewallDriver\u0027,"},{"line_number":40,"context_line":"                             group\u003d\u0027SECURITYGROUP\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_d5b492f2","line":37,"updated":"2014-07-21 23:17:01.000000000","message":"Juts from curiosity: Is there any reason to use import_module here?","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        super(OFAAgentTestBase, self).setUp()"},{"line_number":35,"context_line":"        self.fake_oflib_of \u003d fake_oflib.patch_fake_oflib_of()"},{"line_number":36,"context_line":"        self.fake_oflib_of.start()"},{"line_number":37,"context_line":"        self.mod_agent \u003d importutils.import_module(self._AGENT_NAME)"},{"line_number":38,"context_line":"        cfg.CONF.set_default(\u0027firewall_driver\u0027,"},{"line_number":39,"context_line":"                             \u0027neutron.agent.firewall.NoopFirewallDriver\u0027,"},{"line_number":40,"context_line":"                             group\u003d\u0027SECURITYGROUP\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_4ce5f436","line":37,"in_reply_to":"baada198_d5b492f2","updated":"2014-07-23 12:22:41.000000000","message":"fake_oflib makes it possible to import faked ryu module patching sys.modules using patch dict.\nAnd then we can load ofa_neutron_agent.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"47167d52caddb692b802aad6924ad505ca805f1e","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def tearDown(self):"},{"line_number":51,"context_line":"        super(OFAAgentTestBase, self).tearDown()"},{"line_number":52,"context_line":"        self.fake_oflib_of.stop()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _mk_test_dp(self, name):"},{"line_number":55,"context_line":"        ofp \u003d importutils.import_module(\u0027ryu.ofproto.ofproto_v1_3\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_f568b6bb","line":52,"updated":"2014-07-21 23:17:01.000000000","message":"tearDown is strongly discouraged. Use addCleanup instead.\n\n  self.addCleanup(self.fake_oflib_of.stop)","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d0b0717d8f9e8c3b73d8d90d8a9de514969837fc","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def tearDown(self):"},{"line_number":51,"context_line":"        super(OFAAgentTestBase, self).tearDown()"},{"line_number":52,"context_line":"        self.fake_oflib_of.stop()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _mk_test_dp(self, name):"},{"line_number":55,"context_line":"        ofp \u003d importutils.import_module(\u0027ryu.ofproto.ofproto_v1_3\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c7b6a188","line":52,"updated":"2014-07-22 02:02:02.000000000","message":"you no longer need to add stop. There\u0027s a stopAll in the base call, so you can get rid of this altogether.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def tearDown(self):"},{"line_number":51,"context_line":"        super(OFAAgentTestBase, self).tearDown()"},{"line_number":52,"context_line":"        self.fake_oflib_of.stop()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _mk_test_dp(self, name):"},{"line_number":55,"context_line":"        ofp \u003d importutils.import_module(\u0027ryu.ofproto.ofproto_v1_3\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_63bad472","line":52,"in_reply_to":"baada198_c7b6a188","updated":"2014-07-23 12:22:41.000000000","message":"Yes, I once replied for mark\u0027s comment in patch set3 about this.\nstopall doesn\u0027t work for patch.dict and self.fake_oflib_of is patch.dict.\nI reported about this issue.\n\nhttp://bugs.python.org/issue21600","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"f3b9e01cb2541cf44529108d0a380f80a43ddcca","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def tearDown(self):"},{"line_number":51,"context_line":"        super(OFAAgentTestBase, self).tearDown()"},{"line_number":52,"context_line":"        self.fake_oflib_of.stop()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _mk_test_dp(self, name):"},{"line_number":55,"context_line":"        ofp \u003d importutils.import_module(\u0027ryu.ofproto.ofproto_v1_3\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_d675f8fa","line":52,"in_reply_to":"baada198_f568b6bb","updated":"2014-07-23 23:18:36.000000000","message":"Done","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"28926bf0ec266788d1fec9cdfc3e1c4b9313fd37","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def tearDown(self):"},{"line_number":48,"context_line":"        super(OFAAgentTestBase, self).tearDown()"},{"line_number":49,"context_line":"        self.fake_oflib_of.stop()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _mk_test_dp(self, name):"},{"line_number":52,"context_line":"        ofp \u003d importutils.import_module(\u0027ryu.ofproto.ofproto_v1_3\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_ec132863","line":49,"updated":"2014-07-23 12:31:46.000000000","message":"anything wrong with addCleanup amotoki suggested?","commit_id":"69b1bad6d523b877cfd279d03ca02626e8c63576"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"1e6b40c7500a8765dcf5c344b4ad189cc260111f","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def tearDown(self):"},{"line_number":48,"context_line":"        super(OFAAgentTestBase, self).tearDown()"},{"line_number":49,"context_line":"        self.fake_oflib_of.stop()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _mk_test_dp(self, name):"},{"line_number":52,"context_line":"        ofp \u003d importutils.import_module(\u0027ryu.ofproto.ofproto_v1_3\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_76d34cd5","line":49,"in_reply_to":"baada198_ec132863","updated":"2014-07-23 23:17:21.000000000","message":"Done. I missed that.","commit_id":"69b1bad6d523b877cfd279d03ca02626e8c63576"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7b17e7981a74d0134243f7bfd5ef5e498dc8e4da","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        dp \u003d mock.Mock()"},{"line_number":52,"context_line":"        dp.ofproto \u003d ofp"},{"line_number":53,"context_line":"        dp.ofproto_parser \u003d ofpp"},{"line_number":54,"context_line":"        dp.__repr__ \u003d lambda _self: name"},{"line_number":55,"context_line":"        return dp"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _mk_test_br(self, name):"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_25af72e4","line":54,"updated":"2014-07-27 23:07:37.000000000","message":"dp.__repr__ \u003d mock.Mock(return_value\u003dname)","commit_id":"1a1da6120a80b3eafa5cfb572b4055ffff2f17d4"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"5c94aa48d4f428c1b48d818b2b1ec70e9dda08eb","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        dp \u003d mock.Mock()"},{"line_number":52,"context_line":"        dp.ofproto \u003d ofp"},{"line_number":53,"context_line":"        dp.ofproto_parser \u003d ofpp"},{"line_number":54,"context_line":"        dp.__repr__ \u003d lambda _self: name"},{"line_number":55,"context_line":"        return dp"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _mk_test_br(self, name):"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_ad4fb5be","line":54,"in_reply_to":"baada198_25af72e4","updated":"2014-07-29 07:56:10.000000000","message":"Done","commit_id":"1a1da6120a80b3eafa5cfb572b4055ffff2f17d4"}],"neutron/tests/unit/ofagent/test_arp_lib.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.packet_mod.add_protocol \u003d self.fake_add_protocol"},{"line_number":53,"context_line":"        self.arp \u003d sys.modules[\u0027ryu.lib.packet.arp\u0027]"},{"line_number":54,"context_line":"        self.arp_arp \u003d mock.Mock()"},{"line_number":55,"context_line":"        self.arp.arp \u003d mock.Mock(return_value\u003dself.arp_arp)"},{"line_number":56,"context_line":"        self.ethernet \u003d sys.modules[\u0027ryu.lib.packet.ethernet\u0027]"},{"line_number":57,"context_line":"        self.ethernet_ethernet \u003d mock.Mock()"},{"line_number":58,"context_line":"        self.ethernet.ethernet \u003d mock.Mock(return_value\u003dself.ethernet_ethernet)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_715e52eb","line":55,"updated":"2014-05-26 08:25:36.000000000","message":"The return value of a mock is a mock and can be configured as needed.  This construct of manually setting the return value is not needed.  For example:\n\nself.arp.arp \u003d mock.Mock()\nself.arp.arp.return_value \u003d \u003cmy return value\u003e","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.packet_mod.add_protocol \u003d self.fake_add_protocol"},{"line_number":53,"context_line":"        self.arp \u003d sys.modules[\u0027ryu.lib.packet.arp\u0027]"},{"line_number":54,"context_line":"        self.arp_arp \u003d mock.Mock()"},{"line_number":55,"context_line":"        self.arp.arp \u003d mock.Mock(return_value\u003dself.arp_arp)"},{"line_number":56,"context_line":"        self.ethernet \u003d sys.modules[\u0027ryu.lib.packet.ethernet\u0027]"},{"line_number":57,"context_line":"        self.ethernet_ethernet \u003d mock.Mock()"},{"line_number":58,"context_line":"        self.ethernet.ethernet \u003d mock.Mock(return_value\u003dself.ethernet_ethernet)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_50315ca1","line":55,"in_reply_to":"5adbc538_715e52eb","updated":"2014-06-02 23:34:36.000000000","message":"Done","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.arp.arp \u003d mock.Mock(return_value\u003dself.arp_arp)"},{"line_number":56,"context_line":"        self.ethernet \u003d sys.modules[\u0027ryu.lib.packet.ethernet\u0027]"},{"line_number":57,"context_line":"        self.ethernet_ethernet \u003d mock.Mock()"},{"line_number":58,"context_line":"        self.ethernet.ethernet \u003d mock.Mock(return_value\u003dself.ethernet_ethernet)"},{"line_number":59,"context_line":"        self.vlan \u003d sys.modules[\u0027ryu.lib.packet.vlan\u0027]"},{"line_number":60,"context_line":"        self.vlan_vlan \u003d mock.Mock()"},{"line_number":61,"context_line":"        self.vlan.vlan \u003d mock.Mock(return_value\u003dself.vlan_vlan)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_116fce93","line":58,"updated":"2014-05-26 08:25:36.000000000","message":"same comment as above","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.arp.arp \u003d mock.Mock(return_value\u003dself.arp_arp)"},{"line_number":56,"context_line":"        self.ethernet \u003d sys.modules[\u0027ryu.lib.packet.ethernet\u0027]"},{"line_number":57,"context_line":"        self.ethernet_ethernet \u003d mock.Mock()"},{"line_number":58,"context_line":"        self.ethernet.ethernet \u003d mock.Mock(return_value\u003dself.ethernet_ethernet)"},{"line_number":59,"context_line":"        self.vlan \u003d sys.modules[\u0027ryu.lib.packet.vlan\u0027]"},{"line_number":60,"context_line":"        self.vlan_vlan \u003d mock.Mock()"},{"line_number":61,"context_line":"        self.vlan.vlan \u003d mock.Mock(return_value\u003dself.vlan_vlan)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_7026586a","line":58,"in_reply_to":"5adbc538_116fce93","updated":"2014-06-02 23:34:36.000000000","message":"Done","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.Packet \u003d sys.modules[\u0027ryu.lib.packet.packet.Packet\u0027]"},{"line_number":63,"context_line":"        self.Packet.return_value \u003d self.packet_mod"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self.ryuapp \u003d mock.Mock()"},{"line_number":66,"context_line":"        self.inport \u003d \u00271\u0027"},{"line_number":67,"context_line":"        self.ev \u003d mock.Mock()"},{"line_number":68,"context_line":"        self.datapath \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_5169568a","line":65,"updated":"2014-05-26 08:25:36.000000000","message":"same comment as above","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.Packet \u003d sys.modules[\u0027ryu.lib.packet.packet.Packet\u0027]"},{"line_number":63,"context_line":"        self.Packet.return_value \u003d self.packet_mod"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self.ryuapp \u003d mock.Mock()"},{"line_number":66,"context_line":"        self.inport \u003d \u00271\u0027"},{"line_number":67,"context_line":"        self.ev \u003d mock.Mock()"},{"line_number":68,"context_line":"        self.datapath \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_902be42f","line":65,"in_reply_to":"5adbc538_5169568a","updated":"2014-06-02 23:34:36.000000000","message":"Done","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.ofparser \u003d mock.Mock()"},{"line_number":75,"context_line":"        self.datapath.ofproto_parser \u003d self.ofparser"},{"line_number":76,"context_line":"        self.OFPActionOutput \u003d mock.Mock()"},{"line_number":77,"context_line":"        self.OFPActionOutput.return_value \u003d mock.Mock()"},{"line_number":78,"context_line":"        self.ofparser.OFPActionOutput \u003d self.OFPActionOutput"},{"line_number":79,"context_line":"        self.msg \u003d mock.Mock()"},{"line_number":80,"context_line":"        self.msg.datapath \u003d self.datapath"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_b10ffae0","line":77,"updated":"2014-05-26 08:25:36.000000000","message":"same comment as before","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.ofparser \u003d mock.Mock()"},{"line_number":75,"context_line":"        self.datapath.ofproto_parser \u003d self.ofparser"},{"line_number":76,"context_line":"        self.OFPActionOutput \u003d mock.Mock()"},{"line_number":77,"context_line":"        self.OFPActionOutput.return_value \u003d mock.Mock()"},{"line_number":78,"context_line":"        self.ofparser.OFPActionOutput \u003d self.OFPActionOutput"},{"line_number":79,"context_line":"        self.msg \u003d mock.Mock()"},{"line_number":80,"context_line":"        self.msg.datapath \u003d self.datapath"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_1017d4ee","line":77,"in_reply_to":"5adbc538_b10ffae0","updated":"2014-06-02 23:34:36.000000000","message":"Done","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.ev.msg \u003d self.msg"},{"line_number":85,"context_line":"        self.msg.match \u003d {\u0027in_port\u0027: self.inport}"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def tearDown(self):"},{"line_number":88,"context_line":"        super(OFAAgentTestCase, self).tearDown()"},{"line_number":89,"context_line":"        self.fake_get_protocol.reset_mock()"},{"line_number":90,"context_line":"        self.fake_add_protocol.reset_mock()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_f1f8a2c6","line":87,"updated":"2014-05-26 08:25:36.000000000","message":"This should not be needed since stopall() is called by the base class.","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.ev.msg \u003d self.msg"},{"line_number":85,"context_line":"        self.msg.match \u003d {\u0027in_port\u0027: self.inport}"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def tearDown(self):"},{"line_number":88,"context_line":"        super(OFAAgentTestCase, self).tearDown()"},{"line_number":89,"context_line":"        self.fake_get_protocol.reset_mock()"},{"line_number":90,"context_line":"        self.fake_add_protocol.reset_mock()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_34229da4","line":87,"in_reply_to":"5adbc538_f1f8a2c6","updated":"2014-06-02 23:34:36.000000000","message":"Yes, I have forgotten stopall in base class so reset_mock is unnecessary.\nBut it seems that stopall() doesn\u0027t work for patch.dict and self.fake_oflib_of is patch.dict.\nI submitted the following report about this.\nhttp://bugs.python.org/issue21600","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            if self._fake_get_protocol_ethernet:"},{"line_number":225,"context_line":"                return self.proto_ethernet_mod"},{"line_number":226,"context_line":"            else:"},{"line_number":227,"context_line":"                return None"},{"line_number":228,"context_line":"        if net_type \u003d\u003d self.vlan.vlan:"},{"line_number":229,"context_line":"            if self._fake_get_protocol_vlan:"},{"line_number":230,"context_line":"                return self.proto_vlan_mod"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_311a0a18","line":227,"updated":"2014-05-26 08:25:36.000000000","message":"It is not necessary to explicitly return None.  \n\nreturn","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            if self._fake_get_protocol_ethernet:"},{"line_number":225,"context_line":"                return self.proto_ethernet_mod"},{"line_number":226,"context_line":"            else:"},{"line_number":227,"context_line":"                return None"},{"line_number":228,"context_line":"        if net_type \u003d\u003d self.vlan.vlan:"},{"line_number":229,"context_line":"            if self._fake_get_protocol_vlan:"},{"line_number":230,"context_line":"                return self.proto_vlan_mod"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_b040e036","line":227,"in_reply_to":"5adbc538_311a0a18","updated":"2014-06-02 23:34:36.000000000","message":"Done.\nCertainly return doesn\u0027t need None but \nI think that return is vague whether it wants to return None or misses to specify a value.","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            if self._fake_get_protocol_vlan:"},{"line_number":230,"context_line":"                return self.proto_vlan_mod"},{"line_number":231,"context_line":"            else:"},{"line_number":232,"context_line":"                return None"},{"line_number":233,"context_line":"        if net_type \u003d\u003d self.arp.arp:"},{"line_number":234,"context_line":"            if self._fake_get_protocol_arp:"},{"line_number":235,"context_line":"                return self.proto_arp_mod"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_511796ed","line":232,"updated":"2014-05-26 08:25:36.000000000","message":"same comment as above","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            if self._fake_get_protocol_vlan:"},{"line_number":230,"context_line":"                return self.proto_vlan_mod"},{"line_number":231,"context_line":"            else:"},{"line_number":232,"context_line":"                return None"},{"line_number":233,"context_line":"        if net_type \u003d\u003d self.arp.arp:"},{"line_number":234,"context_line":"            if self._fake_get_protocol_arp:"},{"line_number":235,"context_line":"                return self.proto_arp_mod"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_d03d6cbd","line":232,"in_reply_to":"5adbc538_511796ed","updated":"2014-06-02 23:34:36.000000000","message":"Done","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            if self._fake_get_protocol_arp:"},{"line_number":235,"context_line":"                return self.proto_arp_mod"},{"line_number":236,"context_line":"            else:"},{"line_number":237,"context_line":"                return None"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def test_packet_in_handler(self):"},{"line_number":240,"context_line":"        self.ofalib._arp_tbl \u003d {self.network1: {self.net1_ip1: self.net1_mac1}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_71d3b238","line":237,"updated":"2014-05-26 08:25:36.000000000","message":"same comment as above","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            if self._fake_get_protocol_arp:"},{"line_number":235,"context_line":"                return self.proto_arp_mod"},{"line_number":236,"context_line":"            else:"},{"line_number":237,"context_line":"                return None"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def test_packet_in_handler(self):"},{"line_number":240,"context_line":"        self.ofalib._arp_tbl \u003d {self.network1: {self.net1_ip1: self.net1_mac1}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_f04a6854","line":237,"in_reply_to":"5adbc538_71d3b238","updated":"2014-06-02 23:34:36.000000000","message":"Done","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                              \u0027_send_unknown_packet\u0027),"},{"line_number":267,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":268,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":269,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":270,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":271,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_d1e2c602","line":269,"updated":"2014-05-26 08:25:36.000000000","message":"self.assertFalse(add_flow_fn.called)","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                              \u0027_send_unknown_packet\u0027),"},{"line_number":267,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":268,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":269,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":270,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":271,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_502b1c82","line":269,"in_reply_to":"5adbc538_d1e2c602","updated":"2014-06-02 23:34:36.000000000","message":"Done","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":268,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":269,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":270,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":271,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def test_packet_in_handler_non_vlan(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_11e42e0c","line":270,"updated":"2014-05-26 08:25:36.000000000","message":"self.assertFalse(send_unknown_pk_fn.called)","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":268,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":269,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":270,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":271,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def test_packet_in_handler_non_vlan(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_7020189c","line":270,"in_reply_to":"5adbc538_11e42e0c","updated":"2014-06-02 23:34:36.000000000","message":"Done","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":269,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":270,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":271,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def test_packet_in_handler_non_vlan(self):"},{"line_number":274,"context_line":"        self.ofalib._arp_tbl \u003d {self.network1: {self.net1_ip1: self.net1_mac1}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_f1cd0288","line":271,"updated":"2014-05-26 08:25:36.000000000","message":"self.assertFalse(res_arp_fn.called)","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":268,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":269,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":270,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":271,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def test_packet_in_handler_non_vlan(self):"},{"line_number":274,"context_line":"        self.ofalib._arp_tbl \u003d {self.network1: {self.net1_ip1: self.net1_mac1}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_9025a4ad","line":271,"in_reply_to":"5adbc538_f1cd0288","updated":"2014-06-02 23:34:36.000000000","message":"Done","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                              \u0027_send_unknown_packet\u0027),"},{"line_number":283,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":284,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":285,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":286,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":287,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_91a67ec0","line":285,"updated":"2014-05-26 08:25:36.000000000","message":"same comment about self.assertFalse() and .called","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                              \u0027_send_unknown_packet\u0027),"},{"line_number":283,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":284,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":285,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":286,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":287,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_302690bb","line":285,"in_reply_to":"5adbc538_91a67ec0","updated":"2014-06-02 23:34:36.000000000","message":"Done","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":284,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":285,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":286,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":287,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_packet_in_handler_non_arp(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_b1ab7a88","line":286,"updated":"2014-05-26 08:25:36.000000000","message":"same","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":284,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":285,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":286,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":287,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_packet_in_handler_non_arp(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_101a746e","line":286,"in_reply_to":"5adbc538_b1ab7a88","updated":"2014-06-02 23:34:36.000000000","message":"Done","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":285,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":286,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":287,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_packet_in_handler_non_arp(self):"},{"line_number":290,"context_line":"        self.ofalib._arp_tbl \u003d {self.network1: {self.net1_ip1: self.net1_mac1}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_d1b006f7","line":287,"updated":"2014-05-26 08:25:36.000000000","message":"same","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":285,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":286,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":287,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_packet_in_handler_non_arp(self):"},{"line_number":290,"context_line":"        self.ofalib._arp_tbl \u003d {self.network1: {self.net1_ip1: self.net1_mac1}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_f01c286d","line":287,"in_reply_to":"5adbc538_d1b006f7","updated":"2014-06-02 23:34:36.000000000","message":"Done","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"873afcf45782e0a7a52c813ffb4aa39f2de41a83","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":301,"context_line":"        self.assertEqual(add_flow_fn.call_count, 1)"},{"line_number":302,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 1)"},{"line_number":303,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def test_packet_in_handler_unknown_network(self):"},{"line_number":306,"context_line":"        self.ofalib._arp_tbl \u003d {self.network1: {self.net1_ip1: self.net1_mac1}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_f1942246","line":303,"updated":"2014-05-26 08:25:36.000000000","message":"same","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3dfdf2dd41a1a3e6ac97f66d97270cc6a54506b","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            self.ofalib.packet_in_handler(self.ev)"},{"line_number":301,"context_line":"        self.assertEqual(add_flow_fn.call_count, 1)"},{"line_number":302,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 1)"},{"line_number":303,"context_line":"        self.assertEqual(res_arp_fn.call_count, 0)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def test_packet_in_handler_unknown_network(self):"},{"line_number":306,"context_line":"        self.ofalib._arp_tbl \u003d {self.network1: {self.net1_ip1: self.net1_mac1}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_d00f2c2d","line":303,"in_reply_to":"5adbc538_f1942246","updated":"2014-06-02 23:34:36.000000000","message":"Done","commit_id":"57752c36ab66fb8629699e46da8f706c6bc56009"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"4219c915e4c0ed656f73d35a488ecf27b0d36148","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        super(OFAAgentTestCase, self).setUp()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        self.network1 \u003d 10"},{"line_number":33,"context_line":"        self.net1_ip1 \u003d \u002710.1.2.20\u0027"},{"line_number":34,"context_line":"        self.net1_mac1 \u003d \u002711:11:11:44:55:66\u0027"},{"line_number":35,"context_line":"        self.net1_ip2 \u003d \u002710.1.2.21\u0027"},{"line_number":36,"context_line":"        self.net1_mac2 \u003d \u002711:11:11:44:55:67\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_b8063ccc","line":33,"updated":"2014-07-21 20:48:16.000000000","message":"same comment as on the dependent review.  a data structure should exist here vs using lots of variables on the instance and using an informal structure based on the underscores and numeric suffixes.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        super(OFAAgentTestCase, self).setUp()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        self.network1 \u003d 10"},{"line_number":33,"context_line":"        self.net1_ip1 \u003d \u002710.1.2.20\u0027"},{"line_number":34,"context_line":"        self.net1_mac1 \u003d \u002711:11:11:44:55:66\u0027"},{"line_number":35,"context_line":"        self.net1_ip2 \u003d \u002710.1.2.21\u0027"},{"line_number":36,"context_line":"        self.net1_mac2 \u003d \u002711:11:11:44:55:67\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_f55dc47d","line":33,"in_reply_to":"baada198_b8063ccc","updated":"2014-07-23 12:22:41.000000000","message":"Done","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"4219c915e4c0ed656f73d35a488ecf27b0d36148","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self.arp \u003d importutils.import_module(\u0027ryu.lib.packet.arp\u0027)"},{"line_number":51,"context_line":"        self.arp_arp \u003d \u0027arp_arp\u0027"},{"line_number":52,"context_line":"        self.arp.arp \u003d mock.Mock(return_value\u003dself.arp_arp)"},{"line_number":53,"context_line":"        self.ethernet \u003d importutils.import_module(\u0027ryu.lib.packet.ethernet\u0027)"},{"line_number":54,"context_line":"        self.ethernet_ethernet \u003d \u0027ethernet_ethernet\u0027"},{"line_number":55,"context_line":"        self.ethernet.ethernet \u003d mock.Mock(return_value\u003dself.ethernet_ethernet)"},{"line_number":56,"context_line":"        self.vlan \u003d importutils.import_module(\u0027ryu.lib.packet.vlan\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_5891a050","line":53,"updated":"2014-07-21 20:48:16.000000000","message":"Why is this necessary?  Within this method you can:\n\nfrom ryu.lib.packet import ethernet\n\nself.ethernet \u003d mock.patch.object(ethernet, \u0027ethernet\u0027)\n\nself.ethernet.return_value \u003d \u0027ethernet_ethernet\u0027\n\n\nSame comment applies to the other dynamic importing.  Seems like a method local import will serve your needs.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        self.arp \u003d importutils.import_module(\u0027ryu.lib.packet.arp\u0027)"},{"line_number":51,"context_line":"        self.arp_arp \u003d \u0027arp_arp\u0027"},{"line_number":52,"context_line":"        self.arp.arp \u003d mock.Mock(return_value\u003dself.arp_arp)"},{"line_number":53,"context_line":"        self.ethernet \u003d importutils.import_module(\u0027ryu.lib.packet.ethernet\u0027)"},{"line_number":54,"context_line":"        self.ethernet_ethernet \u003d \u0027ethernet_ethernet\u0027"},{"line_number":55,"context_line":"        self.ethernet.ethernet \u003d mock.Mock(return_value\u003dself.ethernet_ethernet)"},{"line_number":56,"context_line":"        self.vlan \u003d importutils.import_module(\u0027ryu.lib.packet.vlan\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_7170cf08","line":53,"in_reply_to":"baada198_5891a050","updated":"2014-07-23 12:22:41.000000000","message":"ryu is third party module. we can\u0027t assume that can use it.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"47167d52caddb692b802aad6924ad505ca805f1e","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            self.assertTrue("},{"line_number":133,"context_line":"                self.arplib._respond_arp(self.datapath, port, arptbl,"},{"line_number":134,"context_line":"                                         pkt_ethernet, pkt_vlan, pkt_arp))"},{"line_number":135,"context_line":"        self.assertEqual(self.fake_add_protocol.call_args_list,"},{"line_number":136,"context_line":"                         [mock.call(self.ethernet_ethernet),"},{"line_number":137,"context_line":"                          mock.call(self.vlan_vlan),"},{"line_number":138,"context_line":"                          mock.call(self.arp_arp)])"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_d57c9273","line":135,"updated":"2014-07-21 23:17:01.000000000","message":"Nit; The arguments of assertEqual should be \"expected, actual\".","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            self.assertTrue("},{"line_number":133,"context_line":"                self.arplib._respond_arp(self.datapath, port, arptbl,"},{"line_number":134,"context_line":"                                         pkt_ethernet, pkt_vlan, pkt_arp))"},{"line_number":135,"context_line":"        self.assertEqual(self.fake_add_protocol.call_args_list,"},{"line_number":136,"context_line":"                         [mock.call(self.ethernet_ethernet),"},{"line_number":137,"context_line":"                          mock.call(self.vlan_vlan),"},{"line_number":138,"context_line":"                          mock.call(self.arp_arp)])"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_efa44ca4","line":135,"in_reply_to":"baada198_d57c9273","updated":"2014-07-23 12:22:41.000000000","message":"Done","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"47167d52caddb692b802aad6924ad505ca805f1e","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                              \u0027_send_unknown_packet\u0027),"},{"line_number":236,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":237,"context_line":"            self.arplib.packet_in_handler(self.ev)"},{"line_number":238,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":239,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":240,"context_line":"        res_arp_fn.assert_called_once_with("},{"line_number":241,"context_line":"            self.datapath, self.inport,"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_f5dd1671","line":238,"updated":"2014-07-21 23:17:01.000000000","message":"assertFalse\n\nIn other places, assertFalse is used for this case.","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                              \u0027_send_unknown_packet\u0027),"},{"line_number":236,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":237,"context_line":"            self.arplib.packet_in_handler(self.ev)"},{"line_number":238,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":239,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":240,"context_line":"        res_arp_fn.assert_called_once_with("},{"line_number":241,"context_line":"            self.datapath, self.inport,"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_2f080490","line":238,"in_reply_to":"baada198_f5dd1671","updated":"2014-07-23 12:22:41.000000000","message":"Done","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"47167d52caddb692b802aad6924ad505ca805f1e","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":237,"context_line":"            self.arplib.packet_in_handler(self.ev)"},{"line_number":238,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":239,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":240,"context_line":"        res_arp_fn.assert_called_once_with("},{"line_number":241,"context_line":"            self.datapath, self.inport,"},{"line_number":242,"context_line":"            self.arplib._arp_tbl[self.network1],"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_35e4ee3a","line":239,"updated":"2014-07-21 23:17:01.000000000","message":"ditto","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"140b91737293e5671d33bb019b006934d6eef733","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":237,"context_line":"            self.arplib.packet_in_handler(self.ev)"},{"line_number":238,"context_line":"        self.assertEqual(add_flow_fn.call_count, 0)"},{"line_number":239,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 0)"},{"line_number":240,"context_line":"        res_arp_fn.assert_called_once_with("},{"line_number":241,"context_line":"            self.datapath, self.inport,"},{"line_number":242,"context_line":"            self.arplib._arp_tbl[self.network1],"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_6ffe7c6b","line":239,"in_reply_to":"baada198_35e4ee3a","updated":"2014-07-23 12:22:41.000000000","message":"Done","commit_id":"f0027b3107bd956acb9f6740daf810798b5ddb84"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7b17e7981a74d0134243f7bfd5ef5e498dc8e4da","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.ethernet.ethernet \u003d mock.Mock(return_value\u003dself.ethernet_ethernet)"},{"line_number":53,"context_line":"        self.vlan \u003d importutils.import_module(\u0027ryu.lib.packet.vlan\u0027)"},{"line_number":54,"context_line":"        self.vlan_vlan \u003d mock.Mock()"},{"line_number":55,"context_line":"        self.vlan.vlan \u003d mock.Mock(return_value\u003dself.vlan_vlan)"},{"line_number":56,"context_line":"        self.Packet \u003d importutils.import_module(\u0027ryu.lib.packet.packet.Packet\u0027)"},{"line_number":57,"context_line":"        self.Packet.return_value \u003d self.packet_mod"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_e5a1faf7","line":55,"updated":"2014-07-27 23:07:37.000000000","message":"why the manual patch?","commit_id":"1a1da6120a80b3eafa5cfb572b4055ffff2f17d4"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"5c94aa48d4f428c1b48d818b2b1ec70e9dda08eb","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.ethernet.ethernet \u003d mock.Mock(return_value\u003dself.ethernet_ethernet)"},{"line_number":53,"context_line":"        self.vlan \u003d importutils.import_module(\u0027ryu.lib.packet.vlan\u0027)"},{"line_number":54,"context_line":"        self.vlan_vlan \u003d mock.Mock()"},{"line_number":55,"context_line":"        self.vlan.vlan \u003d mock.Mock(return_value\u003dself.vlan_vlan)"},{"line_number":56,"context_line":"        self.Packet \u003d importutils.import_module(\u0027ryu.lib.packet.packet.Packet\u0027)"},{"line_number":57,"context_line":"        self.Packet.return_value \u003d self.packet_mod"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_eda52d49","line":55,"in_reply_to":"baada198_e5a1faf7","updated":"2014-07-29 07:56:10.000000000","message":"Done","commit_id":"1a1da6120a80b3eafa5cfb572b4055ffff2f17d4"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7b17e7981a74d0134243f7bfd5ef5e498dc8e4da","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.vlan_vlan \u003d mock.Mock()"},{"line_number":55,"context_line":"        self.vlan.vlan \u003d mock.Mock(return_value\u003dself.vlan_vlan)"},{"line_number":56,"context_line":"        self.Packet \u003d importutils.import_module(\u0027ryu.lib.packet.packet.Packet\u0027)"},{"line_number":57,"context_line":"        self.Packet.return_value \u003d self.packet_mod"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.ryuapp \u003d \u0027ryuapp\u0027"},{"line_number":60,"context_line":"        self.inport \u003d \u00271\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_05a50e02","line":57,"updated":"2014-07-27 23:07:37.000000000","message":"mock.patch should be used here vs manually patching","commit_id":"1a1da6120a80b3eafa5cfb572b4055ffff2f17d4"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"5c94aa48d4f428c1b48d818b2b1ec70e9dda08eb","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        self.vlan_vlan \u003d mock.Mock()"},{"line_number":55,"context_line":"        self.vlan.vlan \u003d mock.Mock(return_value\u003dself.vlan_vlan)"},{"line_number":56,"context_line":"        self.Packet \u003d importutils.import_module(\u0027ryu.lib.packet.packet.Packet\u0027)"},{"line_number":57,"context_line":"        self.Packet.return_value \u003d self.packet_mod"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.ryuapp \u003d \u0027ryuapp\u0027"},{"line_number":60,"context_line":"        self.inport \u003d \u00271\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_8d6e71ff","line":57,"in_reply_to":"baada198_05a50e02","updated":"2014-07-29 07:56:10.000000000","message":"Done","commit_id":"1a1da6120a80b3eafa5cfb572b4055ffff2f17d4"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"36cd73ed642b99cae0cb0287acbce84bef2bee2d","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        self.assertFalse(send_unknown_pk_fn.call_count)"},{"line_number":293,"context_line":"        self.assertFalse(res_arp_fn.call_count)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def test_packet_in_handler_non_arp(self):"},{"line_number":296,"context_line":"        self.arplib._arp_tbl \u003d {"},{"line_number":297,"context_line":"            self.nets[0].net: {self.nets[0].ip: self.nets[0].mac}}"},{"line_number":298,"context_line":"        self._fake_get_protocol_arp \u003d False"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_c74eecc1","line":295,"updated":"2014-08-01 15:36:29.000000000","message":"why is this test identical with test_packet_in_handler_non_vlan?","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6bbbf4e4db92f071d73d4f9e821bb2481cdf7fd8","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        self.assertFalse(send_unknown_pk_fn.call_count)"},{"line_number":293,"context_line":"        self.assertFalse(res_arp_fn.call_count)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def test_packet_in_handler_non_arp(self):"},{"line_number":296,"context_line":"        self.arplib._arp_tbl \u003d {"},{"line_number":297,"context_line":"            self.nets[0].net: {self.nets[0].ip: self.nets[0].mac}}"},{"line_number":298,"context_line":"        self._fake_get_protocol_arp \u003d False"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_609fb165","line":295,"in_reply_to":"baada198_c74eecc1","updated":"2014-08-02 15:26:34.000000000","message":"These tests are different in L281 and L298.","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"36cd73ed642b99cae0cb0287acbce84bef2bee2d","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":323,"context_line":"            self.arplib.packet_in_handler(self.ev)"},{"line_number":324,"context_line":"        self.assertEqual(add_flow_fn.call_count, 1)"},{"line_number":325,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 1)"},{"line_number":326,"context_line":"        res_arp_fn.assert_called_once_with("},{"line_number":327,"context_line":"            self.datapath, self.inport,"},{"line_number":328,"context_line":"            self.arplib._arp_tbl[self.nets[0].net],"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_07a1c439","line":325,"updated":"2014-08-01 15:36:29.000000000","message":"you could try this instead:\nadd_flow_fn.assert_called_once_with()\nsend_unknown_pk_fn.assert_called_once_with()","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6bbbf4e4db92f071d73d4f9e821bb2481cdf7fd8","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):"},{"line_number":323,"context_line":"            self.arplib.packet_in_handler(self.ev)"},{"line_number":324,"context_line":"        self.assertEqual(add_flow_fn.call_count, 1)"},{"line_number":325,"context_line":"        self.assertEqual(send_unknown_pk_fn.call_count, 1)"},{"line_number":326,"context_line":"        res_arp_fn.assert_called_once_with("},{"line_number":327,"context_line":"            self.datapath, self.inport,"},{"line_number":328,"context_line":"            self.arplib._arp_tbl[self.nets[0].net],"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_7377899f","line":325,"in_reply_to":"baada198_07a1c439","updated":"2014-08-02 15:26:34.000000000","message":"Done","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"627b89c88d6ae003c292bb457c83877c6c63bb8e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.ethernet \u003d importutils.import_module(\u0027ryu.lib.packet.ethernet\u0027)"},{"line_number":49,"context_line":"        self.vlan \u003d importutils.import_module(\u0027ryu.lib.packet.vlan\u0027)"},{"line_number":50,"context_line":"        mock.patch(\u0027ryu.lib.packet.packet.Packet\u0027,"},{"line_number":51,"context_line":"                   return_value\u003dself.packet_mod).start()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.ryuapp \u003d \u0027ryuapp\u0027"},{"line_number":54,"context_line":"        self.inport \u003d \u00271\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_027b447a","line":51,"updated":"2014-08-04 07:56:21.000000000","message":"this mock.patch is started, but never stopped.\nyou could assign it so a variable and then just \nself.addCleanup(....)","commit_id":"0a046ff7f386c45d71ef338afa18b19ec9225b5c"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3ecf3fffd0dd501cf8af355039cdd8216254f76","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.ethernet \u003d importutils.import_module(\u0027ryu.lib.packet.ethernet\u0027)"},{"line_number":49,"context_line":"        self.vlan \u003d importutils.import_module(\u0027ryu.lib.packet.vlan\u0027)"},{"line_number":50,"context_line":"        mock.patch(\u0027ryu.lib.packet.packet.Packet\u0027,"},{"line_number":51,"context_line":"                   return_value\u003dself.packet_mod).start()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        self.ryuapp \u003d \u0027ryuapp\u0027"},{"line_number":54,"context_line":"        self.inport \u003d \u00271\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_f607ee14","line":51,"in_reply_to":"baada198_027b447a","updated":"2014-08-04 11:29:16.000000000","message":"neutron.tests.base.BaseTestCase.setUp contains self.addCleanup(mock.patch.stopall) line.","commit_id":"0a046ff7f386c45d71ef338afa18b19ec9225b5c"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"627b89c88d6ae003c292bb457c83877c6c63bb8e","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        self.assertEqual([mock.call(ethernet_ethernet),"},{"line_number":141,"context_line":"                          mock.call(vlan_vlan),"},{"line_number":142,"context_line":"                          mock.call(arp_arp)],"},{"line_number":143,"context_line":"                         self.fake_add_protocol.call_args_list)"},{"line_number":144,"context_line":"        send_arp_rep_fn.assert_called_once_with("},{"line_number":145,"context_line":"            self.datapath, port, self.packet_mod)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_4290dc95","line":143,"updated":"2014-08-04 07:56:21.000000000","message":"you could also do:\nself.fake_add_protocol.assert_has_calls([mock.call(ethernet_ethernet),\n\t\t\t                 mock.call(vlan_vlan),\n\t\t\t                 mock.call(arp_arp)]","commit_id":"0a046ff7f386c45d71ef338afa18b19ec9225b5c"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3ecf3fffd0dd501cf8af355039cdd8216254f76","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        self.assertEqual([mock.call(ethernet_ethernet),"},{"line_number":141,"context_line":"                          mock.call(vlan_vlan),"},{"line_number":142,"context_line":"                          mock.call(arp_arp)],"},{"line_number":143,"context_line":"                         self.fake_add_protocol.call_args_list)"},{"line_number":144,"context_line":"        send_arp_rep_fn.assert_called_once_with("},{"line_number":145,"context_line":"            self.datapath, port, self.packet_mod)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_1c7643d8","line":143,"in_reply_to":"baada198_4290dc95","updated":"2014-08-04 11:29:16.000000000","message":"Done","commit_id":"0a046ff7f386c45d71ef338afa18b19ec9225b5c"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"627b89c88d6ae003c292bb457c83877c6c63bb8e","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            self.arplib._respond_arp(self.datapath, port, arptbl,"},{"line_number":158,"context_line":"                                     pkt_ethernet, pkt_vlan, pkt_arp))"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def test__respond_arp_ip_not_found_in_arptable(self):"},{"line_number":161,"context_line":"        self.arplib._arp_tbl \u003d {"},{"line_number":162,"context_line":"            self.nets[0].net: {self.nets[0].ip: self.nets[0].mac}}"},{"line_number":163,"context_line":"        port \u003d 3"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_a2e8d816","line":160,"updated":"2014-08-04 07:56:21.000000000","message":"Since this test is so similar to test__respond_arp_non_arp_req, you could do something like this:\ndef test__respond_arp_non_arp_req(self):\n    pkt_arp \u003d mock.Mock()\n    pkt_arp.opcode \u003d self.arp.ARP_REPLY\n    self._test_respond_arp(pkt_arp)\n    \ndef test__respond_arp_ip_not_found_in_arptable(self):\n    pkt_arp \u003d mock.Mock()\n    pkt_arp.opcode \u003d self.arp.ARP_REQUEST\n    pkt_arp.dst_ip \u003d self.nets[1].ip\n    self._test_respond_arp(pkt_arp)\n\ndef _test_respond_arp(self, pkt_arp):\n    self.arplib._arp_tbl \u003d {\n    self.nets[0].net: {self.nets[0].ip: self.nets[0].mac}}\n    port \u003d 3\n    arptbl \u003d self.arplib._arp_tbl[self.nets[0].net]\n    pkt_ethernet \u003d mock.Mock()\n    pkt_vlan \u003d mock.Mock()\n    self.assertFalse(\n        self.arplib._respond_arp(self.datapath, port, arptbl,\n                                 pkt_ethernet, pkt_vlan, pkt_arp))","commit_id":"0a046ff7f386c45d71ef338afa18b19ec9225b5c"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3ecf3fffd0dd501cf8af355039cdd8216254f76","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            self.arplib._respond_arp(self.datapath, port, arptbl,"},{"line_number":158,"context_line":"                                     pkt_ethernet, pkt_vlan, pkt_arp))"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def test__respond_arp_ip_not_found_in_arptable(self):"},{"line_number":161,"context_line":"        self.arplib._arp_tbl \u003d {"},{"line_number":162,"context_line":"            self.nets[0].net: {self.nets[0].ip: self.nets[0].mac}}"},{"line_number":163,"context_line":"        port \u003d 3"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_3c7147de","line":160,"in_reply_to":"baada198_a2e8d816","updated":"2014-08-04 11:29:16.000000000","message":"Done","commit_id":"0a046ff7f386c45d71ef338afa18b19ec9225b5c"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"627b89c88d6ae003c292bb457c83877c6c63bb8e","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        self.assertFalse(send_unknown_pk_fn.call_count)"},{"line_number":293,"context_line":"        self.assertFalse(res_arp_fn.call_count)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def test_packet_in_handler_non_arp(self):"},{"line_number":296,"context_line":"        self.arplib._arp_tbl \u003d {"},{"line_number":297,"context_line":"            self.nets[0].net: {self.nets[0].ip: self.nets[0].mac}}"},{"line_number":298,"context_line":"        self._fake_get_protocol_arp \u003d False"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_62b96015","line":295,"updated":"2014-08-04 07:56:21.000000000","message":"Since this test and test_packet_in_handler_non_vlan differ in one line, you could do something like this:\n\ndef test_packet_in_handler_non_vlan(self):\n    self._fake_get_protocol_vlan \u003d False\n    self._test_packet_in_handler()\n\ndef test_packet_in_handler_non_arp(self):\n\tself._fake_get_protocol_arp \u003d False\n    self._test_packet_in_handler()\n\ndef _test_packet_in_handler(self): \n    self.arplib._arp_tbl \u003d {\n        self.nets[0].net: {self.nets[0].ip: self.nets[0].mac}}\n\n    with contextlib.nested(\n            mock.patch.object(self.arplib, \u0027_respond_arp\u0027,\n            return_value\u003dTrue),\n            mock.patch.object(self.arplib,\n            \u0027_add_flow_to_avoid_unknown_packet\u0027),\n            mock.patch.object(self.arplib,\n            \u0027_send_unknown_packet\u0027),\n            ) as (res_arp_fn, add_flow_fn, send_unknown_pk_fn):\n        self.arplib.packet_in_handler(self.ev)\n        self.assertFalse(add_flow_fn.call_count)\n        self.assertFalse(send_unknown_pk_fn.call_count)\n        self.assertFalse(res_arp_fn.call_count)","commit_id":"0a046ff7f386c45d71ef338afa18b19ec9225b5c"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"a3ecf3fffd0dd501cf8af355039cdd8216254f76","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        self.assertFalse(send_unknown_pk_fn.call_count)"},{"line_number":293,"context_line":"        self.assertFalse(res_arp_fn.call_count)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def test_packet_in_handler_non_arp(self):"},{"line_number":296,"context_line":"        self.arplib._arp_tbl \u003d {"},{"line_number":297,"context_line":"            self.nets[0].net: {self.nets[0].ip: self.nets[0].mac}}"},{"line_number":298,"context_line":"        self._fake_get_protocol_arp \u003d False"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_d1e2f4d2","line":295,"in_reply_to":"baada198_62b96015","updated":"2014-08-04 11:29:16.000000000","message":"Done","commit_id":"0a046ff7f386c45d71ef338afa18b19ec9225b5c"}],"neutron/tests/unit/ofagent/test_ofa_neutron_agent.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"36cd73ed642b99cae0cb0287acbce84bef2bee2d","unresolved":false,"context_lines":[{"line_number":763,"context_line":"                                self.lvms[1].ip: [[\u0027mac2\u0027, \u0027ip2\u0027]]}}}"},{"line_number":764,"context_line":"        with contextlib.nested("},{"line_number":765,"context_line":"            mock.patch.object(self.agent, \u0027ryu_send_msg\u0027),"},{"line_number":766,"context_line":"            mock.patch.object(self.agent, \u0027setup_tunnel_port\u0027)"},{"line_number":767,"context_line":"        ) as (ryu_send_msg_fn, add_tun_fn):"},{"line_number":768,"context_line":"            self.agent.fdb_add(None, fdb_entry)"},{"line_number":769,"context_line":"            calls \u003d ["}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_67ed2024","line":766,"updated":"2014-08-01 15:36:29.000000000","message":"you could try mock.patch.multiple instead:\nwith mock.patch.multiple(self.agent, ryu_send_msg\u003dmock.DEFAULT,\n                                     setup_tunnel_port\u003dmock.DEFAULT):\n\nAlso, this way, you won\u0027t need contextlib.nested.","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6bbbf4e4db92f071d73d4f9e821bb2481cdf7fd8","unresolved":false,"context_lines":[{"line_number":763,"context_line":"                                self.lvms[1].ip: [[\u0027mac2\u0027, \u0027ip2\u0027]]}}}"},{"line_number":764,"context_line":"        with contextlib.nested("},{"line_number":765,"context_line":"            mock.patch.object(self.agent, \u0027ryu_send_msg\u0027),"},{"line_number":766,"context_line":"            mock.patch.object(self.agent, \u0027setup_tunnel_port\u0027)"},{"line_number":767,"context_line":"        ) as (ryu_send_msg_fn, add_tun_fn):"},{"line_number":768,"context_line":"            self.agent.fdb_add(None, fdb_entry)"},{"line_number":769,"context_line":"            calls \u003d ["}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_d33775e2","line":766,"in_reply_to":"baada198_67ed2024","updated":"2014-08-02 15:26:34.000000000","message":"Done","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"36cd73ed642b99cae0cb0287acbce84bef2bee2d","unresolved":false,"context_lines":[{"line_number":764,"context_line":"        with contextlib.nested("},{"line_number":765,"context_line":"            mock.patch.object(self.agent, \u0027ryu_send_msg\u0027),"},{"line_number":766,"context_line":"            mock.patch.object(self.agent, \u0027setup_tunnel_port\u0027)"},{"line_number":767,"context_line":"        ) as (ryu_send_msg_fn, add_tun_fn):"},{"line_number":768,"context_line":"            self.agent.fdb_add(None, fdb_entry)"},{"line_number":769,"context_line":"            calls \u003d ["},{"line_number":770,"context_line":"                mock.call(self.agent.local_vlan_map[self.lvms[0].net].vlan,"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_a7c1f882","line":767,"updated":"2014-08-01 15:36:29.000000000","message":"ryu_send_msg_fn and add_tun_fn are not used. You could remove them.","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6bbbf4e4db92f071d73d4f9e821bb2481cdf7fd8","unresolved":false,"context_lines":[{"line_number":764,"context_line":"        with contextlib.nested("},{"line_number":765,"context_line":"            mock.patch.object(self.agent, \u0027ryu_send_msg\u0027),"},{"line_number":766,"context_line":"            mock.patch.object(self.agent, \u0027setup_tunnel_port\u0027)"},{"line_number":767,"context_line":"        ) as (ryu_send_msg_fn, add_tun_fn):"},{"line_number":768,"context_line":"            self.agent.fdb_add(None, fdb_entry)"},{"line_number":769,"context_line":"            calls \u003d ["},{"line_number":770,"context_line":"                mock.call(self.agent.local_vlan_map[self.lvms[0].net].vlan,"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_f33479e0","line":767,"in_reply_to":"baada198_a7c1f882","updated":"2014-08-02 15:26:34.000000000","message":"Done","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"36cd73ed642b99cae0cb0287acbce84bef2bee2d","unresolved":false,"context_lines":[{"line_number":784,"context_line":"                                self.lvms[1].ip: [[\u0027mac2\u0027, \u0027ip2\u0027]]}}}"},{"line_number":785,"context_line":"        with contextlib.nested("},{"line_number":786,"context_line":"            mock.patch.object(self.agent, \u0027ryu_send_msg\u0027),"},{"line_number":787,"context_line":"            mock.patch.object(self.agent, \u0027setup_tunnel_port\u0027)"},{"line_number":788,"context_line":"        ) as (ryu_send_msg_fn, add_tun_fn):"},{"line_number":789,"context_line":"            self.agent.fdb_remove(None, fdb_entry)"},{"line_number":790,"context_line":"            calls \u003d ["}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_e7b77020","line":787,"updated":"2014-08-01 15:36:29.000000000","message":"Same as above.","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6bbbf4e4db92f071d73d4f9e821bb2481cdf7fd8","unresolved":false,"context_lines":[{"line_number":784,"context_line":"                                self.lvms[1].ip: [[\u0027mac2\u0027, \u0027ip2\u0027]]}}}"},{"line_number":785,"context_line":"        with contextlib.nested("},{"line_number":786,"context_line":"            mock.patch.object(self.agent, \u0027ryu_send_msg\u0027),"},{"line_number":787,"context_line":"            mock.patch.object(self.agent, \u0027setup_tunnel_port\u0027)"},{"line_number":788,"context_line":"        ) as (ryu_send_msg_fn, add_tun_fn):"},{"line_number":789,"context_line":"            self.agent.fdb_remove(None, fdb_entry)"},{"line_number":790,"context_line":"            calls \u003d ["}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_132e4d8d","line":787,"in_reply_to":"baada198_e7b77020","updated":"2014-08-02 15:26:34.000000000","message":"Done","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"36cd73ed642b99cae0cb0287acbce84bef2bee2d","unresolved":false,"context_lines":[{"line_number":785,"context_line":"        with contextlib.nested("},{"line_number":786,"context_line":"            mock.patch.object(self.agent, \u0027ryu_send_msg\u0027),"},{"line_number":787,"context_line":"            mock.patch.object(self.agent, \u0027setup_tunnel_port\u0027)"},{"line_number":788,"context_line":"        ) as (ryu_send_msg_fn, add_tun_fn):"},{"line_number":789,"context_line":"            self.agent.fdb_remove(None, fdb_entry)"},{"line_number":790,"context_line":"            calls \u003d ["},{"line_number":791,"context_line":"                mock.call(self.agent.local_vlan_map[self.lvms[0].net].vlan,"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_2735e8a7","line":788,"updated":"2014-08-01 15:36:29.000000000","message":"Same as above.","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6bbbf4e4db92f071d73d4f9e821bb2481cdf7fd8","unresolved":false,"context_lines":[{"line_number":785,"context_line":"        with contextlib.nested("},{"line_number":786,"context_line":"            mock.patch.object(self.agent, \u0027ryu_send_msg\u0027),"},{"line_number":787,"context_line":"            mock.patch.object(self.agent, \u0027setup_tunnel_port\u0027)"},{"line_number":788,"context_line":"        ) as (ryu_send_msg_fn, add_tun_fn):"},{"line_number":789,"context_line":"            self.agent.fdb_remove(None, fdb_entry)"},{"line_number":790,"context_line":"            calls \u003d ["},{"line_number":791,"context_line":"                mock.call(self.agent.local_vlan_map[self.lvms[0].net].vlan,"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_332b517d","line":788,"in_reply_to":"baada198_2735e8a7","updated":"2014-08-02 15:26:34.000000000","message":"Done","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"36cd73ed642b99cae0cb0287acbce84bef2bee2d","unresolved":false,"context_lines":[{"line_number":793,"context_line":"                mock.call(self.agent.local_vlan_map[self.lvms[0].net].vlan,"},{"line_number":794,"context_line":"                          \u0027ip2\u0027)"},{"line_number":795,"context_line":"            ]"},{"line_number":796,"context_line":"            self.assertEqual(self.ryuapp.del_arp_table_entry.call_args_list,"},{"line_number":797,"context_line":"                             calls)"},{"line_number":798,"context_line":""},{"line_number":799,"context_line":"    def test_recl_lv_port_to_preserve(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_359a7513","line":796,"updated":"2014-08-01 15:36:29.000000000","message":"nit: I think it would be simpler if you would instead assert like this:\nself.ryuapp.del_arp_table_entry.assert_has_calls(calls)","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6bbbf4e4db92f071d73d4f9e821bb2481cdf7fd8","unresolved":false,"context_lines":[{"line_number":793,"context_line":"                mock.call(self.agent.local_vlan_map[self.lvms[0].net].vlan,"},{"line_number":794,"context_line":"                          \u0027ip2\u0027)"},{"line_number":795,"context_line":"            ]"},{"line_number":796,"context_line":"            self.assertEqual(self.ryuapp.del_arp_table_entry.call_args_list,"},{"line_number":797,"context_line":"                             calls)"},{"line_number":798,"context_line":""},{"line_number":799,"context_line":"    def test_recl_lv_port_to_preserve(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_7350690a","line":796,"in_reply_to":"baada198_359a7513","updated":"2014-08-02 15:26:34.000000000","message":"Done","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"36cd73ed642b99cae0cb0287acbce84bef2bee2d","unresolved":false,"context_lines":[{"line_number":1130,"context_line":"            mock.patch.object(self.agent,"},{"line_number":1131,"context_line":"                              \u0027_tun_br_output_arp_packet_to_controller\u0027)"},{"line_number":1132,"context_line":"        ) as (int_add_patch_port, tun_add_patch_port,"},{"line_number":1133,"context_line":"              ovs_br_class, tun_output_ctrl):"},{"line_number":1134,"context_line":"            self.agent.setup_tunnel_br(cfg.CONF.OVS.tunnel_bridge)"},{"line_number":1135,"context_line":"            tun_output_ctrl.assert_called_once_with(self.agent.tun_br)"},{"line_number":1136,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_044c623e","line":1133,"updated":"2014-08-01 15:36:29.000000000","message":"nit: you could indent these mocks, so they are distinguishable from the code below","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"},{"author":{"_account_id":8344,"name":"fumihiko kakuma","email":"kakuma@valinux.co.jp","username":"kakuma"},"change_message_id":"6bbbf4e4db92f071d73d4f9e821bb2481cdf7fd8","unresolved":false,"context_lines":[{"line_number":1130,"context_line":"            mock.patch.object(self.agent,"},{"line_number":1131,"context_line":"                              \u0027_tun_br_output_arp_packet_to_controller\u0027)"},{"line_number":1132,"context_line":"        ) as (int_add_patch_port, tun_add_patch_port,"},{"line_number":1133,"context_line":"              ovs_br_class, tun_output_ctrl):"},{"line_number":1134,"context_line":"            self.agent.setup_tunnel_br(cfg.CONF.OVS.tunnel_bridge)"},{"line_number":1135,"context_line":"            tun_output_ctrl.assert_called_once_with(self.agent.tun_br)"},{"line_number":1136,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_93517d0f","line":1133,"in_reply_to":"baada198_044c623e","updated":"2014-08-02 15:26:34.000000000","message":"Hmm, I think we can distinguish this.","commit_id":"fd4a062bd58811b122f40e5e5187f0176825c72e"}]}
