)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"72d9dd742974985fdea6b78095984259d9b25d41","unresolved":false,"context_lines":[{"line_number":15,"context_line":"prevent it from appearing again."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Idac1d3c89c07e13c9a209663f4e557fcb7547821"},{"line_number":18,"context_line":"Closes-Bug: #1365751"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baa201ad_b6ca906c","line":18,"updated":"2014-09-29 04:19:32.000000000","message":"and #1300265 ?","commit_id":"6a3d6c3b4cd5997f23193d9c5d502c7fbdcead59"},{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"685308acae461f18b285047d253e81de2220fa1f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"prevent it from appearing again."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Idac1d3c89c07e13c9a209663f4e557fcb7547821"},{"line_number":18,"context_line":"Closes-Bug: #1365751"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baa201ad_8440f657","line":18,"in_reply_to":"baa201ad_b6ca906c","updated":"2014-09-29 08:19:30.000000000","message":"Done - thanks, after watching \"Bootstrapping Hour\" I\u0027ve grepped neutron sources to check if we also have this problem and after that I\u0027ve added our project to bug mentioned there - should have first searched our bug tracker.","commit_id":"6a3d6c3b4cd5997f23193d9c5d502c7fbdcead59"}],"neutron/hacking/checks.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"72d9dd742974985fdea6b78095984259d9b25d41","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def check_assert_called_once(logical_line, filename):"},{"line_number":83,"context_line":"    msg \u003d (\"N323: assert_called_once is a no-op. please use assert_called_\""},{"line_number":84,"context_line":"           \"once_with to test with explicit parameters or an assertEqual with\""},{"line_number":85,"context_line":"           \" call_count.\")"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    if \u0027neutron/tests/\u0027 in filename:"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_76e2e804","line":84,"updated":"2014-09-29 04:19:32.000000000","message":"it\u0027s better to avoid a newline in the middle of assert_called_once_with.","commit_id":"6a3d6c3b4cd5997f23193d9c5d502c7fbdcead59"},{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"685308acae461f18b285047d253e81de2220fa1f","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def check_assert_called_once(logical_line, filename):"},{"line_number":83,"context_line":"    msg \u003d (\"N323: assert_called_once is a no-op. please use assert_called_\""},{"line_number":84,"context_line":"           \"once_with to test with explicit parameters or an assertEqual with\""},{"line_number":85,"context_line":"           \" call_count.\")"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    if \u0027neutron/tests/\u0027 in filename:"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_e42e22a5","line":84,"in_reply_to":"baa201ad_76e2e804","updated":"2014-09-29 08:19:30.000000000","message":"Done","commit_id":"6a3d6c3b4cd5997f23193d9c5d502c7fbdcead59"}],"neutron/tests/unit/ml2/drivers/cisco/apic/test_cisco_apic_mechanism_driver.py":[{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"9f539067fcdd2a4d92bd1cffda44b94b89ede6b8","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        mgr.ensure_external_epg_provided_contract.assert_called_once_with("},{"line_number":119,"context_line":"            mocked.APIC_NETWORK, mgr.get_router_contract.return_value,"},{"line_number":120,"context_line":"            transaction\u003d\u0027transaction\u0027)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def test_update_gw_port_postcommit_fail_contract_create(self):"},{"line_number":123,"context_line":"        net_ctx \u003d self._get_network_context(mocked.APIC_TENANT,"},{"line_number":124,"context_line":"                                            mocked.APIC_NETWORK,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9df570_4f2d0946","side":"PARENT","line":121,"updated":"2014-09-23 12:55:05.000000000","message":"@Ivar this test was introduced by you and as far as I can tell ensure_external_routed_network_deleted wasn\u0027t ever used in apic mechanism driver - is this a potential bug ?","commit_id":"ccf95897dca96acd5aaf37091e30e72f53083731"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"da377e8780d2873a8d95b39665b4b6b65c4eefa0","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            mocked.APIC_NETWORK, mgr.get_router_contract.return_value,"},{"line_number":120,"context_line":"            transaction\u003d\u0027transaction\u0027)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def test_update_gw_port_postcommit_fail_contract_create(self):"},{"line_number":123,"context_line":"        net_ctx \u003d self._get_network_context(mocked.APIC_TENANT,"},{"line_number":124,"context_line":"                                            mocked.APIC_NETWORK,"},{"line_number":125,"context_line":"                                            TEST_SEGMENT1, external\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_3a183e84","side":"PARENT","line":122,"updated":"2014-09-29 12:02:23.000000000","message":"why did you remove this method? It doesn\u0027t seem related to your change. Anyway let\u0027s wait for Ivar\u0027s answer","commit_id":"ccf95897dca96acd5aaf37091e30e72f53083731"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"254d294a4c63402b634f177cc98ba896ed80b1e5","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            mocked.APIC_NETWORK, mgr.get_router_contract.return_value,"},{"line_number":120,"context_line":"            transaction\u003d\u0027transaction\u0027)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def test_update_gw_port_postcommit_fail_contract_create(self):"},{"line_number":123,"context_line":"        net_ctx \u003d self._get_network_context(mocked.APIC_TENANT,"},{"line_number":124,"context_line":"                                            mocked.APIC_NETWORK,"},{"line_number":125,"context_line":"                                            TEST_SEGMENT1, external\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_a18757d6","side":"PARENT","line":122,"in_reply_to":"baa201ad_2d31ea0b","updated":"2014-10-02 00:10:18.000000000","message":"It seems I\u0027ve actually completely missed this comment in the previous review! Sorry about that :) . This test is probably a leftover from a old implementation I had locally since it doesn\u0027t make much sense in the current way we handle GW port updates. This can be safely removed, thanks for your work.","commit_id":"ccf95897dca96acd5aaf37091e30e72f53083731"},{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"7388b0d957bf98826d2740b5ad013296e691606f","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            mocked.APIC_NETWORK, mgr.get_router_contract.return_value,"},{"line_number":120,"context_line":"            transaction\u003d\u0027transaction\u0027)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def test_update_gw_port_postcommit_fail_contract_create(self):"},{"line_number":123,"context_line":"        net_ctx \u003d self._get_network_context(mocked.APIC_TENANT,"},{"line_number":124,"context_line":"                                            mocked.APIC_NETWORK,"},{"line_number":125,"context_line":"                                            TEST_SEGMENT1, external\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_2d31ea0b","side":"PARENT","line":122,"in_reply_to":"baa201ad_3a183e84","updated":"2014-09-29 12:38:31.000000000","message":"I assume (possibly wrong) that since Ivar responded to my other question and left this one, that this test is faulty not only because of use of assert_called_once. Supporting evidence is that ensure_external_routed_network_deleted wasn\u0027t used anywhere in Neutron code at the moment this test was added nor is it used now, also if you compare it with test_update_gw_port_postcommit then the only difference before calling update_port_postcommit is lack of get_router_contract.return_value which doesn\u0027t cause APICMechanismDriver to call any additional method.","commit_id":"ccf95897dca96acd5aaf37091e30e72f53083731"}],"neutron/tests/unit/ml2/drivers/cisco/apic/test_cisco_apic_sync.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"a07517a34ae761abfa952c38c5e7e08ebf55226b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        sync.core_plugin.get_ports.return_value \u003d [{\u0027id\u0027: \u0027port\u0027,"},{"line_number":63,"context_line":"                                                    \u0027network_id\u0027: \u0027net\u0027}]"},{"line_number":64,"context_line":"        sync.sync_base()"},{"line_number":65,"context_line":"        self.driver.create_network_postcommit.assert_called_once_with("},{"line_number":66,"context_line":"                self.network_context())"},{"line_number":67,"context_line":"        self.driver.create_subnet_postcommit.assert_called_once_with("},{"line_number":68,"context_line":"                self.subnet_context())"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_528e89d1","line":65,"updated":"2014-10-13 10:15:17.000000000","message":"This is making the test more brittle and dependent on specific mocking. Can you just check len(mock_calls) instead? Then L53-55 doesn\u0027t need to change.","commit_id":"85165bab2e0ea8ac54595c05b715209bbcedcc07"},{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"0034af74c382e67cd6f9247c2cc8929dd4a49f8e","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        sync.core_plugin.get_ports.return_value \u003d [{\u0027id\u0027: \u0027port\u0027,"},{"line_number":63,"context_line":"                                                    \u0027network_id\u0027: \u0027net\u0027}]"},{"line_number":64,"context_line":"        sync.sync_base()"},{"line_number":65,"context_line":"        self.driver.create_network_postcommit.assert_called_once_with("},{"line_number":66,"context_line":"                self.network_context())"},{"line_number":67,"context_line":"        self.driver.create_subnet_postcommit.assert_called_once_with("},{"line_number":68,"context_line":"                self.subnet_context())"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_d215194a","line":65,"in_reply_to":"baa201ad_528e89d1","updated":"2014-10-13 10:19:56.000000000","message":"Will do.","commit_id":"85165bab2e0ea8ac54595c05b715209bbcedcc07"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"dc2046bd65666d6982ad4473d5c8176e77502a32","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        sync.core_plugin.get_ports.return_value \u003d [{\u0027id\u0027: \u0027port\u0027,"},{"line_number":63,"context_line":"                                                    \u0027network_id\u0027: \u0027net\u0027}]"},{"line_number":64,"context_line":"        sync.sync_base()"},{"line_number":65,"context_line":"        self.assertEqual(1, self.driver.create_network_postcommit.call_count)"},{"line_number":66,"context_line":"        self.assertEqual(1, self.driver.create_subnet_postcommit.call_count)"},{"line_number":67,"context_line":"        self.assertEqual(1, self.get_locked_port_and_binding.call_count)"},{"line_number":68,"context_line":"        self.assertEqual(1, self.driver.create_port_postcommit.call_count)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_b5a7ad4e","line":65,"updated":"2014-10-21 12:13:36.000000000","message":"you could use self.driver.create_network_postcommit.assert_called_once_with()","commit_id":"e40c2ed58ce998fc5aba83ffae8ebefec9403c3b"},{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"7b83e92ff9f450d5a2385472c463e80e21debd93","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        sync.core_plugin.get_ports.return_value \u003d [{\u0027id\u0027: \u0027port\u0027,"},{"line_number":63,"context_line":"                                                    \u0027network_id\u0027: \u0027net\u0027}]"},{"line_number":64,"context_line":"        sync.sync_base()"},{"line_number":65,"context_line":"        self.assertEqual(1, self.driver.create_network_postcommit.call_count)"},{"line_number":66,"context_line":"        self.assertEqual(1, self.driver.create_subnet_postcommit.call_count)"},{"line_number":67,"context_line":"        self.assertEqual(1, self.get_locked_port_and_binding.call_count)"},{"line_number":68,"context_line":"        self.assertEqual(1, self.driver.create_port_postcommit.call_count)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_7079d32e","line":65,"in_reply_to":"9aa7fdbe_b5a7ad4e","updated":"2014-10-21 12:33:51.000000000","message":"If you look at PS2 Kevin suggested that we should only check call count in this case instead of matching exact call parameters so I changed accordingly.","commit_id":"e40c2ed58ce998fc5aba83ffae8ebefec9403c3b"}],"neutron/tests/unit/services/l3_router/test_l3_apic_plugin.py":[{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"9f539067fcdd2a4d92bd1cffda44b94b89ede6b8","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        mgr.add_router_interface.assert_called_once_with("},{"line_number":117,"context_line":"            mocked.APIC_TENANT, mocked.APIC_ROUTER, mocked.APIC_NETWORK)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _test_remove_router_interface(self, interface_info):"},{"line_number":120,"context_line":"        mgr \u003d self.plugin.manager"},{"line_number":121,"context_line":"        self.plugin.remove_router_interface(self.context, ROUTER,"},{"line_number":122,"context_line":"                                            interface_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9df570_8f837103","side":"PARENT","line":119,"updated":"2014-09-23 12:55:05.000000000","message":"@Ivar - you removed use of delete_contract_for_epg from remove_router_interface - is it potential bug or just test cases got left by mistake ?","commit_id":"ccf95897dca96acd5aaf37091e30e72f53083731"},{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"685308acae461f18b285047d253e81de2220fa1f","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        mgr.add_router_interface.assert_called_once_with("},{"line_number":117,"context_line":"            mocked.APIC_TENANT, mocked.APIC_ROUTER, mocked.APIC_NETWORK)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _test_remove_router_interface(self, interface_info):"},{"line_number":120,"context_line":"        mgr \u003d self.plugin.manager"},{"line_number":121,"context_line":"        self.plugin.remove_router_interface(self.context, ROUTER,"},{"line_number":122,"context_line":"                                            interface_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_9f391fdb","side":"PARENT","line":119,"in_reply_to":"da9df570_5ff70959","updated":"2014-09-29 08:19:30.000000000","message":"Done","commit_id":"ccf95897dca96acd5aaf37091e30e72f53083731"},{"author":{"_account_id":7987,"name":"Ivar Lazzaro","email":"ivarlazzaro@gmail.com","username":"Ivar"},"change_message_id":"ca47c91d3300ed1063eca898d7a369aa50d66557","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        mgr.add_router_interface.assert_called_once_with("},{"line_number":117,"context_line":"            mocked.APIC_TENANT, mocked.APIC_ROUTER, mocked.APIC_NETWORK)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def _test_remove_router_interface(self, interface_info):"},{"line_number":120,"context_line":"        mgr \u003d self.plugin.manager"},{"line_number":121,"context_line":"        self.plugin.remove_router_interface(self.context, ROUTER,"},{"line_number":122,"context_line":"                                            interface_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9df570_5ff70959","side":"PARENT","line":119,"in_reply_to":"da9df570_8f837103","updated":"2014-09-26 22:05:35.000000000","message":"Good catch! \nHowever, instead of removing the tests completely, I guess it should validate that \"remove_router_interface\" is called instead (symmetrical to \u0027test_add_router_interface\u0027)","commit_id":"ccf95897dca96acd5aaf37091e30e72f53083731"}]}
