)]}'
{"tempest/api/network/test_service_groups.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"cea786fe97fa84a5a164eb5482bbff0fe7136fb5","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        name \u003d data_utils.rand_name(\u0027servicegroup-\u0027)"},{"line_number":30,"context_line":"        resp, group_create_body \u003d self.client.create_service_group(name\u003dname)"},{"line_number":31,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":32,"context_line":"        self.assertEqual(group_create_body[\u0027service_group\u0027][\u0027name\u0027], name)"},{"line_number":33,"context_line":"        return group_create_body, name"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def _delete_service_group(self, servicegroup_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_2e3c682f","line":32,"updated":"2014-08-18 11:57:47.000000000","message":"In tempest addCleanUp() is used after each creation of extra object. I suggest to add self.addCleanUp( _delete_service_group, group_create_body[\u0027id]).","commit_id":"d0eaf0dddeb7381d80da45658e1377b307d24b09"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"cea786fe97fa84a5a164eb5482bbff0fe7136fb5","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":42,"context_line":"        servicegroup_list \u003d list()"},{"line_number":43,"context_line":"        for servicegroup in list_body[\u0027service_groups\u0027]:"},{"line_number":44,"context_line":"            servicegroup_list.append(servicegroup[\u0027id\u0027])"},{"line_number":45,"context_line":"        self.assertNotIn(servicegroup_id, servicegroup_list)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _delete_service_object(self, obj_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_2e1d4810","line":44,"updated":"2014-08-18 11:57:47.000000000","message":"This three lines could be replaced with servicegroup_list \u003d [s[\u0027id\u0027] for s in list_body[\u0027service_groups\u0027]]","commit_id":"d0eaf0dddeb7381d80da45658e1377b307d24b09"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"cea786fe97fa84a5a164eb5482bbff0fe7136fb5","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":54,"context_line":"        obj_list \u003d list()"},{"line_number":55,"context_line":"        for sobj in obj_body[\u0027service_objects\u0027]:"},{"line_number":56,"context_line":"            obj_list.append(sobj[\u0027id\u0027])"},{"line_number":57,"context_line":"        self.assertNotIn(obj_id, obj_list)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_6e1740ee","line":56,"updated":"2014-08-18 11:57:47.000000000","message":"The same as in lines 42-44","commit_id":"d0eaf0dddeb7381d80da45658e1377b307d24b09"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"cea786fe97fa84a5a164eb5482bbff0fe7136fb5","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":73,"context_line":"        servicegroup_list \u003d list()"},{"line_number":74,"context_line":"        for servicegroup in list_body[\u0027service_groups\u0027]:"},{"line_number":75,"context_line":"            servicegroup_list.append(servicegroup[\u0027id\u0027])"},{"line_number":76,"context_line":"        self.assertIn(group_create_body[\u0027service_group\u0027][\u0027id\u0027],"},{"line_number":77,"context_line":"                      servicegroup_list)"},{"line_number":78,"context_line":"        # Update the service group"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_ae8dd833","line":75,"updated":"2014-08-18 11:57:47.000000000","message":"The same as in lines 42-44","commit_id":"d0eaf0dddeb7381d80da45658e1377b307d24b09"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"cea786fe97fa84a5a164eb5482bbff0fe7136fb5","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                         new_description)"},{"line_number":90,"context_line":"        # Show details of the updated service group"},{"line_number":91,"context_line":"        resp, show_body \u003d self.client.show_service_group("},{"line_number":92,"context_line":"            group_create_body[\u0027service_group\u0027][\u0027id\u0027])"},{"line_number":93,"context_line":"        self.assertEqual(show_body[\u0027service_group\u0027][\u0027name\u0027], new_name)"},{"line_number":94,"context_line":"        self.assertEqual(show_body[\u0027service_group\u0027][\u0027description\u0027],"},{"line_number":95,"context_line":"                         new_description)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_ee88b0e9","line":92,"updated":"2014-08-18 11:57:47.000000000","message":"Add check self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])","commit_id":"d0eaf0dddeb7381d80da45658e1377b307d24b09"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"cea786fe97fa84a5a164eb5482bbff0fe7136fb5","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                         new_description)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":98,"context_line":"    def test_create_show_delete_service_object(self):"},{"line_number":99,"context_line":"        group_create_body, _ \u003d self._create_service_group()"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        # Create objects for each protocol"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_6e55801c","line":98,"updated":"2014-08-18 11:57:47.000000000","message":"I think that this test should be named differently as you create objects for each port. Add information about this in test name.","commit_id":"d0eaf0dddeb7381d80da45658e1377b307d24b09"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"cea786fe97fa84a5a164eb5482bbff0fe7136fb5","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            resp, object_list_body \u003d self.client.list_service_objects()"},{"line_number":125,"context_line":"            self.assertEqual(\u0027200\u0027, resp[\u0027status\u0027])"},{"line_number":126,"context_line":"            obj_list \u003d [sobj[\u0027id\u0027]"},{"line_number":127,"context_line":"            for sobj in object_list_body[\u0027service_objects\u0027]]"},{"line_number":128,"context_line":"            self.assertIn(object_create_body[\u0027service_object\u0027][\u0027id\u0027],"},{"line_number":129,"context_line":"                          obj_list)"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_ae9a3812","line":127,"updated":"2014-08-18 11:57:47.000000000","message":"Make this line more readable \n\n     obj_list \u003d [sobj[\u0027id\u0027] for sobj in object_list_body[\u0027service_objects\u0027]]","commit_id":"d0eaf0dddeb7381d80da45658e1377b307d24b09"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"cea786fe97fa84a5a164eb5482bbff0fe7136fb5","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.assertEqual(service_objects[\u0027protocol\u0027], protocol)"},{"line_number":148,"context_line":"        self.assertEqual(service_objects[\u0027source_port\u0027], source_port)"},{"line_number":149,"context_line":"        self.assertEqual(service_objects[\u0027destination_port\u0027], destination_port)"},{"line_number":150,"context_line":"        self.client.delete_service_object(service_objects[\u0027id\u0027])"},{"line_number":151,"context_line":"        name \u003d \u0027testserviceobjudp\u0027"},{"line_number":152,"context_line":"        protocol \u003d \u0027udp\u0027"},{"line_number":153,"context_line":"        source_port \u003d \"20000:30000\""}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_b1a0d9f5","line":150,"updated":"2014-08-18 11:57:47.000000000","message":"As I said in tempest is used cleanUp. So you don\u0027t have to delete objects there. self.addCleanUp(self.client.delete_service_object, service_objects[\u0027id\u0027]) after checking status.","commit_id":"d0eaf0dddeb7381d80da45658e1377b307d24b09"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"cea786fe97fa84a5a164eb5482bbff0fe7136fb5","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        self.assertEqual(service_objects[\u0027protocol\u0027], protocol)"},{"line_number":165,"context_line":"        self.assertEqual(service_objects[\u0027source_port\u0027], source_port)"},{"line_number":166,"context_line":"        self.assertEqual(service_objects[\u0027destination_port\u0027], destination_port)"},{"line_number":167,"context_line":"        self.client.delete_service_object(service_objects[\u0027id\u0027])"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        name \u003d \u0027testserviceobjicmp\u0027"},{"line_number":170,"context_line":"        protocol \u003d \u0027icmp\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_510305b8","line":167,"updated":"2014-08-18 11:57:47.000000000","message":"I think you need to create some help function for creating and cheking each service object as there is a lot of duplication of code in this test. Something like this\n\n   def _create_check_service_obj_special_agrs(**kwargs):\n        resp, body \u003d self.client.create_service_object(\n                            service_group_id\u003dgroup_create_body[\u0027service_group\u0027][\u0027id\u0027],\n                            kwargs)\n   \n        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])\n        service_objects \u003d body[\u0027service_object\u0027]\n        self.addCleanUp(self.client.delete_service_object, service_objects[\u0027id\u0027])\n        for key in kwargs:\n                 self.assertEqual(service_objects[key], kwargs[key])","commit_id":"d0eaf0dddeb7381d80da45658e1377b307d24b09"}]}
