)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2fb5ae0f7fe2ca5e87641fd8b7bc7f5b5e311573","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Yuiko Takada \u003ctakada-yuiko@mxn.nes.nec.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-06-18 13:53:23 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add API schema for v3 user_data extension"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"By defining the API schema, it is possible to separate the validation code"},{"line_number":10,"context_line":"from the API method. The API method can be more simple."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ae5cdf2_320f088a","line":7,"updated":"2014-06-18 05:23:49.000000000","message":"Now we have decided v3 API is never exposed as v3 and v2.1 will use v3 implementation internally.\nSo it is better to add v2.1 in the commit message like\n\n Add API schema for v2.1/v3 user_data extension","commit_id":"e800f0de9e4f75cbe02581f6b6136523ff050791"}],"nova/api/openstack/compute/schemas/v3/user_data.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2e866eaf7c091cfd9124a0ec5db4fc9f66334a2d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"server_create \u003d {"},{"line_number":16,"context_line":"    # Defined maxLength as 65535 in nova/compute/api.py"},{"line_number":17,"context_line":"    \u0027os-user-data:user_data\u0027: {"},{"line_number":18,"context_line":"        \u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: 65535, \u0027format\u0027: \u0027base64\u0027"},{"line_number":19,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BbPo%3D","line":16,"updated":"2014-01-27 00:48:41.000000000","message":"nit: better to change 65535 to MAX_USERDATA_SIZE(65535)","commit_id":"3acad3a1ddda3a0d3395d62929cc3b7feb2dc761"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"fa33011f0a108f7c3730924cd51e6fab26747fb8","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"server_create \u003d {"},{"line_number":16,"context_line":"    # Defined maxLength as 65535 in nova/compute/api.py"},{"line_number":17,"context_line":"    \u0027os-user-data:user_data\u0027: {"},{"line_number":18,"context_line":"        \u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: 65535, \u0027format\u0027: \u0027base64\u0027"},{"line_number":19,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BasM%3D","line":16,"in_reply_to":"AAAAUH%2F%2BbPo%3D","updated":"2014-01-27 06:00:13.000000000","message":"Done","commit_id":"3acad3a1ddda3a0d3395d62929cc3b7feb2dc761"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"54bb86efa3a241f2ebc2a6c24882f0d06398a652","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from nova.compute import api"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"server_create \u003d {"},{"line_number":18,"context_line":"    # Defined maxLength as MAX_USERDATA_SIZE(65535) in nova/compute/api.py"},{"line_number":19,"context_line":"    \u0027os-user-data:user_data\u0027: {"},{"line_number":20,"context_line":"        \u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: api.MAX_USERDATA_SIZE,"},{"line_number":21,"context_line":"        \u0027format\u0027: \u0027base64\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_2357c602","line":18,"updated":"2014-08-08 02:17:54.000000000","message":"It is better to remove \"(65535)\" from the above comment because \"MAX_USERDATA_SIZE\" seems enough and it would be a little difficult to maintain the length description when changing it in the future.","commit_id":"665d26f94a0a9b482b51a5d04958ac43e3c23371"},{"author":{"_account_id":6348,"name":"xu-haiwei","email":"hai-xu@xr.jp.nec.com","username":"xu-haiwei"},"change_message_id":"8772fc506932cdfaa3b03e945f97c6ba6ea466cd","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from nova.compute import api"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"server_create \u003d {"},{"line_number":18,"context_line":"    # Defined maxLength as MAX_USERDATA_SIZE(65535) in nova/compute/api.py"},{"line_number":19,"context_line":"    \u0027os-user-data:user_data\u0027: {"},{"line_number":20,"context_line":"        \u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: api.MAX_USERDATA_SIZE,"},{"line_number":21,"context_line":"        \u0027format\u0027: \u0027base64\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_a47c2024","line":18,"in_reply_to":"baada198_2357c602","updated":"2014-08-13 06:57:49.000000000","message":"Done","commit_id":"665d26f94a0a9b482b51a5d04958ac43e3c23371"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"afc521971ab5789ff261f58a8188ae5e6881aeda","unresolved":false,"context_lines":[{"line_number":17,"context_line":"server_create \u003d {"},{"line_number":18,"context_line":"    # Defined maxLength as MAX_USERDATA_SIZE in nova/compute/api.py"},{"line_number":19,"context_line":"    \u0027os-user-data:user_data\u0027: {"},{"line_number":20,"context_line":"        \u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: api.MAX_USERDATA_SIZE,"},{"line_number":21,"context_line":"        \u0027format\u0027: \u0027base64\u0027"},{"line_number":22,"context_line":"    },"},{"line_number":23,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_a09f9802","line":20,"updated":"2014-09-01 00:23:44.000000000","message":"This maxLength seems a little overkill, because the other schemas don\u0027t depend on nova.compute.api. so can we remove it?","commit_id":"daea2cd958da38647cd6fd15fa8ede6aaf291aa9"}],"nova/api/validation/validators.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"50be370eb4a2c0a4162c57fdf9548cc6bd8ecd87","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    return uuidutils.is_uuid_like(instance)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"@jsonschema.FormatChecker.cls_checks(\u0027base64\u0027)"},{"line_number":35,"context_line":"def _validate_base64_format(instance):"},{"line_number":36,"context_line":"    try:"},{"line_number":37,"context_line":"        base64.decodestring(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BlfA%3D","line":34,"updated":"2014-01-24 05:05:04.000000000","message":"nit: could you move this method before line29 for alphabetizing?","commit_id":"c73ef74c5b1bc6e96447c796a093f0044ba1b4b0"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"1115b3e5c0a72ce1f015e8eecb1ae105cc0d76c2","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    return uuidutils.is_uuid_like(instance)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"@jsonschema.FormatChecker.cls_checks(\u0027base64\u0027)"},{"line_number":35,"context_line":"def _validate_base64_format(instance):"},{"line_number":36,"context_line":"    try:"},{"line_number":37,"context_line":"        base64.decodestring(instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2Blbo%3D","line":34,"in_reply_to":"AAAAUH%2F%2BlfA%3D","updated":"2014-01-24 05:44:18.000000000","message":"Done","commit_id":"c73ef74c5b1bc6e96447c796a093f0044ba1b4b0"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"7391644e64648a08a2c06c00f7d0ed3202736aa6","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import base64"},{"line_number":20,"context_line":"import jsonschema"},{"line_number":21,"context_line":"import six"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_d991ba9c","line":19,"updated":"2014-08-07 09:12:18.000000000","message":"Here need add one blank line due to base64 is built-in library.","commit_id":"665d26f94a0a9b482b51a5d04958ac43e3c23371"},{"author":{"_account_id":6348,"name":"xu-haiwei","email":"hai-xu@xr.jp.nec.com","username":"xu-haiwei"},"change_message_id":"8772fc506932cdfaa3b03e945f97c6ba6ea466cd","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import base64"},{"line_number":20,"context_line":"import jsonschema"},{"line_number":21,"context_line":"import six"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_e4753835","line":19,"in_reply_to":"baada198_d991ba9c","updated":"2014-08-13 06:57:49.000000000","message":"Done","commit_id":"665d26f94a0a9b482b51a5d04958ac43e3c23371"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"54bb86efa3a241f2ebc2a6c24882f0d06398a652","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import base64"},{"line_number":20,"context_line":"import jsonschema"},{"line_number":21,"context_line":"import six"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_4364bae5","line":19,"in_reply_to":"baada198_d991ba9c","updated":"2014-08-08 02:17:54.000000000","message":"agreed, a nice catch.","commit_id":"665d26f94a0a9b482b51a5d04958ac43e3c23371"}],"nova/tests/api/openstack/compute/plugins/v3/test_user_data.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"50be370eb4a2c0a4162c57fdf9548cc6bd8ecd87","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    def test_create_instance_with_bad_user_data(self):"},{"line_number":245,"context_line":"        value \u003d \"A random string\""},{"line_number":246,"context_line":"        params \u003d {user_data.ATTRIBUTE_NAME: value}"},{"line_number":247,"context_line":"        self.assertRaises(exception.ValidationError, self._test_create, params)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"class TestServerCreateRequestXMLDeserializer(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BlfQ%3D","line":247,"updated":"2014-01-24 05:05:04.000000000","message":"Can we use _test_create_extra() instead of new _test_create?","commit_id":"c73ef74c5b1bc6e96447c796a093f0044ba1b4b0"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"1115b3e5c0a72ce1f015e8eecb1ae105cc0d76c2","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    def test_create_instance_with_bad_user_data(self):"},{"line_number":245,"context_line":"        value \u003d \"A random string\""},{"line_number":246,"context_line":"        params \u003d {user_data.ATTRIBUTE_NAME: value}"},{"line_number":247,"context_line":"        self.assertRaises(exception.ValidationError, self._test_create, params)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"class TestServerCreateRequestXMLDeserializer(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2Blbw%3D","line":247,"in_reply_to":"AAAAUH%2F%2BlfQ%3D","updated":"2014-01-24 05:44:18.000000000","message":"Yes, we can.Done","commit_id":"c73ef74c5b1bc6e96447c796a093f0044ba1b4b0"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2e866eaf7c091cfd9124a0ec5db4fc9f66334a2d","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.stubs.Set(manager.VlanManager, \u0027allocate_fixed_ip\u0027,"},{"line_number":144,"context_line":"                       fake_method)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _test_create_extra(self, params, no_image\u003dFalse,"},{"line_number":147,"context_line":"                           override_controller\u003dNone):"},{"line_number":148,"context_line":"        image_uuid \u003d \u0027c905cedb-7281-47e4-8a62-f26bc5fc4c77\u0027"},{"line_number":149,"context_line":"        server \u003d dict(name\u003d\u0027server_test\u0027, image_ref\u003dimage_uuid, flavor_ref\u003d2)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BbPs%3D","line":146,"updated":"2014-01-27 00:48:41.000000000","message":"Can we use this method instead of creating a new method?","commit_id":"3acad3a1ddda3a0d3395d62929cc3b7feb2dc761"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"d9b939e324689fe74e346cf832d71ad69d936901","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.stubs.Set(manager.VlanManager, \u0027allocate_fixed_ip\u0027,"},{"line_number":144,"context_line":"                       fake_method)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _test_create_extra(self, params, no_image\u003dFalse,"},{"line_number":147,"context_line":"                           override_controller\u003dNone):"},{"line_number":148,"context_line":"        image_uuid \u003d \u0027c905cedb-7281-47e4-8a62-f26bc5fc4c77\u0027"},{"line_number":149,"context_line":"        server \u003d dict(name\u003d\u0027server_test\u0027, image_ref\u003dimage_uuid, flavor_ref\u003d2)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2Batc%3D","line":146,"in_reply_to":"AAAAUH%2F%2BawM%3D","updated":"2014-01-27 05:43:18.000000000","message":"OK, I\u0027ll do it, thank you.","commit_id":"3acad3a1ddda3a0d3395d62929cc3b7feb2dc761"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"e74dd7a8d1eaf41afbe1a36d6be759fdb2fd1d5b","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.stubs.Set(manager.VlanManager, \u0027allocate_fixed_ip\u0027,"},{"line_number":144,"context_line":"                       fake_method)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _test_create_extra(self, params, no_image\u003dFalse,"},{"line_number":147,"context_line":"                           override_controller\u003dNone):"},{"line_number":148,"context_line":"        image_uuid \u003d \u0027c905cedb-7281-47e4-8a62-f26bc5fc4c77\u0027"},{"line_number":149,"context_line":"        server \u003d dict(name\u003d\u0027server_test\u0027, image_ref\u003dimage_uuid, flavor_ref\u003d2)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BawM%3D","line":146,"in_reply_to":"AAAAUH%2F%2BaxM%3D","updated":"2014-01-27 05:08:29.000000000","message":"Yes, I think so.\n\nThis file is for the use_data extension already, and it is OK to add some validation tests to the existing class, IMO.","commit_id":"3acad3a1ddda3a0d3395d62929cc3b7feb2dc761"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"0aeca4b7ba0eb2c4c28fe11ad9f3fdc2bf0987e9","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.stubs.Set(manager.VlanManager, \u0027allocate_fixed_ip\u0027,"},{"line_number":144,"context_line":"                       fake_method)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _test_create_extra(self, params, no_image\u003dFalse,"},{"line_number":147,"context_line":"                           override_controller\u003dNone):"},{"line_number":148,"context_line":"        image_uuid \u003d \u0027c905cedb-7281-47e4-8a62-f26bc5fc4c77\u0027"},{"line_number":149,"context_line":"        server \u003d dict(name\u003d\u0027server_test\u0027, image_ref\u003dimage_uuid, flavor_ref\u003d2)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BaxM%3D","line":146,"in_reply_to":"AAAAUH%2F%2BbPs%3D","updated":"2014-01-27 05:01:44.000000000","message":"Do you mean that we don\u0027t need the new class \"ServersControllerCreateAPIValidationTest\" and we can write test_create_instance_with_bad_user_data method in ServersControllerCreateTest class, too?","commit_id":"3acad3a1ddda3a0d3395d62929cc3b7feb2dc761"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"50fbe9386982be57a879698767e60218e4ad59cf","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        value \u003d \"A random string\""},{"line_number":212,"context_line":"        params \u003d {user_data.ATTRIBUTE_NAME: value}"},{"line_number":213,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":214,"context_line":"                          self._test_create_extra, params)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_e4a63054","line":214,"updated":"2014-06-23 07:25:05.000000000","message":"maybe a test for maxlen (65536) can be added?","commit_id":"015acbf81140a343c6d82ec3d7bf76a36fb9756a"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"590bad3d80b6e5ccc5b148c3cfbe6d4ea8a4b995","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        value \u003d \"A random string\""},{"line_number":212,"context_line":"        params \u003d {user_data.ATTRIBUTE_NAME: value}"},{"line_number":213,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":214,"context_line":"                          self._test_create_extra, params)"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_f58e88d0","line":214,"in_reply_to":"1ae5cdf2_e4a63054","updated":"2014-08-07 04:13:34.000000000","message":"nice! I\u0027ll do it.","commit_id":"015acbf81140a343c6d82ec3d7bf76a36fb9756a"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"afc521971ab5789ff261f58a8188ae5e6881aeda","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    def test_create_instance_with_too_long_user_data(self):"},{"line_number":198,"context_line":"        value \u003d \"a\" * (compute_api.MAX_USERDATA_SIZE + 1)"},{"line_number":199,"context_line":"        params \u003d {user_data.ATTRIBUTE_NAME: base64.b64encode(value)}"},{"line_number":200,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":201,"context_line":"                          self._test_create_extra, params)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_e088c0c8","line":200,"updated":"2014-09-01 00:23:44.000000000","message":"since the other comment, this test seems unnecessary.","commit_id":"daea2cd958da38647cd6fd15fa8ede6aaf291aa9"}],"nova/tests/test_api_validation.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7228aa1ad6d5b6660b25056d85520d04e32c1bc5","unresolved":false,"context_lines":[{"line_number":803,"context_line":""},{"line_number":804,"context_line":"    def test_validate_base64(self):"},{"line_number":805,"context_line":"        self.assertEqual(\u0027Validation succeeded.\u0027,"},{"line_number":806,"context_line":"                         self.post(body\u003d{\u0027foo\u0027: \u0027abcd\u0027}))"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"    def test_validate_base64_fails(self):"},{"line_number":809,"context_line":"        value \u003d \u0027A random string\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_e44b4829","line":806,"updated":"2014-08-19 08:16:37.000000000","message":"Please add base64 characters instead of \u0027abcd\u0027 like:\n\n \u0027aGVsbG8gd29ybGQ\u003d\u0027\n\n \u003e\u003e\u003e base64.decodestring(\u0027aGVsbG8gd29ybGQ\u003d\u0027)\n \u0027hello world\u0027\n\nWhen I tested \u0027abc\u0027 instead of \u0027abcd\u0027, an error happened like\n\n\u003e\u003e\u003e base64.decodestring(\u0027abc\u0027)\nTraceback (most recent call last):\n  File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n  File \"/usr/lib/python2.7/base64.py\", line 321, in decodestring\n    return binascii.a2b_base64(s)\nbinascii.Error: Incorrect padding\n\nSo current \u0027abcd\u0027 seems tricky.\nIt would be better to specify obvious base64 string.","commit_id":"b68d4584a5e12d2bd53fd9b9ea469f638dd9b12f"},{"author":{"_account_id":6348,"name":"xu-haiwei","email":"hai-xu@xr.jp.nec.com","username":"xu-haiwei"},"change_message_id":"7978aadb12c75e47386927bd04aa9152f15cc44f","unresolved":false,"context_lines":[{"line_number":803,"context_line":""},{"line_number":804,"context_line":"    def test_validate_base64(self):"},{"line_number":805,"context_line":"        self.assertEqual(\u0027Validation succeeded.\u0027,"},{"line_number":806,"context_line":"                         self.post(body\u003d{\u0027foo\u0027: \u0027abcd\u0027}))"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"    def test_validate_base64_fails(self):"},{"line_number":809,"context_line":"        value \u003d \u0027A random string\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_2d814afb","line":806,"in_reply_to":"1abeadc6_e44b4829","updated":"2014-08-21 03:50:28.000000000","message":"Done","commit_id":"b68d4584a5e12d2bd53fd9b9ea469f638dd9b12f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"afc521971ab5789ff261f58a8188ae5e6881aeda","unresolved":false,"context_lines":[{"line_number":848,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":849,"context_line":"            \u0027properties\u0027: {"},{"line_number":850,"context_line":"                \u0027foo\u0027: {"},{"line_number":851,"context_line":"                    \u0027type\u0027: \u0027string\u0027, \u0027maxLength\u0027: api.MAX_USERDATA_SIZE,"},{"line_number":852,"context_line":"                    \u0027format\u0027: \u0027base64\u0027,"},{"line_number":853,"context_line":"                },"},{"line_number":854,"context_line":"            },"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_c0bbbc70","line":851,"updated":"2014-09-01 00:23:44.000000000","message":"this maxLength is not related to this test class purpose.\nso it is necessary to remove it.","commit_id":"daea2cd958da38647cd6fd15fa8ede6aaf291aa9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"afc521971ab5789ff261f58a8188ae5e6881aeda","unresolved":false,"context_lines":[{"line_number":876,"context_line":"        detail \u003d (\"Invalid input for field/attribute foo. \""},{"line_number":877,"context_line":"                  \"Value: %s. \u0027%s\u0027 is too long\") % (value, value)"},{"line_number":878,"context_line":"        self.check_validation_error(self.post, body\u003d{\u0027foo\u0027: value},"},{"line_number":879,"context_line":"                                    expected_detail\u003ddetail)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa98f980_e0afe029","line":879,"updated":"2014-09-01 00:23:44.000000000","message":"ditto","commit_id":"daea2cd958da38647cd6fd15fa8ede6aaf291aa9"}]}
