)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"2541cd8e87633dc18a3484ee9a0b0308c5b6f60b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add test for IP substring filtering"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Depends-On: I9549b2ba676e1bad0812682c3f3f3c97de15f5f6"},{"line_number":10,"context_line":"Change-Id: I01928d31bb2dce0e941c0c462c1bd1a2d50827fa"},{"line_number":11,"context_line":"Related-Bug: #1718605"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"7f96bb07_d47924fc","line":9,"updated":"2018-01-24 09:53:53.000000000","message":"Two line extra description and explanation why this change is good would be nice.","commit_id":"3bfdd156680a09bb2a9deea52751c934c76fb6af"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"46adcd15c76ebeddbe6dae80f2ad8687c6d39adf","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add test for IP substring filtering"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Depends-On: I9549b2ba676e1bad0812682c3f3f3c97de15f5f6"},{"line_number":10,"context_line":"Change-Id: I01928d31bb2dce0e941c0c462c1bd1a2d50827fa"},{"line_number":11,"context_line":"Related-Bug: #1718605"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5f93b717_eff557ee","line":9,"in_reply_to":"7f96bb07_d47924fc","updated":"2018-01-30 16:24:48.000000000","message":"Done","commit_id":"3bfdd156680a09bb2a9deea52751c934c76fb6af"}],"tempest/api/network/test_ports.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7515ef7150137ec245da8f404bf730eeef1f3157","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        # Check that we got the desired port"},{"line_number":208,"context_line":"        ports \u003d port_list[\u0027ports\u0027]"},{"line_number":209,"context_line":"        tenant_ids \u003d set([port[\u0027tenant_id\u0027] for port in ports])"},{"line_number":210,"context_line":"        self.assertEqual(len(tenant_ids), 1,"},{"line_number":211,"context_line":"                         \u0027Ports from multiple tenants are in the list resp\u0027)"},{"line_number":212,"context_line":"        port_ids \u003d [port[\u0027id\u0027] for port in ports]"},{"line_number":213,"context_line":"        fixed_ips \u003d [port[\u0027fixed_ips\u0027] for port in ports]"}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_ea45a471","line":210,"updated":"2017-12-04 21:29:04.000000000","message":"please use pattern \"assertEqual(expected, actual)\"","commit_id":"536af0a815916580a05735a65f8a694b9424e9cc"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"7c25e4bcb91b4df7959d66d23c662f9cd275006a","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        # Check that we got the desired port"},{"line_number":208,"context_line":"        ports \u003d port_list[\u0027ports\u0027]"},{"line_number":209,"context_line":"        tenant_ids \u003d set([port[\u0027tenant_id\u0027] for port in ports])"},{"line_number":210,"context_line":"        self.assertEqual(len(tenant_ids), 1,"},{"line_number":211,"context_line":"                         \u0027Ports from multiple tenants are in the list resp\u0027)"},{"line_number":212,"context_line":"        port_ids \u003d [port[\u0027id\u0027] for port in ports]"},{"line_number":213,"context_line":"        fixed_ips \u003d [port[\u0027fixed_ips\u0027] for port in ports]"}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_6f740669","line":210,"in_reply_to":"df87a7cf_ea45a471","updated":"2017-12-06 19:12:19.000000000","message":"Done","commit_id":"536af0a815916580a05735a65f8a694b9424e9cc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7515ef7150137ec245da8f404bf730eeef1f3157","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        fixed_ips \u003d [port[\u0027fixed_ips\u0027] for port in ports]"},{"line_number":214,"context_line":"        port_ips \u003d []"},{"line_number":215,"context_line":"        for addr in fixed_ips:"},{"line_number":216,"context_line":"            port_ips.extend([port[\u0027ip_address\u0027] for port in addr])"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        port_net_ids \u003d [port[\u0027network_id\u0027] for port in ports]"},{"line_number":219,"context_line":"        self.assertIn(port_1[\u0027port\u0027][\u0027id\u0027], port_ids)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_0a19e883","line":216,"updated":"2017-12-04 21:29:04.000000000","message":"this name \"port\" is misleading for me here. Maybe better could be something like\n\n    port_ips.extend([a[\u0027ip_address\u0027] for a in addr])\n\nor something like that?","commit_id":"536af0a815916580a05735a65f8a694b9424e9cc"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"7c25e4bcb91b4df7959d66d23c662f9cd275006a","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        fixed_ips \u003d [port[\u0027fixed_ips\u0027] for port in ports]"},{"line_number":214,"context_line":"        port_ips \u003d []"},{"line_number":215,"context_line":"        for addr in fixed_ips:"},{"line_number":216,"context_line":"            port_ips.extend([port[\u0027ip_address\u0027] for port in addr])"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        port_net_ids \u003d [port[\u0027network_id\u0027] for port in ports]"},{"line_number":219,"context_line":"        self.assertIn(port_1[\u0027port\u0027][\u0027id\u0027], port_ids)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_8f6f0a91","line":216,"in_reply_to":"df87a7cf_0a19e883","updated":"2017-12-06 19:12:19.000000000","message":"Done","commit_id":"536af0a815916580a05735a65f8a694b9424e9cc"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"6f97235895154cf6bec282b5d6b0fbce6ac19d49","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        network \u003d self.create_network()"},{"line_number":185,"context_line":"        subnet \u003d self.create_subnet(network)"},{"line_number":186,"context_line":"        self.addCleanup(self.subnets_client.delete_subnet, subnet[\u0027id\u0027])"},{"line_number":187,"context_line":"        # Create two ports"},{"line_number":188,"context_line":"        port_1 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027])"},{"line_number":189,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":190,"context_line":"        port_2 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_d70604cf","line":187,"range":{"start_line":187,"start_character":8,"end_line":187,"end_character":26},"updated":"2017-12-07 02:32:27.000000000","message":"better to add a blank line to seperate the code blocks?","commit_id":"bf8a9f33bbeaeae1cf4d4c20590cd296f6076416"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"e35f20d58e6a5c28e7e9e2ff8df27604029438cd","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        network \u003d self.create_network()"},{"line_number":185,"context_line":"        subnet \u003d self.create_subnet(network)"},{"line_number":186,"context_line":"        self.addCleanup(self.subnets_client.delete_subnet, subnet[\u0027id\u0027])"},{"line_number":187,"context_line":"        # Create two ports"},{"line_number":188,"context_line":"        port_1 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027])"},{"line_number":189,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":190,"context_line":"        port_2 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_2cd15ffc","line":187,"range":{"start_line":187,"start_character":8,"end_line":187,"end_character":26},"in_reply_to":"df87a7cf_d70604cf","updated":"2018-01-03 19:56:07.000000000","message":"Done","commit_id":"bf8a9f33bbeaeae1cf4d4c20590cd296f6076416"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"6f97235895154cf6bec282b5d6b0fbce6ac19d49","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        # Create two ports"},{"line_number":188,"context_line":"        port_1 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027])"},{"line_number":189,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":190,"context_line":"        port_2 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027])"},{"line_number":191,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_2[\u0027port\u0027][\u0027id\u0027])"},{"line_number":192,"context_line":"        # List ports filtered by fixed_ips"},{"line_number":193,"context_line":"        port_1_fixed_ip \u003d port_1[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_17bd4c01","line":190,"range":{"start_line":190,"start_character":8,"end_line":190,"end_character":14},"updated":"2017-12-07 02:32:27.000000000","message":"this seems not used?","commit_id":"bf8a9f33bbeaeae1cf4d4c20590cd296f6076416"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"e35f20d58e6a5c28e7e9e2ff8df27604029438cd","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        # Create two ports"},{"line_number":188,"context_line":"        port_1 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027])"},{"line_number":189,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":190,"context_line":"        port_2 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027])"},{"line_number":191,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_2[\u0027port\u0027][\u0027id\u0027])"},{"line_number":192,"context_line":"        # List ports filtered by fixed_ips"},{"line_number":193,"context_line":"        port_1_fixed_ip \u003d port_1[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_ecda9715","line":190,"range":{"start_line":190,"start_character":8,"end_line":190,"end_character":14},"in_reply_to":"df87a7cf_17bd4c01","updated":"2018-01-03 19:56:07.000000000","message":"Done","commit_id":"bf8a9f33bbeaeae1cf4d4c20590cd296f6076416"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"6f97235895154cf6bec282b5d6b0fbce6ac19d49","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_2[\u0027port\u0027][\u0027id\u0027])"},{"line_number":192,"context_line":"        # List ports filtered by fixed_ips"},{"line_number":193,"context_line":"        port_1_fixed_ip \u003d port_1[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":194,"context_line":"        fixed_ips \u003d \u0027ip_address_substr\u003d\u0027 + port_1_fixed_ip[1:-1]"},{"line_number":195,"context_line":"        port_list \u003d self.ports_client.list_ports(fixed_ips\u003dfixed_ips)"},{"line_number":196,"context_line":"        # Check that we got the desired port"},{"line_number":197,"context_line":"        ports \u003d port_list[\u0027ports\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_f766a8c1","line":194,"range":{"start_line":194,"start_character":8,"end_line":194,"end_character":64},"updated":"2017-12-07 02:32:27.000000000","message":"This only checks that ips that contains the substr will be listed, \nbut in this testcase nowhere to check ips that don\u0027t contain the substr won\u0027t be listed?","commit_id":"bf8a9f33bbeaeae1cf4d4c20590cd296f6076416"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"e35f20d58e6a5c28e7e9e2ff8df27604029438cd","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_2[\u0027port\u0027][\u0027id\u0027])"},{"line_number":192,"context_line":"        # List ports filtered by fixed_ips"},{"line_number":193,"context_line":"        port_1_fixed_ip \u003d port_1[\u0027port\u0027][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]"},{"line_number":194,"context_line":"        fixed_ips \u003d \u0027ip_address_substr\u003d\u0027 + port_1_fixed_ip[1:-1]"},{"line_number":195,"context_line":"        port_list \u003d self.ports_client.list_ports(fixed_ips\u003dfixed_ips)"},{"line_number":196,"context_line":"        # Check that we got the desired port"},{"line_number":197,"context_line":"        ports \u003d port_list[\u0027ports\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_0cd6dbf2","line":194,"range":{"start_line":194,"start_character":8,"end_line":194,"end_character":64},"in_reply_to":"df87a7cf_f766a8c1","updated":"2018-01-03 19:56:07.000000000","message":"Done","commit_id":"bf8a9f33bbeaeae1cf4d4c20590cd296f6076416"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"6f97235895154cf6bec282b5d6b0fbce6ac19d49","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        port_net_ids \u003d [port[\u0027network_id\u0027] for port in ports]"},{"line_number":208,"context_line":"        self.assertIn(port_1[\u0027port\u0027][\u0027id\u0027], port_ids)"},{"line_number":209,"context_line":"        self.assertIn(port_1_fixed_ip, port_ips)"},{"line_number":210,"context_line":"        self.assertIn(network[\u0027id\u0027], port_net_ids)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    @decorators.idempotent_id(\u00275ad01ed0-0e6e-4c5d-8194-232801b15c72\u0027)"},{"line_number":213,"context_line":"    def test_port_list_filter_by_router_id(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"df87a7cf_7772987d","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":50},"updated":"2017-12-07 02:32:27.000000000","message":"better to move this up to right behind L207?","commit_id":"bf8a9f33bbeaeae1cf4d4c20590cd296f6076416"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"e35f20d58e6a5c28e7e9e2ff8df27604029438cd","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        port_net_ids \u003d [port[\u0027network_id\u0027] for port in ports]"},{"line_number":208,"context_line":"        self.assertIn(port_1[\u0027port\u0027][\u0027id\u0027], port_ids)"},{"line_number":209,"context_line":"        self.assertIn(port_1_fixed_ip, port_ips)"},{"line_number":210,"context_line":"        self.assertIn(network[\u0027id\u0027], port_net_ids)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    @decorators.idempotent_id(\u00275ad01ed0-0e6e-4c5d-8194-232801b15c72\u0027)"},{"line_number":213,"context_line":"    def test_port_list_filter_by_router_id(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_ac06cf85","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":50},"in_reply_to":"df87a7cf_7772987d","updated":"2018-01-03 19:56:07.000000000","message":"Done","commit_id":"bf8a9f33bbeaeae1cf4d4c20590cd296f6076416"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"21182d7b4e506a09d33a7e90e0c4d57fe5b5f782","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            else:"},{"line_number":201,"context_line":"                ip_address_2 \u003d ip_address_1"},{"line_number":202,"context_line":"                ip_address_1 \u003d six.text_type(ip)"},{"line_number":203,"context_line":"                # Make sure these two IP addresses have different prefix"},{"line_number":204,"context_line":"                if ip_address_1[:-1] !\u003d ip_address_2[:-1]:"},{"line_number":205,"context_line":"                    break"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_b546ef20","line":203,"updated":"2018-01-05 08:31:25.000000000","message":"this comment is confusing for me because as \"prefix\" usually netmask for cidr is given (like /24)\nHere, AFAIU You want to get two IP addresses which have different last part, right?","commit_id":"fd99bbb9e39e02392570c30983c526caeb61180a"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"54535e3f60dbd6e44401d9439b1cfeecf7344a04","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            else:"},{"line_number":201,"context_line":"                ip_address_2 \u003d ip_address_1"},{"line_number":202,"context_line":"                ip_address_1 \u003d six.text_type(ip)"},{"line_number":203,"context_line":"                # Make sure these two IP addresses have different prefix"},{"line_number":204,"context_line":"                if ip_address_1[:-1] !\u003d ip_address_2[:-1]:"},{"line_number":205,"context_line":"                    break"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_e7d27f5c","line":203,"in_reply_to":"9f91af0f_b546ef20","updated":"2018-01-05 20:55:51.000000000","message":"Yes. I rephrased it.","commit_id":"fd99bbb9e39e02392570c30983c526caeb61180a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"21182d7b4e506a09d33a7e90e0c4d57fe5b5f782","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        port_2 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027],"},{"line_number":215,"context_line":"                                               fixed_ips\u003dfixed_ips)"},{"line_number":216,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_2[\u0027port\u0027][\u0027id\u0027])"},{"line_number":217,"context_line":"        fixed_ips \u003d \u0027ip_address_substr\u003d\u0027 + ip_address_1[:-1]"},{"line_number":218,"context_line":"        port_list \u003d self.ports_client.list_ports(fixed_ips\u003dfixed_ips)"},{"line_number":219,"context_line":"        # Check that we got the desired port"},{"line_number":220,"context_line":"        ports \u003d port_list[\u0027ports\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_35d73f26","line":217,"updated":"2018-01-05 08:31:25.000000000","message":"from what I understand here, it\u0027s not \"fixed_ips\" but rather something like \"filter\" or \"query\", right?","commit_id":"fd99bbb9e39e02392570c30983c526caeb61180a"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"54535e3f60dbd6e44401d9439b1cfeecf7344a04","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        port_2 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027],"},{"line_number":215,"context_line":"                                               fixed_ips\u003dfixed_ips)"},{"line_number":216,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_2[\u0027port\u0027][\u0027id\u0027])"},{"line_number":217,"context_line":"        fixed_ips \u003d \u0027ip_address_substr\u003d\u0027 + ip_address_1[:-1]"},{"line_number":218,"context_line":"        port_list \u003d self.ports_client.list_ports(fixed_ips\u003dfixed_ips)"},{"line_number":219,"context_line":"        # Check that we got the desired port"},{"line_number":220,"context_line":"        ports \u003d port_list[\u0027ports\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_a7cc77bc","line":217,"in_reply_to":"9f91af0f_35d73f26","updated":"2018-01-05 20:55:51.000000000","message":"Done","commit_id":"fd99bbb9e39e02392570c30983c526caeb61180a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"21182d7b4e506a09d33a7e90e0c4d57fe5b5f782","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        fixed_ips \u003d \u0027ip_address_substr\u003d\u0027 + ip_address_1[:-1]"},{"line_number":218,"context_line":"        port_list \u003d self.ports_client.list_ports(fixed_ips\u003dfixed_ips)"},{"line_number":219,"context_line":"        # Check that we got the desired port"},{"line_number":220,"context_line":"        ports \u003d port_list[\u0027ports\u0027]"},{"line_number":221,"context_line":"        tenant_ids \u003d set([port[\u0027tenant_id\u0027] for port in ports])"},{"line_number":222,"context_line":"        self.assertEqual(1, len(tenant_ids),"},{"line_number":223,"context_line":"                         \u0027Ports from multiple tenants are in the list resp\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_1561dba9","line":220,"updated":"2018-01-05 08:31:25.000000000","message":"You can merge it with L218 and don\u0027t use port_list variable","commit_id":"fd99bbb9e39e02392570c30983c526caeb61180a"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"54535e3f60dbd6e44401d9439b1cfeecf7344a04","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        fixed_ips \u003d \u0027ip_address_substr\u003d\u0027 + ip_address_1[:-1]"},{"line_number":218,"context_line":"        port_list \u003d self.ports_client.list_ports(fixed_ips\u003dfixed_ips)"},{"line_number":219,"context_line":"        # Check that we got the desired port"},{"line_number":220,"context_line":"        ports \u003d port_list[\u0027ports\u0027]"},{"line_number":221,"context_line":"        tenant_ids \u003d set([port[\u0027tenant_id\u0027] for port in ports])"},{"line_number":222,"context_line":"        self.assertEqual(1, len(tenant_ids),"},{"line_number":223,"context_line":"                         \u0027Ports from multiple tenants are in the list resp\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f91af0f_67c66f9d","line":220,"in_reply_to":"9f91af0f_1561dba9","updated":"2018-01-05 20:55:51.000000000","message":"Done","commit_id":"fd99bbb9e39e02392570c30983c526caeb61180a"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"e4ca0a5ee44bd0c539b5edfcb254f86f61fc324f","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        port_1 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027],"},{"line_number":213,"context_line":"                                               fixed_ips\u003dfixed_ips)"},{"line_number":214,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":215,"context_line":"        # List ports filtered by fixed_ips"},{"line_number":216,"context_line":"        fixed_ips \u003d [{\u0027subnet_id\u0027: subnet[\u0027id\u0027], \u0027ip_address\u0027: ip_address_2}]"},{"line_number":217,"context_line":"        port_2 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027],"},{"line_number":218,"context_line":"                                               fixed_ips\u003dfixed_ips)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_9f8cc6d7","line":215,"range":{"start_line":215,"start_character":8,"end_line":215,"end_character":42},"updated":"2018-01-10 09:29:47.000000000","message":"this should be moved to before line 220?","commit_id":"577a286be7a4d905ae6c5af2cc2f8d86af516b99"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"e99811f08674614169a11f018db1321696a1f695","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        port_1 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027],"},{"line_number":213,"context_line":"                                               fixed_ips\u003dfixed_ips)"},{"line_number":214,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":215,"context_line":"        # List ports filtered by fixed_ips"},{"line_number":216,"context_line":"        fixed_ips \u003d [{\u0027subnet_id\u0027: subnet[\u0027id\u0027], \u0027ip_address\u0027: ip_address_2}]"},{"line_number":217,"context_line":"        port_2 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027],"},{"line_number":218,"context_line":"                                               fixed_ips\u003dfixed_ips)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_f320724c","line":215,"range":{"start_line":215,"start_character":8,"end_line":215,"end_character":42},"in_reply_to":"9f91af0f_9f8cc6d7","updated":"2018-01-10 20:29:15.000000000","message":"Done. I rephrased this comment as well.","commit_id":"577a286be7a4d905ae6c5af2cc2f8d86af516b99"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"e4ca0a5ee44bd0c539b5edfcb254f86f61fc324f","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                                               fixed_ips\u003dfixed_ips)"},{"line_number":219,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_2[\u0027port\u0027][\u0027id\u0027])"},{"line_number":220,"context_line":"        ips_filter \u003d \u0027ip_address_substr\u003d\u0027 + ip_address_1[:-1]"},{"line_number":221,"context_line":"        ports \u003d self.ports_client.list_ports(fixed_ips\u003dips_filter)[\u0027ports\u0027]"},{"line_number":222,"context_line":"        # Check that we got the desired port"},{"line_number":223,"context_line":"        tenant_ids \u003d set([port[\u0027tenant_id\u0027] for port in ports])"},{"line_number":224,"context_line":"        self.assertEqual(1, len(tenant_ids),"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f91af0f_ba151842","line":221,"range":{"start_line":221,"start_character":8,"end_line":221,"end_character":75},"updated":"2018-01-10 09:29:47.000000000","message":"I guess we should test two facets:\nif ip1\u003d\u00271.1.1.1\u0027, ip2\u003d\u00271.1.1.10\u0027, then\n1. filter by \u00271.1.1.10\u0027 will get only ip2\n2. filter by \u00271.1.1.1\u0027 will get both ip1 and ip2\nso, I seem not to see where the step2 is tested?","commit_id":"577a286be7a4d905ae6c5af2cc2f8d86af516b99"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"e99811f08674614169a11f018db1321696a1f695","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                                               fixed_ips\u003dfixed_ips)"},{"line_number":219,"context_line":"        self.addCleanup(self.ports_client.delete_port, port_2[\u0027port\u0027][\u0027id\u0027])"},{"line_number":220,"context_line":"        ips_filter \u003d \u0027ip_address_substr\u003d\u0027 + ip_address_1[:-1]"},{"line_number":221,"context_line":"        ports \u003d self.ports_client.list_ports(fixed_ips\u003dips_filter)[\u0027ports\u0027]"},{"line_number":222,"context_line":"        # Check that we got the desired port"},{"line_number":223,"context_line":"        tenant_ids \u003d set([port[\u0027tenant_id\u0027] for port in ports])"},{"line_number":224,"context_line":"        self.assertEqual(1, len(tenant_ids),"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_131e3e0c","line":221,"range":{"start_line":221,"start_character":8,"end_line":221,"end_character":75},"in_reply_to":"9f91af0f_ba151842","updated":"2018-01-10 20:29:15.000000000","message":"Done. Scenario 1 gets one port. Scenario 2 gets both ports.","commit_id":"577a286be7a4d905ae6c5af2cc2f8d86af516b99"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"e3e9f447e5debbd9dc90e1301be2ad77ddf8a585","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                ip_address_2 \u003d ip_address_1"},{"line_number":205,"context_line":"                ip_address_1 \u003d six.text_type(ip)"},{"line_number":206,"context_line":"                # Make sure these two IP addresses have different substring"},{"line_number":207,"context_line":"                if ip_address_1[:-1] !\u003d ip_address_2[:-1]:"},{"line_number":208,"context_line":"                    break"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        # Create two ports"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f96bb07_352cffaa","line":207,"range":{"start_line":207,"start_character":16,"end_line":207,"end_character":57},"updated":"2018-01-16 07:53:57.000000000","message":"if cidr mask is 29, then this may always be false?","commit_id":"5e439b7acb16409cf8efd28f4dce25cd4a7e8bcf"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"b04dbd9bb438de1f084c51193328d72664888e59","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                ip_address_2 \u003d ip_address_1"},{"line_number":205,"context_line":"                ip_address_1 \u003d six.text_type(ip)"},{"line_number":206,"context_line":"                # Make sure these two IP addresses have different substring"},{"line_number":207,"context_line":"                if ip_address_1[:-1] !\u003d ip_address_2[:-1]:"},{"line_number":208,"context_line":"                    break"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        # Create two ports"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f96bb07_036f09fc","line":207,"range":{"start_line":207,"start_character":16,"end_line":207,"end_character":57},"in_reply_to":"7f96bb07_352cffaa","updated":"2018-01-17 21:48:43.000000000","message":"I see. I added an assertion in line #210 to capture this case. This will make this test case fail if cidr is 29. Alternatively, we can skip this test case if cidr is 29. Either approach will work for me.","commit_id":"5e439b7acb16409cf8efd28f4dce25cd4a7e8bcf"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"e3e9f447e5debbd9dc90e1301be2ad77ddf8a585","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        # Scenario 2: List both port1 and port2"},{"line_number":242,"context_line":"        substr \u003d ip_address_1"},{"line_number":243,"context_line":"        while substr not in ip_address_1 or substr not in ip_address_2:"},{"line_number":244,"context_line":"            substr \u003d substr[:-1]"},{"line_number":245,"context_line":"        ips_filter \u003d \u0027ip_address_substr\u003d\u0027 + substr"},{"line_number":246,"context_line":"        ports \u003d self.ports_client.list_ports(fixed_ips\u003dips_filter)[\u0027ports\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f96bb07_75b36799","line":243,"range":{"start_line":243,"start_character":14,"end_line":243,"end_character":40},"updated":"2018-01-16 07:53:57.000000000","message":"this seems always be false, so why need this?","commit_id":"5e439b7acb16409cf8efd28f4dce25cd4a7e8bcf"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"b04dbd9bb438de1f084c51193328d72664888e59","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        # Scenario 2: List both port1 and port2"},{"line_number":242,"context_line":"        substr \u003d ip_address_1"},{"line_number":243,"context_line":"        while substr not in ip_address_1 or substr not in ip_address_2:"},{"line_number":244,"context_line":"            substr \u003d substr[:-1]"},{"line_number":245,"context_line":"        ips_filter \u003d \u0027ip_address_substr\u003d\u0027 + substr"},{"line_number":246,"context_line":"        ports \u003d self.ports_client.list_ports(fixed_ips\u003dips_filter)[\u0027ports\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f96bb07_c30b6127","line":243,"range":{"start_line":243,"start_character":14,"end_line":243,"end_character":40},"in_reply_to":"7f96bb07_75b36799","updated":"2018-01-17 21:48:43.000000000","message":"Done","commit_id":"5e439b7acb16409cf8efd28f4dce25cd4a7e8bcf"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"e3e9f447e5debbd9dc90e1301be2ad77ddf8a585","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        ips_filter \u003d \u0027ip_address_substr\u003d\u0027 + substr"},{"line_number":246,"context_line":"        ports \u003d self.ports_client.list_ports(fixed_ips\u003dips_filter)[\u0027ports\u0027]"},{"line_number":247,"context_line":"        # Check that we got both port"},{"line_number":248,"context_line":"        tenant_ids \u003d set([port[\u0027tenant_id\u0027] for port in ports])"},{"line_number":249,"context_line":"        self.assertEqual(1, len(tenant_ids),"},{"line_number":250,"context_line":"                         \u0027Ports from multiple tenants are in the list resp\u0027)"},{"line_number":251,"context_line":"        port_ids \u003d [port[\u0027id\u0027] for port in ports]"},{"line_number":252,"context_line":"        fixed_ips \u003d [port[\u0027fixed_ips\u0027] for port in ports]"},{"line_number":253,"context_line":"        port_ips \u003d []"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f96bb07_15c543f1","line":250,"range":{"start_line":248,"start_character":0,"end_line":250,"end_character":76},"updated":"2018-01-16 07:53:57.000000000","message":"why need this check?","commit_id":"5e439b7acb16409cf8efd28f4dce25cd4a7e8bcf"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"b04dbd9bb438de1f084c51193328d72664888e59","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        ips_filter \u003d \u0027ip_address_substr\u003d\u0027 + substr"},{"line_number":246,"context_line":"        ports \u003d self.ports_client.list_ports(fixed_ips\u003dips_filter)[\u0027ports\u0027]"},{"line_number":247,"context_line":"        # Check that we got both port"},{"line_number":248,"context_line":"        tenant_ids \u003d set([port[\u0027tenant_id\u0027] for port in ports])"},{"line_number":249,"context_line":"        self.assertEqual(1, len(tenant_ids),"},{"line_number":250,"context_line":"                         \u0027Ports from multiple tenants are in the list resp\u0027)"},{"line_number":251,"context_line":"        port_ids \u003d [port[\u0027id\u0027] for port in ports]"},{"line_number":252,"context_line":"        fixed_ips \u003d [port[\u0027fixed_ips\u0027] for port in ports]"},{"line_number":253,"context_line":"        port_ips \u003d []"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f96bb07_63060d23","line":250,"range":{"start_line":248,"start_character":0,"end_line":250,"end_character":76},"in_reply_to":"7f96bb07_15c543f1","updated":"2018-01-17 21:48:43.000000000","message":"Done","commit_id":"5e439b7acb16409cf8efd28f4dce25cd4a7e8bcf"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"9d115d563f5f655e52e4d2953cc70f902e2aca6d","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                if ip_address_1[:-1] !\u003d ip_address_2[:-1]:"},{"line_number":208,"context_line":"                    break"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.assertNotEqual(ip_address_1[:-1], ip_address_2[:-1])"},{"line_number":211,"context_line":"        # Create two ports"},{"line_number":212,"context_line":"        fixed_ips \u003d [{\u0027subnet_id\u0027: subnet[\u0027id\u0027], \u0027ip_address\u0027: ip_address_1}]"},{"line_number":213,"context_line":"        port_1 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_bd3c2de1","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":65},"updated":"2018-01-18 03:49:27.000000000","message":"if this is not satisfied, maybe we can use\n\"ips_filter \u003d \u0027ip_address_substr\u003d\u0027 + ip_address_1\" for scenario 1?","commit_id":"4a497e594bf56b61b184c7c6aa41c55e3c045fbb"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"79aa73751a134a71eec4c0400031b7a4b1143892","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                if ip_address_1[:-1] !\u003d ip_address_2[:-1]:"},{"line_number":208,"context_line":"                    break"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.assertNotEqual(ip_address_1[:-1], ip_address_2[:-1])"},{"line_number":211,"context_line":"        # Create two ports"},{"line_number":212,"context_line":"        fixed_ips \u003d [{\u0027subnet_id\u0027: subnet[\u0027id\u0027], \u0027ip_address\u0027: ip_address_1}]"},{"line_number":213,"context_line":"        port_1 \u003d self.ports_client.create_port(network_id\u003dnetwork[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_b0894027","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":65},"in_reply_to":"7f96bb07_bd3c2de1","updated":"2018-01-22 21:05:40.000000000","message":"Done","commit_id":"4a497e594bf56b61b184c7c6aa41c55e3c045fbb"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"614d2a0a568f7c9a6e9c0d04fdb704b3069d7fbb","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        # Create network and subnet"},{"line_number":190,"context_line":"        network \u003d self.create_network()"},{"line_number":191,"context_line":"        subnet \u003d self.create_subnet(network)"},{"line_number":192,"context_line":"        self.addCleanup(self.subnets_client.delete_subnet, subnet[\u0027id\u0027])"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        # Get two IP addresses"},{"line_number":195,"context_line":"        ip_address_1 \u003d None"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa0c359_117e0fe4","line":192,"range":{"start_line":192,"start_character":0,"end_line":192,"end_character":72},"updated":"2018-02-06 10:01:17.000000000","message":"create_subnet() take care of this but good to delete at test level.","commit_id":"0ac946cc3c71721c100c6ec2091f54fc20805853"}]}
