)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"dc4a2c8b3f2cb1ddf7ef6601ad603f6eb74e2da9","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Neutron Allowed Address Pair API test"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a script to test the Neutron API extension for Allowed Address Pair."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I1dd1e299f4436f5a613351f612cb078e630c7026"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAUX%2F%2Fbm0%3D","line":9,"updated":"2014-02-13 09:01:12.000000000","message":"Could you also add some descriptions for the changes in network_client.py?","commit_id":"405600ccbe76344dcf865ad6f4008892985a1f11"}],"tempest/api/network/test_allowed_address_pair.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"e07965680e175668e48e50c47e5293396ddc0441","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.assertTrue(port)"},{"line_number":72,"context_line":"        self._confirm_allowed_address_pair(port[0], self.ip_address)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @test.skip_because(bug\u003d\"1269851\")"},{"line_number":75,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":76,"context_line":"    def test_update_show_port_with_address_pair(self):"},{"line_number":77,"context_line":"        # Update port with an allowed address pair attribute"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BkcY%3D","line":74,"updated":"2014-01-24 09:54:03.000000000","message":"Probably this change will fix this issue soon\nhttps://review.openstack.org/#/c/66070/\nand we don\u0027t have to add a skiped test.","commit_id":"5a0fab995f6264948f319ce4aea377b25debcdf3"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"0bbeafb6bd883fd66a0b3fe0935f01e7a398e5d1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F9m7k%3D","line":1,"updated":"2014-02-05 17:44:10.000000000","message":"vim header should be removed.","commit_id":"3da125fde81dfae865eff360a742840a5f2cb405"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"0bbeafb6bd883fd66a0b3fe0935f01e7a398e5d1","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.assertTrue(port)"},{"line_number":72,"context_line":"        self._confirm_allowed_address_pair(port[0], self.ip_address)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @test.skip_because(bug\u003d\"1269851\")"},{"line_number":75,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":76,"context_line":"    def test_update_show_port_with_address_pair(self):"},{"line_number":77,"context_line":"        # Update port with an allowed address pair attribute"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F9m7Q%3D","line":74,"updated":"2014-02-05 17:44:10.000000000","message":"You should exclude the new skiped test and submit it when the bug is fixed.","commit_id":"3da125fde81dfae865eff360a742840a5f2cb405"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"dc4a2c8b3f2cb1ddf7ef6601ad603f6eb74e2da9","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":67,"context_line":"        ports \u003d body[\u0027ports\u0027]"},{"line_number":68,"context_line":"        port \u003d [p for p in ports if p[\u0027id\u0027] \u003d\u003d port_id]"},{"line_number":69,"context_line":"        self.assertTrue(port)"},{"line_number":70,"context_line":"        self._confirm_allowed_address_pair(port[0], self.ip_address)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def _confirm_allowed_address_pair(self, port, ip):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2FbuE%3D","line":69,"updated":"2014-02-13 09:01:12.000000000","message":"please also add a message here like line 74","commit_id":"405600ccbe76344dcf865ad6f4008892985a1f11"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"dc4a2c8b3f2cb1ddf7ef6601ad603f6eb74e2da9","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.assertTrue(port[\u0027allowed_address_pairs\u0027], msg)"},{"line_number":75,"context_line":"        ip_address \u003d port[\u0027allowed_address_pairs\u0027][0][\u0027ip_address\u0027]"},{"line_number":76,"context_line":"        mac_address \u003d port[\u0027allowed_address_pairs\u0027][0][\u0027mac_address\u0027]"},{"line_number":77,"context_line":"        self.assertEqual(ip_address, ip)"},{"line_number":78,"context_line":"        self.assertEqual(mac_address, self.mac_address)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2FbuU%3D","line":77,"updated":"2014-02-13 09:01:12.000000000","message":"ip could be replaced with self.ip_address, right?   And the local variables \u0027ip_address\u0027 and \u0027mac_address\u0027 look a little blurred with self.ip_address and self.mac_address. So I suggest changing local variable\u0027s name.","commit_id":"405600ccbe76344dcf865ad6f4008892985a1f11"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4905dd50daea4f8c5f04932db6fd8090fedbd71e","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.assertTrue(port[\u0027allowed_address_pairs\u0027], msg)"},{"line_number":75,"context_line":"        ip_address \u003d port[\u0027allowed_address_pairs\u0027][0][\u0027ip_address\u0027]"},{"line_number":76,"context_line":"        mac_address \u003d port[\u0027allowed_address_pairs\u0027][0][\u0027mac_address\u0027]"},{"line_number":77,"context_line":"        self.assertEqual(ip_address, ip)"},{"line_number":78,"context_line":"        self.assertEqual(mac_address, self.mac_address)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2FHjo%3D","line":77,"in_reply_to":"AAAAUX%2F%2FbuU%3D","updated":"2014-02-17 01:09:15.000000000","message":"Zhi Kun Liu,\n\nThanks for taking the time to review my code. This module will have another test method, test_update_show_port_with_address_pair, which updates the ip address in the allowed address pair of the port created in setUpClass. The new address will be different to self_ip_address. After changing the ip-address, test_update_show_port_with_address_pair will invoke _confirm_allowed_address_pair((body[\u0027port\u0027], new_ip_address). That is why we cannot use self_ip_address here. It has to be an argument passed to this method.\n\nThe reason test_update_show_port_with_address_pair_pair,is not in this patchset is because I am waiting for bug 1269851 to be fixed in Neutron.. If you look in patchset 2, the method was there and i was skipping it. But afazekas asked me to remove it\n\nCheers","commit_id":"405600ccbe76344dcf865ad6f4008892985a1f11"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"144ceed375dd6f9aa7fc2b0b453881b6998d7efa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAWH%2F%2BhNU%3D","line":1,"updated":"2014-03-26 08:28:54.000000000","message":"we should update it to \u00272014\u0027.","commit_id":"5fee037f890b1954ae62040678a3a4ffb2cc3601"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"144ceed375dd6f9aa7fc2b0b453881b6998d7efa","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        api_extensions"},{"line_number":37,"context_line":"    \"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @classmethod"},{"line_number":40,"context_line":"    def setUpClass(cls):"},{"line_number":41,"context_line":"        super(AllowedAddressPairTestJSON, cls).setUpClass()"},{"line_number":42,"context_line":"        if not test.is_extension_enabled(\u0027allowed-address-pairs\u0027, \u0027network\u0027):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAWH%2F%2BhPo%3D","line":39,"updated":"2014-03-26 08:28:54.000000000","message":"could you add cleanup decorator here to stop leaking as the setUpClass create some resources?\n\n@test.safe_setup\n\nplease refer to https://review.openstack.org/#/c/82731/","commit_id":"5fee037f890b1954ae62040678a3a4ffb2cc3601"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"c10751d1cfb98b60c0cc983a820d77be20eb19ca","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            msg \u003d \"Allowed Address Pairs extension not enabled.\""},{"line_number":45,"context_line":"            raise cls.skipException(msg)"},{"line_number":46,"context_line":"        cls.network \u003d cls.create_network()"},{"line_number":47,"context_line":"        cls.name \u003d cls.network[\u0027name\u0027]"},{"line_number":48,"context_line":"        cls.subnet \u003d cls.create_subnet(cls.network)"},{"line_number":49,"context_line":"        cls.port \u003d cls.create_port(cls.network)"},{"line_number":50,"context_line":"        cls.ip_address \u003d cls.port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"bad4c104_daf4a589","line":47,"updated":"2014-04-29 08:10:56.000000000","message":"cls.name defined but is unused","commit_id":"3dec9a882141c39c1b340eb9f9fa3c4a5f2aaa28"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"8bcb4f157ade800b7d3a712dbca22db6f656fe40","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            msg \u003d \"Allowed Address Pairs extension not enabled.\""},{"line_number":45,"context_line":"            raise cls.skipException(msg)"},{"line_number":46,"context_line":"        cls.network \u003d cls.create_network()"},{"line_number":47,"context_line":"        cls.name \u003d cls.network[\u0027name\u0027]"},{"line_number":48,"context_line":"        cls.subnet \u003d cls.create_subnet(cls.network)"},{"line_number":49,"context_line":"        cls.port \u003d cls.create_port(cls.network)"},{"line_number":50,"context_line":"        cls.ip_address \u003d cls.port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"9ad9bd40_05e2369f","line":47,"in_reply_to":"bad4c104_daf4a589","updated":"2014-04-30 00:20:01.000000000","message":"I agree, this is not used. Whole line removed in next patchset","commit_id":"3dec9a882141c39c1b340eb9f9fa3c4a5f2aaa28"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"c10751d1cfb98b60c0cc983a820d77be20eb19ca","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            raise cls.skipException(msg)"},{"line_number":46,"context_line":"        cls.network \u003d cls.create_network()"},{"line_number":47,"context_line":"        cls.name \u003d cls.network[\u0027name\u0027]"},{"line_number":48,"context_line":"        cls.subnet \u003d cls.create_subnet(cls.network)"},{"line_number":49,"context_line":"        cls.port \u003d cls.create_port(cls.network)"},{"line_number":50,"context_line":"        cls.ip_address \u003d cls.port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":51,"context_line":"        cls.mac_address \u003d cls.port[\u0027mac_address\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"bad4c104_7a355945","line":48,"updated":"2014-04-29 08:10:56.000000000","message":"cls.subnet defined but is unused","commit_id":"3dec9a882141c39c1b340eb9f9fa3c4a5f2aaa28"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"8bcb4f157ade800b7d3a712dbca22db6f656fe40","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            raise cls.skipException(msg)"},{"line_number":46,"context_line":"        cls.network \u003d cls.create_network()"},{"line_number":47,"context_line":"        cls.name \u003d cls.network[\u0027name\u0027]"},{"line_number":48,"context_line":"        cls.subnet \u003d cls.create_subnet(cls.network)"},{"line_number":49,"context_line":"        cls.port \u003d cls.create_port(cls.network)"},{"line_number":50,"context_line":"        cls.ip_address \u003d cls.port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":51,"context_line":"        cls.mac_address \u003d cls.port[\u0027mac_address\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"9ad9bd40_25957ae4","line":48,"in_reply_to":"bad4c104_7a355945","updated":"2014-04-30 00:20:01.000000000","message":"Agree in removing attribute cls.subnet. The subnet, though, still needs to be created","commit_id":"3dec9a882141c39c1b340eb9f9fa3c4a5f2aaa28"},{"author":{"_account_id":8824,"name":"Sergey Murashov","email":"smurashov@mirantis.com","username":"SergeyMurashov"},"change_message_id":"c10751d1cfb98b60c0cc983a820d77be20eb19ca","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        cls.network \u003d cls.create_network()"},{"line_number":47,"context_line":"        cls.name \u003d cls.network[\u0027name\u0027]"},{"line_number":48,"context_line":"        cls.subnet \u003d cls.create_subnet(cls.network)"},{"line_number":49,"context_line":"        cls.port \u003d cls.create_port(cls.network)"},{"line_number":50,"context_line":"        cls.ip_address \u003d cls.port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":51,"context_line":"        cls.mac_address \u003d cls.port[\u0027mac_address\u0027]"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bad4c104_fa4889ce","line":49,"updated":"2014-04-29 08:10:56.000000000","message":"cls.port defined but is unused","commit_id":"3dec9a882141c39c1b340eb9f9fa3c4a5f2aaa28"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"8bcb4f157ade800b7d3a712dbca22db6f656fe40","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        cls.network \u003d cls.create_network()"},{"line_number":47,"context_line":"        cls.name \u003d cls.network[\u0027name\u0027]"},{"line_number":48,"context_line":"        cls.subnet \u003d cls.create_subnet(cls.network)"},{"line_number":49,"context_line":"        cls.port \u003d cls.create_port(cls.network)"},{"line_number":50,"context_line":"        cls.ip_address \u003d cls.port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":51,"context_line":"        cls.mac_address \u003d cls.port[\u0027mac_address\u0027]"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9ad9bd40_05a79650","line":49,"in_reply_to":"bad4c104_fa4889ce","updated":"2014-04-30 00:20:01.000000000","message":"Agree. Replace attribute cls.port for local variable port, since it will be used in the next two lines","commit_id":"3dec9a882141c39c1b340eb9f9fa3c4a5f2aaa28"}]}
