)]}'
{"tempest/api/object_storage/test_container_acl.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"30205d6d1fe113773f7a85ffa7b1a58745984b68","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @classmethod"},{"line_number":39,"context_line":"    def tearDownClass(cls):"},{"line_number":40,"context_line":"        cls.data.teardown_all()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def setUp(self):"},{"line_number":43,"context_line":"        super(ObjectTestACLs, self).setUp()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAQn%2F%2FJcs%3D","line":40,"updated":"2013-08-06 12:52:51.000000000","message":"we need to make sure to call the super teardown","commit_id":"b57d3ff737c3cc286dc3fb881e64c51739ca3e8c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"30205d6d1fe113773f7a85ffa7b1a58745984b68","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.container_client.create_container(self.container_name)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def teardown(self):"},{"line_number":48,"context_line":"        super(ObjectTestACLs, self).teardown()"},{"line_number":49,"context_line":"        self.delete_containers([self.container_name])"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAQn%2F%2FJcg%3D","line":48,"updated":"2013-08-06 12:52:51.000000000","message":"we actually need to call teardown of super last, for the same reason we need to call setup super first","commit_id":"b57d3ff737c3cc286dc3fb881e64c51739ca3e8c"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"30205d6d1fe113773f7a85ffa7b1a58745984b68","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            self.container_name,"},{"line_number":183,"context_line":"            object_name, \u0027data\u0027,"},{"line_number":184,"context_line":"            metadata\u003dself.custom_headers)"},{"line_number":185,"context_line":"        self.assertIn(int(resp[\u0027status\u0027]), HTTP_SUCCESS)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027smoke\u0027])"},{"line_number":188,"context_line":"    def test_write_object_without_write_rights(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAQn%2F%2FJcE%3D","line":185,"updated":"2013-08-06 12:52:51.000000000","message":"suggestion for follow up, we should probably create assertHTTPSuccess on our base class, as it would make our code clearer. however that\u0027s just a future idea","commit_id":"b57d3ff737c3cc286dc3fb881e64c51739ca3e8c"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"7e24eb82c85015c23425ad21db8f4f92850c2e32","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        cls.data.setup_test_user()"},{"line_number":30,"context_line":"        resp, body \u003d cls.token_client.auth(cls.data.test_user,"},{"line_number":31,"context_line":"                                           cls.data.test_password,"},{"line_number":32,"context_line":"                                           cls.data.test_tenant)"},{"line_number":33,"context_line":"        cls.new_token \u003d cls.token_client.get_token(cls.data.test_user,"},{"line_number":34,"context_line":"                                                   cls.data.test_password,"},{"line_number":35,"context_line":"                                                   cls.data.test_tenant)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAQn%2F%2FFYE%3D","line":32,"updated":"2013-08-07 13:38:04.000000000","message":"I don\u0027t understand why are you calling the auth() method explicitly.\n\nNote that get_token() called on line 33 will call auth() internally: https://github.com/openstack/tempest/blob/master/tempest/services/identity/json/identity_client.py#L279\n\nI might be wrong, but I think this line is unneeded.","commit_id":"9901d9b880b650fad17cf62f3b02569281f0ab50"}],"tempest/api/object_storage/test_object_services.py":[{"author":{"_account_id":6847,"name":"Martina Kollarova","email":"mkollaro@gmail.com","username":"mkollaro"},"change_message_id":"6f254efecc5cc35d4d6ec3b3bed075c6725d6f7a","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        self.assertIn(int(resp[\u0027status\u0027]), HTTP_SUCCESS)"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"class ObjectTestACLs(base.BaseObjectTest):"},{"line_number":395,"context_line":"    @classmethod"},{"line_number":396,"context_line":"    def setUpClass(cls):"},{"line_number":397,"context_line":"        super(ObjectTestACLs, cls).setUpClass()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2FeuY%3D","line":394,"updated":"2013-07-30 15:18:54.000000000","message":"There are already some similar tests in ObjectTest, for example test_read_object_with_non_authorized_user. I\u0027d perhaps move all these kinds of test to a separate file called test_acl.py or something similar (it\u0027s partly testing containers and partly objects, so I\u0027d keep that out of the name). \n\nThey don\u0027t necessarily need to be in the same class, as yours should have a separate container for each test (see below) and the others don\u0027t need it.","commit_id":"f72ad77135a71076e201c4bd95262e2840fc22d3"},{"author":{"_account_id":6847,"name":"Martina Kollarova","email":"mkollaro@gmail.com","username":"mkollaro"},"change_message_id":"6f254efecc5cc35d4d6ec3b3bed075c6725d6f7a","unresolved":false,"context_lines":[{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    @attr(type\u003d[\u0027negative\u0027, \u0027smoke\u0027])"},{"line_number":410,"context_line":"    def test_access_container_read_object_without_rights(self):"},{"line_number":411,"context_line":"        # update X-Container-Read metadata ACL"},{"line_number":412,"context_line":"        cont_headers \u003d {\u0027X-Container-Read\u0027: \u0027badtenant:baduser\u0027}"},{"line_number":413,"context_line":"        resp_meta, body \u003d self.container_client.update_container_metadata("},{"line_number":414,"context_line":"            self.container_name, metadata\u003dcont_headers,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2Fevo%3D","line":411,"updated":"2013-07-30 15:18:54.000000000","message":"You should be creating a new container for each test if you are changing the metadata for it. Use setUp() in addition to setUpClass() to do that.\n\nEither keep a list \u0027self.containers\u0027 to be cleaned up in tearDownClass() or just do it each time in tearDown().","commit_id":"f72ad77135a71076e201c4bd95262e2840fc22d3"},{"author":{"_account_id":6847,"name":"Martina Kollarova","email":"mkollaro@gmail.com","username":"mkollaro"},"change_message_id":"6f254efecc5cc35d4d6ec3b3bed075c6725d6f7a","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        # create object"},{"line_number":418,"context_line":"        object_name \u003d rand_name(name\u003d\u0027Object\u0027)"},{"line_number":419,"context_line":"        data \u003d arbitrary_string(size\u003dlen(object_name) * 1,"},{"line_number":420,"context_line":"                                base_text\u003dobject_name)"},{"line_number":421,"context_line":"        resp, _ \u003d self.object_client.create_object(self.container_name,"},{"line_number":422,"context_line":"                                                   object_name, data)"},{"line_number":423,"context_line":"        self.assertEqual(resp[\u0027status\u0027], \u0027201\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2FetM%3D","line":420,"updated":"2013-07-30 15:18:54.000000000","message":"Minor nitpick (I\u0027ll +1 even if you don\u0027t fix this):\nI know this arbitrary string generation code is in other tests, but I think this is unnecessary (I plan to clean that someday). Please just use arbitrary_string() without a parameter or something more reasonable. This is just data\u003dobject_name done in a complicated way.","commit_id":"f72ad77135a71076e201c4bd95262e2840fc22d3"},{"author":{"_account_id":6847,"name":"Martina Kollarova","email":"mkollaro@gmail.com","username":"mkollaro"},"change_message_id":"6f254efecc5cc35d4d6ec3b3bed075c6725d6f7a","unresolved":false,"context_lines":[{"line_number":426,"context_line":"            self.container_name)"},{"line_number":427,"context_line":"        self.assertIn(int(resp[\u0027status\u0027]), HTTP_SUCCESS)"},{"line_number":428,"context_line":"        self.assertIn(\u0027x-container-read\u0027, resp)"},{"line_number":429,"context_line":"        self.assertEqual(resp[\u0027x-container-read\u0027], \u0027badtenant:baduser\u0027)"},{"line_number":430,"context_line":"        # Trying to read the object without rights"},{"line_number":431,"context_line":"        self.assertRaises(exceptions.Unauthorized,"},{"line_number":432,"context_line":"                          self.custom_object_client.get_object,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2Fes0%3D","line":429,"updated":"2013-07-30 15:18:54.000000000","message":"Stuff like\nself.assertIn(\u0027x-container-read\u0027, resp)\nis already tested in basic container functionality, don\u0027t repeat those tests. Assume that updating metadata works. I\u0027d just generally assume that everything else works and only focus on the thing you are actually testing. \n\n(I know the rest of the code base doesn\u0027t follow this, so I\u0027d be glad if somebody else would comment on this too.)","commit_id":"f72ad77135a71076e201c4bd95262e2840fc22d3"},{"author":{"_account_id":6847,"name":"Martina Kollarova","email":"mkollaro@gmail.com","username":"mkollaro"},"change_message_id":"6f254efecc5cc35d4d6ec3b3bed075c6725d6f7a","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        self.assertIn(\u0027x-container-read\u0027, resp)"},{"line_number":457,"context_line":"        self.assertEqual(resp[\u0027x-container-read\u0027],"},{"line_number":458,"context_line":"                         self.data.test_tenant + \u0027:\u0027 + self.data.test_user)"},{"line_number":459,"context_line":"        # Trying to read the object without rights"},{"line_number":460,"context_line":"        resp, _ \u003d self.custom_object_client.get_object("},{"line_number":461,"context_line":"            self.container_name, object_name,"},{"line_number":462,"context_line":"            metadata\u003dself.custom_headers)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2FerU%3D","line":459,"updated":"2013-07-30 15:18:54.000000000","message":"Confusing comment...do we have rights or not? The test name says yes.","commit_id":"f72ad77135a71076e201c4bd95262e2840fc22d3"},{"author":{"_account_id":6847,"name":"Martina Kollarova","email":"mkollaro@gmail.com","username":"mkollaro"},"change_message_id":"6f254efecc5cc35d4d6ec3b3bed075c6725d6f7a","unresolved":false,"context_lines":[{"line_number":502,"context_line":"        self.assertIn(\u0027x-container-write\u0027, resp)"},{"line_number":503,"context_line":"        self.assertEqual(resp[\u0027x-container-write\u0027],"},{"line_number":504,"context_line":"                         self.data.test_tenant + \u0027:\u0027 + self.data.test_user)"},{"line_number":505,"context_line":"        # Trying to write the object without rights"},{"line_number":506,"context_line":"        object_name \u003d rand_name(name\u003d\u0027Object\u0027)"},{"line_number":507,"context_line":"        data \u003d arbitrary_string(size\u003dlen(object_name) * 1,"},{"line_number":508,"context_line":"                                base_text\u003dobject_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2FeqU%3D","line":505,"updated":"2013-07-30 15:18:54.000000000","message":"Confusing comment, test name says we do have rights.","commit_id":"f72ad77135a71076e201c4bd95262e2840fc22d3"},{"author":{"_account_id":6847,"name":"Martina Kollarova","email":"mkollaro@gmail.com","username":"mkollaro"},"change_message_id":"6f254efecc5cc35d4d6ec3b3bed075c6725d6f7a","unresolved":false,"context_lines":[{"line_number":572,"context_line":"                          metadata\u003dself.custom_headers)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    @classmethod"},{"line_number":575,"context_line":"    def tearDownClass(cls):"},{"line_number":576,"context_line":"        cls.delete_containers([cls.container_name])"},{"line_number":577,"context_line":"        cls.data.teardown_all()"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2FeyM%3D","line":575,"updated":"2013-07-30 15:18:54.000000000","message":"Put this right behind the setUpClass method, that is how it\u0027s done everywhere else.","commit_id":"f72ad77135a71076e201c4bd95262e2840fc22d3"}]}
