)]}'
{"tempest/api/network/test_fwaas_extensions.py":[{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"b44fa7b134818e37d00558624cbe958a576c7897","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        cls.fw_rule \u003d cls.create_firewall_rule(\"allow\", \"tcp\")"},{"line_number":56,"context_line":"        cls.fw_policy \u003d cls.create_firewall_policy()"},{"line_number":57,"context_line":"        cls.source_ips \u003d {6: \u00272001::/64\u0027, 4: \u002710.20.0.0/32\u0027}"},{"line_number":58,"context_line":"        cls.dest_ips \u003d {6: \u00272002::/64\u0027, 4: \u002710.30.0.0/32\u0027}"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def _compare_resource_attrs(self, actual, expected):"},{"line_number":61,"context_line":"        exclude_keys \u003d set(actual).symmetric_difference(expected)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_f5c25c32","line":58,"updated":"2014-10-09 00:30:47.000000000","message":"I\u0027m against hardcoding IPs in the test. We have CONF.network.tenant_network_cidr and \nCONF.network.tenant_network_v6_cidr\n\nAlso CONF.network.tenant_network_v6_mask_bits and CONF.network.tenant_network_mask_bits\n\nCan you calculate your subnets from there?","commit_id":"99947ea8569074ad0cce4f518ac76fba87146db5"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"fd41b2a582db4b2b0a21f5e7a1d8d87973aa2499","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        cls.fw_rule \u003d cls.create_firewall_rule(\"allow\", \"tcp\")"},{"line_number":56,"context_line":"        cls.fw_policy \u003d cls.create_firewall_policy()"},{"line_number":57,"context_line":"        cls.source_ips \u003d {6: \u00272001::/64\u0027, 4: \u002710.20.0.0/32\u0027}"},{"line_number":58,"context_line":"        cls.dest_ips \u003d {6: \u00272002::/64\u0027, 4: \u002710.30.0.0/32\u0027}"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def _compare_resource_attrs(self, actual, expected):"},{"line_number":61,"context_line":"        exclude_keys \u003d set(actual).symmetric_difference(expected)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_164c3c76","line":58,"in_reply_to":"baa201ad_f5c25c32","updated":"2014-10-09 12:11:09.000000000","message":"Done","commit_id":"99947ea8569074ad0cce4f518ac76fba87146db5"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"b44fa7b134818e37d00558624cbe958a576c7897","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        self.assertTrue(body[\"firewall_rule\"][\u0027shared\u0027])"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        # Delete firewall rule"},{"line_number":128,"context_line":"        self.client.delete_firewall_rule(fw_rule_id)"},{"line_number":129,"context_line":"        # Confirm deletion"},{"line_number":130,"context_line":"        resp, fw_rules \u003d self.client.list_firewall_rules()"},{"line_number":131,"context_line":"        self.assertNotIn(fw_rule_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_75dcac46","line":128,"updated":"2014-10-09 00:30:47.000000000","message":"how about checking response code from server?","commit_id":"99947ea8569074ad0cce4f518ac76fba87146db5"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"fd41b2a582db4b2b0a21f5e7a1d8d87973aa2499","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        self.assertTrue(body[\"firewall_rule\"][\u0027shared\u0027])"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        # Delete firewall rule"},{"line_number":128,"context_line":"        self.client.delete_firewall_rule(fw_rule_id)"},{"line_number":129,"context_line":"        # Confirm deletion"},{"line_number":130,"context_line":"        resp, fw_rules \u003d self.client.list_firewall_rules()"},{"line_number":131,"context_line":"        self.assertNotIn(fw_rule_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_9c8bf4c1","line":128,"in_reply_to":"baa201ad_75dcac46","updated":"2014-10-09 12:11:09.000000000","message":"Response checking has been moved away from tests to clients, so wont be checking reponse here.\n\nhttps://blueprints.launchpad.net/tempest/+spec/client-checks-success","commit_id":"99947ea8569074ad0cce4f518ac76fba87146db5"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"b44fa7b134818e37d00558624cbe958a576c7897","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        # Confirm deletion"},{"line_number":130,"context_line":"        resp, fw_rules \u003d self.client.list_firewall_rules()"},{"line_number":131,"context_line":"        self.assertNotIn(fw_rule_id,"},{"line_number":132,"context_line":"                         [m[\u0027id\u0027] for m in fw_rules[\u0027firewall_rules\u0027]])"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_create_update_delete_firewall_rule_extra_args(self):"},{"line_number":135,"context_line":"        # Create firewall rule"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_151440e7","line":132,"updated":"2014-10-09 00:30:47.000000000","message":"it\u0027s better to use \"rule\", not \"m\"","commit_id":"99947ea8569074ad0cce4f518ac76fba87146db5"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"fd41b2a582db4b2b0a21f5e7a1d8d87973aa2499","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        # Confirm deletion"},{"line_number":130,"context_line":"        resp, fw_rules \u003d self.client.list_firewall_rules()"},{"line_number":131,"context_line":"        self.assertNotIn(fw_rule_id,"},{"line_number":132,"context_line":"                         [m[\u0027id\u0027] for m in fw_rules[\u0027firewall_rules\u0027]])"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_create_update_delete_firewall_rule_extra_args(self):"},{"line_number":135,"context_line":"        # Create firewall rule"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_57a40507","line":132,"in_reply_to":"baa201ad_151440e7","updated":"2014-10-09 12:11:09.000000000","message":"Done","commit_id":"99947ea8569074ad0cce4f518ac76fba87146db5"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"b44fa7b134818e37d00558624cbe958a576c7897","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        if self._ip_version \u003d\u003d 6:"},{"line_number":156,"context_line":"            new_ip_version \u003d 4"},{"line_number":157,"context_line":"        else:"},{"line_number":158,"context_line":"            new_ip_version \u003d 6"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        kwargs \u003d dict("},{"line_number":161,"context_line":"            name\u003ddata_utils.rand_name(\"fw-rule\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_959bd064","line":158,"updated":"2014-10-09 00:30:47.000000000","message":"why not oneliner? new_ip_version \u003d 4 if self._ip_version \u003d\u003d 6 else 6","commit_id":"99947ea8569074ad0cce4f518ac76fba87146db5"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"fd41b2a582db4b2b0a21f5e7a1d8d87973aa2499","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        if self._ip_version \u003d\u003d 6:"},{"line_number":156,"context_line":"            new_ip_version \u003d 4"},{"line_number":157,"context_line":"        else:"},{"line_number":158,"context_line":"            new_ip_version \u003d 6"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        kwargs \u003d dict("},{"line_number":161,"context_line":"            name\u003ddata_utils.rand_name(\"fw-rule\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_f75b391f","line":158,"in_reply_to":"baa201ad_959bd064","updated":"2014-10-09 12:11:09.000000000","message":"Done","commit_id":"99947ea8569074ad0cce4f518ac76fba87146db5"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"b44fa7b134818e37d00558624cbe958a576c7897","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            shared\u003dFalse,"},{"line_number":166,"context_line":"            ip_version\u003dnew_ip_version,"},{"line_number":167,"context_line":"            source_ip_address\u003dself.dest_ips[self._ip_version],"},{"line_number":168,"context_line":"            destination_ip_address\u003dself.source_ips[self._ip_version],"},{"line_number":169,"context_line":"            source_port\u003d\"800\","},{"line_number":170,"context_line":"            destination_port\u003d\"500\","},{"line_number":171,"context_line":"            enabled\u003dTrue"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_b5fa9472","line":168,"updated":"2014-10-09 00:30:47.000000000","message":"Shouldn\u0027t it be self.dest_ips[new_ip_version] and source_ips[new_ip_version]?","commit_id":"99947ea8569074ad0cce4f518ac76fba87146db5"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"fd41b2a582db4b2b0a21f5e7a1d8d87973aa2499","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            shared\u003dFalse,"},{"line_number":166,"context_line":"            ip_version\u003dnew_ip_version,"},{"line_number":167,"context_line":"            source_ip_address\u003dself.dest_ips[self._ip_version],"},{"line_number":168,"context_line":"            destination_ip_address\u003dself.source_ips[self._ip_version],"},{"line_number":169,"context_line":"            source_port\u003d\"800\","},{"line_number":170,"context_line":"            destination_port\u003d\"500\","},{"line_number":171,"context_line":"            enabled\u003dTrue"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_b7c1b181","line":168,"in_reply_to":"baa201ad_b5fa9472","updated":"2014-10-09 12:11:09.000000000","message":"While updating, I want to swap the source and dest ip, to check if those fields update correctly. Hence the swap.","commit_id":"99947ea8569074ad0cce4f518ac76fba87146db5"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"29298ab215b9a5928d9af838c6dfe25b6425bc1a","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        cls.source_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + 1),"},{"line_number":63,"context_line":"                          4: str(netaddr.IPAddress(cidr_v4) + 1)}"},{"line_number":64,"context_line":"        cls.dest_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + 2),"},{"line_number":65,"context_line":"                        4: str(netaddr.IPAddress(cidr_v4) + 2)}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def _compare_resource_attrs(self, actual, expected):"},{"line_number":68,"context_line":"        exclude_keys \u003d set(actual).symmetric_difference(expected)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_066b2386","line":65,"updated":"2014-10-09 18:06:14.000000000","message":"Actually I meant something like this:\n\n  cidr \u003d netaddr.IPNetwork(CONF.network.tenant_network_cidr)\n  mask_bits \u003d  CONF.network.tenant_network_mask_bits\n  subnet \u003d next(cidr.subnet(mask))\n  ip \u003d str(netaddr.IPAddress(subnet) + 1)\n\nBecause you take all allocated network space. I don\u0027t believe it\u0027s important for these tests, but anyway.. For your decision.","commit_id":"4fa5b432eff0f4c8968d82c554478a541ca172d0"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"b299c4954d4859c1bfdae0eaf0c7fdc6b3595443","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        cls.source_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + 1),"},{"line_number":63,"context_line":"                          4: str(netaddr.IPAddress(cidr_v4) + 1)}"},{"line_number":64,"context_line":"        cls.dest_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + 2),"},{"line_number":65,"context_line":"                        4: str(netaddr.IPAddress(cidr_v4) + 2)}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def _compare_resource_attrs(self, actual, expected):"},{"line_number":68,"context_line":"        exclude_keys \u003d set(actual).symmetric_difference(expected)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_cce692e8","line":65,"in_reply_to":"baa201ad_066b2386","updated":"2014-10-10 09:28:14.000000000","message":"It does not make much difference, since these cidrs are only used to create the rule.\n\nI would prefer to keep it as is for now.","commit_id":"4fa5b432eff0f4c8968d82c554478a541ca172d0"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"29298ab215b9a5928d9af838c6dfe25b6425bc1a","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            description\u003d\"changed\","},{"line_number":177,"context_line":"            shared\u003dFalse,"},{"line_number":178,"context_line":"            ip_version\u003dnew_ip_version,"},{"line_number":179,"context_line":"            source_ip_address\u003dself.dest_ips[self._ip_version],"},{"line_number":180,"context_line":"            destination_ip_address\u003dself.source_ips[self._ip_version],"},{"line_number":181,"context_line":"            source_port\u003d\"800\","},{"line_number":182,"context_line":"            destination_port\u003d\"500\","}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_2b1632f2","line":179,"updated":"2014-10-09 18:06:14.000000000","message":"I meant here swap of \"new_ip_version\" to \"self._ip_version\": self.dest_ips[self._ip_version] or self.dest_ips[new_ip_version] ?","commit_id":"4fa5b432eff0f4c8968d82c554478a541ca172d0"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"b299c4954d4859c1bfdae0eaf0c7fdc6b3595443","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            description\u003d\"changed\","},{"line_number":177,"context_line":"            shared\u003dFalse,"},{"line_number":178,"context_line":"            ip_version\u003dnew_ip_version,"},{"line_number":179,"context_line":"            source_ip_address\u003dself.dest_ips[self._ip_version],"},{"line_number":180,"context_line":"            destination_ip_address\u003dself.source_ips[self._ip_version],"},{"line_number":181,"context_line":"            source_port\u003d\"800\","},{"line_number":182,"context_line":"            destination_port\u003d\"500\","}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_8cdc8a1a","line":179,"in_reply_to":"baa201ad_2b1632f2","updated":"2014-10-10 09:28:14.000000000","message":"You are right, fixed it.","commit_id":"4fa5b432eff0f4c8968d82c554478a541ca172d0"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"db00248a3a200607de67c332c07cf0fb85877db1","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        cls.fw_policy \u003d cls.create_firewall_policy()"},{"line_number":60,"context_line":"        cidr_v4 \u003d netaddr.IPNetwork(CONF.network.tenant_network_cidr)"},{"line_number":61,"context_line":"        cidr_v6 \u003d netaddr.IPNetwork(CONF.network.tenant_network_v6_cidr)"},{"line_number":62,"context_line":"        cls.source_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + 1),"},{"line_number":63,"context_line":"                          4: str(netaddr.IPAddress(cidr_v4) + 1)}"},{"line_number":64,"context_line":"        cls.dest_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + 2),"},{"line_number":65,"context_line":"                        4: str(netaddr.IPAddress(cidr_v4) + 2)}"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_a1b080de","line":62,"updated":"2014-10-20 07:18:15.000000000","message":"nit: IMO having hard coded values in the code doesn\u0027t look too good. any chance you could define those ranges as constants at the top of the module/class/method?\n\nie:\nsource \u003d netaddr() + START\ndest \u003d netaddr() + START + RANGE","commit_id":"cf07972f0abe59875ba97f32959bf0986f726cd9"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"17a71344655e78a96f2a58210b887f36cc00a186","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        cls.fw_policy \u003d cls.create_firewall_policy()"},{"line_number":60,"context_line":"        cidr_v4 \u003d netaddr.IPNetwork(CONF.network.tenant_network_cidr)"},{"line_number":61,"context_line":"        cidr_v6 \u003d netaddr.IPNetwork(CONF.network.tenant_network_v6_cidr)"},{"line_number":62,"context_line":"        cls.source_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + 1),"},{"line_number":63,"context_line":"                          4: str(netaddr.IPAddress(cidr_v4) + 1)}"},{"line_number":64,"context_line":"        cls.dest_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + 2),"},{"line_number":65,"context_line":"                        4: str(netaddr.IPAddress(cidr_v4) + 2)}"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_8c09cd33","line":62,"in_reply_to":"9aa7fdbe_a1b080de","updated":"2014-10-21 09:32:28.000000000","message":"Done","commit_id":"cf07972f0abe59875ba97f32959bf0986f726cd9"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"db00248a3a200607de67c332c07cf0fb85877db1","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        cls.dest_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + 2),"},{"line_number":65,"context_line":"                        4: str(netaddr.IPAddress(cidr_v4) + 2)}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def _compare_resource_attrs(self, actual, expected):"},{"line_number":68,"context_line":"        exclude_keys \u003d set(actual).symmetric_difference(expected)"},{"line_number":69,"context_line":"        self.assertThat(actual, custom_matchers.MatchesDictExceptForKeys("},{"line_number":70,"context_line":"                        expected, exclude_keys))"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_c103c471","line":67,"updated":"2014-10-20 07:18:15.000000000","message":"nit: maybe a a comment to explain the value here (symmetric_difference is not trivial - to me at least)\n\nor better yet - a docstring for the method.","commit_id":"cf07972f0abe59875ba97f32959bf0986f726cd9"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"17a71344655e78a96f2a58210b887f36cc00a186","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        cls.dest_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + 2),"},{"line_number":65,"context_line":"                        4: str(netaddr.IPAddress(cidr_v4) + 2)}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def _compare_resource_attrs(self, actual, expected):"},{"line_number":68,"context_line":"        exclude_keys \u003d set(actual).symmetric_difference(expected)"},{"line_number":69,"context_line":"        self.assertThat(actual, custom_matchers.MatchesDictExceptForKeys("},{"line_number":70,"context_line":"                        expected, exclude_keys))"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_d7e43e3d","line":67,"in_reply_to":"9aa7fdbe_c103c471","updated":"2014-10-21 09:32:28.000000000","message":"Done","commit_id":"cf07972f0abe59875ba97f32959bf0986f726cd9"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"5519384cfbd7e814888b9f68ea5b8f6b79bbccca","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        cls.dest_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + 2),"},{"line_number":65,"context_line":"                        4: str(netaddr.IPAddress(cidr_v4) + 2)}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def _compare_resource_attrs(self, actual, expected):"},{"line_number":68,"context_line":"        exclude_keys \u003d set(actual).symmetric_difference(expected)"},{"line_number":69,"context_line":"        self.assertThat(actual, custom_matchers.MatchesDictExceptForKeys("},{"line_number":70,"context_line":"                        expected, exclude_keys))"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_5cceae84","line":67,"in_reply_to":"9aa7fdbe_d7e43e3d","updated":"2014-10-21 09:53:35.000000000","message":"where?","commit_id":"cf07972f0abe59875ba97f32959bf0986f726cd9"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"db00248a3a200607de67c332c07cf0fb85877db1","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            ip_version\u003dself._ip_version,"},{"line_number":158,"context_line":"            source_ip_address\u003dself.source_ips[self._ip_version],"},{"line_number":159,"context_line":"            destination_ip_address\u003dself.dest_ips[self._ip_version],"},{"line_number":160,"context_line":"            source_port\u003d\"700\","},{"line_number":161,"context_line":"            destination_port\u003d\"400\","},{"line_number":162,"context_line":"            enabled\u003dFalse"},{"line_number":163,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_411d14bd","line":160,"updated":"2014-10-20 07:18:15.000000000","message":"nit: same here about hard-coded constants","commit_id":"cf07972f0abe59875ba97f32959bf0986f726cd9"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"17a71344655e78a96f2a58210b887f36cc00a186","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            ip_version\u003dself._ip_version,"},{"line_number":158,"context_line":"            source_ip_address\u003dself.source_ips[self._ip_version],"},{"line_number":159,"context_line":"            destination_ip_address\u003dself.dest_ips[self._ip_version],"},{"line_number":160,"context_line":"            source_port\u003d\"700\","},{"line_number":161,"context_line":"            destination_port\u003d\"400\","},{"line_number":162,"context_line":"            enabled\u003dFalse"},{"line_number":163,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_17d6c64f","line":160,"in_reply_to":"9aa7fdbe_411d14bd","updated":"2014-10-21 09:32:28.000000000","message":"Done","commit_id":"cf07972f0abe59875ba97f32959bf0986f726cd9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"cbdf314ec4130086e8fa0a8887ca28c608a49492","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def test_create_update_delete_firewall_rule(self):"},{"line_number":137,"context_line":"        # Create firewall rule"},{"line_number":138,"context_line":"        _, body \u003d self.client.create_firewall_rule("},{"line_number":139,"context_line":"            name\u003ddata_utils.rand_name(\"fw-rule\"),"},{"line_number":140,"context_line":"            action\u003d\"allow\","},{"line_number":141,"context_line":"            protocol\u003d\"tcp\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_fbf4bbd0","line":138,"updated":"2014-11-04 07:11:51.000000000","message":"same as below comment if you would like to add here too.","commit_id":"69ef77acbf9b80ea701d875aed3cd351d2147b22"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"cbdf314ec4130086e8fa0a8887ca28c608a49492","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            enabled\u003dFalse"},{"line_number":170,"context_line":"            )"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        _, body \u003d self.client.create_firewall_rule(**kwargs)"},{"line_number":173,"context_line":"        self._compare_resource_attrs(body[\u0027firewall_rule\u0027], kwargs)"},{"line_number":174,"context_line":"        fw_rule_id \u003d body[\u0027firewall_rule\u0027][\u0027id\u0027]"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_9b101703","line":172,"updated":"2014-11-04 07:11:51.000000000","message":"we should have AddCleanUp with _try_delete_rule for created firewall rule to avoid any resource leakage..","commit_id":"69ef77acbf9b80ea701d875aed3cd351d2147b22"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"fc441dfbe08451582e3d634872f83c13b90e12f7","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        _, body \u003d self.client.create_firewall_rule(**kwargs)"},{"line_number":174,"context_line":"        self._compare_resource_attrs(body[\u0027firewall_rule\u0027], kwargs)"},{"line_number":175,"context_line":"        fw_rule_id \u003d body[\u0027firewall_rule\u0027][\u0027id\u0027]"},{"line_number":176,"context_line":"        self.addCleanup(self._try_delete_rule, fw_rule_id)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        # Update firewall rule"},{"line_number":179,"context_line":"        new_ip_version \u003d 4 if self._ip_version \u003d\u003d 6 else 6"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_5786a8ba","line":176,"updated":"2014-11-11 00:27:22.000000000","message":"Please move L174 after addCleanUp(). We should put created rule in deleted stack before any possibility of other assert.","commit_id":"21b46fc49a2077927c1d36a31881eeb6dee847bd"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"55b04dda3046c5b2a1ce7fb484b402e3bea44c07","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    ip_range \u003d 2"},{"line_number":32,"context_line":"    source_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + ip_start),"},{"line_number":33,"context_line":"                  4: str(netaddr.IPAddress(cidr_v4) + ip_start)}"},{"line_number":34,"context_line":"    dest_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + (ip_start + ip_range)),"},{"line_number":35,"context_line":"                4: str(netaddr.IPAddress(cidr_v4) + (ip_start + ip_range))}"},{"line_number":36,"context_line":"    src_port \u003d \"700\""},{"line_number":37,"context_line":"    dest_port \u003d \"400\""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_97ee50b3","line":34,"updated":"2014-11-19 13:23:02.000000000","message":"Why do you use dictionary here instead of ordinary variables? In my understanding there is \"FWaaSExtensionTestJSON\" class that incapsulates properties of IPv4 networks by default. But child classes (Ex: FWaaSExtensionIpV6TestJSON) may override them. \n\nSo I would say each class could have it is own properties \"cidr\", \"source_ip\", \"dest_ip\".","commit_id":"97fb507f40e6cb3967b5cadd968fff4f5f69b81b"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"a7f4b402c864be862a4ff3ff1433d51c810cef29","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    ip_range \u003d 2"},{"line_number":32,"context_line":"    source_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + ip_start),"},{"line_number":33,"context_line":"                  4: str(netaddr.IPAddress(cidr_v4) + ip_start)}"},{"line_number":34,"context_line":"    dest_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + (ip_start + ip_range)),"},{"line_number":35,"context_line":"                4: str(netaddr.IPAddress(cidr_v4) + (ip_start + ip_range))}"},{"line_number":36,"context_line":"    src_port \u003d \"700\""},{"line_number":37,"context_line":"    dest_port \u003d \"400\""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_446a7d82","line":34,"in_reply_to":"5a890539_97ee50b3","updated":"2014-11-27 10:16:11.000000000","message":"Done","commit_id":"97fb507f40e6cb3967b5cadd968fff4f5f69b81b"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"c6dd4bf89d8260fab2155053842467e44db8c5ca","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    source_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + ip_start),"},{"line_number":33,"context_line":"                  4: str(netaddr.IPAddress(cidr_v4) + ip_start)}"},{"line_number":34,"context_line":"    dest_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + (ip_start + ip_range)),"},{"line_number":35,"context_line":"                4: str(netaddr.IPAddress(cidr_v4) + (ip_start + ip_range))}"},{"line_number":36,"context_line":"    src_port \u003d \"700\""},{"line_number":37,"context_line":"    dest_port \u003d \"400\""},{"line_number":38,"context_line":"    updated_src_port \u003d \"800\""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_0a2deaa8","line":35,"updated":"2014-11-26 22:58:11.000000000","message":"agree with Nikolay,\nuse static class variables as \"interface\" and \"_ip_version\":\n  _source_ips \u003d str(netaddr.IPAddress(cidr_v4) + ip_start\n  _dest_ips \u003d str(netaddr.IPAddress(cidr_v4) + ip_start\n\nthen override them in class below: \n\n  _source_ips \u003d str(netaddr.IPAddress(cidr_v6) + ip_start\n  _dest_ips \u003d str(netaddr.IPAddress(cidr_v6) + ip_start\n\nSo in test you use just self._source_ips, self._dest_ips","commit_id":"97fb507f40e6cb3967b5cadd968fff4f5f69b81b"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"a7f4b402c864be862a4ff3ff1433d51c810cef29","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    source_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + ip_start),"},{"line_number":33,"context_line":"                  4: str(netaddr.IPAddress(cidr_v4) + ip_start)}"},{"line_number":34,"context_line":"    dest_ips \u003d {6: str(netaddr.IPAddress(cidr_v6) + (ip_start + ip_range)),"},{"line_number":35,"context_line":"                4: str(netaddr.IPAddress(cidr_v4) + (ip_start + ip_range))}"},{"line_number":36,"context_line":"    src_port \u003d \"700\""},{"line_number":37,"context_line":"    dest_port \u003d \"400\""},{"line_number":38,"context_line":"    updated_src_port \u003d \"800\""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_246d719a","line":35,"in_reply_to":"5a890539_0a2deaa8","updated":"2014-11-27 10:16:11.000000000","message":"Done","commit_id":"97fb507f40e6cb3967b5cadd968fff4f5f69b81b"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"c6dd4bf89d8260fab2155053842467e44db8c5ca","unresolved":false,"context_lines":[{"line_number":334,"context_line":"    _ip_version \u003d 6"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    @classmethod"},{"line_number":337,"context_line":"    def resource_setup(cls):"},{"line_number":338,"context_line":"        if not CONF.network_feature_enabled.ipv6:"},{"line_number":339,"context_line":"            skip_msg \u003d \"IPv6 Tests are disabled.\""},{"line_number":340,"context_line":"            raise cls.skipException(skip_msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_65294189","line":337,"updated":"2014-11-26 22:58:11.000000000","message":"now you don\u0027t need this configuration change and resource setup, it\u0027s checked in base.BaseNetworkTest. Just use:\n\n  class FWaaSExtensionIpV6TestJSON(FWaaSExtensionTestJSON):\t333\n    _ip_version \u003d 6\n    _source_ips \u003d str(netaddr.IPAddress(netaddr.IPNetwork(CONF.network.tenant_network_v6_cidr)) + ip_start\n    _dest_ips \u003d str(netaddr.IPAddress(netaddr.IPNetwork(CONF.network.tenant_network_v6_cidr)) + ip_start","commit_id":"97fb507f40e6cb3967b5cadd968fff4f5f69b81b"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"a7f4b402c864be862a4ff3ff1433d51c810cef29","unresolved":false,"context_lines":[{"line_number":334,"context_line":"    _ip_version \u003d 6"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    @classmethod"},{"line_number":337,"context_line":"    def resource_setup(cls):"},{"line_number":338,"context_line":"        if not CONF.network_feature_enabled.ipv6:"},{"line_number":339,"context_line":"            skip_msg \u003d \"IPv6 Tests are disabled.\""},{"line_number":340,"context_line":"            raise cls.skipException(skip_msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_840385bd","line":337,"in_reply_to":"5a890539_65294189","updated":"2014-11-27 10:16:11.000000000","message":"Done","commit_id":"97fb507f40e6cb3967b5cadd968fff4f5f69b81b"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a87ce2d6331a74b3acb49817ce6c6e331275485b","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"class FWaaSExtensionTestXML(FWaaSExtensionTestJSON):"},{"line_number":327,"context_line":"    _interface \u003d \u0027xml\u0027"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"class FWaaSExtensionIpV6TestJSON(FWaaSExtensionTestJSON):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_45fd006e","line":327,"updated":"2014-11-28 10:18:57.000000000","message":"Now all XML tests have been removed, so we don\u0027t need to define this.\n\nhttp://lists.openstack.org/pipermail/openstack-dev/2014-November/051384.html","commit_id":"0eda485c0eec3a07ca68bca1e5045e90891f5834"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a87ce2d6331a74b3acb49817ce6c6e331275485b","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"class FWaaSExtensionIpV6TestXML(FWaaSExtensionIpV6TestJSON):"},{"line_number":340,"context_line":"    _interface \u003d \u0027xml\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_c5f01094","line":340,"updated":"2014-11-28 10:18:57.000000000","message":"ditto","commit_id":"0eda485c0eec3a07ca68bca1e5045e90891f5834"}]}
