)]}'
{"nova/tests/api/openstack/compute/plugins/v3/test_servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7f7331a8f165173ecdb8702229661b0f338a999b","unresolved":false,"context_lines":[{"line_number":2185,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":2186,"context_line":"                          self.controller.create, self.req, self.body)"},{"line_number":2187,"context_line":""},{"line_number":2188,"context_line":"    def test_create_user_data_malformed_bad_request(self):"},{"line_number":2189,"context_line":"        params \u003d {\u0027metadata\u0027: {}}"},{"line_number":2190,"context_line":""},{"line_number":2191,"context_line":"        def fake_create(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F94d8%3D","line":2188,"updated":"2013-12-04 22:15:18.000000000","message":"Same comments as the v2 test.","commit_id":"01242db61039a0c61b9d96591ef0a19b085cb23b"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"00a9379f0883623943c541c41af96a5b88a6e0a3","unresolved":false,"context_lines":[{"line_number":2186,"context_line":"                          self.controller.create, self.req, self.body)"},{"line_number":2187,"context_line":""},{"line_number":2188,"context_line":"    def test_create_user_data_malformed_bad_request(self):"},{"line_number":2189,"context_line":"        params \u003d {\u0027metadata\u0027: {}}"},{"line_number":2190,"context_line":""},{"line_number":2191,"context_line":"        def fake_create(*args, **kwargs):"},{"line_number":2192,"context_line":"            raise exception.InstanceUserDataMalformed()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F93rg%3D","line":2189,"updated":"2013-12-05 01:14:49.000000000","message":"Note that for V3 it is os-user-data:user_data","commit_id":"01242db61039a0c61b9d96591ef0a19b085cb23b"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e65280f00f91f03cd03548c4f1f04e07d941677f","unresolved":false,"context_lines":[{"line_number":2186,"context_line":"                          self.controller.create, self.req, self.body)"},{"line_number":2187,"context_line":""},{"line_number":2188,"context_line":"    def test_create_user_data_malformed_bad_request(self):"},{"line_number":2189,"context_line":"        params \u003d {\u0027metadata\u0027: {}}"},{"line_number":2190,"context_line":""},{"line_number":2191,"context_line":"        def fake_create(*args, **kwargs):"},{"line_number":2192,"context_line":"            raise exception.InstanceUserDataMalformed()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9xFI%3D","line":2189,"in_reply_to":"AAAATn%2F93rg%3D","updated":"2013-12-06 06:56:01.000000000","message":"Done","commit_id":"01242db61039a0c61b9d96591ef0a19b085cb23b"}],"nova/tests/api/openstack/compute/test_servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7f7331a8f165173ecdb8702229661b0f338a999b","unresolved":false,"context_lines":[{"line_number":2196,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":2197,"context_line":"                          self.controller.create, self.req, self.body)"},{"line_number":2198,"context_line":""},{"line_number":2199,"context_line":"    def test_create_user_data_malformed_bad_request(self):"},{"line_number":2200,"context_line":"        params \u003d {\u0027metadata\u0027: {}}"},{"line_number":2201,"context_line":""},{"line_number":2202,"context_line":"        def fake_create(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F94fc%3D","line":2199,"updated":"2013-12-04 22:15:18.000000000","message":"This just tests that we get a 400 vs a what, 500 error?  A more interesting test would be to actually pass metadata that is not base64 so it can\u0027t decode properly.","commit_id":"01242db61039a0c61b9d96591ef0a19b085cb23b"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e65280f00f91f03cd03548c4f1f04e07d941677f","unresolved":false,"context_lines":[{"line_number":2196,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":2197,"context_line":"                          self.controller.create, self.req, self.body)"},{"line_number":2198,"context_line":""},{"line_number":2199,"context_line":"    def test_create_user_data_malformed_bad_request(self):"},{"line_number":2200,"context_line":"        params \u003d {\u0027metadata\u0027: {}}"},{"line_number":2201,"context_line":""},{"line_number":2202,"context_line":"        def fake_create(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9xFU%3D","line":2199,"in_reply_to":"AAAATn%2F93sw%3D","updated":"2013-12-06 06:56:01.000000000","message":"That is actually what I tired to do but I couldn\u0027t figure out anything that I could pass to :                 base64.decodestring(user_data) to make it raise a  base64.binascii.Error :/","commit_id":"01242db61039a0c61b9d96591ef0a19b085cb23b"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"00a9379f0883623943c541c41af96a5b88a6e0a3","unresolved":false,"context_lines":[{"line_number":2196,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":2197,"context_line":"                          self.controller.create, self.req, self.body)"},{"line_number":2198,"context_line":""},{"line_number":2199,"context_line":"    def test_create_user_data_malformed_bad_request(self):"},{"line_number":2200,"context_line":"        params \u003d {\u0027metadata\u0027: {}}"},{"line_number":2201,"context_line":""},{"line_number":2202,"context_line":"        def fake_create(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F93sw%3D","line":2199,"in_reply_to":"AAAATn%2F94fc%3D","updated":"2013-12-05 01:14:49.000000000","message":"In terms of a unittest I think the api test just needs to make sure it handles an InstanceUserDataMalformed exception correctly if raised by the create api.\n\nTesting the userdata is in the right format I think belongs in a unittest for the compute layer and we\u0027re not changing anything here for that.","commit_id":"01242db61039a0c61b9d96591ef0a19b085cb23b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4c1b64931b9f67e68ff856313e78ca7aef33a566","unresolved":false,"context_lines":[{"line_number":2196,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":2197,"context_line":"                          self.controller.create, self.req, self.body)"},{"line_number":2198,"context_line":""},{"line_number":2199,"context_line":"    def test_create_user_data_malformed_bad_request(self):"},{"line_number":2200,"context_line":"        params \u003d {\u0027metadata\u0027: {}}"},{"line_number":2201,"context_line":""},{"line_number":2202,"context_line":"        def fake_create(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9iSU%3D","line":2199,"in_reply_to":"AAAATn%2F9iV4%3D","updated":"2013-12-10 13:57:55.000000000","message":"Boom!\n\n\u003e\u003e\u003e base64.decodestring(\u0027u\\1234\u0027)\nTraceback (most recent call last):\n  File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n  File \"C:\\Python27\\lib\\base64.py\", line 321, in decodestring\n    return binascii.a2b_base64(s)\nbinascii.Error: Incorrect padding\n\u003e\u003e\u003e","commit_id":"01242db61039a0c61b9d96591ef0a19b085cb23b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4fecf41ebac636ba129786e51e9949dd4ac9c1d0","unresolved":false,"context_lines":[{"line_number":2196,"context_line":"        self.assertRaises(webob.exc.HTTPBadRequest,"},{"line_number":2197,"context_line":"                          self.controller.create, self.req, self.body)"},{"line_number":2198,"context_line":""},{"line_number":2199,"context_line":"    def test_create_user_data_malformed_bad_request(self):"},{"line_number":2200,"context_line":"        params \u003d {\u0027metadata\u0027: {}}"},{"line_number":2201,"context_line":""},{"line_number":2202,"context_line":"        def fake_create(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9iV4%3D","line":2199,"in_reply_to":"AAAATn%2F9xFU%3D","updated":"2013-12-10 13:47:14.000000000","message":"You\u0027re not alone, I looked for a little bit for an easy way to do it but it wasn\u0027t obvious to me.","commit_id":"01242db61039a0c61b9d96591ef0a19b085cb23b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7f7331a8f165173ecdb8702229661b0f338a999b","unresolved":false,"context_lines":[{"line_number":2197,"context_line":"                          self.controller.create, self.req, self.body)"},{"line_number":2198,"context_line":""},{"line_number":2199,"context_line":"    def test_create_user_data_malformed_bad_request(self):"},{"line_number":2200,"context_line":"        params \u003d {\u0027metadata\u0027: {}}"},{"line_number":2201,"context_line":""},{"line_number":2202,"context_line":"        def fake_create(*args, **kwargs):"},{"line_number":2203,"context_line":"            raise exception.InstanceUserDataMalformed()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F94eA%3D","line":2200,"updated":"2013-12-04 22:15:18.000000000","message":"Shouldn\u0027t this be \u0027user_data\u0027?  From the API docs:\n\nuser_data (Optional)\tquery\txsd:string\t\n\n\nConfiguration information or scripts to use upon launch. Must be Base64 encoded.","commit_id":"01242db61039a0c61b9d96591ef0a19b085cb23b"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e65280f00f91f03cd03548c4f1f04e07d941677f","unresolved":false,"context_lines":[{"line_number":2197,"context_line":"                          self.controller.create, self.req, self.body)"},{"line_number":2198,"context_line":""},{"line_number":2199,"context_line":"    def test_create_user_data_malformed_bad_request(self):"},{"line_number":2200,"context_line":"        params \u003d {\u0027metadata\u0027: {}}"},{"line_number":2201,"context_line":""},{"line_number":2202,"context_line":"        def fake_create(*args, **kwargs):"},{"line_number":2203,"context_line":"            raise exception.InstanceUserDataMalformed()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9xFQ%3D","line":2200,"in_reply_to":"AAAATn%2F94eA%3D","updated":"2013-12-06 06:56:01.000000000","message":"Done","commit_id":"01242db61039a0c61b9d96591ef0a19b085cb23b"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"00a9379f0883623943c541c41af96a5b88a6e0a3","unresolved":false,"context_lines":[{"line_number":2197,"context_line":"                          self.controller.create, self.req, self.body)"},{"line_number":2198,"context_line":""},{"line_number":2199,"context_line":"    def test_create_user_data_malformed_bad_request(self):"},{"line_number":2200,"context_line":"        params \u003d {\u0027metadata\u0027: {}}"},{"line_number":2201,"context_line":""},{"line_number":2202,"context_line":"        def fake_create(*args, **kwargs):"},{"line_number":2203,"context_line":"            raise exception.InstanceUserDataMalformed()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F93rs%3D","line":2200,"in_reply_to":"AAAATn%2F94eA%3D","updated":"2013-12-05 01:14:49.000000000","message":"yes, although this doesn\u0027t affect the test, its worth fixing because some people look at the tests to see how to use the interface\n\nNote that for V3 it is os-user-data:user_data","commit_id":"01242db61039a0c61b9d96591ef0a19b085cb23b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0be310df5f577e73fd74be9ed9a08775e9651704","unresolved":false,"context_lines":[{"line_number":2211,"context_line":"                          self.controller.create, self.req, self.body)"},{"line_number":2212,"context_line":""},{"line_number":2213,"context_line":"    def test_create_user_data_malformed_bad_request(self):"},{"line_number":2214,"context_line":"        params \u003d {\u0027user_data\u0027: {}}"},{"line_number":2215,"context_line":""},{"line_number":2216,"context_line":"        def fake_create(*args, **kwargs):"},{"line_number":2217,"context_line":"            raise exception.InstanceUserDataMalformed()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9iTA%3D","line":2214,"updated":"2013-12-10 14:01:37.000000000","message":"If we\u0027re going to be correct in our usage of \u0027user_data\u0027, then this should be a string rather than a dict, so let\u0027s fix that and then I\u0027ll approve.\n\nLooks like I can trigger a binary ascii error with just \u0027u1234\u0027:\n\n\u003e\u003e\u003e base64.decodestring(\u0027u1234\u0027)\nTraceback (most recent call last):\n  File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n  File \"C:\\Python27\\lib\\base64.py\", line 321, in decodestring\n    return binascii.a2b_base64(s)\nbinascii.Error: Incorrect padding\n\nSo I\u0027d actually go back to my first suggestion and remove the stub for the create method and just pass in the garbage value and let the code raise the error and handle the exception appropriately, so we kill two birds with one stone.  There are other tests in here passing garbage values to catch exceptions which don\u0027t rely on stubbing out the create method.","commit_id":"a853c88bec9839500fb1fd70b4e92a2b5c27fb50"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"3e7894a4658a0af7c8435a12876b9c4c2d4863cc","unresolved":false,"context_lines":[{"line_number":2211,"context_line":"                          self.controller.create, self.req, self.body)"},{"line_number":2212,"context_line":""},{"line_number":2213,"context_line":"    def test_create_user_data_malformed_bad_request(self):"},{"line_number":2214,"context_line":"        params \u003d {\u0027user_data\u0027: {}}"},{"line_number":2215,"context_line":""},{"line_number":2216,"context_line":"        def fake_create(*args, **kwargs):"},{"line_number":2217,"context_line":"            raise exception.InstanceUserDataMalformed()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9gw8%3D","line":2214,"in_reply_to":"AAAATn%2F9iTA%3D","updated":"2013-12-10 18:49:44.000000000","message":"Thanks Matt, I\u0027ll work on adding this additional coverage.","commit_id":"a853c88bec9839500fb1fd70b4e92a2b5c27fb50"}]}
