)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"357dbfe252d4774b068a31f2392237d576ae008a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"validate icmp protocol, remote_group_id and remote_ip_prefix"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I3dd272f15a282b2ac58beee10f36c8af66377727"},{"line_number":14,"context_line":"Partially implements: bp ipv6-testing-parity"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ae5cdf2_93f635f8","line":14,"updated":"2014-06-10 12:20:43.000000000","message":"I cannot find this blueprint.\nCould you give the url?\n\nI\u0027d like to know the process of the bp.","commit_id":"2c910a4684c4f7d254766dca1939e6e69e82edb3"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"77c70ecc5ab0ddaae8b4c7b6cbd71f9f6c982cfe","unresolved":false,"context_lines":[{"line_number":11,"context_line":"validate icmp protocol, remote_group_id and remote_ip_prefix"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I3dd272f15a282b2ac58beee10f36c8af66377727"},{"line_number":14,"context_line":"Partially implements: bp ipv6-testing-parity"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ae5cdf2_eb421daa","line":14,"in_reply_to":"1ae5cdf2_57f738f5","updated":"2014-06-25 10:22:38.000000000","message":"Thanks Kenichi. I\u0027ve submitted the BP, can you please review - https://review.openstack.org/#/c/102468/2","commit_id":"2c910a4684c4f7d254766dca1939e6e69e82edb3"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"201615043079c8735fd350b3898c2a08d3af64a0","unresolved":false,"context_lines":[{"line_number":11,"context_line":"validate icmp protocol, remote_group_id and remote_ip_prefix"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I3dd272f15a282b2ac58beee10f36c8af66377727"},{"line_number":14,"context_line":"Partially implements: bp ipv6-testing-parity"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ae5cdf2_b353316b","line":14,"in_reply_to":"1ae5cdf2_93f635f8","updated":"2014-06-10 12:32:32.000000000","message":"Hello Ken\u0027ichi,\n\nI submitted the following BP in Launchpad.\nhttps://blueprints.launchpad.net/tempest/+spec/ipv6-testing-parity\n\nHowever, I came to know that I have to submit the BP according to the new format. I will do that in few days.\n\nThanks for the review.\nSridhar","commit_id":"2c910a4684c4f7d254766dca1939e6e69e82edb3"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"56b7fc45cd1b3eb946b815efcc664c06518e6337","unresolved":false,"context_lines":[{"line_number":11,"context_line":"validate icmp protocol, remote_group_id and remote_ip_prefix"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I3dd272f15a282b2ac58beee10f36c8af66377727"},{"line_number":14,"context_line":"Partially implements: bp ipv6-testing-parity"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ae5cdf2_57f738f5","line":14,"in_reply_to":"1ae5cdf2_b353316b","updated":"2014-06-10 12:40:25.000000000","message":"@Sridhar\n\nThanks for pointing it out.\nThe code seems nice, but the bp approval seems necessary as you said.\n\nThanks in advance for the new format work.","commit_id":"2c910a4684c4f7d254766dca1939e6e69e82edb3"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"67ca2fe6579b78f00f812adbf20ee0124ff133e0","unresolved":false,"context_lines":[{"line_number":11,"context_line":"validate icmp protocol, remote_group_id and remote_ip_prefix"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I3dd272f15a282b2ac58beee10f36c8af66377727"},{"line_number":14,"context_line":"Partially implements: bp ipv6-testing-parity"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"baada198_9564da21","line":14,"updated":"2014-08-12 05:50:57.000000000","message":"We cannot find the link because the bp name seems wrong:\n\ns/ipv6-testing-parity/ipv6-api-testing-parity/","commit_id":"40336f8732e589dcd940a93e19c3b3996b1865c9"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"699c68303b096afdc26cdc190f431021da11103f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"validate icmp protocol, remote_group_id and remote_ip_prefix"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I3dd272f15a282b2ac58beee10f36c8af66377727"},{"line_number":14,"context_line":"Partially implements: bp ipv6-testing-parity"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"baada198_76bbc9e3","line":14,"in_reply_to":"baada198_9564da21","updated":"2014-08-12 09:37:21.000000000","message":"I missed updating it, nice observation. Thanks Ken\u0027ichi","commit_id":"40336f8732e589dcd940a93e19c3b3996b1865c9"}],"tempest/api/network/test_security_groups.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"3c1925b7006800e3038a8dd1db2d825cb7fb4cbc","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class SecGroupTest(base.BaseSecGroupTest):"},{"line_number":25,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":26,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_cidr"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @classmethod"},{"line_number":29,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_ad6fb729","line":26,"updated":"2014-05-20 10:40:12.000000000","message":"this class variable seems not used.","commit_id":"89a8fada4a718dc4efb79ce084895bdaec650cc1"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"4be2d83b910028af4d673fa6a8eb2501161cea2c","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class SecGroupTest(base.BaseSecGroupTest):"},{"line_number":25,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":26,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_cidr"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @classmethod"},{"line_number":29,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_bfda7e75","line":26,"in_reply_to":"7adec928_ad6fb729","updated":"2014-05-20 11:11:10.000000000","message":"Liu, its used at L218","commit_id":"89a8fada4a718dc4efb79ce084895bdaec650cc1"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"42f992030d3d574d74bcf1275388c5e842e96e33","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class SecGroupTest(base.BaseSecGroupTest):"},{"line_number":25,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":26,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_cidr"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @classmethod"},{"line_number":29,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_53f15594","line":26,"in_reply_to":"7adec928_bfda7e75","updated":"2014-05-21 09:36:58.000000000","message":"sorry, I missed that.","commit_id":"89a8fada4a718dc4efb79ce084895bdaec650cc1"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ff5483f4851c04cfcfa842a04300ed6525928a83","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        self.assertEqual(int(sec_group_rule[\u0027port_range_min\u0027]), port_range_min)"},{"line_number":139,"context_line":"        self.assertEqual(int(sec_group_rule[\u0027port_range_max\u0027]), port_range_max)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":142,"context_line":"    def test_create_security_group_rule_with_icmp_type_code(self):"},{"line_number":143,"context_line":"        # Verify creating security group rule specifying icmp"},{"line_number":144,"context_line":"        # type and icmp code with different values."}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_1738e3ed","line":141,"updated":"2014-05-19 07:26:41.000000000","message":"Previous test does the same.I think You can merge this test with previous one.","commit_id":"89a8fada4a718dc4efb79ce084895bdaec650cc1"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"4be2d83b910028af4d673fa6a8eb2501161cea2c","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        self.assertEqual(int(sec_group_rule[\u0027port_range_min\u0027]), port_range_min)"},{"line_number":139,"context_line":"        self.assertEqual(int(sec_group_rule[\u0027port_range_max\u0027]), port_range_max)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":142,"context_line":"    def test_create_security_group_rule_with_icmp_type_code(self):"},{"line_number":143,"context_line":"        # Verify creating security group rule specifying icmp"},{"line_number":144,"context_line":"        # type and icmp code with different values."}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_ff1326fe","line":141,"in_reply_to":"7adec928_1738e3ed","updated":"2014-05-20 11:11:10.000000000","message":"Ok Ghanshyam, will look into it. May be you know already, validation for ICMP would be different to the validation of tcp/udp protocols. I\u0027ll see the best fit and will update my patch. Thanks.","commit_id":"89a8fada4a718dc4efb79ce084895bdaec650cc1"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ff5483f4851c04cfcfa842a04300ed6525928a83","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":176,"context_line":"    def test_create_security_group_rule_with_remote_group_id(self):"},{"line_number":177,"context_line":"        # Verify creating security group rule with remote_group_id works"},{"line_number":178,"context_line":"        sg1_body, _ \u003d self._create_security_group()"},{"line_number":179,"context_line":"        sg2_body, _ \u003d self._create_security_group()"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_92f7a1d2","line":177,"updated":"2014-05-19 07:26:41.000000000","message":"I prefer to merge this test in test_create_security_group_rule_with_additional_args.\nOR\nif you want to keep this separate test then, please reuse the code with test_create_security_group_rule_with_additional_args.","commit_id":"89a8fada4a718dc4efb79ce084895bdaec650cc1"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"4be2d83b910028af4d673fa6a8eb2501161cea2c","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":176,"context_line":"    def test_create_security_group_rule_with_remote_group_id(self):"},{"line_number":177,"context_line":"        # Verify creating security group rule with remote_group_id works"},{"line_number":178,"context_line":"        sg1_body, _ \u003d self._create_security_group()"},{"line_number":179,"context_line":"        sg2_body, _ \u003d self._create_security_group()"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_5fdc1a46","line":177,"in_reply_to":"7adec928_92f7a1d2","updated":"2014-05-20 11:11:10.000000000","message":"Ok will look into it.","commit_id":"89a8fada4a718dc4efb79ce084895bdaec650cc1"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ff5483f4851c04cfcfa842a04300ed6525928a83","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                         sg2_body[\u0027security_group\u0027][\u0027id\u0027])"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":210,"context_line":"    def test_create_security_group_rule_with_remote_ip_prefix(self):"},{"line_number":211,"context_line":"        # Verify creating security group rule with remote_ip_prefix works"},{"line_number":212,"context_line":"        sg1_body, _ \u003d self._create_security_group()"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_52299935","line":210,"updated":"2014-05-19 07:26:41.000000000","message":"ditto","commit_id":"89a8fada4a718dc4efb79ce084895bdaec650cc1"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"3c1925b7006800e3038a8dd1db2d825cb7fb4cbc","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"class SecGroupIPV6Test(SecGroupTest):"},{"line_number":248,"context_line":"    _ip_version \u003d 6"},{"line_number":249,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_v6_cidr"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @classmethod"},{"line_number":252,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_ed753ffa","line":249,"updated":"2014-05-20 10:40:12.000000000","message":"this class variable seems not used.","commit_id":"89a8fada4a718dc4efb79ce084895bdaec650cc1"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"42f992030d3d574d74bcf1275388c5e842e96e33","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"class SecGroupIPV6Test(SecGroupTest):"},{"line_number":248,"context_line":"    _ip_version \u003d 6"},{"line_number":249,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_v6_cidr"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @classmethod"},{"line_number":252,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_932afde5","line":249,"in_reply_to":"7adec928_5fc97aaa","updated":"2014-05-21 09:36:58.000000000","message":"sorry, I missed that.","commit_id":"89a8fada4a718dc4efb79ce084895bdaec650cc1"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"4be2d83b910028af4d673fa6a8eb2501161cea2c","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"class SecGroupIPV6Test(SecGroupTest):"},{"line_number":248,"context_line":"    _ip_version \u003d 6"},{"line_number":249,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_v6_cidr"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @classmethod"},{"line_number":252,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_5fc97aaa","line":249,"in_reply_to":"7adec928_ed753ffa","updated":"2014-05-20 11:11:10.000000000","message":"used at L218","commit_id":"89a8fada4a718dc4efb79ce084895bdaec650cc1"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"761a5005542c0428b91952f97b72cc3d249acfdc","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        self.assertEqual(sec_group_rule[\u0027ethertype\u0027], ethertype)"},{"line_number":64,"context_line":"        self.assertEqual(int(sec_group_rule[\u0027port_range_min\u0027]),"},{"line_number":65,"context_line":"                         port_range_min)"},{"line_number":66,"context_line":"        if port_range_max:"},{"line_number":67,"context_line":"            self.assertEqual(int(sec_group_rule[\u0027port_range_max\u0027]),"},{"line_number":68,"context_line":"                             port_range_max)"},{"line_number":69,"context_line":"        if remote_group_id:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_36abd7d7","line":66,"updated":"2014-05-21 10:05:42.000000000","message":"port_range_max will not be check when it is 0.\n\n if port_range_max is not None:","commit_id":"372ca6026224ff28fd766342a1b5e963e4ce33be"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"3063ae5377b9b9f7da321e902b985436c1640d15","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        self.assertEqual(sec_group_rule[\u0027ethertype\u0027], ethertype)"},{"line_number":64,"context_line":"        self.assertEqual(int(sec_group_rule[\u0027port_range_min\u0027]),"},{"line_number":65,"context_line":"                         port_range_min)"},{"line_number":66,"context_line":"        if port_range_max:"},{"line_number":67,"context_line":"            self.assertEqual(int(sec_group_rule[\u0027port_range_max\u0027]),"},{"line_number":68,"context_line":"                             port_range_max)"},{"line_number":69,"context_line":"        if remote_group_id:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_16da5be9","line":66,"in_reply_to":"7adec928_36abd7d7","updated":"2014-05-21 10:35:09.000000000","message":"Done","commit_id":"372ca6026224ff28fd766342a1b5e963e4ce33be"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"761a5005542c0428b91952f97b72cc3d249acfdc","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                                                remote_group_id\u003dremote_id)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":209,"context_line":"    def test_create_security_group_rule_with_remote_ip_prefix(self):"},{"line_number":210,"context_line":"        # Verify creating security group rule with remote_ip_prefix works"},{"line_number":211,"context_line":"        sg1_body, _ \u003d self._create_security_group()"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_f6b88fe7","line":209,"updated":"2014-05-21 10:05:42.000000000","message":"It\u0027s similar to test_create_security_group_rule_with_additional_args. Could they be merged?","commit_id":"372ca6026224ff28fd766342a1b5e963e4ce33be"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"d4efeef88af12280b53d43dc8e204994b0a50b59","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                                                remote_group_id\u003dremote_id)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":209,"context_line":"    def test_create_security_group_rule_with_remote_ip_prefix(self):"},{"line_number":210,"context_line":"        # Verify creating security group rule with remote_ip_prefix works"},{"line_number":211,"context_line":"        sg1_body, _ \u003d self._create_security_group()"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_cda68053","line":209,"in_reply_to":"7adec928_6dc3ac8a","updated":"2014-05-22 09:40:41.000000000","message":"Thank you Liu.","commit_id":"372ca6026224ff28fd766342a1b5e963e4ce33be"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"dc0cb2a30c2b17c1713b85eaa261dc65c0252e4d","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                                                remote_group_id\u003dremote_id)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":209,"context_line":"    def test_create_security_group_rule_with_remote_ip_prefix(self):"},{"line_number":210,"context_line":"        # Verify creating security group rule with remote_ip_prefix works"},{"line_number":211,"context_line":"        sg1_body, _ \u003d self._create_security_group()"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_6dc3ac8a","line":209,"in_reply_to":"7adec928_7602bf0c","updated":"2014-05-22 09:09:15.000000000","message":"Agree with your opinions. Thanks for your detail explanation.","commit_id":"372ca6026224ff28fd766342a1b5e963e4ce33be"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"3063ae5377b9b9f7da321e902b985436c1640d15","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                                                remote_group_id\u003dremote_id)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":209,"context_line":"    def test_create_security_group_rule_with_remote_ip_prefix(self):"},{"line_number":210,"context_line":"        # Verify creating security group rule with remote_ip_prefix works"},{"line_number":211,"context_line":"        sg1_body, _ \u003d self._create_security_group()"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7adec928_7602bf0c","line":209,"in_reply_to":"7adec928_f6b88fe7","updated":"2014-05-21 10:35:09.000000000","message":"Liu, IMHO all the test cases try creating a Security Group rule with varying parameters. So to some extent they would look similar. The common code is moved to a new api, _create_verify_security_group_rule and is removed from the individual apis.  \n\nIn this test case, the intent is to verify SG rule creation specifying a remote_ip_prefix. As you mentioned, we can merge both, but sometimes too much of optimization would remove the readability from the code. The idea behind having a separate test case for remote_ip_prefix is more from a readability POV when an issue is seen. \n\nI\u0027m interested to know the view of some more reviewers and I\u0027ll be happy to merge the test case if its a general feeling. Thanks for the review.","commit_id":"372ca6026224ff28fd766342a1b5e963e4ce33be"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"3ecc0f4fdc1242761c7fb8c19fea34ebc64dfff9","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.addCleanup(self._delete_security_group_rule,"},{"line_number":59,"context_line":"                        sec_group_rule[\u0027id\u0027])"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self.assertEqual(sec_group_rule[\u0027direction\u0027], direction)"},{"line_number":62,"context_line":"        self.assertEqual(sec_group_rule[\u0027protocol\u0027], protocol)"},{"line_number":63,"context_line":"        self.assertEqual(sec_group_rule[\u0027ethertype\u0027], ethertype)"},{"line_number":64,"context_line":"        self.assertEqual(int(sec_group_rule[\u0027port_range_min\u0027]),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_90080f2f","line":61,"updated":"2014-05-22 10:27:26.000000000","message":"lots of repeated code :\nuse a loop instead like :\n\nexpected \u003d {\u0027direction\u0027: direction, \u0027prototype\u0027: prototype, \u0027ethertype\u0027: ethertype}\nfor key, value in expected.iteritems():\n    self.assertEqual(value, sec_group_rule[key])","commit_id":"a76ffcae91b5b9c156c2cb6b50cda603e3f865e7"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"dcb2863a5ff7a07f3266393ae7b38c73b3e79959","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.addCleanup(self._delete_security_group_rule,"},{"line_number":59,"context_line":"                        sec_group_rule[\u0027id\u0027])"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self.assertEqual(sec_group_rule[\u0027direction\u0027], direction)"},{"line_number":62,"context_line":"        self.assertEqual(sec_group_rule[\u0027protocol\u0027], protocol)"},{"line_number":63,"context_line":"        self.assertEqual(sec_group_rule[\u0027ethertype\u0027], ethertype)"},{"line_number":64,"context_line":"        self.assertEqual(int(sec_group_rule[\u0027port_range_min\u0027]),"}],"source_content_type":"text/x-python","patch_set":4,"id":"5adbc538_f140a237","line":61,"in_reply_to":"7adec928_90080f2f","updated":"2014-05-26 08:12:49.000000000","message":"Ok Abhijeet, will look into it. Thanks for the review comments.","commit_id":"a76ffcae91b5b9c156c2cb6b50cda603e3f865e7"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"3ecc0f4fdc1242761c7fb8c19fea34ebc64dfff9","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        if port_range_max is not None:"},{"line_number":67,"context_line":"            self.assertEqual(int(sec_group_rule[\u0027port_range_max\u0027]),"},{"line_number":68,"context_line":"                             port_range_max)"},{"line_number":69,"context_line":"        if remote_group_id:"},{"line_number":70,"context_line":"            self.assertEqual(sec_group_rule[\u0027remote_group_id\u0027],"},{"line_number":71,"context_line":"                             remote_group_id)"},{"line_number":72,"context_line":"        if remote_ip_prefix:"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_2ba50c04","line":69,"updated":"2014-05-22 10:27:26.000000000","message":"use a loop here too :\n\nexpected \u003d {\u0027remote_group_id\u0027: remote_group_id, \u0027remote_ip_prefix\u0027: remote_ip_prefix}\nfor key, value in expected.iteritems():\n    if value:\n        self.assertEqual(sec_group_rule[key], value)\n\nor better merge it with above loop.","commit_id":"a76ffcae91b5b9c156c2cb6b50cda603e3f865e7"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"dcb2863a5ff7a07f3266393ae7b38c73b3e79959","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        if port_range_max is not None:"},{"line_number":67,"context_line":"            self.assertEqual(int(sec_group_rule[\u0027port_range_max\u0027]),"},{"line_number":68,"context_line":"                             port_range_max)"},{"line_number":69,"context_line":"        if remote_group_id:"},{"line_number":70,"context_line":"            self.assertEqual(sec_group_rule[\u0027remote_group_id\u0027],"},{"line_number":71,"context_line":"                             remote_group_id)"},{"line_number":72,"context_line":"        if remote_ip_prefix:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5adbc538_7174929c","line":69,"in_reply_to":"7adec928_2ba50c04","updated":"2014-05-26 08:12:49.000000000","message":"Done","commit_id":"a76ffcae91b5b9c156c2cb6b50cda603e3f865e7"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"c266f39b6fd7e2505fb4190e88ade2075ce52d52","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                    \u0027remote_group_id\u0027: remote_group_id,"},{"line_number":65,"context_line":"                    \u0027remote_ip_prefix\u0027: remote_ip_prefix}"},{"line_number":66,"context_line":"        for key, value in expected.iteritems():"},{"line_number":67,"context_line":"            if value and value is not None:"},{"line_number":68,"context_line":"                self.assertEqual(value, sec_group_rule[key],"},{"line_number":69,"context_line":"                                 \"Field %s of the created security group\""},{"line_number":70,"context_line":"                                 \"rule does not match with %s.\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5adbc538_7f2b7982","line":67,"updated":"2014-05-26 09:22:33.000000000","message":"You can remove \"and value is not None\" here because \"if value\" statement has checked already that value is not None.","commit_id":"d8dd8ba8ff2af673f312aed654b1f5d8034a38d6"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"dee0fb93ad83b61f657be549b6d648b426f240f1","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                    \u0027remote_group_id\u0027: remote_group_id,"},{"line_number":65,"context_line":"                    \u0027remote_ip_prefix\u0027: remote_ip_prefix}"},{"line_number":66,"context_line":"        for key, value in expected.iteritems():"},{"line_number":67,"context_line":"            if value and value is not None:"},{"line_number":68,"context_line":"                self.assertEqual(value, sec_group_rule[key],"},{"line_number":69,"context_line":"                                 \"Field %s of the created security group\""},{"line_number":70,"context_line":"                                 \"rule does not match with %s.\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5adbc538_df6c8d39","line":67,"in_reply_to":"5adbc538_7f2b7982","updated":"2014-05-26 09:52:54.000000000","message":"Thanks Yaroslav for pointing it. We have some tests where value can be 0. \nI have to validate it in such cases, but is not required when its None. \nSo, I\u0027ll change the condition to \"if value is not None\".\n\nThanks for the review comments.","commit_id":"d8dd8ba8ff2af673f312aed654b1f5d8034a38d6"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"8fbff1950d8b0c2a6df53b858c140214376b6240","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                    \u0027remote_group_id\u0027: remote_group_id,"},{"line_number":65,"context_line":"                    \u0027remote_ip_prefix\u0027: remote_ip_prefix}"},{"line_number":66,"context_line":"        for key, value in expected.iteritems():"},{"line_number":67,"context_line":"            if value and value is not None:"},{"line_number":68,"context_line":"                self.assertEqual(value, sec_group_rule[key],"},{"line_number":69,"context_line":"                                 \"Field %s of the created security group\""},{"line_number":70,"context_line":"                                 \"rule does not match with %s.\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5adbc538_e06c4639","line":67,"in_reply_to":"5adbc538_df6c8d39","updated":"2014-05-26 11:22:20.000000000","message":"Thanks Sridhar for explanation. Just a notice, Python interprets 0 as False.","commit_id":"d8dd8ba8ff2af673f312aed654b1f5d8034a38d6"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"f6f27d335a72e1628d2e9af802626f95b71af988","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    _interface \u003d \u0027xml\u0027"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"class SecGroupIPv6Test(SecGroupTest):"},{"line_number":228,"context_line":"    _ip_version \u003d 6"},{"line_number":229,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_v6_cidr"},{"line_number":230,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3ae8d1ca_60066322","line":227,"updated":"2014-05-28 02:25:58.000000000","message":"Does it need a test class for XML test? If not, it would be better to add a comments about it. So others could realize the reason quickly.\n\nThanks!","commit_id":"5aaeba0f192781fe4f95a5950abd0e50a07bb252"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"2153f64652c8c382d90f290561e9f7c976405dc3","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    _interface \u003d \u0027xml\u0027"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"class SecGroupIPv6Test(SecGroupTest):"},{"line_number":228,"context_line":"    _ip_version \u003d 6"},{"line_number":229,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_v6_cidr"},{"line_number":230,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3ae8d1ca_d29c5b6c","line":227,"in_reply_to":"3ae8d1ca_60066322","updated":"2014-05-28 11:46:00.000000000","message":"@Liu, I have seen at couple of places in tempest where XML tests are missing. Whether it is intentional or not, I\u0027m not sure. \n\nJust noticed the following Bug in tempest, submitted few hours back, that no new XML tests should be added for \"Nova\". I\u0027m not sure if this is applicable to Neutron or not. \nhttps://bugs.launchpad.net/tempest/+bug/1323591","commit_id":"5aaeba0f192781fe4f95a5950abd0e50a07bb252"},{"author":{"_account_id":5371,"name":"Mathew Odden","email":"locke105@gmail.com","username":"locke105"},"change_message_id":"0c87b254e67df3a30719beacde4dc11d42136749","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                self.assertEqual(value, sec_group_rule[key],"},{"line_number":69,"context_line":"                                 \"Field %s of the created security group\""},{"line_number":70,"context_line":"                                 \"rule does not match with %s.\""},{"line_number":71,"context_line":"                                 % (key, value))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":74,"context_line":"    def test_list_security_groups(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_65a91f7b","line":71,"updated":"2014-07-08 23:22:21.000000000","message":"I think pep8 says to pull the % before the newline separation.","commit_id":"f6cfa7be47e74ddbe83bc44d8e0f6559301b33c9"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"a21f9d9e0d9fb0f291bfd9188c2aa69541a9d6dc","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                self.assertEqual(value, sec_group_rule[key],"},{"line_number":69,"context_line":"                                 \"Field %s of the created security group\""},{"line_number":70,"context_line":"                                 \"rule does not match with %s.\""},{"line_number":71,"context_line":"                                 % (key, value))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":74,"context_line":"    def test_list_security_groups(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_2bbd9fb2","line":71,"in_reply_to":"baada198_65a91f7b","updated":"2014-08-11 06:50:17.000000000","message":"Done","commit_id":"f6cfa7be47e74ddbe83bc44d8e0f6559301b33c9"},{"author":{"_account_id":5371,"name":"Mathew Odden","email":"locke105@gmail.com","username":"locke105"},"change_message_id":"0c87b254e67df3a30719beacde4dc11d42136749","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        # specifying icmp type (port_range_min) and icmp code"},{"line_number":170,"context_line":"        # (port_range_max) with different values. A seperate testcase"},{"line_number":171,"context_line":"        # is added for icmp protocol as icmp validation would be"},{"line_number":172,"context_line":"        # different from tcp/udp."},{"line_number":173,"context_line":"        group_create_body, _ \u003d self._create_security_group()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        sg_id \u003d group_create_body[\u0027security_group\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_a52fb7f5","line":172,"updated":"2014-07-08 23:22:21.000000000","message":"Should this maybe be a docstring (\"\"\") ?","commit_id":"f6cfa7be47e74ddbe83bc44d8e0f6559301b33c9"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"a21f9d9e0d9fb0f291bfd9188c2aa69541a9d6dc","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        # specifying icmp type (port_range_min) and icmp code"},{"line_number":170,"context_line":"        # (port_range_max) with different values. A seperate testcase"},{"line_number":171,"context_line":"        # is added for icmp protocol as icmp validation would be"},{"line_number":172,"context_line":"        # different from tcp/udp."},{"line_number":173,"context_line":"        group_create_body, _ \u003d self._create_security_group()"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        sg_id \u003d group_create_body[\u0027security_group\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_8b14eb9f","line":172,"in_reply_to":"baada198_a52fb7f5","updated":"2014-08-11 06:50:17.000000000","message":"Done","commit_id":"f6cfa7be47e74ddbe83bc44d8e0f6559301b33c9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"67ca2fe6579b78f00f812adbf20ee0124ff133e0","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                    \u0027remote_group_id\u0027: remote_group_id,"},{"line_number":65,"context_line":"                    \u0027remote_ip_prefix\u0027: remote_ip_prefix}"},{"line_number":66,"context_line":"        for key, value in expected.iteritems():"},{"line_number":67,"context_line":"            if value is not None:"},{"line_number":68,"context_line":"                self.assertEqual(value, sec_group_rule[key],"},{"line_number":69,"context_line":"                                 \"Field %s of the created security group\""},{"line_number":70,"context_line":"                                 \"rule does not match with %s.\" %"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e05476fe","line":67,"updated":"2014-08-12 05:50:57.000000000","message":"why we need to skip None case here?\nto support XML cases?","commit_id":"40336f8732e589dcd940a93e19c3b3996b1865c9"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"699c68303b096afdc26cdc190f431021da11103f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                    \u0027remote_group_id\u0027: remote_group_id,"},{"line_number":65,"context_line":"                    \u0027remote_ip_prefix\u0027: remote_ip_prefix}"},{"line_number":66,"context_line":"        for key, value in expected.iteritems():"},{"line_number":67,"context_line":"            if value is not None:"},{"line_number":68,"context_line":"                self.assertEqual(value, sec_group_rule[key],"},{"line_number":69,"context_line":"                                 \"Field %s of the created security group\""},{"line_number":70,"context_line":"                                 \"rule does not match with %s.\" %"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_29b9f6c4","line":67,"in_reply_to":"baada198_e05476fe","updated":"2014-08-12 09:37:21.000000000","message":"Some background:\nPort validation in Neutron for TCP/UDP and ICMP is handled differently. For an ICMP protocol one should be allowed to add a SG rule with port_range_min (i.e., type) alone which is not the case for TCP/UDP. Hence we have different types of tests for ICMP covering the icmp_type and icmp_code.\n\nI was actually skipping the check when icmp_code was None, simply because we did not pass any specific value to that parameter. At the same time, there is no harm in including this check as Neutron would return None when we do not specify any value to that parameter. I\u0027ll remove this check in my next patch. Thanks for the review comments.","commit_id":"40336f8732e589dcd940a93e19c3b3996b1865c9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"67ca2fe6579b78f00f812adbf20ee0124ff133e0","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        for key, value in expected.iteritems():"},{"line_number":67,"context_line":"            if value is not None:"},{"line_number":68,"context_line":"                self.assertEqual(value, sec_group_rule[key],"},{"line_number":69,"context_line":"                                 \"Field %s of the created security group\""},{"line_number":70,"context_line":"                                 \"rule does not match with %s.\" %"},{"line_number":71,"context_line":"                                 (key, value))"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_f55b5652","line":69,"updated":"2014-08-12 05:50:57.000000000","message":"One space seems necessary at the end of message.","commit_id":"40336f8732e589dcd940a93e19c3b3996b1865c9"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"699c68303b096afdc26cdc190f431021da11103f","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        for key, value in expected.iteritems():"},{"line_number":67,"context_line":"            if value is not None:"},{"line_number":68,"context_line":"                self.assertEqual(value, sec_group_rule[key],"},{"line_number":69,"context_line":"                                 \"Field %s of the created security group\""},{"line_number":70,"context_line":"                                 \"rule does not match with %s.\" %"},{"line_number":71,"context_line":"                                 (key, value))"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_96a5bdb5","line":69,"in_reply_to":"baada198_f55b5652","updated":"2014-08-12 09:37:21.000000000","message":"Done","commit_id":"40336f8732e589dcd940a93e19c3b3996b1865c9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"67ca2fe6579b78f00f812adbf20ee0124ff133e0","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        sg_id \u003d group_create_body[\u0027security_group\u0027][\u0027id\u0027]"},{"line_number":180,"context_line":"        direction \u003d \u0027ingress\u0027"},{"line_number":181,"context_line":"        protocol \u003d \u0027icmp\u0027"},{"line_number":182,"context_line":"        icmp_type_codes \u003d [(3, 2), (2, 3), (3, 0), (2, None)]"},{"line_number":183,"context_line":"        for icmp_type, icmp_code in icmp_type_codes:"},{"line_number":184,"context_line":"            self._create_verify_security_group_rule(sg_id, direction,"},{"line_number":185,"context_line":"                                                    self.ethertype, protocol,"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_00388ad2","line":182,"updated":"2014-08-12 05:50:57.000000000","message":"at line 67, (2, None) case seems skip. so I\u0027m not sure why we need to specify it here.","commit_id":"40336f8732e589dcd940a93e19c3b3996b1865c9"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"699c68303b096afdc26cdc190f431021da11103f","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        sg_id \u003d group_create_body[\u0027security_group\u0027][\u0027id\u0027]"},{"line_number":180,"context_line":"        direction \u003d \u0027ingress\u0027"},{"line_number":181,"context_line":"        protocol \u003d \u0027icmp\u0027"},{"line_number":182,"context_line":"        icmp_type_codes \u003d [(3, 2), (2, 3), (3, 0), (2, None)]"},{"line_number":183,"context_line":"        for icmp_type, icmp_code in icmp_type_codes:"},{"line_number":184,"context_line":"            self._create_verify_security_group_rule(sg_id, direction,"},{"line_number":185,"context_line":"                                                    self.ethertype, protocol,"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_a9e426df","line":182,"in_reply_to":"baada198_00388ad2","updated":"2014-08-12 09:37:21.000000000","message":"Done","commit_id":"40336f8732e589dcd940a93e19c3b3996b1865c9"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e935c6940937ff8db4a4f778c677c6592f3a3793","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    \u0027port_range_max\u0027: port_range_max,"},{"line_number":64,"context_line":"                    \u0027remote_group_id\u0027: remote_group_id,"},{"line_number":65,"context_line":"                    \u0027remote_ip_prefix\u0027: remote_ip_prefix}"},{"line_number":66,"context_line":"        for key, value in expected.iteritems():"},{"line_number":67,"context_line":"            self.assertEqual(value, sec_group_rule[key],"},{"line_number":68,"context_line":"                             \"Field %s of the created security group \""},{"line_number":69,"context_line":"                             \"rule does not match with %s.\" %"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_0240c6a3","line":66,"updated":"2014-08-28 20:27:26.000000000","message":"better if this was six.iteritems(expected) or items() for python compat","commit_id":"4c04a5b24de8d4e8b637b5cd9240da620e44825d"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"2bc256e128578d13e1a2365982010f697f5fba4c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    \u0027port_range_max\u0027: port_range_max,"},{"line_number":64,"context_line":"                    \u0027remote_group_id\u0027: remote_group_id,"},{"line_number":65,"context_line":"                    \u0027remote_ip_prefix\u0027: remote_ip_prefix}"},{"line_number":66,"context_line":"        for key, value in expected.iteritems():"},{"line_number":67,"context_line":"            self.assertEqual(value, sec_group_rule[key],"},{"line_number":68,"context_line":"                             \"Field %s of the created security group \""},{"line_number":69,"context_line":"                             \"rule does not match with %s.\" %"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_8c514638","line":66,"in_reply_to":"1abeadc6_0240c6a3","updated":"2014-09-04 09:51:03.000000000","message":"Done","commit_id":"4c04a5b24de8d4e8b637b5cd9240da620e44825d"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e935c6940937ff8db4a4f778c677c6592f3a3793","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    _interface \u003d \u0027xml\u0027"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"class SecGroupIPv6Test(SecGroupTest):"},{"line_number":228,"context_line":"    _ip_version \u003d 6"},{"line_number":229,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_v6_cidr"},{"line_number":230,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_02e8c6e0","line":227,"updated":"2014-08-28 20:27:26.000000000","message":"any reason why we aren\u0027t testing against XML?","commit_id":"4c04a5b24de8d4e8b637b5cd9240da620e44825d"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"2bc256e128578d13e1a2365982010f697f5fba4c","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    _interface \u003d \u0027xml\u0027"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"class SecGroupIPv6Test(SecGroupTest):"},{"line_number":228,"context_line":"    _ip_version \u003d 6"},{"line_number":229,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_v6_cidr"},{"line_number":230,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_07ae0fe6","line":227,"in_reply_to":"1abeadc6_02e8c6e0","updated":"2014-09-04 09:51:03.000000000","message":"Will update in my next patch. Thanks.","commit_id":"4c04a5b24de8d4e8b637b5cd9240da620e44825d"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"efe63481569cb8c0e7838860071f97dd5b3495d9","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            remote_ip_prefix\u003dremote_ip_prefix"},{"line_number":54,"context_line":"        )"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":57,"context_line":"        sec_group_rule \u003d rule_create_body[\u0027security_group_rule\u0027]"},{"line_number":58,"context_line":"        self.addCleanup(self._delete_security_group_rule,"},{"line_number":59,"context_line":"                        sec_group_rule[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_37f83ec4","line":56,"updated":"2014-09-08 15:53:10.000000000","message":"There\u0027s no need to validate response code anymore. Have a look at ./tempest/services/compute/json/security_groups_client.py the checks are already there.","commit_id":"4e6b9f2c4519f8849d177de65be248855b8a6ae0"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"2cc3966902051fbe54226a1876ef63c2c8295216","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            remote_ip_prefix\u003dremote_ip_prefix"},{"line_number":54,"context_line":"        )"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":57,"context_line":"        sec_group_rule \u003d rule_create_body[\u0027security_group_rule\u0027]"},{"line_number":58,"context_line":"        self.addCleanup(self._delete_security_group_rule,"},{"line_number":59,"context_line":"                        sec_group_rule[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_8e5d4cef","line":56,"in_reply_to":"fa98f980_37f83ec4","updated":"2014-09-08 18:03:48.000000000","message":"Thanks Jordan for your review comments.","commit_id":"4e6b9f2c4519f8849d177de65be248855b8a6ae0"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"4b34ab13bef27a44cb0a3d9220aa9bc83fe042bc","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class SecGroupTest(base.BaseSecGroupTest):"},{"line_number":27,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":28,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_cidr"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @classmethod"},{"line_number":31,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_1305f810","line":28,"updated":"2014-09-30 19:31:03.000000000","message":"shouldn\u0027t be here _ip_version \u003d 4  ?","commit_id":"21cbb99719bce2acf7e3a87dd6155c0ba3c54cc8"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"652062fa91c6e35bfcbedfdb737adf88b8c03554","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class SecGroupTest(base.BaseSecGroupTest):"},{"line_number":27,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":28,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_cidr"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @classmethod"},{"line_number":31,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_b3550cc8","line":28,"in_reply_to":"baa201ad_1305f810","updated":"2014-09-30 19:37:41.000000000","message":"@Sergey, it is not required as it is already defined in the base class.\nhttps://github.com/openstack/tempest/blob/master/tempest/api/network/base.py#L56","commit_id":"21cbb99719bce2acf7e3a87dd6155c0ba3c54cc8"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"5a3cadd6b604d98c8d9ffd2abe475f1e6ff9e4ba","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class SecGroupTest(base.BaseSecGroupTest):"},{"line_number":27,"context_line":"    _interface \u003d \u0027json\u0027"},{"line_number":28,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_cidr"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @classmethod"},{"line_number":31,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_130b38d7","line":28,"in_reply_to":"baa201ad_b3550cc8","updated":"2014-09-30 19:39:50.000000000","message":"Oops, missed it :)","commit_id":"21cbb99719bce2acf7e3a87dd6155c0ba3c54cc8"}],"tempest/api/network/test_security_groups_negative.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"c21622b0bb71a4d540e03375a111986fe239e74b","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        states \u003d [(-16, 80, \u0027Invalid value for port -16\u0027),"},{"line_number":127,"context_line":"                  (80, 79, \u0027port_range_min must be \u003c\u003d port_range_max\u0027),"},{"line_number":128,"context_line":"                  (80, 65536, \u0027Invalid value for port 65536\u0027),"},{"line_number":129,"context_line":"                  (None, 6, \u0027port_range_min must be \u003c\u003d port_range_max\u0027),"},{"line_number":130,"context_line":"                  (-16, 65536, \u0027Invalid value for port\u0027)]"},{"line_number":131,"context_line":"        for pmin, pmax, msg in states:"},{"line_number":132,"context_line":"            ex \u003d self.assertRaises("}],"source_content_type":"text/x-python","patch_set":6,"id":"3ae8d1ca_96aafcd2","line":129,"updated":"2014-05-27 05:41:14.000000000","message":"\u0027port_range_min must be \u003c\u003d port_range_max\u0027 -\u003e \u0027TCP type (port-range-min) is missing\u0027","commit_id":"5aaeba0f192781fe4f95a5950abd0e50a07bb252"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"ba704c515fbf942dfd83e23816ca82ef17803e36","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        states \u003d [(-16, 80, \u0027Invalid value for port -16\u0027),"},{"line_number":127,"context_line":"                  (80, 79, \u0027port_range_min must be \u003c\u003d port_range_max\u0027),"},{"line_number":128,"context_line":"                  (80, 65536, \u0027Invalid value for port 65536\u0027),"},{"line_number":129,"context_line":"                  (None, 6, \u0027port_range_min must be \u003c\u003d port_range_max\u0027),"},{"line_number":130,"context_line":"                  (-16, 65536, \u0027Invalid value for port\u0027)]"},{"line_number":131,"context_line":"        for pmin, pmax, msg in states:"},{"line_number":132,"context_line":"            ex \u003d self.assertRaises("}],"source_content_type":"text/x-python","patch_set":6,"id":"3ae8d1ca_dc3d82bd","line":129,"in_reply_to":"3ae8d1ca_194b7cb1","updated":"2014-05-27 09:11:37.000000000","message":"@Liu, port validation is handled differently for ICMP and TCP/UDP Protocols in Neutron. So the error messages are different. \nBackground:\nFor a tcp/udp protocol, port_range_min/max represent the minimum port number and max port number respectively while configuring. However, for ICMP they represent icmp-type and icmp-code (I think they just re-used the existing attributes for icmp instead of coming up with new attributes). \nAs an example, for ICMP we can configure a policy with port-range-min \u003e port-range-max which is not allowed for TCP/UDP protocols.","commit_id":"5aaeba0f192781fe4f95a5950abd0e50a07bb252"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"2153f64652c8c382d90f290561e9f7c976405dc3","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        states \u003d [(-16, 80, \u0027Invalid value for port -16\u0027),"},{"line_number":127,"context_line":"                  (80, 79, \u0027port_range_min must be \u003c\u003d port_range_max\u0027),"},{"line_number":128,"context_line":"                  (80, 65536, \u0027Invalid value for port 65536\u0027),"},{"line_number":129,"context_line":"                  (None, 6, \u0027port_range_min must be \u003c\u003d port_range_max\u0027),"},{"line_number":130,"context_line":"                  (-16, 65536, \u0027Invalid value for port\u0027)]"},{"line_number":131,"context_line":"        for pmin, pmax, msg in states:"},{"line_number":132,"context_line":"            ex \u003d self.assertRaises("}],"source_content_type":"text/x-python","patch_set":6,"id":"3ae8d1ca_0fc0604f","line":129,"in_reply_to":"3ae8d1ca_80a7ef4e","updated":"2014-05-28 11:46:00.000000000","message":"@Liu, you are welcome. If you are fine with the changes, you can consider giving +1 :-)","commit_id":"5aaeba0f192781fe4f95a5950abd0e50a07bb252"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"888729bcd8e52e7705973bc1f7aab1ab29a2aad6","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        states \u003d [(-16, 80, \u0027Invalid value for port -16\u0027),"},{"line_number":127,"context_line":"                  (80, 79, \u0027port_range_min must be \u003c\u003d port_range_max\u0027),"},{"line_number":128,"context_line":"                  (80, 65536, \u0027Invalid value for port 65536\u0027),"},{"line_number":129,"context_line":"                  (None, 6, \u0027port_range_min must be \u003c\u003d port_range_max\u0027),"},{"line_number":130,"context_line":"                  (-16, 65536, \u0027Invalid value for port\u0027)]"},{"line_number":131,"context_line":"        for pmin, pmax, msg in states:"},{"line_number":132,"context_line":"            ex \u003d self.assertRaises("}],"source_content_type":"text/x-python","patch_set":6,"id":"3ae8d1ca_d6fe4438","line":129,"in_reply_to":"3ae8d1ca_96aafcd2","updated":"2014-05-27 06:12:39.000000000","message":"Hi Liu,\n\nFor this combination (i.e., port_range_min \u003d None, port_range_max \u003d 6), Neutron raises SecurityGroupInvalidPortRange exception which has the following message. \n\n\"For TCP/UDP protocols, port_range_min must be \u003c\u003d port_range_max\"\nThe message does not include \"TCP type (port-range-min) is missing\".\n\nhttps://github.com/openstack/neutron/blob/master/neutron/db/securitygroups_db.py#L309\n\nhttps://github.com/openstack/neutron/blob/master/neutron/extensions/securitygroup.py#L34\n\nThanks for the review.\n\n--Sridhar.","commit_id":"5aaeba0f192781fe4f95a5950abd0e50a07bb252"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"c94089ded570b505c46df2fdfb2dc8f6d5e74a14","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        states \u003d [(-16, 80, \u0027Invalid value for port -16\u0027),"},{"line_number":127,"context_line":"                  (80, 79, \u0027port_range_min must be \u003c\u003d port_range_max\u0027),"},{"line_number":128,"context_line":"                  (80, 65536, \u0027Invalid value for port 65536\u0027),"},{"line_number":129,"context_line":"                  (None, 6, \u0027port_range_min must be \u003c\u003d port_range_max\u0027),"},{"line_number":130,"context_line":"                  (-16, 65536, \u0027Invalid value for port\u0027)]"},{"line_number":131,"context_line":"        for pmin, pmax, msg in states:"},{"line_number":132,"context_line":"            ex \u003d self.assertRaises("}],"source_content_type":"text/x-python","patch_set":6,"id":"3ae8d1ca_194b7cb1","line":129,"in_reply_to":"3ae8d1ca_d6fe4438","updated":"2014-05-27 09:02:55.000000000","message":"@Sridhar, thanks for your detail info. I understand the point. I revoke my -1.   So it looks like Neutron\u0027s issue, maybe. As it probably should have same exception message with ICMP \"(None, 6, \u0027ICMP type (port-range-min) is missing\u0027)\". How do you think?\n\nThanks!","commit_id":"5aaeba0f192781fe4f95a5950abd0e50a07bb252"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"f6f27d335a72e1628d2e9af802626f95b71af988","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        states \u003d [(-16, 80, \u0027Invalid value for port -16\u0027),"},{"line_number":127,"context_line":"                  (80, 79, \u0027port_range_min must be \u003c\u003d port_range_max\u0027),"},{"line_number":128,"context_line":"                  (80, 65536, \u0027Invalid value for port 65536\u0027),"},{"line_number":129,"context_line":"                  (None, 6, \u0027port_range_min must be \u003c\u003d port_range_max\u0027),"},{"line_number":130,"context_line":"                  (-16, 65536, \u0027Invalid value for port\u0027)]"},{"line_number":131,"context_line":"        for pmin, pmax, msg in states:"},{"line_number":132,"context_line":"            ex \u003d self.assertRaises("}],"source_content_type":"text/x-python","patch_set":6,"id":"3ae8d1ca_80a7ef4e","line":129,"in_reply_to":"3ae8d1ca_dc3d82bd","updated":"2014-05-28 02:25:58.000000000","message":"Sridhar, thanks a lot for you detail description!  I learned that from you.  :-)","commit_id":"5aaeba0f192781fe4f95a5950abd0e50a07bb252"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e935c6940937ff8db4a4f778c677c6592f3a3793","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    _interface \u003d \u0027xml\u0027"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"class NegativeSecGroupIPv6Test(NegativeSecGroupTest):"},{"line_number":199,"context_line":"    _ip_version \u003d 6"},{"line_number":200,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_v6_cidr"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_c2b32e98","line":198,"updated":"2014-08-28 20:27:26.000000000","message":"same thing regarding xml","commit_id":"4c04a5b24de8d4e8b637b5cd9240da620e44825d"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"2bc256e128578d13e1a2365982010f697f5fba4c","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    _interface \u003d \u0027xml\u0027"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"class NegativeSecGroupIPv6Test(NegativeSecGroupTest):"},{"line_number":199,"context_line":"    _ip_version \u003d 6"},{"line_number":200,"context_line":"    _tenant_network_cidr \u003d CONF.network.tenant_network_v6_cidr"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_c744071d","line":198,"in_reply_to":"1abeadc6_c2b32e98","updated":"2014-09-04 09:51:03.000000000","message":"Done","commit_id":"4c04a5b24de8d4e8b637b5cd9240da620e44825d"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"efe63481569cb8c0e7838860071f97dd5b3495d9","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            port_range_min\u003dmin_port,"},{"line_number":173,"context_line":"            port_range_max\u003dmax_port"},{"line_number":174,"context_line":"        )"},{"line_number":175,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        # Try creating the same security group rule, it should fail"},{"line_number":178,"context_line":"        self.assertRaises("}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_08a5d703","line":175,"updated":"2014-09-08 15:53:10.000000000","message":"ditto","commit_id":"4e6b9f2c4519f8849d177de65be248855b8a6ae0"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"2cc3966902051fbe54226a1876ef63c2c8295216","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            port_range_min\u003dmin_port,"},{"line_number":173,"context_line":"            port_range_max\u003dmax_port"},{"line_number":174,"context_line":"        )"},{"line_number":175,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        # Try creating the same security group rule, it should fail"},{"line_number":178,"context_line":"        self.assertRaises("}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_6ebae80b","line":175,"in_reply_to":"fa98f980_08a5d703","updated":"2014-09-08 18:03:48.000000000","message":"Done","commit_id":"4e6b9f2c4519f8849d177de65be248855b8a6ae0"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"66e9aaac4b1c39d75da9392a754335582c577822","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                remote_ip_prefix\u003dremote_ip_prefix)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":83,"context_line":"    def test_create_security_group_rule_with_bad_remote_group_id(self):"},{"line_number":84,"context_line":"        group_create_body, _ \u003d self._create_security_group()"},{"line_number":85,"context_line":"        non_exist_id \u003d str(uuid.uuid4())"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_aa82c791","line":83,"updated":"2014-10-02 12:25:57.000000000","message":"nit: s/bad/nonexistent/ because of NotFound exception.","commit_id":"21cbb99719bce2acf7e3a87dd6155c0ba3c54cc8"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"958a0e42968b7d41676db04515a4ff01e3982597","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                remote_ip_prefix\u003dremote_ip_prefix)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":83,"context_line":"    def test_create_security_group_rule_with_bad_remote_group_id(self):"},{"line_number":84,"context_line":"        group_create_body, _ \u003d self._create_security_group()"},{"line_number":85,"context_line":"        non_exist_id \u003d str(uuid.uuid4())"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_20550150","line":83,"in_reply_to":"baa201ad_aa82c791","updated":"2014-10-03 06:54:53.000000000","message":"Done","commit_id":"21cbb99719bce2acf7e3a87dd6155c0ba3c54cc8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"66e9aaac4b1c39d75da9392a754335582c577822","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        group_create_body, _ \u003d self._create_security_group()"},{"line_number":85,"context_line":"        non_exist_id \u003d str(uuid.uuid4())"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        # Create rule with bad remote_group_id"},{"line_number":88,"context_line":"        group_ids \u003d [\u0027bad_group_id\u0027, non_exist_id]"},{"line_number":89,"context_line":"        for remote_group_id in group_ids:"},{"line_number":90,"context_line":"            self.assertRaises("}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_0a4f5393","line":87,"updated":"2014-10-02 12:25:57.000000000","message":"nit: s/bad/nonexistent/","commit_id":"21cbb99719bce2acf7e3a87dd6155c0ba3c54cc8"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"958a0e42968b7d41676db04515a4ff01e3982597","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        group_create_body, _ \u003d self._create_security_group()"},{"line_number":85,"context_line":"        non_exist_id \u003d str(uuid.uuid4())"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        # Create rule with bad remote_group_id"},{"line_number":88,"context_line":"        group_ids \u003d [\u0027bad_group_id\u0027, non_exist_id]"},{"line_number":89,"context_line":"        for remote_group_id in group_ids:"},{"line_number":90,"context_line":"            self.assertRaises("}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_4050455e","line":87,"in_reply_to":"baa201ad_0a4f5393","updated":"2014-10-03 06:54:53.000000000","message":"Done","commit_id":"21cbb99719bce2acf7e3a87dd6155c0ba3c54cc8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"66e9aaac4b1c39d75da9392a754335582c577822","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                exceptions.BadRequest, self.client.create_security_group_rule,"},{"line_number":146,"context_line":"                security_group_id\u003dgroup_create_body[\u0027security_group\u0027][\u0027id\u0027],"},{"line_number":147,"context_line":"                protocol\u003d\u0027icmp\u0027, port_range_min\u003dpmin, port_range_max\u003dpmax,"},{"line_number":148,"context_line":"                direction\u003d\u0027ingress\u0027, ethertype\u003dself.ethertype)"},{"line_number":149,"context_line":"            self.assertIn(msg, str(ex))"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027, \u0027smoke\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_adbae120","line":148,"updated":"2014-10-02 12:25:57.000000000","message":"This new assertRaises seems to break check-tempest-dsvm-neutron-full-icehouse like the following:\n\nTraceback (most recent call last):\n  File \"tempest/api/network/test_security_groups_negative.py\", line 148, in test_create_security_group_rule_with_invalid_ports\n    direction\u003d\u0027ingress\u0027, ethertype\u003dself.ethertype)\n  File \"/usr/local/lib/python2.7/dist-packages/testtools/testcase.py\", line 420, in assertRaises\n    self.assertThat(our_callable, matcher)\n  File \"/usr/local/lib/python2.7/dist-packages/testtools/testcase.py\", line 433, in assertThat\n    raise mismatch_error\nMismatchError: \u003cfunction _create at 0x90781b8\u003e returned ({\u0027status\u0027: \u0027201\u0027, \u0027content-length\u0027: \u0027342\u0027, \u0027connection\u0027: \u0027close\u0027, \u0027date\u0027: \u0027Mon, 08 Sep 2014 18:58:49 GMT\u0027, \u0027content-type\u0027: \u0027application/json; charset\u003dUTF-8\u0027, \u0027x-openstack-request-id\u0027: \u0027req-988314e6-6a95-4dad-b4e6-bcfa034655e8\u0027}, {u\u0027security_group_rule\u0027: {u\u0027remote_group_id\u0027: None, u\u0027direction\u0027: u\u0027ingress\u0027, u\u0027protocol\u0027: u\u0027icmp\u0027, u\u0027tenant_id\u0027: u\u0027d5654a3b96794dddbac830e5c6312ccc\u0027, u\u0027port_range_max\u0027: 6, u\u0027security_group_id\u0027: u\u0027467633df-5f2e-44ac-815f-0d4b8d6134d8\u0027, u\u0027port_range_min\u0027: None, u\u0027remote_ip_prefix\u0027: None, u\u0027id\u0027: u\u00271395d4a1-fe37-473f-9b2e-7be3b78d59b7\u0027, u\u0027ethertype\u0027: u\u0027IPv6\u0027}})\n\nNow check-tempest-dsvm-neutron-full-icehouse is \"non voting\" and this patch can be passed via the gate, but I don\u0027t think that is not good. We should avoid such situation.","commit_id":"21cbb99719bce2acf7e3a87dd6155c0ba3c54cc8"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"958a0e42968b7d41676db04515a4ff01e3982597","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                exceptions.BadRequest, self.client.create_security_group_rule,"},{"line_number":146,"context_line":"                security_group_id\u003dgroup_create_body[\u0027security_group\u0027][\u0027id\u0027],"},{"line_number":147,"context_line":"                protocol\u003d\u0027icmp\u0027, port_range_min\u003dpmin, port_range_max\u003dpmax,"},{"line_number":148,"context_line":"                direction\u003d\u0027ingress\u0027, ethertype\u003dself.ethertype)"},{"line_number":149,"context_line":"            self.assertIn(msg, str(ex))"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027, \u0027smoke\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_a09651ee","line":148,"in_reply_to":"baa201ad_4b922ba0","updated":"2014-10-03 06:54:53.000000000","message":"Sure Ken\u0027ichi, I\u0027ll do the necessary changes. Thanks for reviewing.","commit_id":"21cbb99719bce2acf7e3a87dd6155c0ba3c54cc8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2d8cf61da075b4633f722f02e556664e63d173a6","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                exceptions.BadRequest, self.client.create_security_group_rule,"},{"line_number":146,"context_line":"                security_group_id\u003dgroup_create_body[\u0027security_group\u0027][\u0027id\u0027],"},{"line_number":147,"context_line":"                protocol\u003d\u0027icmp\u0027, port_range_min\u003dpmin, port_range_max\u003dpmax,"},{"line_number":148,"context_line":"                direction\u003d\u0027ingress\u0027, ethertype\u003dself.ethertype)"},{"line_number":149,"context_line":"            self.assertIn(msg, str(ex))"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027, \u0027smoke\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_4b922ba0","line":148,"in_reply_to":"baa201ad_7a698224","updated":"2014-10-03 03:33:39.000000000","message":"Now check-tempest-dsvm-neutron-full-icehouse sometimes fails even if not applying this patch. that is a reason why the gate is non-voting.\n\nbut if applying this patch, the gate is broken completely.\nWe should avoid such situation. So how about removing the above part from this patch, and trying to push the patch to icehouse branch of Neutron? after that, we can push the above part into Tempest.","commit_id":"21cbb99719bce2acf7e3a87dd6155c0ba3c54cc8"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"16186d0cb33e246460e757c80c60e0d6f7142e76","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                exceptions.BadRequest, self.client.create_security_group_rule,"},{"line_number":146,"context_line":"                security_group_id\u003dgroup_create_body[\u0027security_group\u0027][\u0027id\u0027],"},{"line_number":147,"context_line":"                protocol\u003d\u0027icmp\u0027, port_range_min\u003dpmin, port_range_max\u003dpmax,"},{"line_number":148,"context_line":"                direction\u003d\u0027ingress\u0027, ethertype\u003dself.ethertype)"},{"line_number":149,"context_line":"            self.assertIn(msg, str(ex))"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027, \u0027smoke\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_7a698224","line":148,"in_reply_to":"baa201ad_adbae120","updated":"2014-10-02 18:28:00.000000000","message":"Hi Ken\u0027ichi,\n\nThe reason it is failing in check-tempest-dsvm-neutron-full-icehouse (Non-Voting) is because IceHouse has a bug in Security Groups ICMP rules. \nIt is fixed as part of the following bug which is merged in Juno.\nhttps://bugs.launchpad.net/neutron/+bug/1301838\n\nThe assertRaises breaks for (None, 6 combination) because the fix is not available in IceHouse. \n\nThanks for reviewing the patch.\n\n--Sridhar.","commit_id":"21cbb99719bce2acf7e3a87dd6155c0ba3c54cc8"}]}
