)]}'
{"trove/tests/unittests/instance/test_instance_controller.py":[{"author":{"_account_id":28671,"name":"Marcin Piwowarczyk","email":"m.piwowarczy@samsung.com","username":"m.piwowarczy"},"change_message_id":"6c20b83e625265280f0ec910f73b1caab06262b0","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                        Equals(\"\u0027x\u0027 does not match \u0027^0*[1-9]+[0-9]*$\u0027\"))"},{"line_number":219,"context_line":"        self.assertThat(errors[0].path.pop(), Equals(\u0027size\u0027))"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def test_validate_resize_volume_zero_number(self):"},{"line_number":222,"context_line":"        body \u003d {\"resize\": {\"volume\": {\"size\": 0}}}"},{"line_number":223,"context_line":"        schema \u003d self.controller.get_schema(\u0027action\u0027, body)"},{"line_number":224,"context_line":"        validator \u003d jsonschema.Draft4Validator(schema)"},{"line_number":225,"context_line":"        self.assertFalse(validator.is_valid(body))"},{"line_number":226,"context_line":"        errors \u003d sorted(validator.iter_errors(body), key\u003dlambda e: e.path)"},{"line_number":227,"context_line":"        self.assertThat(errors[0].context[0].message,"},{"line_number":228,"context_line":"                        Equals(\"0 is less than the minimum of 1\"))"},{"line_number":229,"context_line":"        self.assertThat(errors[0].path.pop(), Equals(\u0027size\u0027))"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def test_validate_resize_volume_string_zero_number(self):"},{"line_number":232,"context_line":"        body \u003d {\"resize\": {\"volume\": {\"size\": \u00270\u0027}}}"},{"line_number":233,"context_line":"        schema \u003d self.controller.get_schema(\u0027action\u0027, body)"},{"line_number":234,"context_line":"        validator \u003d jsonschema.Draft4Validator(schema)"},{"line_number":235,"context_line":"        self.assertFalse(validator.is_valid(body))"},{"line_number":236,"context_line":"        errors \u003d sorted(validator.iter_errors(body), key\u003dlambda e: e.path)"},{"line_number":237,"context_line":"        self.assertThat(errors[0].context[1].message,"},{"line_number":238,"context_line":"                        Equals(\"\u00270\u0027 does not match \u0027^0*[1-9]+[0-9]*$\u0027\"))"},{"line_number":239,"context_line":"        self.assertThat(errors[0].path.pop(), Equals(\u0027size\u0027))"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def test_validate_resize_instance(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_2664f4b8","line":238,"range":{"start_line":221,"start_character":0,"end_line":238,"end_character":72},"updated":"2018-08-09 17:43:13.000000000","message":"I don\u0027t like fact that there is inconsistent behaviour for volume size 0 passed as string and as integer.\nI think you could solve it using regex pattern: \"^0*[0-9]*$\"\n\nThen both, 0 and \u00270\u0027 will match regex and will be validated by volume_size.\n\nValues with leading zeros like 0004 will be matched too.\n\nCorrect me if I am wrong.","commit_id":"1de7d33a0cd92dee2a5c2edcf2b947985080dd8c"},{"author":{"_account_id":22608,"name":"zhanggang","email":"zhanggang@cmss.chinamobile.com","username":"zhanggang"},"change_message_id":"55780cb7eba95c313f050afb6ecc9e558e494449","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                        Equals(\"\u0027x\u0027 does not match \u0027^0*[1-9]+[0-9]*$\u0027\"))"},{"line_number":219,"context_line":"        self.assertThat(errors[0].path.pop(), Equals(\u0027size\u0027))"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def test_validate_resize_volume_zero_number(self):"},{"line_number":222,"context_line":"        body \u003d {\"resize\": {\"volume\": {\"size\": 0}}}"},{"line_number":223,"context_line":"        schema \u003d self.controller.get_schema(\u0027action\u0027, body)"},{"line_number":224,"context_line":"        validator \u003d jsonschema.Draft4Validator(schema)"},{"line_number":225,"context_line":"        self.assertFalse(validator.is_valid(body))"},{"line_number":226,"context_line":"        errors \u003d sorted(validator.iter_errors(body), key\u003dlambda e: e.path)"},{"line_number":227,"context_line":"        self.assertThat(errors[0].context[0].message,"},{"line_number":228,"context_line":"                        Equals(\"0 is less than the minimum of 1\"))"},{"line_number":229,"context_line":"        self.assertThat(errors[0].path.pop(), Equals(\u0027size\u0027))"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def test_validate_resize_volume_string_zero_number(self):"},{"line_number":232,"context_line":"        body \u003d {\"resize\": {\"volume\": {\"size\": \u00270\u0027}}}"},{"line_number":233,"context_line":"        schema \u003d self.controller.get_schema(\u0027action\u0027, body)"},{"line_number":234,"context_line":"        validator \u003d jsonschema.Draft4Validator(schema)"},{"line_number":235,"context_line":"        self.assertFalse(validator.is_valid(body))"},{"line_number":236,"context_line":"        errors \u003d sorted(validator.iter_errors(body), key\u003dlambda e: e.path)"},{"line_number":237,"context_line":"        self.assertThat(errors[0].context[1].message,"},{"line_number":238,"context_line":"                        Equals(\"\u00270\u0027 does not match \u0027^0*[1-9]+[0-9]*$\u0027\"))"},{"line_number":239,"context_line":"        self.assertThat(errors[0].path.pop(), Equals(\u0027size\u0027))"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def test_validate_resize_instance(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_dec7fc11","line":238,"range":{"start_line":221,"start_character":0,"end_line":238,"end_character":72},"in_reply_to":"3f79a3b5_2664f4b8","updated":"2018-08-10 01:58:48.000000000","message":"As the definition of volume_size in apischema.py, both 0 or \u00270\u0027 will be validated by the two pattern, they have same validation rules, so 0 and \u00270\u0027 both have a output of errors[0].context[0] and errors[0].context[1](the method \u0027test_validate_resize_volume_invalid_characters\u0027 assert them both), and the two test case just assert the condition we excepted, just like test cases 4 and \"4\" described above.\n\nThis update try to reject zero number of volume size. For integer, we could set minimum to 1 simply. The regex pattern is used for string value, and \u00270\u0027 match the pattern \"^0*[0-9]*$\", that is what I try to rejected. \n\nThe pattern \"^0*[1-9]+[0-9]*$\" maybe not a prefect one, but it satisfy two requirements: values like \"0\", \"00000\" will be rejected and values like \"04\", \"400\" will pass.","commit_id":"1de7d33a0cd92dee2a5c2edcf2b947985080dd8c"},{"author":{"_account_id":28671,"name":"Marcin Piwowarczyk","email":"m.piwowarczy@samsung.com","username":"m.piwowarczy"},"change_message_id":"15dc476a259835465d6a3df03ffad98e437592e6","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                        Equals(\"\u0027x\u0027 does not match \u0027^0*[1-9]+[0-9]*$\u0027\"))"},{"line_number":219,"context_line":"        self.assertThat(errors[0].path.pop(), Equals(\u0027size\u0027))"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def test_validate_resize_volume_zero_number(self):"},{"line_number":222,"context_line":"        body \u003d {\"resize\": {\"volume\": {\"size\": 0}}}"},{"line_number":223,"context_line":"        schema \u003d self.controller.get_schema(\u0027action\u0027, body)"},{"line_number":224,"context_line":"        validator \u003d jsonschema.Draft4Validator(schema)"},{"line_number":225,"context_line":"        self.assertFalse(validator.is_valid(body))"},{"line_number":226,"context_line":"        errors \u003d sorted(validator.iter_errors(body), key\u003dlambda e: e.path)"},{"line_number":227,"context_line":"        self.assertThat(errors[0].context[0].message,"},{"line_number":228,"context_line":"                        Equals(\"0 is less than the minimum of 1\"))"},{"line_number":229,"context_line":"        self.assertThat(errors[0].path.pop(), Equals(\u0027size\u0027))"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def test_validate_resize_volume_string_zero_number(self):"},{"line_number":232,"context_line":"        body \u003d {\"resize\": {\"volume\": {\"size\": \u00270\u0027}}}"},{"line_number":233,"context_line":"        schema \u003d self.controller.get_schema(\u0027action\u0027, body)"},{"line_number":234,"context_line":"        validator \u003d jsonschema.Draft4Validator(schema)"},{"line_number":235,"context_line":"        self.assertFalse(validator.is_valid(body))"},{"line_number":236,"context_line":"        errors \u003d sorted(validator.iter_errors(body), key\u003dlambda e: e.path)"},{"line_number":237,"context_line":"        self.assertThat(errors[0].context[1].message,"},{"line_number":238,"context_line":"                        Equals(\"\u00270\u0027 does not match \u0027^0*[1-9]+[0-9]*$\u0027\"))"},{"line_number":239,"context_line":"        self.assertThat(errors[0].path.pop(), Equals(\u0027size\u0027))"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def test_validate_resize_instance(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_10330a16","line":238,"range":{"start_line":221,"start_character":0,"end_line":238,"end_character":72},"in_reply_to":"3f79a3b5_dec7fc11","updated":"2018-08-10 19:18:08.000000000","message":"Makes sense. Thanks for your clarification.","commit_id":"1de7d33a0cd92dee2a5c2edcf2b947985080dd8c"}]}
