)]}'
{"tempest/api/network/admin/test_dhcp_agent_scheduler.py":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b364287bc191b1ada5e08690c542609d3f078dc4","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self._remove_network_from_dhcp_agent(network_id, agent)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _remove_network_from_dhcp_agent(self, network_id, agent):"},{"line_number":90,"context_line":"        resp, _ \u003d self.admin_client.remove_network_from_dhcp_agent("},{"line_number":91,"context_line":"            agent_id\u003dagent[\u0027id\u0027],"},{"line_number":92,"context_line":"            network_id\u003dnetwork_id)"},{"line_number":93,"context_line":"        self.assertEqual(resp[\u0027status\u0027], \u0027204\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_8f02ceb8","line":90,"updated":"2014-06-23 18:42:48.000000000","message":"same comment about \"_\"","commit_id":"54580bfeaa025eb1cdbe8ee6b43a09b87f4679c5"}],"tempest/api/network/admin/test_external_network_extension.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d377b32c140e98d5550e60aa8c4f236c6817bc15","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":80,"context_line":"        show_ext_net \u003d body[\u0027network\u0027]"},{"line_number":81,"context_line":"        for key in [\u0027id\u0027, \u0027name\u0027]:"},{"line_number":82,"context_line":"            self.assertEqual(external_network[key], show_ext_net[key])"},{"line_number":83,"context_line":"        self.assertTrue(show_ext_net[\u0027router:external\u0027])"},{"line_number":84,"context_line":"        resp, body \u003d self.client.show_network(self.network[\u0027id\u0027])"},{"line_number":85,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_ef1f1059","line":82,"updated":"2014-05-19 12:55:02.000000000","message":"I don\u0027t see much optimization here. I think it would be great to create some kind of help method for such checking parameters in dictionaries.","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d377b32c140e98d5550e60aa8c4f236c6817bc15","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        show_net \u003d body[\u0027network\u0027]"},{"line_number":87,"context_line":"        # Verify with show that router:external is False for network"},{"line_number":88,"context_line":"        for key in [\u0027id\u0027, \u0027name\u0027]:"},{"line_number":89,"context_line":"            self.assertEqual(self.network[key], show_net[key])"},{"line_number":90,"context_line":"        self.assertFalse(show_net[\u0027router:external\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_2f3d78c4","line":89,"updated":"2014-05-19 12:55:02.000000000","message":"The same as above.","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"}],"tempest/api/network/admin/test_l3_agent_scheduler.py":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b364287bc191b1ada5e08690c542609d3f078dc4","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            msg \u003d \"L3 Agent Scheduler Extension not enabled.\""},{"line_number":40,"context_line":"            raise cls.skipException(msg)"},{"line_number":41,"context_line":"        # Trying to get agent details for L3 Agent"},{"line_number":42,"context_line":"        _, body \u003d cls.admin_client.list_agents()"},{"line_number":43,"context_line":"        agents \u003d body[\u0027agents\u0027]"},{"line_number":44,"context_line":"        for agent in agents:"},{"line_number":45,"context_line":"            if agent[\u0027agent_type\u0027] \u003d\u003d \u0027L3 agent\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_6f4f4235","line":42,"updated":"2014-06-23 18:42:48.000000000","message":"AFAIK, unlike other languages, \"_\" is a valid variable name, which means that other than semantics, there is no real difference to changing names here, even though they are unused, and it might cause future confusion. So I suggest keeping the (resp, body) tuple for clarity and consistency","commit_id":"54580bfeaa025eb1cdbe8ee6b43a09b87f4679c5"}],"tempest/api/network/admin/test_load_balancer_admin_actions.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d377b32c140e98d5550e60aa8c4f236c6817bc15","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":70,"context_line":"        show_vip \u003d body[\u0027vip\u0027]"},{"line_number":71,"context_line":"        for key in [\u0027id\u0027, \u0027name\u0027]:"},{"line_number":72,"context_line":"            self.assertEqual(vip[key], show_vip[key])"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":75,"context_line":"    def test_create_health_monitor_as_admin_for_another_tenant(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_cf7a5487","line":72,"updated":"2014-05-19 12:55:02.000000000","message":"The same as in https://review.openstack.org/#/c/94174/1/tempest/api/network/admin/test_external_network_extension.py","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b364287bc191b1ada5e08690c542609d3f078dc4","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        show_vip \u003d body[\u0027vip\u0027]"},{"line_number":71,"context_line":"        self.assertEqual(vip[\u0027id\u0027], show_vip[\u0027id\u0027])"},{"line_number":72,"context_line":"        self.assertEqual(vip[\u0027name\u0027], show_vip[\u0027name\u0027])"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":75,"context_line":"    def test_create_health_monitor_as_admin_for_another_tenant(self):"},{"line_number":76,"context_line":"        resp, body \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_6f14a2e9","side":"PARENT","line":73,"updated":"2014-06-23 18:42:48.000000000","message":"IMO, this could be replaced by assertDictContainsSubset, rather than a new method","commit_id":"fc137b5dd743f6d031f3d7b9ce32e6eafb367db6"}],"tempest/api/network/admin/test_quotas.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d377b32c140e98d5550e60aa8c4f236c6817bc15","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":64,"context_line":"        self.addCleanup(self.admin_client.reset_quotas, tenant_id)"},{"line_number":65,"context_line":"        for key in [\u0027network\u0027, \u0027security_group\u0027]:"},{"line_number":66,"context_line":"            self.assertEqual(0, quota_set[key])"},{"line_number":67,"context_line":"        # Confirm our tenant is listed among tenants with non default quotas"},{"line_number":68,"context_line":"        resp, non_default_quotas \u003d self.admin_client.list_quotas()"},{"line_number":69,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_ef6d50cd","line":66,"updated":"2014-05-19 12:55:02.000000000","message":"The same as in https://review.openstack.org/#/c/94174/1/tempest/api/network/admin/test_external_network_extension.py","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d377b32c140e98d5550e60aa8c4f236c6817bc15","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        quota_set \u003d quota_set[\u0027quota\u0027]"},{"line_number":78,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":79,"context_line":"        for key in [\u0027network\u0027, \u0027security_group\u0027]:"},{"line_number":80,"context_line":"            self.assertEqual(0, quota_set[key])"},{"line_number":81,"context_line":"        # Reset quotas to default and confirm"},{"line_number":82,"context_line":"        resp, _ \u003d self.admin_client.reset_quotas(tenant_id)"},{"line_number":83,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_0f719ca7","line":80,"updated":"2014-05-19 12:55:02.000000000","message":"The same as in https://review.openstack.org/#/c/94174/1/tempest/api/network/admin/test_external_network_extension.py","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b364287bc191b1ada5e08690c542609d3f078dc4","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":79,"context_line":"        self.assertEqual(0, quota_set[\u0027network\u0027])"},{"line_number":80,"context_line":"        self.assertEqual(0, quota_set[\u0027security_group\u0027])"},{"line_number":81,"context_line":"        # Reset quotas to default and confirm"},{"line_number":82,"context_line":"        resp, body \u003d self.admin_client.reset_quotas(tenant_id)"},{"line_number":83,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":84,"context_line":"        resp, non_default_quotas \u003d self.admin_client.list_quotas()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_cf96963e","side":"PARENT","line":81,"updated":"2014-06-23 18:42:48.000000000","message":"same here","commit_id":"fc137b5dd743f6d031f3d7b9ce32e6eafb367db6"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b364287bc191b1ada5e08690c542609d3f078dc4","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":64,"context_line":"        self.addCleanup(self.admin_client.reset_quotas, tenant_id)"},{"line_number":65,"context_line":"        expected \u003d {\u0027network\u0027: 0, \u0027security_group\u0027: 0}"},{"line_number":66,"context_line":"        self._check_equal(expected, quota_set, expected.keys())"},{"line_number":67,"context_line":"        # Confirm our tenant is listed among tenants with non default quotas"},{"line_number":68,"context_line":"        resp, non_default_quotas \u003d self.admin_client.list_quotas()"},{"line_number":69,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_0fcb1e74","line":66,"updated":"2014-06-23 18:42:48.000000000","message":"don\u0027t do that!\nthis might look nicer but you are replacing 2 clear lines (assert value is 0) with 2 lines that are much more vague, for which you had to contract an unnecessary dict","commit_id":"54580bfeaa025eb1cdbe8ee6b43a09b87f4679c5"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b364287bc191b1ada5e08690c542609d3f078dc4","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        expected \u003d {\u0027network\u0027: 0, \u0027security_group\u0027: 0}"},{"line_number":80,"context_line":"        self._check_equal(expected, quota_set, expected.keys())"},{"line_number":81,"context_line":"        # Reset quotas to default and confirm"},{"line_number":82,"context_line":"        resp, _ \u003d self.admin_client.reset_quotas(tenant_id)"},{"line_number":83,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":84,"context_line":"        resp, non_default_quotas \u003d self.admin_client.list_quotas()"},{"line_number":85,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_2f9d3a58","line":82,"updated":"2014-06-23 18:42:48.000000000","message":"see previous comments about \"_\"","commit_id":"54580bfeaa025eb1cdbe8ee6b43a09b87f4679c5"}],"tempest/api/network/base.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"bb88b9ffcc76a25f019cf85e41f758e814d97187","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                    cidr\u003dstr(subnet_cidr),"},{"line_number":166,"context_line":"                    ip_version\u003dcls._ip_version,"},{"line_number":167,"context_line":"                    gateway_ip\u003dgateway)"},{"line_number":168,"context_line":"                assert 201 \u003d\u003d resp.status"},{"line_number":169,"context_line":"                break"},{"line_number":170,"context_line":"            except exceptions.BadRequest as e:"},{"line_number":171,"context_line":"                is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_05d48d45","line":168,"updated":"2014-06-10 18:04:42.000000000","message":"assert 200 \u003d\u003d 300\n Traceback (most recent call last):\n   File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n AssertionError\n\nThe assert Boolean in this case obfuscates the issue.\n\nYou can add an assert message:\n   assert 200 \u003d\u003d 300, \"200 ne 300\"\nTraceback (most recent call last):\n  File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\nAssertionError: 200 ne 300\n\nYou can move the error checking to the rest_client side.\ntempest.common.rest_client.RestClient.expected_success\n\nBut IMHO the final goal is to have json scheme based repose validation, which includes the correct success code.","commit_id":"54580bfeaa025eb1cdbe8ee6b43a09b87f4679c5"}],"tempest/api/network/test_extra_dhcp_options.py":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b364287bc191b1ada5e08690c542609d3f078dc4","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            {\u0027opt_value\u0027: \u0027123.123.123.45\u0027, \u0027opt_name\u0027: \u0027server-ip-address\u0027}"},{"line_number":79,"context_line":"        ]"},{"line_number":80,"context_line":"        name \u003d data_utils.rand_name(\u0027new-port-name\u0027)"},{"line_number":81,"context_line":"        resp, _ \u003d self.client.update_port("},{"line_number":82,"context_line":"            self.port[\u0027id\u0027], name\u003dname, extra_dhcp_opts\u003dextra_dhcp_opts)"},{"line_number":83,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_aa4f7869","line":81,"updated":"2014-06-23 18:42:48.000000000","message":"same comment about \"_\"","commit_id":"54580bfeaa025eb1cdbe8ee6b43a09b87f4679c5"}],"tempest/api/network/test_floating_ips.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d377b32c140e98d5550e60aa8c4f236c6817bc15","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":105,"context_line":"        updated_floating_ip \u003d floating_ip[\u0027floatingip\u0027]"},{"line_number":106,"context_line":"        expected \u003d {"},{"line_number":107,"context_line":"            \u0027port_id\u0027: self.ports[1][\u0027id\u0027], \u0027router_id\u0027: self.router[\u0027id\u0027],"},{"line_number":108,"context_line":"            \u0027fixed_ip_address\u0027: self.ports[1][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]}"},{"line_number":109,"context_line":"        for key in expected.keys():"},{"line_number":110,"context_line":"            self.assertEqual(updated_floating_ip[key], expected[key])"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_6f8f8075","line":107,"updated":"2014-05-19 12:55:02.000000000","message":"It is better to replace \u0027router_id\u0027: self.router[\u0027id\u0027] on next line for better reading and understanding.","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"ef3e37321d1d39924ecbd6df51c28a4b1fcf287b","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":105,"context_line":"        updated_floating_ip \u003d floating_ip[\u0027floatingip\u0027]"},{"line_number":106,"context_line":"        expected \u003d {"},{"line_number":107,"context_line":"            \u0027port_id\u0027: self.ports[1][\u0027id\u0027], \u0027router_id\u0027: self.router[\u0027id\u0027],"},{"line_number":108,"context_line":"            \u0027fixed_ip_address\u0027: self.ports[1][\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]}"},{"line_number":109,"context_line":"        for key in expected.keys():"},{"line_number":110,"context_line":"            self.assertEqual(updated_floating_ip[key], expected[key])"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_d611d35e","line":107,"in_reply_to":"7adec928_6f8f8075","updated":"2014-05-22 07:33:16.000000000","message":"Done","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b364287bc191b1ada5e08690c542609d3f078dc4","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                        created_floating_ip[\u0027id\u0027])"},{"line_number":79,"context_line":"        for key in [\u0027id\u0027, \u0027tenant_id\u0027, \u0027floating_ip_address\u0027]:"},{"line_number":80,"context_line":"            self.assertIsNotNone(created_floating_ip[key])"},{"line_number":81,"context_line":"        self._check_equal(expected, created_floating_ip, expected.keys())"},{"line_number":82,"context_line":"        self.assertIn(created_floating_ip[\u0027fixed_ip_address\u0027],"},{"line_number":83,"context_line":"                      [ip[\u0027ip_address\u0027] for ip in self.ports[0][\u0027fixed_ips\u0027]])"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_4a5fd40f","line":81,"updated":"2014-06-23 18:42:48.000000000","message":"IMO, this can be achieved by assertDictContainsSubset","commit_id":"54580bfeaa025eb1cdbe8ee6b43a09b87f4679c5"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b364287bc191b1ada5e08690c542609d3f078dc4","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":89,"context_line":"        shown_floating_ip \u003d floating_ip[\u0027floatingip\u0027]"},{"line_number":90,"context_line":"        keys \u003d [\u0027id\u0027, \u0027tenant_id\u0027, \u0027floating_ip_address\u0027]"},{"line_number":91,"context_line":"        self._check_equal(created_floating_ip, shown_floating_ip, keys)"},{"line_number":92,"context_line":"        self._check_equal(expected, shown_floating_ip, expected.keys())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        # Verify the floating ip exists in the list of all floating_ips"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_8a5b9cf8","line":91,"updated":"2014-06-23 18:42:48.000000000","message":"IMO, this can be achieved by assertDictContainsSubset","commit_id":"54580bfeaa025eb1cdbe8ee6b43a09b87f4679c5"}],"tempest/api/network/test_load_balancer.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d377b32c140e98d5550e60aa8c4f236c6817bc15","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":166,"context_line":"        updated_pool \u003d body[\u0027pool\u0027]"},{"line_number":167,"context_line":"        expected \u003d {\u0027name\u0027: new_name, \u0027description\u0027: new_description,"},{"line_number":168,"context_line":"                    \u0027lb_method\u0027: \u0027LEAST_CONNECTIONS\u0027}"},{"line_number":169,"context_line":"        for key in expected.keys():"},{"line_number":170,"context_line":"            self.assertEqual(expected[key], updated_pool[key])"},{"line_number":171,"context_line":"        # Verification of pool delete"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_ef25505c","line":168,"updated":"2014-05-19 12:55:02.000000000","message":"It better to replace \u0027description\u0027: new_description on next line for better reading and understanding.","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"ef3e37321d1d39924ecbd6df51c28a4b1fcf287b","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":166,"context_line":"        updated_pool \u003d body[\u0027pool\u0027]"},{"line_number":167,"context_line":"        expected \u003d {\u0027name\u0027: new_name, \u0027description\u0027: new_description,"},{"line_number":168,"context_line":"                    \u0027lb_method\u0027: \u0027LEAST_CONNECTIONS\u0027}"},{"line_number":169,"context_line":"        for key in expected.keys():"},{"line_number":170,"context_line":"            self.assertEqual(expected[key], updated_pool[key])"},{"line_number":171,"context_line":"        # Verification of pool delete"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_5605c312","line":168,"in_reply_to":"7adec928_ef25505c","updated":"2014-05-22 07:33:16.000000000","message":"Done","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d377b32c140e98d5550e60aa8c4f236c6817bc15","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        expected \u003d {\u0027http_method\u0027: \"POST\", \u0027url_path\u0027: \"/home/user\","},{"line_number":336,"context_line":"                    \u0027expected_codes\u0027: \"290\"}"},{"line_number":337,"context_line":"        for key in expected.keys():"},{"line_number":338,"context_line":"            self.assertEqual(expected[key], updated_health_monitor[key])"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":341,"context_line":"    def test_show_health_monitor(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_2fead8da","line":338,"updated":"2014-05-19 12:55:02.000000000","message":"The same as in https://review.openstack.org/#/c/94174/1/tempest/api/network/admin/test_external_network_extension.py","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"ef3e37321d1d39924ecbd6df51c28a4b1fcf287b","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        expected \u003d {\u0027http_method\u0027: \"POST\", \u0027url_path\u0027: \"/home/user\","},{"line_number":336,"context_line":"                    \u0027expected_codes\u0027: \"290\"}"},{"line_number":337,"context_line":"        for key in expected.keys():"},{"line_number":338,"context_line":"            self.assertEqual(expected[key], updated_health_monitor[key])"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":341,"context_line":"    def test_show_health_monitor(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_290ff82f","line":338,"in_reply_to":"7adec928_2fead8da","updated":"2014-05-22 07:33:16.000000000","message":"Done","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d377b32c140e98d5550e60aa8c4f236c6817bc15","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":439,"context_line":"            self.assertEqual(member_id, body[\u0027member\u0027][\u0027id\u0027])"},{"line_number":440,"context_line":"            for key in [\u0027status\u0027, \u0027admin_state_up\u0027]:"},{"line_number":441,"context_line":"                self.assertIsNotNone(body[\u0027member\u0027][key])"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":444,"context_line":"    def test_update_pool_related_to_member(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_4fe56407","line":441,"updated":"2014-05-19 12:55:02.000000000","message":"The same as in https://review.openstack.org/#/c/94174/1/tempest/api/network/admin/test_external_network_extension.py","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"ef3e37321d1d39924ecbd6df51c28a4b1fcf287b","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":439,"context_line":"            self.assertEqual(member_id, body[\u0027member\u0027][\u0027id\u0027])"},{"line_number":440,"context_line":"            for key in [\u0027status\u0027, \u0027admin_state_up\u0027]:"},{"line_number":441,"context_line":"                self.assertIsNotNone(body[\u0027member\u0027][key])"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":444,"context_line":"    def test_update_pool_related_to_member(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_491c446b","line":441,"in_reply_to":"7adec928_4fe56407","updated":"2014-05-22 07:33:16.000000000","message":"Done","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"43cdbaad49f835fd883502ef316aba5e295e667e","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        # \u0027status\u0027 should not be confirmed in api tests"},{"line_number":183,"context_line":"        if \u0027status\u0027 in keys:"},{"line_number":184,"context_line":"            keys.remove(\u0027status\u0027)"},{"line_number":185,"context_line":"        self._check_equal(vip, self.vip, keys)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":188,"context_line":"    def test_show_pool(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_7692984c","line":185,"updated":"2014-05-22 12:39:45.000000000","message":"I don\u0027t see any reason for this changes. You do refactor for what was already refactored. I don\u0027t like creating keys value and than remove a \u0027status\u0027 from it.","commit_id":"becfe63e4b7fb7d370d8690e7a3c594fbb7f46d6"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"b94f70dd20e3a371718a29e5e4c44b6394ec12f9","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        # \u0027status\u0027 should not be confirmed in api tests"},{"line_number":183,"context_line":"        if \u0027status\u0027 in keys:"},{"line_number":184,"context_line":"            keys.remove(\u0027status\u0027)"},{"line_number":185,"context_line":"        self._check_equal(vip, self.vip, keys)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":188,"context_line":"    def test_show_pool(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_c1538b6a","line":185,"in_reply_to":"7adec928_2a4edfc1","updated":"2014-05-23 05:15:12.000000000","message":"oh yea...How did i miss that !!\nThanks :)","commit_id":"becfe63e4b7fb7d370d8690e7a3c594fbb7f46d6"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"463b7b1aae4e2e5a22d1fc58011ce612a081694a","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        # \u0027status\u0027 should not be confirmed in api tests"},{"line_number":183,"context_line":"        if \u0027status\u0027 in keys:"},{"line_number":184,"context_line":"            keys.remove(\u0027status\u0027)"},{"line_number":185,"context_line":"        self._check_equal(vip, self.vip, keys)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":188,"context_line":"    def test_show_pool(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_ff767b3e","line":185,"in_reply_to":"7adec928_7692984c","updated":"2014-05-22 13:41:30.000000000","message":"Hi Ann,\nI understand your concern. I know its already refactored but its better to move whole thing to single architecture.\nSo, while whole code is following single function call to check for multiple keys, it should also follow the same architecture.\nand\nAs in this case, status is excluded so that\u0027s what i am doing.\n\nSo, i think, calling the self._check_equal() method has no issue and fine as it is.\nbut\nya, i support your comment regarding creating keys and removing \u0027status\u0027, but i don\u0027t know other way to do it.\nCan u suggest something better or direct way for that.!!","commit_id":"becfe63e4b7fb7d370d8690e7a3c594fbb7f46d6"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"1a154174d9f842641e325f6c22cb54d9581fcfc7","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        # \u0027status\u0027 should not be confirmed in api tests"},{"line_number":183,"context_line":"        if \u0027status\u0027 in keys:"},{"line_number":184,"context_line":"            keys.remove(\u0027status\u0027)"},{"line_number":185,"context_line":"        self._check_equal(vip, self.vip, keys)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":188,"context_line":"    def test_show_pool(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_2a4edfc1","line":185,"in_reply_to":"7adec928_ff767b3e","updated":"2014-05-22 14:10:32.000000000","message":"keys \u003d [k for k in vip.keys() if k!\u003d\u0027status\u0027]","commit_id":"becfe63e4b7fb7d370d8690e7a3c594fbb7f46d6"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"43cdbaad49f835fd883502ef316aba5e295e667e","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        # \u0027status\u0027 should not be confirmed in api tests"},{"line_number":204,"context_line":"        if \u0027status\u0027 in keys:"},{"line_number":205,"context_line":"            keys.remove(\u0027status\u0027)"},{"line_number":206,"context_line":"        self._check_equal(pool, shown_pool, keys)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":209,"context_line":"    def test_list_pools(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_b6aee096","line":206,"updated":"2014-05-22 12:39:45.000000000","message":"The same.","commit_id":"becfe63e4b7fb7d370d8690e7a3c594fbb7f46d6"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"43cdbaad49f835fd883502ef316aba5e295e667e","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        keys \u003d member.keys()"},{"line_number":267,"context_line":"        # \u0027status\u0027 should not be confirmed in api tests"},{"line_number":268,"context_line":"        if \u0027status\u0027 in keys:"},{"line_number":269,"context_line":"            keys.remove(\u0027status\u0027)"},{"line_number":270,"context_line":"        self._check_equal(member, self.member, keys)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_d6a28c99","line":269,"updated":"2014-05-22 12:39:45.000000000","message":"The same.","commit_id":"becfe63e4b7fb7d370d8690e7a3c594fbb7f46d6"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"43cdbaad49f835fd883502ef316aba5e295e667e","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        # \u0027status\u0027 should not be confirmed in api tests"},{"line_number":350,"context_line":"        if \u0027status\u0027 in keys:"},{"line_number":351,"context_line":"            keys.remove(\u0027status\u0027)"},{"line_number":352,"context_line":"        self._check_equal(health_monitor, self.health_monitor, keys)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":355,"context_line":"    def test_associate_disassociate_health_monitor_with_pool(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7adec928_f69dc858","line":352,"updated":"2014-05-22 12:39:45.000000000","message":"The same","commit_id":"becfe63e4b7fb7d370d8690e7a3c594fbb7f46d6"}],"tempest/api/network/test_security_groups.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d377b32c140e98d5550e60aa8c4f236c6817bc15","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            description\u003dnew_description)"},{"line_number":63,"context_line":"        # Verify if security group is updated"},{"line_number":64,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":65,"context_line":"        for key in expected.keys():"},{"line_number":66,"context_line":"            self.assertEqual(update_body[\u0027security_group\u0027][key], expected[key])"},{"line_number":67,"context_line":"        # Show details of the updated security group"},{"line_number":68,"context_line":"        resp, show_body \u003d self.client.show_security_group("}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_4f7ac424","line":65,"updated":"2014-05-19 12:55:02.000000000","message":"You can use \n\n     for key, value in expected.iteritems():\n          self.assertEqual(value, update_body[\u0027security_group\u0027][key])\n\nAlso it is a good idea to replace parameters of assert for (expected, actual).","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"},{"author":{"_account_id":10966,"name":"Abhijeet Jain","email":"abhijeetjpjain@gmail.com","username":"Abhijeet.Jain"},"change_message_id":"ef3e37321d1d39924ecbd6df51c28a4b1fcf287b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            description\u003dnew_description)"},{"line_number":63,"context_line":"        # Verify if security group is updated"},{"line_number":64,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":65,"context_line":"        for key in expected.keys():"},{"line_number":66,"context_line":"            self.assertEqual(update_body[\u0027security_group\u0027][key], expected[key])"},{"line_number":67,"context_line":"        # Show details of the updated security group"},{"line_number":68,"context_line":"        resp, show_body \u003d self.client.show_security_group("}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_1f7ed5e4","line":65,"in_reply_to":"7adec928_4f7ac424","updated":"2014-05-22 07:33:16.000000000","message":"Done","commit_id":"c600f7a1d525a592aaedc583ed9ca84ff9d08720"}],"tempest/test.py":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b364287bc191b1ada5e08690c542609d3f078dc4","unresolved":false,"context_lines":[{"line_number":375,"context_line":"    def assertNotEmpty(self, list, msg\u003dNone):"},{"line_number":376,"context_line":"        self.assertTrue(len(list) \u003e 0, msg)"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _check_equal(self, expected, actual, keys):"},{"line_number":379,"context_line":"        \"\"\""},{"line_number":380,"context_line":"        This function checks whether the value of expected is equal"},{"line_number":381,"context_line":"        to the actual for all the keys provided."}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_7362db3e","line":378,"updated":"2014-06-23 18:42:48.000000000","message":"how is this different than assertDictContainsSubset?\n\nAlso,\nThese new methods are actually assertions.\nplease rename them accordingly (ie assertSubDictionaryEquals)\n\nAlso:\n\"_name\" is for private use (by convention) so making it available for all sub-classes in tree is contradictory","commit_id":"54580bfeaa025eb1cdbe8ee6b43a09b87f4679c5"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b364287bc191b1ada5e08690c542609d3f078dc4","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            self.assertIn(key, actual)"},{"line_number":388,"context_line":"            self.assertEqual(expected[key], actual[key])"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    def _check_in(self, actual, keys):"},{"line_number":391,"context_line":"        \"\"\""},{"line_number":392,"context_line":"        This function validates if all the provided keys are present"},{"line_number":393,"context_line":"        in the given actual response ( dictionary/list)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_8ee49ee1","line":390,"updated":"2014-06-23 18:42:48.000000000","message":"same issues with name (underscore, assert)","commit_id":"54580bfeaa025eb1cdbe8ee6b43a09b87f4679c5"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b364287bc191b1ada5e08690c542609d3f078dc4","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    def _check_in(self, actual, keys):"},{"line_number":391,"context_line":"        \"\"\""},{"line_number":392,"context_line":"        This function validates if all the provided keys are present"},{"line_number":393,"context_line":"        in the given actual response ( dictionary/list)"},{"line_number":394,"context_line":"        \"\"\""},{"line_number":395,"context_line":"        for key in keys:"},{"line_number":396,"context_line":"            self.assertIn(key, actual)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_2ea70aa9","line":393,"updated":"2014-06-23 18:42:48.000000000","message":"actually, you are working on lists only. the default behavior of dict is to return a list of keys","commit_id":"54580bfeaa025eb1cdbe8ee6b43a09b87f4679c5"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b364287bc191b1ada5e08690c542609d3f078dc4","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        for key in keys:"},{"line_number":396,"context_line":"            self.assertIn(key, actual)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def _check_not_in(self, actual, keys):"},{"line_number":399,"context_line":"        \"\"\""},{"line_number":400,"context_line":"        This function validates that all the provided keys are not present"},{"line_number":401,"context_line":"        in the given actual response ( dictionary/list)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_cecdc660","line":398,"updated":"2014-06-23 18:42:48.000000000","message":"here as well","commit_id":"54580bfeaa025eb1cdbe8ee6b43a09b87f4679c5"}]}
