)]}'
{"tempest/api/compute/servers/test_list_server_filters.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"4c7d6af71234be838902de772073697a3a6d151f","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        params \u003d [{\u0027status\u0027: \u0027shutoff\u0027}, {\u0027status\u0027: \u0027paused\u0027}]"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        self.client.stop(self.s1[\u0027id\u0027])"},{"line_number":306,"context_line":"        self.client.wait_for_server_status(self.s1[\u0027id\u0027], \u0027SHUTOFF\u0027)"},{"line_number":307,"context_line":"        self.client.pause_server(self.s2[\u0027id\u0027])"},{"line_number":308,"context_line":"        self.client.wait_for_server_status(self.s2[\u0027id\u0027], \u0027PAUSED\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_6c9381fa","line":305,"updated":"2014-11-21 12:25:50.000000000","message":"If you change the state of the server here, you need to restore the state by the end of the test.\n\nServer s1 and s2 are shared among the tests.","commit_id":"7288720c8a921666a74155f5e47e267bfbc3bc0e"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"64a3f6ac21ca5bf9c03a1a3615f1cf3315f37b48","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            self.client.start(self.s1[\u0027id\u0027])"},{"line_number":314,"context_line":"            self.client.wait_for_server_status(self.s1[\u0027id\u0027], \u0027ACTIVE\u0027)"},{"line_number":315,"context_line":"            self.client.unpause_server(self.s2[\u0027id\u0027])"},{"line_number":316,"context_line":"            self.client.wait_for_server_status(self.s2[\u0027id\u0027], \u0027ACTIVE\u0027)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"            self.assertIn(self.s1[\u0027id\u0027], map(lambda x: x[\u0027id\u0027], servers))"},{"line_number":319,"context_line":"            self.assertIn(self.s2[\u0027id\u0027], map(lambda x: x[\u0027id\u0027], servers))"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_b0a7520a","line":316,"updated":"2014-11-24 11:36:01.000000000","message":"What is purpose of making servers to be \u0027ACTIVE\u0027? Is this a sort of \u0027clean up\u0027 procedure? \nIf so maybe it is better to perform such things with \"self.addCleanup\" help. So that we will be sure that it is called.","commit_id":"dc0b2313ced001d36cec7f1d7d7e5f9fdb028a97"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"0c1891bda5f8e16bfdb915da6446a370aa685844","unresolved":false,"context_lines":[{"line_number":297,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":298,"context_line":"    def test_list_servers_multi_status(self):"},{"line_number":299,"context_line":"        # List servers using multiple status values"},{"line_number":300,"context_line":"        _, extensions \u003d self.extensions_client.list_extensions()"},{"line_number":301,"context_line":"        if \u0027os-server-list-multi-status\u0027 in map(lambda x: x[\u0027alias\u0027],"},{"line_number":302,"context_line":"                                                extensions):"},{"line_number":303,"context_line":"            params \u003d [{\u0027status\u0027: \u0027shutoff\u0027}, {\u0027status\u0027: \u0027paused\u0027}]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_b2c2ece6","line":300,"updated":"2014-11-24 17:15:57.000000000","message":"I am not sure about this. I think the prefered way to skip this kind of the test is to use the \"requires_ext\" decorator. It would read the \"compute-feature-enabled.api_extensions\" config flag.\n\nWe don\u0027t try to discover the list of extension dynamically in Tempest.","commit_id":"16a19b391e666b3584185631c2322bc6b641b5cb"},{"author":{"_account_id":10016,"name":"Joseph Lanoux","email":"joseph.lanoux@hpe.com","username":"lanoux"},"change_message_id":"25365e2129209249c52df63285bc72e0acf304c1","unresolved":false,"context_lines":[{"line_number":297,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":298,"context_line":"    def test_list_servers_multi_status(self):"},{"line_number":299,"context_line":"        # List servers using multiple status values"},{"line_number":300,"context_line":"        _, extensions \u003d self.extensions_client.list_extensions()"},{"line_number":301,"context_line":"        if \u0027os-server-list-multi-status\u0027 in map(lambda x: x[\u0027alias\u0027],"},{"line_number":302,"context_line":"                                                extensions):"},{"line_number":303,"context_line":"            params \u003d [{\u0027status\u0027: \u0027shutoff\u0027}, {\u0027status\u0027: \u0027paused\u0027}]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_34afb17e","line":300,"in_reply_to":"5a890539_b2c2ece6","updated":"2014-11-25 11:07:39.000000000","message":"I agree a 100% with you there. However, there is a special issue there. The requires_ext decorator takes the assumption that if the api_extensions parameter is set to all in tempest.conf than the required extension is present. However, os-server-list-multi-status is a new feature in Juno. Consequently, the test is failing the Icehouse runs. Hence the condition here.","commit_id":"16a19b391e666b3584185631c2322bc6b641b5cb"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"1be2e4550064ccf956962a34889e3ec056c1c5b3","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        resp, servers \u003d self.client.list_servers_with_detail(params)"},{"line_number":294,"context_line":"        self.assertEqual(1, len(servers[\u0027servers\u0027]))"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":297,"context_line":"    def test_list_servers_multi_status(self):"},{"line_number":298,"context_line":"        # List servers using multiple status values"},{"line_number":299,"context_line":"        _, extensions \u003d self.extensions_client.list_extensions()"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_0518f4d1","line":296,"updated":"2014-12-02 22:39:39.000000000","message":"Please use the extension skip decorator as in:\n\n@test.requires_ext(extension\u003d\u0027os-server-list-multi-status\u0027, service\u003d\u0027compute\u0027)","commit_id":"36e5f67d637e477f33521db16f0eadabf111c8b6"},{"author":{"_account_id":10016,"name":"Joseph Lanoux","email":"joseph.lanoux@hpe.com","username":"lanoux"},"change_message_id":"538b328218088eda54b3ce1f3b03a9a959666efd","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        resp, servers \u003d self.client.list_servers_with_detail(params)"},{"line_number":294,"context_line":"        self.assertEqual(1, len(servers[\u0027servers\u0027]))"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    @test.attr(type\u003d\u0027gate\u0027)"},{"line_number":297,"context_line":"    def test_list_servers_multi_status(self):"},{"line_number":298,"context_line":"        # List servers using multiple status values"},{"line_number":299,"context_line":"        _, extensions \u003d self.extensions_client.list_extensions()"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_2aebefa4","line":296,"in_reply_to":"5a890539_0518f4d1","updated":"2014-12-03 09:05:53.000000000","message":"I agree David. I replied to this issue in patch 8. However, as this test is purely a Nova one, I think I\u0027ll abandon it to move it within the Nova project.","commit_id":"36e5f67d637e477f33521db16f0eadabf111c8b6"}],"tempest/services/compute/json/servers_client.py":[{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"3ab7edd0746ab0bcb98fde734831a657e0457789","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            url +\u003d \u0027?%s\u0027 % urllib.urlencode(params[0])"},{"line_number":180,"context_line":"            if len(params) \u003e 1:"},{"line_number":181,"context_line":"                for i in range(len(params[1:])):"},{"line_number":182,"context_line":"                    url +\u003d \u0027\u0026%s\u0027 % urllib.urlencode(params[1 + i])"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":185,"context_line":"        body \u003d json.loads(body)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_16ddab70","line":182,"updated":"2014-11-21 14:55:54.000000000","message":"This could be simpler (if you expect dictionary with only one key)\n\n  if len(params) \u003e 1:\n    url \u003durllib.urlencode(dict([i.items()[0] for i in params]))\n  else:\n    url \u003d urllib.urlencode(params)","commit_id":"7288720c8a921666a74155f5e47e267bfbc3bc0e"},{"author":{"_account_id":8767,"name":"Nikolay Fedotov","email":"nfedotov@cisco.com","username":"nfedotov"},"change_message_id":"64a3f6ac21ca5bf9c03a1a3615f1cf3315f37b48","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        if len(params) \u003e 1:"},{"line_number":158,"context_line":"            for i in range(len(params[1:])):"},{"line_number":159,"context_line":"                url +\u003d \u0027\u0026%s\u0027 % urllib.urlencode(params[1 + i])"},{"line_number":160,"context_line":"        return url"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def list_servers(self, params\u003dNone):"},{"line_number":163,"context_line":"        \"\"\"Lists all servers for a user.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_10c5865b","line":160,"updated":"2014-11-24 11:36:01.000000000","message":"lines #156-159 could be replaced with\n\u0027?\u0027 + \u0027\u0026\u0027.join([urllib.urlencode(p) for p in params])","commit_id":"dc0b2313ced001d36cec7f1d7d7e5f9fdb028a97"}],"tempest/services/compute/xml/servers_client.py":[{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"3ab7edd0746ab0bcb98fde734831a657e0457789","unresolved":false,"context_lines":[{"line_number":261,"context_line":"            url +\u003d \u0027?%s\u0027 % urllib.urlencode(params[0])"},{"line_number":262,"context_line":"            if len(params) \u003e 1:"},{"line_number":263,"context_line":"                for i in range(len(params[1:])):"},{"line_number":264,"context_line":"                    url +\u003d \u0027\u0026%s\u0027 % urllib.urlencode(params[1 + i])"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":267,"context_line":"        servers \u003d self._parse_server_array(etree.fromstring(body))"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_16c4cb90","line":264,"updated":"2014-11-21 14:55:54.000000000","message":"if you reuse the same code it\u0027s worth to extract it as a function","commit_id":"7288720c8a921666a74155f5e47e267bfbc3bc0e"}]}
