)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"37d9dd86cac97591e8f4cdde4cddc0fa0eb2f52c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     lzklibj \u003clzklibj@cn.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-07-20 14:47:58 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP add l3 functional test for add_router_interface"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Not sure whether we need functional test for l3_ovn, or"},{"line_number":10,"context_line":"any test to check whether data is inserted correctly into"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dada55a8_ed67efe6","line":7,"updated":"2016-07-20 11:32:06.000000000","message":"We already have add_router_interface tests in the test_ovn_db_sync.py functional test case.  Maybe that could be enhanced to verify additional information.","commit_id":"3c650f8ded06d87b9bee8486d903af09f3950900"}],"networking_ovn/tests/functional/test_ovn_db_sync.py":[{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"ccb05bec05b01fb40128dda55924c4de12a54f32","unresolved":false,"context_lines":[{"line_number":275,"context_line":"                lports \u003d getattr(lrouter, \u0027ports\u0027, [])"},{"line_number":276,"context_line":"                plugin_lrouter_port_ids \u003d [lport.name.replace(\u0027lrp-\u0027, \u0027\u0027)"},{"line_number":277,"context_line":"                                           for lport in lports]"},{"line_number":278,"context_line":"                plugin_lrouter_port_networks \u003d [lport.networks"},{"line_number":279,"context_line":"                                                for lport in lports]"},{"line_number":280,"context_line":"                sroutes \u003d getattr(lrouter, \u0027static_routes\u0027, [])"},{"line_number":281,"context_line":"                plugin_routes \u003d [sroute.ip_prefix + sroute.nexthop"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_1254e4c7","line":278,"updated":"2016-07-27 11:04:19.000000000","message":"I think it will be good to construct a dict \"plugin_lport_networks\" with port id as key and networks as values like \"r_port_networks\" above.\nThis way we dont have to use zip function below.","commit_id":"b9b4fd2f338abde392bb16e33129ec9c1c42a295"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"a0d875af00900e4a9f54cafc0036ccccd59216f5","unresolved":false,"context_lines":[{"line_number":275,"context_line":"                lports \u003d getattr(lrouter, \u0027ports\u0027, [])"},{"line_number":276,"context_line":"                plugin_lrouter_port_ids \u003d [lport.name.replace(\u0027lrp-\u0027, \u0027\u0027)"},{"line_number":277,"context_line":"                                           for lport in lports]"},{"line_number":278,"context_line":"                plugin_lrouter_port_networks \u003d [lport.networks"},{"line_number":279,"context_line":"                                                for lport in lports]"},{"line_number":280,"context_line":"                sroutes \u003d getattr(lrouter, \u0027static_routes\u0027, [])"},{"line_number":281,"context_line":"                plugin_routes \u003d [sroute.ip_prefix + sroute.nexthop"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_592d2194","line":278,"in_reply_to":"dada55a8_1254e4c7","updated":"2016-08-23 02:00:08.000000000","message":"Hi, Numan. Since I determine to drop this patch, so I added the code which follow your suggestion in https://review.openstack.org/#/c/358501/1/networking_ovn/tests/functional/test_ovn_db_sync.py.","commit_id":"b9b4fd2f338abde392bb16e33129ec9c1c42a295"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"ccb05bec05b01fb40128dda55924c4de12a54f32","unresolved":false,"context_lines":[{"line_number":291,"context_line":"                lports \u003d getattr(lrouter, \u0027ports\u0027, [])"},{"line_number":292,"context_line":"                monitor_lrouter_port_ids \u003d [lport.name.replace(\u0027lrp-\u0027, \u0027\u0027)"},{"line_number":293,"context_line":"                                            for lport in lports]"},{"line_number":294,"context_line":"                monitor_lrouter_port_networks \u003d [lport.networks"},{"line_number":295,"context_line":"                                                 for lport in lports]"},{"line_number":296,"context_line":"                sroutes \u003d getattr(lrouter, \u0027static_routes\u0027, [])"},{"line_number":297,"context_line":"                monitor_routes \u003d [sroute.ip_prefix + sroute.nexthop"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_52601ca5","line":294,"updated":"2016-07-27 11:04:19.000000000","message":"Same as above","commit_id":"b9b4fd2f338abde392bb16e33129ec9c1c42a295"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"ccb05bec05b01fb40128dda55924c4de12a54f32","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                self.assertRaises("},{"line_number":316,"context_line":"                    AssertionError, self.assertItemsEqual, r_port_ids,"},{"line_number":317,"context_line":"                    plugin_lrouter_port_ids)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"                self.assertRaises("},{"line_number":320,"context_line":"                    AssertionError, self.assertItemsEqual, r_port_ids,"},{"line_number":321,"context_line":"                    monitor_lrouter_port_ids)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_d2224c51","line":318,"updated":"2016-07-27 11:04:19.000000000","message":"It will be good if you can do the same for r_port_networks.","commit_id":"b9b4fd2f338abde392bb16e33129ec9c1c42a295"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"a0d875af00900e4a9f54cafc0036ccccd59216f5","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                self.assertRaises("},{"line_number":316,"context_line":"                    AssertionError, self.assertItemsEqual, r_port_ids,"},{"line_number":317,"context_line":"                    plugin_lrouter_port_ids)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"                self.assertRaises("},{"line_number":320,"context_line":"                    AssertionError, self.assertItemsEqual, r_port_ids,"},{"line_number":321,"context_line":"                    monitor_lrouter_port_ids)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_d93911d9","line":318,"in_reply_to":"dada55a8_d2224c51","updated":"2016-08-23 02:00:08.000000000","message":"Yes, I also tried this in https://review.openstack.org/#/c/358501/1/networking_ovn/tests/functional/test_ovn_db_sync.py.","commit_id":"b9b4fd2f338abde392bb16e33129ec9c1c42a295"}],"networking_ovn/tests/functional/test_ovn_l3.py":[{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"1ac945831ba8a810efcdbcdfd35b474f41dfeff7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Red Hat, Inc."},{"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":"dada55a8_5e430313","line":1,"updated":"2016-07-21 14:07:50.000000000","message":"Either you can remove this or update it :)","commit_id":"3c650f8ded06d87b9bee8486d903af09f3950900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"1ac945831ba8a810efcdbcdfd35b474f41dfeff7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        r_ports \u003d self._list(\u0027ports\u0027,"},{"line_number":31,"context_line":"                             query_params\u003d\u0027device_id\u003d%s\u0027 % self.router[\u0027id\u0027])"},{"line_number":32,"context_line":"        r_port_ids \u003d [p[\u0027id\u0027] for p in r_ports[\u0027ports\u0027]]"},{"line_number":33,"context_line":"        self.assertEqual(r_ports_num, len(r_port_ids))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        try:"},{"line_number":36,"context_line":"            lrouter \u003d idlutils.row_by_value("}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_2e1a5817","line":33,"updated":"2016-07-21 14:07:50.000000000","message":"Not sure why this assertEqual is really required as you verifying the router ports in the neutron db.","commit_id":"3c650f8ded06d87b9bee8486d903af09f3950900"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"9b406ba5a80eb3ebe1807b76612769cc4f59c051","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        r_ports \u003d self._list(\u0027ports\u0027,"},{"line_number":31,"context_line":"                             query_params\u003d\u0027device_id\u003d%s\u0027 % self.router[\u0027id\u0027])"},{"line_number":32,"context_line":"        r_port_ids \u003d [p[\u0027id\u0027] for p in r_ports[\u0027ports\u0027]]"},{"line_number":33,"context_line":"        self.assertEqual(r_ports_num, len(r_port_ids))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        try:"},{"line_number":36,"context_line":"            lrouter \u003d idlutils.row_by_value("}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_aabbb4c2","line":33,"in_reply_to":"dada55a8_2e1a5817","updated":"2016-07-22 02:49:21.000000000","message":"Yes, you\u0027re right, this is unnecessary.","commit_id":"3c650f8ded06d87b9bee8486d903af09f3950900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"1ac945831ba8a810efcdbcdfd35b474f41dfeff7","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                self.mech_driver._nb_ovn.idl, \u0027Logical_Router\u0027, \u0027name\u0027,"},{"line_number":38,"context_line":"                \u0027neutron-\u0027 + str(self.router[\u0027id\u0027]), None)"},{"line_number":39,"context_line":"            lports \u003d getattr(lrouter, \u0027ports\u0027, [])"},{"line_number":40,"context_line":"            plugin_lrouter_port_ids \u003d [lport.name.replace(\u0027lrp-\u0027, \u0027\u0027)"},{"line_number":41,"context_line":"                                       for lport in lports]"},{"line_number":42,"context_line":"        except idlutils.RowNotFound:"},{"line_number":43,"context_line":"            plugin_lrouter_port_ids \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_0ebf94aa","line":40,"updated":"2016-07-21 14:07:50.000000000","message":"I think you should also get the lrouter and lports from the monitor IDL and verify that it is as expected like the way it is done in sync functional tests.","commit_id":"3c650f8ded06d87b9bee8486d903af09f3950900"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"9b406ba5a80eb3ebe1807b76612769cc4f59c051","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                self.mech_driver._nb_ovn.idl, \u0027Logical_Router\u0027, \u0027name\u0027,"},{"line_number":38,"context_line":"                \u0027neutron-\u0027 + str(self.router[\u0027id\u0027]), None)"},{"line_number":39,"context_line":"            lports \u003d getattr(lrouter, \u0027ports\u0027, [])"},{"line_number":40,"context_line":"            plugin_lrouter_port_ids \u003d [lport.name.replace(\u0027lrp-\u0027, \u0027\u0027)"},{"line_number":41,"context_line":"                                       for lport in lports]"},{"line_number":42,"context_line":"        except idlutils.RowNotFound:"},{"line_number":43,"context_line":"            plugin_lrouter_port_ids \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_eaff6c63","line":40,"in_reply_to":"dada55a8_0ebf94aa","updated":"2016-07-22 02:49:21.000000000","message":"Yes, as I\u0027m considering enhance sync functional tests than creating this one, I think it\u0027s OK to align data quire method.","commit_id":"3c650f8ded06d87b9bee8486d903af09f3950900"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"1ac945831ba8a810efcdbcdfd35b474f41dfeff7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                self.context, p[\u0027fixed_ips\u0027])"},{"line_number":50,"context_line":"            try:"},{"line_number":51,"context_line":"                lport \u003d idlutils.row_by_value("},{"line_number":52,"context_line":"                    self.mech_driver._nb_ovn.idl, \u0027Logical_Router_Port\u0027,"},{"line_number":53,"context_line":"                    \u0027name\u0027, \u0027lrp-\u0027 + str(p[\u0027id\u0027]), None)"},{"line_number":54,"context_line":"                lport_networks \u003d getattr(lport, \u0027networks\u0027, [])"},{"line_number":55,"context_line":"            except idlutils.RowNotFound:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_aee648e5","line":52,"updated":"2016-07-21 14:07:50.000000000","message":"Same comment as above.","commit_id":"3c650f8ded06d87b9bee8486d903af09f3950900"}]}
