)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"aa11d56b50b2e7fc376ca0780031432b7c8123ea","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The order of elements in the versions response depends on how the dict"},{"line_number":10,"context_line":"is ordered which may differ. This can be seen by setting the"},{"line_number":11,"context_line":"PYTHON_HASHSEED value to something other than 0."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"With this fix, code is written that compares the version elements in"},{"line_number":14,"context_line":"sorted order so the order as returned doesn\u0027t matter."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a961159_ae33b7f4","line":11,"updated":"2015-01-02 19:57:28.000000000","message":"s/PYTHON_HASHSEED/PYTHONHASHSEED/","commit_id":"b691e2ff3e9a77233eb574f21137425a8b6779df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"91125dd0ef202f15d395ed1691e6981abc28ccf6","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The order of elements in the versions response depends on how the dict"},{"line_number":10,"context_line":"is ordered which may differ. This can be seen by setting the"},{"line_number":11,"context_line":"PYTHON_HASHSEED value to something other than 0."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"With this fix, code is written that compares the version elements in"},{"line_number":14,"context_line":"sorted order so the order as returned doesn\u0027t matter."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a961159_4e5df378","line":11,"in_reply_to":"3a961159_ae33b7f4","updated":"2015-01-02 21:52:24.000000000","message":"Done","commit_id":"b691e2ff3e9a77233eb574f21137425a8b6779df"}],"keystone/tests/test_versions.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"b380b04656f2ecadea7498ad763f314dee6ad6f6","unresolved":false,"context_lines":[{"line_number":366,"context_line":"class _CompareVersionMixin(object):"},{"line_number":367,"context_line":"    def _assert_version_values_equal(self, expected, observed):"},{"line_number":368,"context_line":"        self.assertThat(observed, tt_matchers.HasLength(len(expected)))"},{"line_number":369,"context_line":"        for e in expected:"},{"line_number":370,"context_line":"            o \u003d [x for x in observed if x[\u0027id\u0027] \u003d\u003d e[\u0027id\u0027]][0]"},{"line_number":371,"context_line":"            self.assertEqual(e, o)"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_a715bc4a","line":369,"updated":"2014-12-17 09:24:25.000000000","message":"Why can\u0027t we do assertEqual(sorted(expected), sorted(observed))?","commit_id":"ec26a27a5c96066c41b9262f8ec6c4e846983aac"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"66fab279e040db56ca620b8bd68ed7c119ce8a28","unresolved":false,"context_lines":[{"line_number":366,"context_line":"class _CompareVersionMixin(object):"},{"line_number":367,"context_line":"    def _assert_version_values_equal(self, expected, observed):"},{"line_number":368,"context_line":"        self.assertThat(observed, tt_matchers.HasLength(len(expected)))"},{"line_number":369,"context_line":"        for e in expected:"},{"line_number":370,"context_line":"            o \u003d [x for x in observed if x[\u0027id\u0027] \u003d\u003d e[\u0027id\u0027]][0]"},{"line_number":371,"context_line":"            self.assertEqual(e, o)"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_7f9b50c9","line":369,"in_reply_to":"3a961159_a715bc4a","updated":"2014-12-17 15:12:22.000000000","message":"Done","commit_id":"ec26a27a5c96066c41b9262f8ec6c4e846983aac"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"b380b04656f2ecadea7498ad763f314dee6ad6f6","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        self.assertThat(observed, tt_matchers.HasLength(len(expected)))"},{"line_number":369,"context_line":"        for e in expected:"},{"line_number":370,"context_line":"            o \u003d [x for x in observed if x[\u0027id\u0027] \u003d\u003d e[\u0027id\u0027]][0]"},{"line_number":371,"context_line":"            self.assertEqual(e, o)"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def _assert_version_equal(self, expected, observed):"},{"line_number":374,"context_line":"        self.assertEqual(set(observed), set([\u0027versions\u0027]))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_2a8b5369","line":371,"updated":"2014-12-17 09:24:25.000000000","message":"If we keep the for loop, I think assertDictEqual should be used here.","commit_id":"ec26a27a5c96066c41b9262f8ec6c4e846983aac"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"66fab279e040db56ca620b8bd68ed7c119ce8a28","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        self.assertThat(observed, tt_matchers.HasLength(len(expected)))"},{"line_number":369,"context_line":"        for e in expected:"},{"line_number":370,"context_line":"            o \u003d [x for x in observed if x[\u0027id\u0027] \u003d\u003d e[\u0027id\u0027]][0]"},{"line_number":371,"context_line":"            self.assertEqual(e, o)"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def _assert_version_equal(self, expected, observed):"},{"line_number":374,"context_line":"        self.assertEqual(set(observed), set([\u0027versions\u0027]))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_bfa5b805","line":371,"in_reply_to":"3a961159_2a8b5369","updated":"2014-12-17 15:12:22.000000000","message":"Done","commit_id":"ec26a27a5c96066c41b9262f8ec6c4e846983aac"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"b380b04656f2ecadea7498ad763f314dee6ad6f6","unresolved":false,"context_lines":[{"line_number":371,"context_line":"            self.assertEqual(e, o)"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def _assert_version_equal(self, expected, observed):"},{"line_number":374,"context_line":"        self.assertEqual(set(observed), set([\u0027versions\u0027]))"},{"line_number":375,"context_line":"        self.assertEqual(set(observed[\u0027versions\u0027]), set([\u0027values\u0027]))"},{"line_number":376,"context_line":"        self._assert_version_values_equal(expected[\u0027versions\u0027][\u0027values\u0027],"},{"line_number":377,"context_line":"                                          observed[\u0027versions\u0027][\u0027values\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_d9ce52b4","line":374,"updated":"2014-12-17 09:24:25.000000000","message":"Please, fix the order to (expected, observed)","commit_id":"ec26a27a5c96066c41b9262f8ec6c4e846983aac"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"66fab279e040db56ca620b8bd68ed7c119ce8a28","unresolved":false,"context_lines":[{"line_number":371,"context_line":"            self.assertEqual(e, o)"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def _assert_version_equal(self, expected, observed):"},{"line_number":374,"context_line":"        self.assertEqual(set(observed), set([\u0027versions\u0027]))"},{"line_number":375,"context_line":"        self.assertEqual(set(observed[\u0027versions\u0027]), set([\u0027values\u0027]))"},{"line_number":376,"context_line":"        self._assert_version_values_equal(expected[\u0027versions\u0027][\u0027values\u0027],"},{"line_number":377,"context_line":"                                          observed[\u0027versions\u0027][\u0027values\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_dfa8c4dd","line":374,"in_reply_to":"3a961159_d9ce52b4","updated":"2014-12-17 15:12:22.000000000","message":"Done","commit_id":"ec26a27a5c96066c41b9262f8ec6c4e846983aac"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"98732adcf9c944a6ec6808fe9f6931a4168f62b0","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"class _CompareVersionMixin(object):"},{"line_number":367,"context_line":"    def _assert_version_equal(self, expected, observed):"},{"line_number":368,"context_line":"        self.assertEqual(set([\u0027versions\u0027]), set(observed))"},{"line_number":369,"context_line":"        self.assertEqual(set([\u0027values\u0027]), set(observed[\u0027versions\u0027]))"},{"line_number":370,"context_line":"        self.assertEqual(sorted(expected[\u0027versions\u0027][\u0027values\u0027]),"},{"line_number":371,"context_line":"                         sorted(observed[\u0027versions\u0027][\u0027values\u0027]))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_b1aa086f","line":368,"updated":"2014-12-19 09:52:30.000000000","message":"In https://review.openstack.org/#/c/138920/3/keystone/tests/test_backend_templated.py you use self.assertThat(observed, matchers.KeysEqual(expected)). Maybe it should be used here too?","commit_id":"8e75dec9fa0f71a21afc6458c8c240959a3332a6"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"4a6b71e9e25563b7e5e8846f6bc3c685f4d715fe","unresolved":false,"context_lines":[{"line_number":679,"context_line":"            elif version[\u0027id\u0027] \u003d\u003d \u0027v2.0\u0027:"},{"line_number":680,"context_line":"                self._paste_in_port("},{"line_number":681,"context_line":"                    version, \u0027http://localhost:%s/v2.0/\u0027 % CONF.public_port)"},{"line_number":682,"context_line":"        self._assert_version_equal(expected, data)"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"    def test_public(self):"},{"line_number":685,"context_line":"        self._test_version(\u0027main\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_8b58ad58","line":682,"updated":"2015-01-02 19:49:06.000000000","message":"assertItemsEqual can be be used instead of the mixin.","commit_id":"b691e2ff3e9a77233eb574f21137425a8b6779df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6963e0a972358d296625370187985076e4834526","unresolved":false,"context_lines":[{"line_number":679,"context_line":"            elif version[\u0027id\u0027] \u003d\u003d \u0027v2.0\u0027:"},{"line_number":680,"context_line":"                self._paste_in_port("},{"line_number":681,"context_line":"                    version, \u0027http://localhost:%s/v2.0/\u0027 % CONF.public_port)"},{"line_number":682,"context_line":"        self._assert_version_equal(expected, data)"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"    def test_public(self):"},{"line_number":685,"context_line":"        self._test_version(\u0027main\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_91a9badf","line":682,"in_reply_to":"3a961159_316e46ca","updated":"2015-01-02 22:33:51.000000000","message":"The tests pass when they should fail. Try changing the string at line 681 or 678 and the test should now fail.","commit_id":"b691e2ff3e9a77233eb574f21137425a8b6779df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"91125dd0ef202f15d395ed1691e6981abc28ccf6","unresolved":false,"context_lines":[{"line_number":679,"context_line":"            elif version[\u0027id\u0027] \u003d\u003d \u0027v2.0\u0027:"},{"line_number":680,"context_line":"                self._paste_in_port("},{"line_number":681,"context_line":"                    version, \u0027http://localhost:%s/v2.0/\u0027 % CONF.public_port)"},{"line_number":682,"context_line":"        self._assert_version_equal(expected, data)"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"    def test_public(self):"},{"line_number":685,"context_line":"        self._test_version(\u0027main\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_8e58bb58","line":682,"in_reply_to":"3a961159_8b58ad58","updated":"2015-01-02 21:52:24.000000000","message":"I tried using assertItemsEqual by itself and it didn\u0027t catch an unexpected endpoint.","commit_id":"b691e2ff3e9a77233eb574f21137425a8b6779df"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"c35546c40710f6007610bde728e894e9cf801890","unresolved":false,"context_lines":[{"line_number":679,"context_line":"            elif version[\u0027id\u0027] \u003d\u003d \u0027v2.0\u0027:"},{"line_number":680,"context_line":"                self._paste_in_port("},{"line_number":681,"context_line":"                    version, \u0027http://localhost:%s/v2.0/\u0027 % CONF.public_port)"},{"line_number":682,"context_line":"        self._assert_version_equal(expected, data)"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"    def test_public(self):"},{"line_number":685,"context_line":"        self._test_version(\u0027main\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_316e46ca","line":682,"in_reply_to":"3a961159_8e58bb58","updated":"2015-01-02 22:28:53.000000000","message":"That\u0027s strange. If I apply patch http://paste.openstack.org/show/155430/ I get http://paste.openstack.org/show/155429/ (all tests run OK).","commit_id":"b691e2ff3e9a77233eb574f21137425a8b6779df"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"10a493baf2e851f1e0a02d20e70a311ac740b552","unresolved":false,"context_lines":[{"line_number":679,"context_line":"            elif version[\u0027id\u0027] \u003d\u003d \u0027v2.0\u0027:"},{"line_number":680,"context_line":"                self._paste_in_port("},{"line_number":681,"context_line":"                    version, \u0027http://localhost:%s/v2.0/\u0027 % CONF.public_port)"},{"line_number":682,"context_line":"        self._assert_version_equal(expected, data)"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"    def test_public(self):"},{"line_number":685,"context_line":"        self._test_version(\u0027main\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_d166e2ba","line":682,"in_reply_to":"3a961159_91a9badf","updated":"2015-01-02 23:08:15.000000000","message":"Right. That\u0027s because assertItemsEqual iterated over the keys.\n\nhttp://paste.openstack.org/show/155431/ works ok.","commit_id":"b691e2ff3e9a77233eb574f21137425a8b6779df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0fb13e516b008eaa84de7616d5e369d339c359bc","unresolved":false,"context_lines":[{"line_number":679,"context_line":"            elif version[\u0027id\u0027] \u003d\u003d \u0027v2.0\u0027:"},{"line_number":680,"context_line":"                self._paste_in_port("},{"line_number":681,"context_line":"                    version, \u0027http://localhost:%s/v2.0/\u0027 % CONF.public_port)"},{"line_number":682,"context_line":"        self._assert_version_equal(expected, data)"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"    def test_public(self):"},{"line_number":685,"context_line":"        self._test_version(\u0027main\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_d1fd02b3","line":682,"in_reply_to":"3a961159_d166e2ba","updated":"2015-01-02 23:17:28.000000000","message":"Removing those other checks would change the test so that it didn\u0027t verify a problem where extra fields were added to the response.","commit_id":"b691e2ff3e9a77233eb574f21137425a8b6779df"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"cc521a54d10b0143f05c312808f44f6d40bccb49","unresolved":false,"context_lines":[{"line_number":363,"context_line":")"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"class _CompareVersionMixin(object):"},{"line_number":367,"context_line":"    def _assert_version_equal(self, expected, observed):"},{"line_number":368,"context_line":"        self.assertThat(observed, tt_matchers.KeysEqual(expected))"},{"line_number":369,"context_line":"        self.assertThat(observed[\u0027versions\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_f5a73109","line":366,"updated":"2015-01-05 15:48:03.000000000","message":"Why do we need to create this new class instead of just adding the method _assert_version_equal() to the class VersionTestCase?","commit_id":"b1b52fc36ecb4d6b5ac3057c8c00507cb5d25dd6"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"e29ff48bd8043fefa532370170179a252ec594d0","unresolved":false,"context_lines":[{"line_number":363,"context_line":")"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"class _CompareVersionMixin(object):"},{"line_number":367,"context_line":"    def _assert_version_equal(self, expected, observed):"},{"line_number":368,"context_line":"        self.assertThat(observed, tt_matchers.KeysEqual(expected))"},{"line_number":369,"context_line":"        self.assertThat(observed[\u0027versions\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_79a6d055","line":366,"in_reply_to":"3a961159_15c91d5a","updated":"2015-01-05 23:49:31.000000000","message":"Well, I still don\u0027t think creating a Mixin class to contain only this method and then making both VersionTestCase and VersionSingleAppTestCase subclasses of it is the best approach.\n\nWe could put _assert_version_equal outside of class scope, as we have for _build_role_assignment_url_and_entity at test_v3_assignment.\n\nBut that may be just my personal preference. Feel free to take that or not in this pach. I\u0027m removing  my -1.\n\n[1] https://github.com/openstack/keystone/blob/master/keystone/tests/test_v3_assignment.py#L26-L71","commit_id":"b1b52fc36ecb4d6b5ac3057c8c00507cb5d25dd6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"412c70b8918a95550072eb8320848ec582db92ea","unresolved":false,"context_lines":[{"line_number":363,"context_line":")"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"class _CompareVersionMixin(object):"},{"line_number":367,"context_line":"    def _assert_version_equal(self, expected, observed):"},{"line_number":368,"context_line":"        self.assertThat(observed, tt_matchers.KeysEqual(expected))"},{"line_number":369,"context_line":"        self.assertThat(observed[\u0027versions\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_bc74a69c","line":366,"in_reply_to":"3a961159_79a6d055","updated":"2015-01-05 23:55:08.000000000","message":"_build_role_assignment_url_and_entity doesn\u0027t use self. I could create a matcher for this since that\u0027s what matchers are for.","commit_id":"b1b52fc36ecb4d6b5ac3057c8c00507cb5d25dd6"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"cac853af71e58d60e3f8f36f5cf782e7ef44a5e7","unresolved":false,"context_lines":[{"line_number":363,"context_line":")"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"class _CompareVersionMixin(object):"},{"line_number":367,"context_line":"    def _assert_version_equal(self, expected, observed):"},{"line_number":368,"context_line":"        self.assertThat(observed, tt_matchers.KeysEqual(expected))"},{"line_number":369,"context_line":"        self.assertThat(observed[\u0027versions\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_5ce4a20c","line":366,"in_reply_to":"3a961159_bc74a69c","updated":"2015-01-06 00:04:28.000000000","message":"Nice! I would be glad to see a matcher being used here. :)","commit_id":"b1b52fc36ecb4d6b5ac3057c8c00507cb5d25dd6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"057cf18a3975cb23e13e1bfaebcd88d440bd531c","unresolved":false,"context_lines":[{"line_number":363,"context_line":")"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"class _CompareVersionMixin(object):"},{"line_number":367,"context_line":"    def _assert_version_equal(self, expected, observed):"},{"line_number":368,"context_line":"        self.assertThat(observed, tt_matchers.KeysEqual(expected))"},{"line_number":369,"context_line":"        self.assertThat(observed[\u0027versions\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_15c91d5a","line":366,"in_reply_to":"3a961159_f5a73109","updated":"2015-01-05 15:58:09.000000000","message":"VersionSingleAppTestCase isn\u0027t a subclass of VersionTestCase","commit_id":"b1b52fc36ecb4d6b5ac3057c8c00507cb5d25dd6"}]}
