)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add test coverage CMD cleanup_service"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added new MockFunctions base class to mock one or more functions"},{"line_number":10,"context_line":"Added test_cleanup_services to run cleanup tests for global services"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"tests"},{"line_number":13,"context_line":"  -dry_run"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"3f79a3b5_47537ce3","line":10,"range":{"start_line":10,"start_character":53,"end_line":10,"end_character":68},"updated":"2018-08-17 19:43:07.000000000","message":"sorry, what\u0027s a global service?","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":14,"context_line":"  -save_state"},{"line_number":15,"context_line":"  -delete"},{"line_number":16,"context_line":"  -preserve"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Network service, and other service tests up-coming."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: If6d5f8de282f4f291c0f51f44938f2febc0efda4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"3f79a3b5_e712c809","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":15},"updated":"2018-08-17 19:43:07.000000000","message":"from the improved coverage, it looks like NetworkService is being tested, is this intended by your commit?","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"}],"tempest/tests/base.py":[{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"498933abf521bb6aada2be98c93793070cd92cc3","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def test_delete(self):"},{"line_number":100,"context_line":"        serv \u003d self._create_cmd_service(self.service)"},{"line_number":101,"context_line":"        self.check_service_client_function("},{"line_number":102,"context_line":"            serv.run,"},{"line_number":103,"context_line":"            self.delete_method,"},{"line_number":104,"context_line":"            self.response,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_a831310c","line":101,"range":{"start_line":101,"start_character":13,"end_line":101,"end_character":42},"updated":"2018-07-20 18:40:41.000000000","message":"should be a _check_service_client_function","commit_id":"014066c6c67ea75df9a863201682e80e10e7b673"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"498933abf521bb6aada2be98c93793070cd92cc3","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        resp \u003d fake_http.fake_http_response(headers, status\u003dstatus), json_body"},{"line_number":140,"context_line":"        return resp"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def check_service_client_function(self, function, function2mock,"},{"line_number":143,"context_line":"                                      body, function2mock2\u003dNone, to_utf\u003dFalse,"},{"line_number":144,"context_line":"                                      status\u003d200, headers\u003dNone, mock_args\u003dNone,"},{"line_number":145,"context_line":"                                      **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_c827cdc7","line":142,"range":{"start_line":142,"start_character":8,"end_line":142,"end_character":37},"updated":"2018-07-20 18:40:41.000000000","message":"change name to _check_service_client_function\n\nthis is not DRY at this time","commit_id":"014066c6c67ea75df9a863201682e80e10e7b673"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"498933abf521bb6aada2be98c93793070cd92cc3","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        resp \u003d fake_http.fake_http_response(headers, status\u003dstatus), json_body"},{"line_number":140,"context_line":"        return resp"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def check_service_client_function(self, function, function2mock,"},{"line_number":143,"context_line":"                                      body, function2mock2\u003dNone, to_utf\u003dFalse,"},{"line_number":144,"context_line":"                                      status\u003d200, headers\u003dNone, mock_args\u003dNone,"},{"line_number":145,"context_line":"                                      **kwargs):"},{"line_number":146,"context_line":"        \"\"\"Mock a service client function for unit testing."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        :param function: The service client function to call."}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_33ab5671","line":145,"range":{"start_line":142,"start_character":37,"end_line":145,"end_character":46},"updated":"2018-07-20 18:40:41.000000000","message":"function \u003d function to run \u003d run_fucntion\nfunction2mock \u003d first function to mock \u003d mock_function1\nbody \u003d response body of 1st function mocked \u003d ????\nfunction2mock2 - 2nd funcutin to mock \u003d mock_function1","commit_id":"014066c6c67ea75df9a863201682e80e10e7b673"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"498933abf521bb6aada2be98c93793070cd92cc3","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                                       function2mock2,"},{"line_number":174,"context_line":"                                       return_value\u003dmocked_response))"},{"line_number":175,"context_line":"        if kwargs:"},{"line_number":176,"context_line":"            function(**kwargs)"},{"line_number":177,"context_line":"        else:"},{"line_number":178,"context_line":"            function()"},{"line_number":179,"context_line":"        fixture.mock.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_b32e868a","line":176,"range":{"start_line":176,"start_character":23,"end_line":176,"end_character":29},"updated":"2018-07-20 18:40:41.000000000","message":"why kwargs??\nthis is another DRY??\nas of right now this supports the run interface which has no args","commit_id":"014066c6c67ea75df9a863201682e80e10e7b673"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"498933abf521bb6aada2be98c93793070cd92cc3","unresolved":false,"context_lines":[{"line_number":178,"context_line":"            function()"},{"line_number":179,"context_line":"        fixture.mock.assert_called_once()"},{"line_number":180,"context_line":"        if function2mock2 is not None:"},{"line_number":181,"context_line":"            fixture2.mock.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_b341a6a9","line":181,"updated":"2018-07-20 18:40:41.000000000","message":"how do you test that delete is not called","commit_id":"014066c6c67ea75df9a863201682e80e10e7b673"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b19b49098a13a148c1a4a5473415fffa06567b99","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        return m"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class CleanupBaseService(TestCase):"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def setUp(self):"},{"line_number":76,"context_line":"        super(CleanupBaseService, self).setUp()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_0d95a594","line":73,"range":{"start_line":73,"start_character":6,"end_line":73,"end_character":24},"updated":"2018-07-24 01:24:21.000000000","message":"This should be moved into a separate directory, namely: tempest/tests/unit/cmd/base.py","commit_id":"5573118077969d025cd369efbe68ed880bfec359"}],"tempest/tests/cmd/base.py":[{"author":{"_account_id":26198,"name":"Anna Pankiewicz","email":"anna.e.pankiewicz@att.com","username":"apankiewicz"},"change_message_id":"de29a9635404658ea9a5599118c7e4eff0d86197","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            mocked_fixtures.append(mocked_func)"},{"line_number":48,"context_line":"        return mocked_fixtures"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def check_service_client_function(self, function2run,"},{"line_number":51,"context_line":"                                      functions2mock):"},{"line_number":52,"context_line":"        \"\"\"Mock a service client function for testing."},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_a9ba9c6d","line":50,"range":{"start_line":50,"start_character":44,"end_line":50,"end_character":56},"updated":"2018-08-01 20:08:52.000000000","message":"nit: this is inconsistent with how you\u0027ve named your parameters in the previous method. maybe function_to_run?","commit_id":"8727a2a5496b3e406305f745df84586cdd82924b"},{"author":{"_account_id":26198,"name":"Anna Pankiewicz","email":"anna.e.pankiewicz@att.com","username":"apankiewicz"},"change_message_id":"de29a9635404658ea9a5599118c7e4eff0d86197","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        return mocked_fixtures"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def check_service_client_function(self, function2run,"},{"line_number":51,"context_line":"                                      functions2mock):"},{"line_number":52,"context_line":"        \"\"\"Mock a service client function for testing."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param function2run: The service client function to call."}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_c9bd9867","line":51,"range":{"start_line":51,"start_character":38,"end_line":51,"end_character":52},"updated":"2018-08-01 20:08:52.000000000","message":"ditto","commit_id":"8727a2a5496b3e406305f745df84586cdd82924b"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9709d1c745ebb294c6219840ef7afcad02e1cf62","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        else:"},{"line_number":31,"context_line":"            return body"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _create_fixtures(self, fixtures_to_make):"},{"line_number":34,"context_line":"        mocked_fixtures \u003d []"},{"line_number":35,"context_line":"        for fixture in fixtures_to_make:"},{"line_number":36,"context_line":"            func, body, status \u003d fixture"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_27025970","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":24},"updated":"2018-08-14 15:59:18.000000000","message":"can we modify this function to only create one fixture at a time? I think this will help with preventing cases where we have to check for the _mock_name property. like we do here[1] [1] https://review.openstack.org/#/c/579312/10/tempest/tests/cmd/test_cleanup_services.py@74","commit_id":"ff0efdfd1585f2cf6a6732e97307783be3c82ec3"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9709d1c745ebb294c6219840ef7afcad02e1cf62","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            if mocked_response \u003d\u003d \u0027error\u0027:"},{"line_number":39,"context_line":"                mocked_func \u003d self.useFixture(fixtures.MockPatch("},{"line_number":40,"context_line":"                    func, side_effect\u003dException(\"error\"), return_value\u003d{}))"},{"line_number":41,"context_line":"            elif type(mocked_response) is tuple:"},{"line_number":42,"context_line":"                mocked_func \u003d self.useFixture(fixtures.MockPatch("},{"line_number":43,"context_line":"                    func, return_value\u003dmocked_response))"},{"line_number":44,"context_line":"            else:"},{"line_number":45,"context_line":"                mocked_func \u003d self.useFixture(fixtures.MockPatch("},{"line_number":46,"context_line":"                    func, return_value\u003dmocked_response))"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_ccaf0c28","line":43,"range":{"start_line":41,"start_character":12,"end_line":43,"end_character":56},"updated":"2018-08-14 15:59:18.000000000","message":"this isn\u0027t needed. It looks like it\u0027s identical to the else branch on the next line. mock\u0027s side_effect takes a list as an input, did you mean to check for \"elif type(mocked_response) is list\" and use side_effect instead of return_value ? if so, why do we want to use side_effect every time a list is given?","commit_id":"ff0efdfd1585f2cf6a6732e97307783be3c82ec3"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9709d1c745ebb294c6219840ef7afcad02e1cf62","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            mocked_fixtures.append(mocked_func)"},{"line_number":48,"context_line":"        return mocked_fixtures"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def check_service_client_function(self, function_to_run,"},{"line_number":51,"context_line":"                                      functions_to_mock):"},{"line_number":52,"context_line":"        \"\"\"Mock a service client function for testing."},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_0972d6ad","line":50,"range":{"start_line":50,"start_character":8,"end_line":50,"end_character":13},"updated":"2018-08-14 15:59:18.000000000","message":"sounds like from the description this should be mock so the function would be named,\nmock_service_client_function\n\nwhat are we checking here?","commit_id":"ff0efdfd1585f2cf6a6732e97307783be3c82ec3"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9709d1c745ebb294c6219840ef7afcad02e1cf62","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                                      functions_to_mock):"},{"line_number":52,"context_line":"        \"\"\"Mock a service client function for testing."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param function2run: The service client function to call."},{"line_number":55,"context_line":"        :param functions2mock: a tuple containing the function to mock, the"},{"line_number":56,"context_line":"               response body, and the response status."},{"line_number":57,"context_line":"               EX:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_96012109","line":54,"range":{"start_line":54,"start_character":15,"end_line":54,"end_character":27},"updated":"2018-08-14 15:59:18.000000000","message":"function_to_run","commit_id":"ff0efdfd1585f2cf6a6732e97307783be3c82ec3"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9709d1c745ebb294c6219840ef7afcad02e1cf62","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        \"\"\"Mock a service client function for testing."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param function2run: The service client function to call."},{"line_number":55,"context_line":"        :param functions2mock: a tuple containing the function to mock, the"},{"line_number":56,"context_line":"               response body, and the response status."},{"line_number":57,"context_line":"               EX:"},{"line_number":58,"context_line":"               (\u0027tempest.lib.common.rest_client.RestClient.get\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_a7d429ea","line":55,"range":{"start_line":55,"start_character":54,"end_line":55,"end_character":62},"updated":"2018-08-14 15:59:18.000000000","message":"according to the implementation this should be functions, not function. Although I prefer this to operate on one function at a time because I think it will help prevent cases where we have to check for the _mock_name property. like we do here[1]\n[1] https://review.openstack.org/#/c/579312/10/tempest/tests/cmd/test_cleanup_services.py@74","commit_id":"ff0efdfd1585f2cf6a6732e97307783be3c82ec3"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9709d1c745ebb294c6219840ef7afcad02e1cf62","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        \"\"\"Mock a service client function for testing."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param function2run: The service client function to call."},{"line_number":55,"context_line":"        :param functions2mock: a tuple containing the function to mock, the"},{"line_number":56,"context_line":"               response body, and the response status."},{"line_number":57,"context_line":"               EX:"},{"line_number":58,"context_line":"               (\u0027tempest.lib.common.rest_client.RestClient.get\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_49052e10","line":55,"range":{"start_line":55,"start_character":15,"end_line":55,"end_character":29},"updated":"2018-08-14 15:59:18.000000000","message":"functions_to_mock","commit_id":"ff0efdfd1585f2cf6a6732e97307783be3c82ec3"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9709d1c745ebb294c6219840ef7afcad02e1cf62","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        \"\"\"Mock a service client function for testing."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :param function2run: The service client function to call."},{"line_number":55,"context_line":"        :param functions2mock: a tuple containing the function to mock, the"},{"line_number":56,"context_line":"               response body, and the response status."},{"line_number":57,"context_line":"               EX:"},{"line_number":58,"context_line":"               (\u0027tempest.lib.common.rest_client.RestClient.get\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_c7d36503","line":55,"range":{"start_line":55,"start_character":33,"end_line":55,"end_character":38},"updated":"2018-08-14 15:59:18.000000000","message":"tuple can also be a list according to the test implementation.","commit_id":"ff0efdfd1585f2cf6a6732e97307783be3c82ec3"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4b47efeef363abda394a59b4ef7512d4f9e40469","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            mocked_response \u003d self._create_response(body, status, None)"},{"line_number":38,"context_line":"            if mocked_response \u003d\u003d \u0027error\u0027:"},{"line_number":39,"context_line":"                mocked_func \u003d self.useFixture(fixtures.MockPatch("},{"line_number":40,"context_line":"                    func, side_effect\u003dException(\"error\"), return_value\u003d{}))"},{"line_number":41,"context_line":"            else:"},{"line_number":42,"context_line":"                mocked_func \u003d self.useFixture(fixtures.MockPatch("},{"line_number":43,"context_line":"                    func, return_value\u003dmocked_response))"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_0bfb83c0","line":40,"range":{"start_line":40,"start_character":58,"end_line":40,"end_character":73},"updated":"2018-08-16 03:54:10.000000000","message":"Not necessary if side_effect is provided","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d1c3c2c169c68126c86653dfb3eb1d6aa37c471","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_f64aaa24","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":26},"updated":"2018-09-09 01:11:33.000000000","message":"This is incorrect.","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d1c3c2c169c68126c86653dfb3eb1d6aa37c471","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from tempest.tests.lib import fake_http"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class MockFunctionsBase(base.TestCase):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def _create_response(self, body, status, headers):"},{"line_number":25,"context_line":"        if status:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_16464622","line":22,"range":{"start_line":22,"start_character":6,"end_line":22,"end_character":39},"updated":"2018-09-09 01:11:33.000000000","message":"I don\u0027t think this class should exist. This functionality is only needed by the base class in https://review.openstack.org/#/c/579312/16/tempest/tests/cmd/test_cleanup_services.py@26 and as such should be moved there.","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d1c3c2c169c68126c86653dfb3eb1d6aa37c471","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               (\u0027tempest.lib.common.rest_client.RestClient.get\u0027,"},{"line_number":55,"context_line":"                {\u0027users\u0027: [\u0027\u0027]},"},{"line_number":56,"context_line":"                200)"},{"line_number":57,"context_line":"        :param body: Expected response body returned by the service client"},{"line_number":58,"context_line":"               function."},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        mocked_fixtures \u003d self._create_fixtures(functions_to_mock)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_d64bee24","line":57,"range":{"start_line":57,"start_character":15,"end_line":57,"end_character":19},"updated":"2018-09-09 01:11:33.000000000","message":"This is not a valid param.","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"}],"tempest/tests/cmd/test_cleanup_services.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"2ebcddfe81efacc9b21e3897ca9254ab889332c9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 AT\u0026T"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_2bf5c051","line":1,"range":{"start_line":1,"start_character":17,"end_line":1,"end_character":21},"updated":"2018-07-01 21:34:19.000000000","message":"# Copyright 2018 AT\u0026T Corporation.\n# All Rights Reserved.","commit_id":"019f31047250ba52d8c0ab5166733152553e10d7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"2ebcddfe81efacc9b21e3897ca9254ab889332c9","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        ]"},{"line_number":60,"context_line":"    }"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _create_response(self, body, to_utf\u003dFalse, status\u003d200, headers\u003dNone):"},{"line_number":63,"context_line":"        json_body \u003d {}"},{"line_number":64,"context_line":"        if body:"},{"line_number":65,"context_line":"            json_body \u003d json.dumps(body)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_8bb41484","line":62,"updated":"2018-07-01 21:34:19.000000000","message":"These service client test functions shouldn\u0027t be copy/pasted here.\n\nThey should be put in a base test class, but this will probably require modification as copy/pasting this directly from tempest.tests.lib.service.base isn\u0027t entirely applicable, since in this case you shouldn\u0027t need to validate response bodies and the like as that will just be redundant testing.","commit_id":"019f31047250ba52d8c0ab5166733152553e10d7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"2ebcddfe81efacc9b21e3897ca9254ab889332c9","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        os \u003d clients.Manager(creds)"},{"line_number":122,"context_line":"        userserv \u003d cleanup_service.UserService(os)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        setattr(userserv, \u0027is_save_state\u0027, True)"},{"line_number":125,"context_line":"        setattr(userserv, \u0027is_preserve\u0027, True)"},{"line_number":126,"context_line":"        setattr(userserv, \u0027is_dry_run\u0027, False)"},{"line_number":127,"context_line":"        setattr(userserv, \u0027data\u0027, {})"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        self.check_service_client_function("},{"line_number":130,"context_line":"            userserv.list,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_ab9eb003","line":127,"range":{"start_line":124,"start_character":1,"end_line":127,"end_character":37},"updated":"2018-07-01 21:34:19.000000000","message":"This is already done here: https://github.com/openstack/tempest/blob/83b154a28369a062ab7a4c014531a86abf650133/tempest/cmd/cleanup_service.py#L96\n\nCan just do:\n\n    userserv \u003d cleanup_service.UserService(os, is_save_state\u003dTrue, is_preserve\u003dTrue, is_dry_run\u003dFalse, data\u003d{})\n\nHowever, tempest.cmd.cleanup_services has very low coverage so can create a helper in a base class to abstract this out:\n\n    def create_cmd_service(clazz, is_save_state, is_preserver, is_dry_run, data\u003d{})\n        cleanup_service.init_conf()\n        creds \u003d fake_credentials.FakeKeystoneV3Credentials()\n        os \u003d clients.Manager(creds)\n        service \u003d cleanup_service.clazz(os, is_save_state\u003dis_save_state, is_preserve\u003dis_preserve, is_dry_run\u003dis_dry_run, data\u003ddata)\n        return service\n\nNote, will also have to account for self. saved_state_json getting some dummy data to, and can pass that into above constructor too.","commit_id":"019f31047250ba52d8c0ab5166733152553e10d7"},{"author":{"_account_id":17887,"name":"Doug Schveninger","email":"ds6901@att.com","username":"Doug.Schveninger"},"change_message_id":"498933abf521bb6aada2be98c93793070cd92cc3","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        os \u003d clients.Manager(creds)"},{"line_number":122,"context_line":"        userserv \u003d cleanup_service.UserService(os)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        setattr(userserv, \u0027is_save_state\u0027, True)"},{"line_number":125,"context_line":"        setattr(userserv, \u0027is_preserve\u0027, True)"},{"line_number":126,"context_line":"        setattr(userserv, \u0027is_dry_run\u0027, False)"},{"line_number":127,"context_line":"        setattr(userserv, \u0027data\u0027, {})"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        self.check_service_client_function("},{"line_number":130,"context_line":"            userserv.list,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_c4f91582","line":127,"range":{"start_line":124,"start_character":1,"end_line":127,"end_character":37},"in_reply_to":"5f7c97a3_ab9eb003","updated":"2018-07-20 18:40:41.000000000","message":"Done","commit_id":"019f31047250ba52d8c0ab5166733152553e10d7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"2ebcddfe81efacc9b21e3897ca9254ab889332c9","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        setattr(userserv, \u0027is_dry_run\u0027, False)"},{"line_number":127,"context_line":"        setattr(userserv, \u0027data\u0027, {})"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        self.check_service_client_function("},{"line_number":130,"context_line":"            userserv.list,"},{"line_number":131,"context_line":"            \u0027tempest.lib.common.rest_client.RestClient.get\u0027,"},{"line_number":132,"context_line":"            self.FAKE_USER_LIST"},{"line_number":133,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_0b8fa4cd","line":133,"range":{"start_line":129,"start_character":0,"end_line":133,"end_character":9},"updated":"2018-07-01 21:34:19.000000000","message":"list method will require a few cases:\n\n1.\nis_save_state \u003d True\nis_preserve \u003d True\n\n2.\nis_save_state \u003d True\nis_preserve \u003d False\n\n3.\nis_save_state \u003d False\nis_preserve \u003d True\n\n3.\nis_save_state \u003d False\nis_preserve \u003d False\n\nEach one of those should be a test case.\n\nAlso should add a test case for is_dry_run\u003dTrue.","commit_id":"019f31047250ba52d8c0ab5166733152553e10d7"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b19b49098a13a148c1a4a5473415fffa06567b99","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 AT\u0026T Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_0d7e056d","line":1,"updated":"2018-07-24 01:24:21.000000000","message":"This should go under tempest/tests/unit/cmd/test_cleanup_services.py as these are unit tests.","commit_id":"5573118077969d025cd369efbe68ed880bfec359"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b19b49098a13a148c1a4a5473415fffa06567b99","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from tempest.tests import base"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class BaseTests(base.CleanupBaseService):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    service \u003d \u0027\u0027"},{"line_number":22,"context_line":"    method \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_cdec8d2a","line":19,"range":{"start_line":19,"start_character":6,"end_line":19,"end_character":15},"updated":"2018-07-24 01:24:21.000000000","message":"Why not combine this with CleanupBaseService? Assuming the helpers below aren\u0027t too implementation specific that is.","commit_id":"5573118077969d025cd369efbe68ed880bfec359"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"a56a54be5fadcac95fbce64f94da15f0617ed458","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from tempest.tests import base"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class BaseTests(base.CleanupBaseService):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    service \u003d \u0027\u0027"},{"line_number":22,"context_line":"    method \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_213adce5","line":19,"range":{"start_line":19,"start_character":6,"end_line":19,"end_character":15},"in_reply_to":"5f7c97a3_cdec8d2a","updated":"2018-07-24 15:41:35.000000000","message":"I put these test functions here for readability, hiding the tests in another file makes this file seem like it isn\u0027t doing anything...","commit_id":"5573118077969d025cd369efbe68ed880bfec359"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9709d1c745ebb294c6219840ef7afcad02e1cf62","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            mocked_fixture_tuple,"},{"line_number":72,"context_line":"        )"},{"line_number":73,"context_line":"        for fixture in fixtures:"},{"line_number":74,"context_line":"            if fail is False and fixture.mock._mock_name \u003d\u003d \u0027exception\u0027:"},{"line_number":75,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":76,"context_line":"            else:"},{"line_number":77,"context_line":"                fixture.mock.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_09809645","line":74,"range":{"start_line":74,"start_character":46,"end_line":74,"end_character":56},"updated":"2018-08-14 15:59:18.000000000","message":"can we avoid using private members? https://docs.python.org/3/tutorial/classes.html#private-variables \"It should be considered an implementation detail and subject to change without notice.\"","commit_id":"ff0efdfd1585f2cf6a6732e97307783be3c82ec3"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9709d1c745ebb294c6219840ef7afcad02e1cf62","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":76,"context_line":"            else:"},{"line_number":77,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":78,"context_line":"                self.assertNotIn(fixture.mock._mock_call_args[0][0],"},{"line_number":79,"context_line":"                                 self.saved_state[self.compare_data].keys())"},{"line_number":80,"context_line":"        self.assertEqual(serv.data, {})"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_89fca6b5","line":78,"range":{"start_line":78,"start_character":46,"end_line":78,"end_character":61},"updated":"2018-08-14 15:59:18.000000000","message":"can we use call_args_list instead?","commit_id":"ff0efdfd1585f2cf6a6732e97307783be3c82ec3"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"9709d1c745ebb294c6219840ef7afcad02e1cf62","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                                 self.saved_state[self.compare_data].keys())"},{"line_number":80,"context_line":"        self.assertEqual(serv.data, {})"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _test_dry_run_true(self, mocked_fixture_tuple):"},{"line_number":83,"context_line":"        serv \u003d self._create_cmd_service(self.service, is_dry_run\u003dTrue)"},{"line_number":84,"context_line":"        _, fixtures \u003d self.check_service_client_function("},{"line_number":85,"context_line":"            serv.run,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_8c1b54c8","line":82,"range":{"start_line":82,"start_character":33,"end_line":82,"end_character":53},"updated":"2018-08-14 15:59:18.000000000","message":"this is a list of tuples, mocked_fixture_tuple_list maybe?","commit_id":"ff0efdfd1585f2cf6a6732e97307783be3c82ec3"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4b47efeef363abda394a59b4ef7512d4f9e40469","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                   \"projects\": {u\u0027f38ohgp93jj032\u0027: u\u0027manhattan\u0027},"},{"line_number":43,"context_line":"                   \"domains\": {u\u0027default\u0027: u\u0027Default\u0027},"},{"line_number":44,"context_line":"                   \"default\": {}"},{"line_number":45,"context_line":"                   }"},{"line_number":46,"context_line":"    service \u003d \u0027BaseService\u0027"},{"line_number":47,"context_line":"    method \u003d \u0027tempest.lib.common.rest_client.RestClient.get\u0027"},{"line_number":48,"context_line":"    delete_method \u003d \u0027tempest.lib.common.rest_client.RestClient.delete\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_eb6647bb","line":45,"updated":"2018-08-16 03:54:10.000000000","message":"Comments above each of these will be helpful to understand how they should be overridden below would go a long way.","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"e598e7eae7154283c6a3bd3e425b52a7abe6541a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                   \"projects\": {u\u0027f38ohgp93jj032\u0027: u\u0027manhattan\u0027},"},{"line_number":43,"context_line":"                   \"domains\": {u\u0027default\u0027: u\u0027Default\u0027},"},{"line_number":44,"context_line":"                   \"default\": {}"},{"line_number":45,"context_line":"                   }"},{"line_number":46,"context_line":"    service \u003d \u0027BaseService\u0027"},{"line_number":47,"context_line":"    method \u003d \u0027tempest.lib.common.rest_client.RestClient.get\u0027"},{"line_number":48,"context_line":"    delete_method \u003d \u0027tempest.lib.common.rest_client.RestClient.delete\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_48f64ffc","line":45,"in_reply_to":"3f79a3b5_eb6647bb","updated":"2018-08-16 17:18:01.000000000","message":"The below override strings are here primarily for simplicity/legibility. Changing the method, delete method, and log method can be done in one place if necessary. The return method is overridden in each class.","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4b47efeef363abda394a59b4ef7512d4f9e40469","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                   \"default\": {}"},{"line_number":45,"context_line":"                   }"},{"line_number":46,"context_line":"    service \u003d \u0027BaseService\u0027"},{"line_number":47,"context_line":"    method \u003d \u0027tempest.lib.common.rest_client.RestClient.get\u0027"},{"line_number":48,"context_line":"    delete_method \u003d \u0027tempest.lib.common.rest_client.RestClient.delete\u0027"},{"line_number":49,"context_line":"    log_method \u003d \u0027tempest.cmd.cleanup_service.LOG.exception\u0027"},{"line_number":50,"context_line":"    response \u003d None"},{"line_number":51,"context_line":"    compare_data \u003d \u0027default\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_8bd47349","line":48,"range":{"start_line":47,"start_character":0,"end_line":48,"end_character":70},"updated":"2018-08-16 03:54:10.000000000","message":"Will these ever be overridden in sub-classes? Otherwise there\u0027s no reason to include these variables and the strings can simply be used directly in the methods that need them below.","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4b47efeef363abda394a59b4ef7512d4f9e40469","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    service \u003d \u0027BaseService\u0027"},{"line_number":47,"context_line":"    method \u003d \u0027tempest.lib.common.rest_client.RestClient.get\u0027"},{"line_number":48,"context_line":"    delete_method \u003d \u0027tempest.lib.common.rest_client.RestClient.delete\u0027"},{"line_number":49,"context_line":"    log_method \u003d \u0027tempest.cmd.cleanup_service.LOG.exception\u0027"},{"line_number":50,"context_line":"    response \u003d None"},{"line_number":51,"context_line":"    compare_data \u003d \u0027default\u0027"},{"line_number":52,"context_line":"    mocked_fixture_tuple_list \u003d (\u0027method\u0027, \u0027response\u0027, \u0027status\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_cb526bde","line":49,"range":{"start_line":49,"start_character":4,"end_line":49,"end_character":14},"updated":"2018-08-16 03:54:10.000000000","message":"Is this used?","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4b47efeef363abda394a59b4ef7512d4f9e40469","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    method \u003d \u0027tempest.lib.common.rest_client.RestClient.get\u0027"},{"line_number":48,"context_line":"    delete_method \u003d \u0027tempest.lib.common.rest_client.RestClient.delete\u0027"},{"line_number":49,"context_line":"    log_method \u003d \u0027tempest.cmd.cleanup_service.LOG.exception\u0027"},{"line_number":50,"context_line":"    response \u003d None"},{"line_number":51,"context_line":"    compare_data \u003d \u0027default\u0027"},{"line_number":52,"context_line":"    mocked_fixture_tuple_list \u003d (\u0027method\u0027, \u0027response\u0027, \u0027status\u0027)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_ab65afb6","line":50,"range":{"start_line":50,"start_character":4,"end_line":50,"end_character":12},"updated":"2018-08-16 03:54:10.000000000","message":"Is this used?","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4b47efeef363abda394a59b4ef7512d4f9e40469","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            mocked_fixture_tuple_list"},{"line_number":87,"context_line":"        )"},{"line_number":88,"context_line":"        for fixture in fixtures:"},{"line_number":89,"context_line":"            if fixture.mock._mock_name \u003d\u003d \u0027delete\u0027:"},{"line_number":90,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                fixture.mock.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_8b39d3a4","line":89,"range":{"start_line":89,"start_character":28,"end_line":89,"end_character":38},"updated":"2018-08-16 03:54:10.000000000","message":"name: If the mock has a name then it will be used in the repr of the mock. This can be useful for debugging. The name is propagated to child mocks.\n\nhttps://docs.python.org/3/library/unittest.mock.html","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"e598e7eae7154283c6a3bd3e425b52a7abe6541a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            mocked_fixture_tuple_list"},{"line_number":87,"context_line":"        )"},{"line_number":88,"context_line":"        for fixture in fixtures:"},{"line_number":89,"context_line":"            if fixture.mock._mock_name \u003d\u003d \u0027delete\u0027:"},{"line_number":90,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                fixture.mock.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_28a3d302","line":89,"range":{"start_line":89,"start_character":28,"end_line":89,"end_character":38},"in_reply_to":"3f79a3b5_8b39d3a4","updated":"2018-08-16 17:18:01.000000000","message":"Thank you for catching these, I fixed in the above method, will fix here.","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4b47efeef363abda394a59b4ef7512d4f9e40469","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":93,"context_line":"                self.assertNotIn(fixture.mock._mock_call_args[0][0],"},{"line_number":94,"context_line":"                                 self.saved_state[self.compare_data].keys())"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def _test_saved_state_true(self, mocked_fixture_tuple_list):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_6bcd57b5","line":93,"range":{"start_line":93,"start_character":46,"end_line":93,"end_character":61},"updated":"2018-08-16 03:54:10.000000000","message":"call_args","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"e598e7eae7154283c6a3bd3e425b52a7abe6541a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":93,"context_line":"                self.assertNotIn(fixture.mock._mock_call_args[0][0],"},{"line_number":94,"context_line":"                                 self.saved_state[self.compare_data].keys())"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def _test_saved_state_true(self, mocked_fixture_tuple_list):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_c8b33f4d","line":93,"range":{"start_line":93,"start_character":46,"end_line":93,"end_character":61},"in_reply_to":"3f79a3b5_6bcd57b5","updated":"2018-08-16 17:18:01.000000000","message":"Thank you for catching these, I fixed in the above method, will fix here.","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4b47efeef363abda394a59b4ef7512d4f9e40469","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                    (self.delete_method, None, 204)]"},{"line_number":148,"context_line":"        self._test_dry_run_true(dry_mock)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def test_save_state(self):"},{"line_number":151,"context_line":"        # Non-Global services have no saved state"},{"line_number":152,"context_line":"        pass"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def test_preserve_list(self):"},{"line_number":155,"context_line":"        self._test_is_preserve_true(self.mocked_fixture_tuple_list)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_6bf477f1","line":152,"range":{"start_line":150,"start_character":0,"end_line":152,"end_character":12},"updated":"2018-08-16 03:54:10.000000000","message":"Tests that do nothing should not be included.","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"e598e7eae7154283c6a3bd3e425b52a7abe6541a","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                    (self.delete_method, None, 204)]"},{"line_number":148,"context_line":"        self._test_dry_run_true(dry_mock)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def test_save_state(self):"},{"line_number":151,"context_line":"        # Non-Global services have no saved state"},{"line_number":152,"context_line":"        pass"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def test_preserve_list(self):"},{"line_number":155,"context_line":"        self._test_is_preserve_true(self.mocked_fixture_tuple_list)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_0865b7e1","line":152,"range":{"start_line":150,"start_character":0,"end_line":152,"end_character":12},"in_reply_to":"3f79a3b5_6bf477f1","updated":"2018-08-16 17:18:01.000000000","message":"will remove","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4b47efeef363abda394a59b4ef7512d4f9e40469","unresolved":false,"context_lines":[{"line_number":208,"context_line":"    def test_save_state(self):"},{"line_number":209,"context_line":"        self._test_saved_state_true(self.mocked_fixture_tuple_list)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_preserve_list(self):"},{"line_number":212,"context_line":"        self._test_is_preserve_true(self.mocked_fixture_tuple_list)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"class TestProjectsService(BaseTests):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_4b589bf8","line":212,"range":{"start_line":211,"start_character":0,"end_line":212,"end_character":67},"updated":"2018-08-16 03:54:10.000000000","message":"This looks like copy/paste from L209","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"71f6d6c8f4df68930e706405f5873025bd117b5f","unresolved":false,"context_lines":[{"line_number":208,"context_line":"    def test_save_state(self):"},{"line_number":209,"context_line":"        self._test_saved_state_true(self.mocked_fixture_tuple_list)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_preserve_list(self):"},{"line_number":212,"context_line":"        self._test_is_preserve_true(self.mocked_fixture_tuple_list)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"class TestProjectsService(BaseTests):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_a92cc5ac","line":212,"range":{"start_line":211,"start_character":0,"end_line":212,"end_character":67},"in_reply_to":"3f79a3b5_4873afb2","updated":"2018-08-16 19:55:45.000000000","message":"You\u0027re right, I looked at it incorrectly","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"e598e7eae7154283c6a3bd3e425b52a7abe6541a","unresolved":false,"context_lines":[{"line_number":208,"context_line":"    def test_save_state(self):"},{"line_number":209,"context_line":"        self._test_saved_state_true(self.mocked_fixture_tuple_list)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def test_preserve_list(self):"},{"line_number":212,"context_line":"        self._test_is_preserve_true(self.mocked_fixture_tuple_list)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"class TestProjectsService(BaseTests):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_4873afb2","line":212,"range":{"start_line":211,"start_character":0,"end_line":212,"end_character":67},"in_reply_to":"3f79a3b5_4b589bf8","updated":"2018-08-16 17:18:01.000000000","message":"this is test preserve vs test saved state","commit_id":"915c5e32eea5e4d8256894c6dcd5af4a89824225"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        cleanup_service.init_conf()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    # Static list to ensure saved items are not deleted"},{"line_number":39,"context_line":"    saved_state \u003d {\"users\": {u\u002732rwef64245tgr20121qw324bgg\u0027: u\u0027Lightning\u0027},"},{"line_number":40,"context_line":"                   \"flavors\": {u\u002742\u0027: u\u0027m1.tiny\u0027},"},{"line_number":41,"context_line":"                   \"images\": {u\u002734yhwr-4t3q\u0027: u\u0027stratus-0.3.2-x86_64-disk\u0027},"},{"line_number":42,"context_line":"                   \"roles\": {u\u00273efrt74r45hn\u0027: u\u0027president\u0027},"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_d297483a","line":39,"range":{"start_line":39,"start_character":4,"end_line":39,"end_character":15},"updated":"2018-08-17 19:43:07.000000000","message":"I think we should split this up into a per test class test basis so its clear that this is only needed for testing saved state. so at the beginning of the flavors service test for saved state we would set self.saved_state \u003d {\u0027flavors\u0027: {u\u002742\u0027: u\u0027m1.tiny\u0027}}. That way its clear this collection is only for the saved_state test. I was confused why networks was not in this list and at first it wasn\u0027t clear to me.","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"b42afb15fa4cd75a6abb83f8ae555321504b39c3","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        cleanup_service.init_conf()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    # Static list to ensure saved items are not deleted"},{"line_number":39,"context_line":"    saved_state \u003d {\"users\": {u\u002732rwef64245tgr20121qw324bgg\u0027: u\u0027Lightning\u0027},"},{"line_number":40,"context_line":"                   \"flavors\": {u\u002742\u0027: u\u0027m1.tiny\u0027},"},{"line_number":41,"context_line":"                   \"images\": {u\u002734yhwr-4t3q\u0027: u\u0027stratus-0.3.2-x86_64-disk\u0027},"},{"line_number":42,"context_line":"                   \"roles\": {u\u00273efrt74r45hn\u0027: u\u0027president\u0027},"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_02e1efd0","line":39,"range":{"start_line":39,"start_character":4,"end_line":39,"end_character":15},"in_reply_to":"3f79a3b5_d297483a","updated":"2018-08-17 21:56:25.000000000","message":"Network services are not \u0027global services\u0027 and are not listed in the save state. Network service tests will be addressed in later patches.","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                   \"default\": {}"},{"line_number":46,"context_line":"                   }"},{"line_number":47,"context_line":"    # Mocked methods"},{"line_number":48,"context_line":"    method \u003d \u0027tempest.lib.common.rest_client.RestClient.get\u0027"},{"line_number":49,"context_line":"    delete_method \u003d \u0027tempest.lib.common.rest_client.RestClient.delete\u0027"},{"line_number":50,"context_line":"    log_method \u003d \u0027tempest.cmd.cleanup_service.LOG.exception\u0027"},{"line_number":51,"context_line":"    # Override parameters"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_c75a2c82","line":48,"range":{"start_line":48,"start_character":4,"end_line":48,"end_character":10},"updated":"2018-08-17 19:43:07.000000000","message":"method is pretty generic, can this be get_method instead?","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"b42afb15fa4cd75a6abb83f8ae555321504b39c3","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                   \"default\": {}"},{"line_number":46,"context_line":"                   }"},{"line_number":47,"context_line":"    # Mocked methods"},{"line_number":48,"context_line":"    method \u003d \u0027tempest.lib.common.rest_client.RestClient.get\u0027"},{"line_number":49,"context_line":"    delete_method \u003d \u0027tempest.lib.common.rest_client.RestClient.delete\u0027"},{"line_number":50,"context_line":"    log_method \u003d \u0027tempest.cmd.cleanup_service.LOG.exception\u0027"},{"line_number":51,"context_line":"    # Override parameters"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_a2e59bde","line":48,"range":{"start_line":48,"start_character":4,"end_line":48,"end_character":10},"in_reply_to":"3f79a3b5_c75a2c82","updated":"2018-08-17 21:56:25.000000000","message":"+1","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    delete_method \u003d \u0027tempest.lib.common.rest_client.RestClient.delete\u0027"},{"line_number":50,"context_line":"    log_method \u003d \u0027tempest.cmd.cleanup_service.LOG.exception\u0027"},{"line_number":51,"context_line":"    # Override parameters"},{"line_number":52,"context_line":"    service \u003d \u0027BaseService\u0027"},{"line_number":53,"context_line":"    response \u003d None"},{"line_number":54,"context_line":"    compare_data \u003d \u0027default\u0027"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_875e7443","line":52,"range":{"start_line":52,"start_character":4,"end_line":52,"end_character":11},"updated":"2018-08-17 19:43:07.000000000","message":"I think this coud be better named as service_class because \u0027identity\u0027 is a service.","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"b42afb15fa4cd75a6abb83f8ae555321504b39c3","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    delete_method \u003d \u0027tempest.lib.common.rest_client.RestClient.delete\u0027"},{"line_number":50,"context_line":"    log_method \u003d \u0027tempest.cmd.cleanup_service.LOG.exception\u0027"},{"line_number":51,"context_line":"    # Override parameters"},{"line_number":52,"context_line":"    service \u003d \u0027BaseService\u0027"},{"line_number":53,"context_line":"    response \u003d None"},{"line_number":54,"context_line":"    compare_data \u003d \u0027default\u0027"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_c2ea17ab","line":52,"range":{"start_line":52,"start_character":4,"end_line":52,"end_character":11},"in_reply_to":"3f79a3b5_875e7443","updated":"2018-08-17 21:56:25.000000000","message":"+1","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    # Override parameters"},{"line_number":52,"context_line":"    service \u003d \u0027BaseService\u0027"},{"line_number":53,"context_line":"    response \u003d None"},{"line_number":54,"context_line":"    compare_data \u003d \u0027default\u0027"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _create_cmd_service(self, service_type, is_save_state\u003dFalse,"},{"line_number":57,"context_line":"                            is_preserve\u003dFalse, is_dry_run\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_877514cf","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":16},"updated":"2018-08-17 19:43:07.000000000","message":"I think this could be better named. Maybe resource_name?\n\ncompare_data to me sounds like it should be some sort of JSON object.","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"b42afb15fa4cd75a6abb83f8ae555321504b39c3","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    # Override parameters"},{"line_number":52,"context_line":"    service \u003d \u0027BaseService\u0027"},{"line_number":53,"context_line":"    response \u003d None"},{"line_number":54,"context_line":"    compare_data \u003d \u0027default\u0027"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _create_cmd_service(self, service_type, is_save_state\u003dFalse,"},{"line_number":57,"context_line":"                            is_preserve\u003dFalse, is_dry_run\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_82cc1f62","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":16},"in_reply_to":"3f79a3b5_877514cf","updated":"2018-08-17 21:56:25.000000000","message":"+1","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"5bd40d5113df4c028bac9c885c4e3935395d7d53","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            serv.run,"},{"line_number":73,"context_line":"            mocked_fixture_tuple_list,"},{"line_number":74,"context_line":"        )"},{"line_number":75,"context_line":"        for fixture in fixtures:"},{"line_number":76,"context_line":"            if fail is False and fixture.mock.return_value \u003d\u003d \u0027exception\u0027:"},{"line_number":77,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":78,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_9f61bf3c","line":75,"range":{"start_line":75,"start_character":23,"end_line":75,"end_character":31},"updated":"2018-08-20 14:19:38.000000000","message":"instead of if elseif steps can we unpack the fixtures collection and make asserts without the loop? I\u0027m not sure if this is better but I don\u0027t like the weak branching. It\u0027s hiding the uncovered case with NetworkService, and maybe others we don\u0027t know about. I don\u0027t expect the mocks to change that drastically across delete methods since they all use the rest_client underneath.\n\nWhen I look at this again I\u0027ll give this a shot.","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        for fixture in fixtures:"},{"line_number":76,"context_line":"            if fail is False and fixture.mock.return_value \u003d\u003d \u0027exception\u0027:"},{"line_number":77,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":80,"context_line":"                self.assertNotIn(fixture.mock.call_args[0][0],"},{"line_number":81,"context_line":"                                 self.saved_state[self.compare_data].keys())"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_1261403a","line":78,"range":{"start_line":78,"start_character":12,"end_line":78,"end_character":16},"updated":"2018-08-17 19:43:07.000000000","message":"maybe we should add elif self.saved_state[self.compare_data]: here?","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"b42afb15fa4cd75a6abb83f8ae555321504b39c3","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        for fixture in fixtures:"},{"line_number":76,"context_line":"            if fail is False and fixture.mock.return_value \u003d\u003d \u0027exception\u0027:"},{"line_number":77,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":80,"context_line":"                self.assertNotIn(fixture.mock.call_args[0][0],"},{"line_number":81,"context_line":"                                 self.saved_state[self.compare_data].keys())"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_82f5ff85","line":78,"range":{"start_line":78,"start_character":12,"end_line":78,"end_character":16},"in_reply_to":"3f79a3b5_1261403a","updated":"2018-08-17 21:56:25.000000000","message":"Originally I had another if/else step here to check for network service tests, but I cut those out because this patch is big enough as is. Network service tests will come later.","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"5bd40d5113df4c028bac9c885c4e3935395d7d53","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        for fixture in fixtures:"},{"line_number":76,"context_line":"            if fail is False and fixture.mock.return_value \u003d\u003d \u0027exception\u0027:"},{"line_number":77,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":80,"context_line":"                self.assertNotIn(fixture.mock.call_args[0][0],"},{"line_number":81,"context_line":"                                 self.saved_state[self.compare_data].keys())"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_df1ad715","line":78,"range":{"start_line":78,"start_character":12,"end_line":78,"end_character":16},"in_reply_to":"3f79a3b5_82f5ff85","updated":"2018-08-20 14:19:38.000000000","message":"I think a comment about what is missing would be helpful later down the line at least","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":80,"context_line":"                self.assertNotIn(fixture.mock.call_args[0][0],"},{"line_number":81,"context_line":"                                 self.saved_state[self.compare_data].keys())"},{"line_number":82,"context_line":"        self.assertEqual(serv.data, {})"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_92547056","line":80,"range":{"start_line":80,"start_character":16,"end_line":80,"end_character":32},"updated":"2018-08-17 19:43:07.000000000","message":"so in the case of the NetworkService test_delete_fail, this branch is executed but i\u0027m not understanding the value of the assert here.\n\n(Pdb) fixture.mock.call_args[0][0]\n\u0027v2.0/networks\u0027\n(Pdb) self.saved_state[self.compare_data].keys()\n[]\n\nand again\n\n(Pdb) self.saved_state[self.compare_data].keys()\n[]\n(Pdb) fixture.mock.call_args[0][0]\nu\u0027v2.0/networks/FakeNetwork123\u0027\n\ncan you explain this a bit more?","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"b42afb15fa4cd75a6abb83f8ae555321504b39c3","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":80,"context_line":"                self.assertNotIn(fixture.mock.call_args[0][0],"},{"line_number":81,"context_line":"                                 self.saved_state[self.compare_data].keys())"},{"line_number":82,"context_line":"        self.assertEqual(serv.data, {})"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_a2b03bdf","line":80,"range":{"start_line":80,"start_character":16,"end_line":80,"end_character":32},"in_reply_to":"3f79a3b5_92547056","updated":"2018-08-17 21:56:25.000000000","message":"This section is primarily to test that the mock call does not request the deletion of any item in the saved state. In order to better test the network services another if statement would have to be added since they are not a part of the saved state.","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"5bd40d5113df4c028bac9c885c4e3935395d7d53","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":80,"context_line":"                self.assertNotIn(fixture.mock.call_args[0][0],"},{"line_number":81,"context_line":"                                 self.saved_state[self.compare_data].keys())"},{"line_number":82,"context_line":"        self.assertEqual(serv.data, {})"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_9fa0dfa7","line":80,"range":{"start_line":80,"start_character":16,"end_line":80,"end_character":32},"in_reply_to":"3f79a3b5_a2b03bdf","updated":"2018-08-20 14:19:38.000000000","message":"I would have suspected to see just \u0027networks\u0027 as all the other compare_data keys just list the resource name. I guess I\u0027ll try it out with a different service to understand it better.","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":80,"context_line":"                self.assertNotIn(fixture.mock.call_args[0][0],"},{"line_number":81,"context_line":"                                 self.saved_state[self.compare_data].keys())"},{"line_number":82,"context_line":"        self.assertEqual(serv.data, {})"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _test_dry_run_true(self, mocked_fixture_tuple_list):"},{"line_number":85,"context_line":"        serv \u003d self._create_cmd_service(self.service, is_dry_run\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_723194ec","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":39},"updated":"2018-08-17 19:43:07.000000000","message":"checking serv.data is only applicable to dry run, right? By default it\u0027s empty.","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"5bd40d5113df4c028bac9c885c4e3935395d7d53","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":80,"context_line":"                self.assertNotIn(fixture.mock.call_args[0][0],"},{"line_number":81,"context_line":"                                 self.saved_state[self.compare_data].keys())"},{"line_number":82,"context_line":"        self.assertEqual(serv.data, {})"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _test_dry_run_true(self, mocked_fixture_tuple_list):"},{"line_number":85,"context_line":"        serv \u003d self._create_cmd_service(self.service, is_dry_run\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_5f980769","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":39},"in_reply_to":"3f79a3b5_623d432b","updated":"2018-08-20 14:19:38.000000000","message":"can you show me where in the tempest code this would happen? I can only find usage of serv.data in the dry_run call[1].\n[1] https://github.com/openstack/tempest/blob/0a597479f3f5a92e97ca618d0b5695aa646557d1/tempest/cmd/cleanup_service.py#L394","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"b42afb15fa4cd75a6abb83f8ae555321504b39c3","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":80,"context_line":"                self.assertNotIn(fixture.mock.call_args[0][0],"},{"line_number":81,"context_line":"                                 self.saved_state[self.compare_data].keys())"},{"line_number":82,"context_line":"        self.assertEqual(serv.data, {})"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _test_dry_run_true(self, mocked_fixture_tuple_list):"},{"line_number":85,"context_line":"        serv \u003d self._create_cmd_service(self.service, is_dry_run\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_623d432b","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":39},"in_reply_to":"3f79a3b5_723194ec","updated":"2018-08-17 21:56:25.000000000","message":"This is primarily checking that nothing is added to the data. If something is added, it could indicate resources that would be deleted but shouldnt be.","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":95,"context_line":"                self.assertNotIn(fixture.mock.call_args[0][0],"},{"line_number":96,"context_line":"                                 self.saved_state[self.compare_data].keys())"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _test_saved_state_true(self, mocked_fixture_tuple_list):"},{"line_number":99,"context_line":"        serv \u003d self._create_cmd_service(self.service, is_save_state\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_92e5500d","line":96,"updated":"2018-08-17 19:43:07.000000000","message":"we should be checking serv.data here.\n\nfor NetworkService I get,\n\n\u003e  {\u0027networks\u0027: [{u\u0027name\u0027: u\u0027FakeNetwork\u0027, u\u0027id\u0027: u\u0027FakeNetwork123\u0027}]}","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                self.assertNotIn(fixture.mock.call_args[0][0],"},{"line_number":96,"context_line":"                                 self.saved_state[self.compare_data].keys())"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _test_saved_state_true(self, mocked_fixture_tuple_list):"},{"line_number":99,"context_line":"        serv \u003d self._create_cmd_service(self.service, is_save_state\u003dTrue)"},{"line_number":100,"context_line":"        _, fixtures \u003d self.run_function_with_mocks("},{"line_number":101,"context_line":"            serv.run,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_b2aacccf","line":98,"updated":"2018-08-17 19:43:07.000000000","message":"can these be renamed to _test_list*","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        for item in self.response[self.compare_data]:"},{"line_number":105,"context_line":"            self.assertIn(item[\u0027id\u0027],"},{"line_number":106,"context_line":"                          serv.data[self.compare_data],"},{"line_number":107,"context_line":"                          \u0027Compared (%s) service\u0027 % self.compare_data)"},{"line_number":108,"context_line":"        for fixture in fixtures:"},{"line_number":109,"context_line":"            fixture.mock.assert_called_once()"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_7218b474","line":107,"range":{"start_line":107,"start_character":26,"end_line":107,"end_character":69},"updated":"2018-08-17 19:43:07.000000000","message":"Do you think the default error message would be better? or why is this better?","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        for fixture in fixtures:"},{"line_number":109,"context_line":"            fixture.mock.assert_called_once()"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def _test_is_preserve_true(self, mocked_fixture_tuple_list):"},{"line_number":112,"context_line":"        serv \u003d self._create_cmd_service(self.service, is_preserve\u003dTrue)"},{"line_number":113,"context_line":"        func, fixtures \u003d self.run_function_with_mocks("},{"line_number":114,"context_line":"            serv.list,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_12838058","line":111,"updated":"2018-08-17 19:43:07.000000000","message":"can these be renamed to _test_list*","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def _test_is_preserve_true(self, mocked_fixture_tuple_list):"},{"line_number":112,"context_line":"        serv \u003d self._create_cmd_service(self.service, is_preserve\u003dTrue)"},{"line_number":113,"context_line":"        func, fixtures \u003d self.run_function_with_mocks("},{"line_number":114,"context_line":"            serv.list,"},{"line_number":115,"context_line":"            mocked_fixture_tuple_list"},{"line_number":116,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_92ca304d","line":113,"range":{"start_line":113,"start_character":8,"end_line":113,"end_character":12},"updated":"2018-08-17 19:43:07.000000000","message":"resp I think is more descriptive.","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        )"},{"line_number":117,"context_line":"        for fixture in fixtures:"},{"line_number":118,"context_line":"            fixture.mock.assert_called_once()"},{"line_number":119,"context_line":"        self.assertEqual(len(func), 1)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class TestNetworkService(BaseTests):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_b2f40cd1","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":38},"updated":"2018-08-17 19:43:07.000000000","message":"func is the json response, can we do a a check like we do in test_saved_state_true? If not, why?\nsomething like:\n\n\u003e  self.assertIn(item[\u0027id\u0027],\n\u003e                serv.data[self.compare_data],","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    service \u003d \u0027NetworkService\u0027"},{"line_number":125,"context_line":"    response \u003d {"},{"line_number":126,"context_line":"        \"networks\": ["},{"line_number":127,"context_line":"            {"},{"line_number":128,"context_line":"                \"name\": \"FakeNetwork\","},{"line_number":129,"context_line":"                \"id\": \"FakeNetwork123\","}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_b2adec32","line":126,"updated":"2018-08-17 19:43:07.000000000","message":"I think we should include CONF_NETWORKS in this response in order to test is_preserve properly. When self.is_preserve is true, we need to assert for CONF_NETWORKS to be removed from the response.\n\nIn order to properly test the following in NetworkService at least, I believe the same is true for other services.\n\nif self.is_preserve:\n    networks \u003d [network for network in networks\n                if network[\u0027id\u0027] not in CONF_NETWORKS]","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"5bd40d5113df4c028bac9c885c4e3935395d7d53","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    service \u003d \u0027NetworkService\u0027"},{"line_number":125,"context_line":"    response \u003d {"},{"line_number":126,"context_line":"        \"networks\": ["},{"line_number":127,"context_line":"            {"},{"line_number":128,"context_line":"                \"name\": \"FakeNetwork\","},{"line_number":129,"context_line":"                \"id\": \"FakeNetwork123\","}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_1fd04ff7","line":126,"in_reply_to":"3f79a3b5_62a1c395","updated":"2018-08-20 14:19:38.000000000","message":"what about the other services? I believe the same scenario applies to every other test case that calls _test_is_preserve_true and global CONF_\u003cservice\u003e object is defined here[1].\n[1] https://github.com/openstack/tempest/blob/0a597479f3f5a92e97ca618d0b5695aa646557d1/tempest/cmd/cleanup_service.py#L44","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"b42afb15fa4cd75a6abb83f8ae555321504b39c3","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    service \u003d \u0027NetworkService\u0027"},{"line_number":125,"context_line":"    response \u003d {"},{"line_number":126,"context_line":"        \"networks\": ["},{"line_number":127,"context_line":"            {"},{"line_number":128,"context_line":"                \"name\": \"FakeNetwork\","},{"line_number":129,"context_line":"                \"id\": \"FakeNetwork123\","}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_62a1c395","line":126,"in_reply_to":"3f79a3b5_b2adec32","updated":"2018-08-17 21:56:25.000000000","message":"Conf_networks is part of the network suite of tests that are not yet covered in this patch. Network tests are not complete either. The other services in this file are referred to as global services and the focus of these tests is to cover global service, network will come later.","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    service \u003d \u0027DomainService\u0027"},{"line_number":158,"context_line":"    compare_data \u003d \u0027domains\u0027"},{"line_number":159,"context_line":"    response \u003d {"},{"line_number":160,"context_line":"        \"domains\": ["},{"line_number":161,"context_line":"            {"},{"line_number":162,"context_line":"                \"description\": \"Used for swift functional testing\","},{"line_number":163,"context_line":"                \"enabled\": False,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_e7eac8aa","line":160,"updated":"2018-08-17 19:43:07.000000000","message":"I may be wrong here but.. would it make sense to move this response into lib/fake_identity? https://github.com/openstack/tempest/blob/4e7c1070cec6d071bbf8eeb91340539490e9ec8a/tempest/tests/lib/fake_identity.py","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    service \u003d \u0027ProjectService\u0027"},{"line_number":215,"context_line":"    compare_data \u003d \u0027projects\u0027"},{"line_number":216,"context_line":"    response \u003d {"},{"line_number":217,"context_line":"        \"projects\": ["},{"line_number":218,"context_line":"            {"},{"line_number":219,"context_line":"                \"is_domain\": False,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_67ef98b0","line":216,"updated":"2018-08-17 19:43:07.000000000","message":"I may be wrong here but.. would it make sense to move this response into lib/fake_identity? https://github.com/openstack/tempest/blob/4e7c1070cec6d071bbf8eeb91340539490e9ec8a/tempest/tests/lib/fake_identity.py","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    service \u003d \u0027ImageService\u0027"},{"line_number":274,"context_line":"    compare_data \u003d \u0027images\u0027"},{"line_number":275,"context_line":"    response \u003d {"},{"line_number":276,"context_line":"        \"images\": ["},{"line_number":277,"context_line":"            {"},{"line_number":278,"context_line":"                \"status\": \"ACTIVE\","}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_072a64e6","line":275,"updated":"2018-08-17 19:43:07.000000000","message":"I may be wrong here but.. would it make sense to move this response into lib/fake_identity? https://github.com/openstack/tempest/blob/4e7c1070cec6d071bbf8eeb91340539490e9ec8a/tempest/tests/lib/fake_identity.py","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":395,"context_line":"    service \u003d \u0027RoleService\u0027"},{"line_number":396,"context_line":"    compare_data \u003d \u0027roles\u0027"},{"line_number":397,"context_line":"    response \u003d {"},{"line_number":398,"context_line":"        \"roles\": ["},{"line_number":399,"context_line":"            {"},{"line_number":400,"context_line":"                \"domain_id\": \"FakeDomain\","},{"line_number":401,"context_line":"                \"id\": \"3efrt74r45hn\","}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_c7330c62","line":398,"updated":"2018-08-17 19:43:07.000000000","message":"I may be wrong here but.. would it make sense to move this response into lib/fake_identity? https://github.com/openstack/tempest/blob/4e7c1070cec6d071bbf8eeb91340539490e9ec8a/tempest/tests/lib/fake_identity.py","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"877f8909cd1453be953e69a7bf828e1f67253561","unresolved":false,"context_lines":[{"line_number":444,"context_line":"    service \u003d \u0027UserService\u0027"},{"line_number":445,"context_line":"    compare_data \u003d \u0027users\u0027"},{"line_number":446,"context_line":"    response \u003d {"},{"line_number":447,"context_line":"        \"users\": ["},{"line_number":448,"context_line":"            {"},{"line_number":449,"context_line":"                \"domain_id\": \"TempestDomain\","},{"line_number":450,"context_line":"                \"enabled\": True,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f79a3b5_873d142e","line":447,"updated":"2018-08-17 19:43:07.000000000","message":"I may be wrong here but.. would it make sense to move this response into lib/fake_identity? https://github.com/openstack/tempest/blob/4e7c1070cec6d071bbf8eeb91340539490e9ec8a/tempest/tests/lib/fake_identity.py","commit_id":"72afe330c2ee8b560e1b782ca83a557738bce599"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"38e8d9850a867604659b5c5aff0f5266d521c675","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        cleanup_service.init_conf()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    # Static list to ensure global service saved items are not deleted"},{"line_number":39,"context_line":"    saved_state \u003d {\"users\": {u\u002732rwef64245tgr20121qw324bgg\u0027: u\u0027Lightning\u0027},"},{"line_number":40,"context_line":"                   \"flavors\": {u\u002742\u0027: u\u0027m1.tiny\u0027},"},{"line_number":41,"context_line":"                   \"images\": {u\u002734yhwr-4t3q\u0027: u\u0027stratus-0.3.2-x86_64-disk\u0027},"},{"line_number":42,"context_line":"                   \"roles\": {u\u00273efrt74r45hn\u0027: u\u0027president\u0027},"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_b361cf07","line":39,"range":{"start_line":39,"start_character":4,"end_line":39,"end_character":15},"updated":"2018-08-24 18:56:35.000000000","message":"each of these should include a CONF value from the source file, https://github.com/openstack/tempest/blob/6c682ffc5d7d63f892076d51a5aa3ab503e772d7/tempest/cmd/cleanup_service.py#L65-L71","commit_id":"f195b84a4427bd8ce9cb05d0510b20807d8c27d1"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"38e8d9850a867604659b5c5aff0f5266d521c675","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        )"},{"line_number":119,"context_line":"        for fixture in fixtures:"},{"line_number":120,"context_line":"            fixture.mock.assert_called_once()"},{"line_number":121,"context_line":"        self.assertIn(resp[0], self.response[self.service_name])"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class TestNetworkService(BaseTests):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_136e83ff","line":121,"updated":"2018-08-24 18:56:35.000000000","message":"we should have an assertNotIn call with the config values here.\n\nself.assertNotIn(\u003cCONF value for service\u003e, self.response[self.service_name])","commit_id":"f195b84a4427bd8ce9cb05d0510b20807d8c27d1"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"38e8d9850a867604659b5c5aff0f5266d521c675","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def test_delete_pass(self):"},{"line_number":379,"context_line":"        delete_mock \u003d [(self.get_method, self.response, 200),"},{"line_number":380,"context_line":"                       (self.delete_method, None, 202),"},{"line_number":381,"context_line":"                       (self.log_method, \u0027exception\u0027, None)]"},{"line_number":382,"context_line":"        self._test_delete(delete_mock)"},{"line_number":383,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_72e16dfc","line":380,"range":{"start_line":380,"start_character":50,"end_line":380,"end_character":53},"updated":"2018-08-24 18:56:35.000000000","message":"204 for no content, if this passes, why do we care about mocking the return code?","commit_id":"f195b84a4427bd8ce9cb05d0510b20807d8c27d1"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"c63f93180d61cc9d6debab9ff5775d5c62fed8f7","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def test_delete_pass(self):"},{"line_number":379,"context_line":"        delete_mock \u003d [(self.get_method, self.response, 200),"},{"line_number":380,"context_line":"                       (self.delete_method, None, 202),"},{"line_number":381,"context_line":"                       (self.log_method, \u0027exception\u0027, None)]"},{"line_number":382,"context_line":"        self._test_delete(delete_mock)"},{"line_number":383,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_18007eab","line":380,"range":{"start_line":380,"start_character":50,"end_line":380,"end_character":53},"in_reply_to":"3f79a3b5_72e16dfc","updated":"2018-08-30 00:11:03.000000000","message":"Flavor service is looking for a 202. It throws an error if 204 is supplied. The call is incomplete without the proper error code.","commit_id":"f195b84a4427bd8ce9cb05d0510b20807d8c27d1"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"7dd1eb8b8b8fec9ccb4a4278bca770303d6cf989","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                   \"projects\": {u\u0027f38ohgp93jj032\u0027: u\u0027manhattan\u0027},"},{"line_number":44,"context_line":"                   \"domains\": {u\u0027default\u0027: u\u0027Default\u0027}"},{"line_number":45,"context_line":"                   }"},{"line_number":46,"context_line":"    # conf_values match those passed via fake_config"},{"line_number":47,"context_line":"    conf_values \u003d {\"CONF_FLAVORS\": \"1\","},{"line_number":48,"context_line":"                   \"CONF_IMAGES\": \u0027fake_image_id\u0027,"},{"line_number":49,"context_line":"                   \"CONF_PROJECTS\": \u0027fake_project_name\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f79a3b5_2ec94678","line":46,"updated":"2018-08-31 15:54:23.000000000","message":"can you import the CONF values from the cleanup_service module?\n\ncleanup_service.init_conf()\nconf_values \u003d {\u0027projects\u0027: cleanup_service.CONF_PROJECTS,\n               \u0027flavors\u0027: cleanup_service.CONF_FLAVORS,\n               ...}\n\nso that you can make an assertion in the tests like:\n\n  self.assertNotIn(r[\u0027name\u0027], self.conf_values[self.service_name])","commit_id":"d61df76e837f7f381a2dc6f4646c0e0ad1fbf4d3"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"6b54f64697417f52034c61e0d9dff7be7e7526bd","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        for fixture in fixtures:"},{"line_number":126,"context_line":"            fixture.mock.assert_called_once()"},{"line_number":127,"context_line":"        self.assertIn(resp[0], self.response[self.service_name])"},{"line_number":128,"context_line":"        if self.service_name is \u0027images\u0027 or \u0027flavors\u0027:"},{"line_number":129,"context_line":"            for r in resp:"},{"line_number":130,"context_line":"                self.assertNotIn(r[\u0027id\u0027], self.conf_values.values())"},{"line_number":131,"context_line":"        if self.service_name is \u0027projects\u0027 or \u0027users\u0027:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f79a3b5_28fb377b","line":128,"range":{"start_line":128,"start_character":29,"end_line":128,"end_character":54},"updated":"2018-09-05 04:18:42.000000000","message":"See below, this is also incorrect.","commit_id":"d61df76e837f7f381a2dc6f4646c0e0ad1fbf4d3"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"7dd1eb8b8b8fec9ccb4a4278bca770303d6cf989","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        if self.service_name is \u0027images\u0027 or \u0027flavors\u0027:"},{"line_number":129,"context_line":"            for r in resp:"},{"line_number":130,"context_line":"                self.assertNotIn(r[\u0027id\u0027], self.conf_values.values())"},{"line_number":131,"context_line":"        if self.service_name is \u0027projects\u0027 or \u0027users\u0027:"},{"line_number":132,"context_line":"            for r in resp:"},{"line_number":133,"context_line":"                self.assertNotIn(r[\u0027name\u0027], self.conf_values.values())"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3f79a3b5_2e1b861c","line":131,"range":{"start_line":131,"start_character":29,"end_line":131,"end_character":53},"updated":"2018-08-31 15:54:23.000000000","message":"This should be:\n    in [\u0027projects\u0027, \u0027users\u0027]\n\nThis branch is always true because of the or \u0027users\u0027 part.\n\u003e\u003e\u003e \u0027asdf\u0027 is \u0027a\u0027 or \u0027users\u0027\n\u0027users\u0027\n\u003e\u003e\u003e bool(\u0027asdf\u0027 is \u0027a\u0027 or \u0027users\u0027)\nTrue","commit_id":"d61df76e837f7f381a2dc6f4646c0e0ad1fbf4d3"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"6b54f64697417f52034c61e0d9dff7be7e7526bd","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        if self.service_name is \u0027images\u0027 or \u0027flavors\u0027:"},{"line_number":129,"context_line":"            for r in resp:"},{"line_number":130,"context_line":"                self.assertNotIn(r[\u0027id\u0027], self.conf_values.values())"},{"line_number":131,"context_line":"        if self.service_name is \u0027projects\u0027 or \u0027users\u0027:"},{"line_number":132,"context_line":"            for r in resp:"},{"line_number":133,"context_line":"                self.assertNotIn(r[\u0027name\u0027], self.conf_values.values())"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3f79a3b5_6805af79","line":131,"range":{"start_line":131,"start_character":29,"end_line":131,"end_character":53},"in_reply_to":"3f79a3b5_2e1b861c","updated":"2018-09-05 04:18:42.000000000","message":"++\n\nAlso, avoid using is for string comparison. \u003d\u003d should instead be used. \n\nhttps://stackoverflow.com/questions/2988017/string-comparison-in-python-is-vs","commit_id":"d61df76e837f7f381a2dc6f4646c0e0ad1fbf4d3"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d1c3c2c169c68126c86653dfb3eb1d6aa37c471","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from tempest.tests.lib import fake_credentials"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class BaseTests(base.MockFunctionsBase):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        super(BaseTests, self).setUp()"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_b650b2d6","line":26,"range":{"start_line":26,"start_character":6,"end_line":26,"end_character":15},"updated":"2018-09-09 01:11:33.000000000","message":"This should be renamed to something more descriptive, like BaseCmdServiceTest","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d1c3c2c169c68126c86653dfb3eb1d6aa37c471","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":82,"context_line":"            elif self.service_name in self.saved_state.keys():"},{"line_number":83,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":84,"context_line":"                self.assertNotIn(fixture.mock.call_args[0][0],"},{"line_number":85,"context_line":"                                 self.saved_state[self.service_name].keys())"},{"line_number":86,"context_line":"            else:"},{"line_number":87,"context_line":"                fixture.mock.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_76377ab1","line":84,"range":{"start_line":84,"start_character":21,"end_line":84,"end_character":32},"updated":"2018-09-09 01:11:33.000000000","message":"Shouldn\u0027t this be assertIn?","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d1c3c2c169c68126c86653dfb3eb1d6aa37c471","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                                 self.saved_state[self.service_name].keys())"},{"line_number":86,"context_line":"            else:"},{"line_number":87,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":88,"context_line":"        self.assertEqual(serv.data, {})"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _test_dry_run_true(self, mocked_fixture_tuple_list):"},{"line_number":91,"context_line":"        serv \u003d self._create_cmd_service(self.service_class, is_dry_run\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_d6b68e25","line":88,"range":{"start_line":88,"start_character":13,"end_line":88,"end_character":39},"updated":"2018-09-09 01:11:33.000000000","message":"assertEmpty(serv.data)","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d1c3c2c169c68126c86653dfb3eb1d6aa37c471","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":99,"context_line":"            elif self.service_name in self.saved_state.keys():"},{"line_number":100,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":101,"context_line":"                self.assertNotIn(fixture.mock.call_args[0][0],"},{"line_number":102,"context_line":"                                 self.saved_state[self.service_name].keys())"},{"line_number":103,"context_line":"            else:"},{"line_number":104,"context_line":"                fixture.mock.assert_called_once()"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_963a5695","line":101,"range":{"start_line":101,"start_character":21,"end_line":101,"end_character":32},"updated":"2018-09-09 01:11:33.000000000","message":"Ditto.","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d1c3c2c169c68126c86653dfb3eb1d6aa37c471","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        for fixture in fixtures:"},{"line_number":125,"context_line":"            fixture.mock.assert_called_once()"},{"line_number":126,"context_line":"        self.assertIn(resp[0], self.response[self.service_name])"},{"line_number":127,"context_line":"        if self.service_name in [\u0027images\u0027, \u0027flavors\u0027]:"},{"line_number":128,"context_line":"            for r in resp:"},{"line_number":129,"context_line":"                self.assertNotIn(r[\u0027id\u0027], self.conf_values.values())"},{"line_number":130,"context_line":"        if self.service_name in [\u0027projects\u0027, \u0027users\u0027]:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_363d828d","line":127,"range":{"start_line":127,"start_character":32,"end_line":127,"end_character":54},"updated":"2018-09-09 01:11:33.000000000","message":"Why are these hardcoded in the base class? This behavior should be handled in the appropriate subclasses below.","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"e46781cfa7754395ef5a07a6237713fcc0bdaea1","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self.assertIn(resp[0], self.response[self.service_name])"},{"line_number":127,"context_line":"        if self.service_name in [\u0027images\u0027, \u0027flavors\u0027]:"},{"line_number":128,"context_line":"            for r in resp:"},{"line_number":129,"context_line":"                self.assertNotIn(r[\u0027id\u0027], self.conf_values.values())"},{"line_number":130,"context_line":"        if self.service_name in [\u0027projects\u0027, \u0027users\u0027]:"},{"line_number":131,"context_line":"            for r in resp:"},{"line_number":132,"context_line":"                self.assertNotIn(r[\u0027name\u0027], self.conf_values.values())"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_c85e3844","line":129,"range":{"start_line":129,"start_character":36,"end_line":129,"end_character":38},"updated":"2018-09-05 15:06:29.000000000","message":"does this use \u0027id\u0027 instead of \u0027name\u0027 because images and flavors can have the same name?","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"c7912132f1b41859707b8f0937674c05de1dc06f","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self.assertIn(resp[0], self.response[self.service_name])"},{"line_number":127,"context_line":"        if self.service_name in [\u0027images\u0027, \u0027flavors\u0027]:"},{"line_number":128,"context_line":"            for r in resp:"},{"line_number":129,"context_line":"                self.assertNotIn(r[\u0027id\u0027], self.conf_values.values())"},{"line_number":130,"context_line":"        if self.service_name in [\u0027projects\u0027, \u0027users\u0027]:"},{"line_number":131,"context_line":"            for r in resp:"},{"line_number":132,"context_line":"                self.assertNotIn(r[\u0027name\u0027], self.conf_values.values())"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_79501433","line":129,"range":{"start_line":129,"start_character":36,"end_line":129,"end_character":38},"in_reply_to":"3f79a3b5_c85e3844","updated":"2018-09-05 16:44:13.000000000","message":"id is used for images and flavors because the conf stores their id. Same is true for the name in projects and users.\n\nhttps://github.com/openstack/tempest/blob/master/tempest/cmd/cleanup_service.py#L66","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d1c3c2c169c68126c86653dfb3eb1d6aa37c471","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        if self.service_name in [\u0027images\u0027, \u0027flavors\u0027]:"},{"line_number":128,"context_line":"            for r in resp:"},{"line_number":129,"context_line":"                self.assertNotIn(r[\u0027id\u0027], self.conf_values.values())"},{"line_number":130,"context_line":"        if self.service_name in [\u0027projects\u0027, \u0027users\u0027]:"},{"line_number":131,"context_line":"            for r in resp:"},{"line_number":132,"context_line":"                self.assertNotIn(r[\u0027name\u0027], self.conf_values.values())"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_56403e06","line":130,"range":{"start_line":130,"start_character":32,"end_line":130,"end_character":54},"updated":"2018-09-09 01:11:33.000000000","message":"Why are these hardcoded in the base class? This behavior should be handled in the appropriate subclasses below.","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"aa02f5a77524ad886624e2c75110ad8ee846e19a","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            {"},{"line_number":324,"context_line":"                \"status\": \"ACTIVE\","},{"line_number":325,"context_line":"                \"name\": \"cirros-0.3.2-x86_64-disk\","},{"line_number":326,"context_line":"                \"id\": \"fake_image_id\","},{"line_number":327,"context_line":"                \"updated\": \"2014-11-03T16:40:10Z\","},{"line_number":328,"context_line":"                \"links\": [{"},{"line_number":329,"context_line":"                    \"href\": \"http://openstack.ex.com/v2/openstack/images/\" +"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_8364a1ba","line":326,"range":{"start_line":326,"start_character":23,"end_line":326,"end_character":36},"updated":"2018-09-05 15:08:15.000000000","message":"oh i see it here, nevermind +1","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"e46781cfa7754395ef5a07a6237713fcc0bdaea1","unresolved":false,"context_lines":[{"line_number":352,"context_line":"                    \"rel\": \"self\"}, {"},{"line_number":353,"context_line":"                    \"href\": \"http://openstack.ex.com/openstack/flavors/1\","},{"line_number":354,"context_line":"                    \"rel\": \"bookmark\"}],"},{"line_number":355,"context_line":"                \"name\": \"m1.tiny\","},{"line_number":356,"context_line":"                \"ram\": 512,"},{"line_number":357,"context_line":"                \"swap\": 1,"},{"line_number":358,"context_line":"                \"vcpus\": 1"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_68504433","line":355,"range":{"start_line":355,"start_character":25,"end_line":355,"end_character":32},"updated":"2018-09-05 15:06:29.000000000","message":"can flavors have the same name? Not sure but this is probably ok.","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"e46781cfa7754395ef5a07a6237713fcc0bdaea1","unresolved":false,"context_lines":[{"line_number":482,"context_line":"                    \"self\": \"http://example.com/identity/v3/users/\" +"},{"line_number":483,"context_line":"                            \"32rwef64245tgr20121qw324bgg\","},{"line_number":484,"context_line":"                },"},{"line_number":485,"context_line":"                \"name\": \"Lightning\","},{"line_number":486,"context_line":"                \"password_expires_at\": \"1893-11-06T15:32:17.000000\","},{"line_number":487,"context_line":"            }"},{"line_number":488,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_4519b185","line":485,"range":{"start_line":485,"start_character":25,"end_line":485,"end_character":34},"updated":"2018-09-05 15:06:29.000000000","message":"do you think we should use the CONF value directly so it\u0027s clear? same applies for other response class attributes.","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"e46781cfa7754395ef5a07a6237713fcc0bdaea1","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                    \"self\": \"http://example.com/identity/v3/users/\" +"},{"line_number":519,"context_line":"                            \"23ads5tg3rtrhe30121qwhyth\","},{"line_number":520,"context_line":"                },"},{"line_number":521,"context_line":"                \"name\": \"fake_username\","},{"line_number":522,"context_line":"                \"password_expires_at\": \"1893-11-06T15:32:17.000000\","},{"line_number":523,"context_line":"            })"},{"line_number":524,"context_line":"        self._test_is_preserve_true([(self.get_method, self.response, 200)])"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_a3e19d2d","line":521,"range":{"start_line":521,"start_character":25,"end_line":521,"end_character":38},"updated":"2018-09-05 15:06:29.000000000","message":"Just double checking my understanding, this comes from the fake_config on line https://review.openstack.org/#/c/579312/16/tempest/tests/fake_config.py@54 so can we use the CONF value directly, right?","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"c43887c76f24be7d33911560499ed9e03aaaeb39","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                fixture.mock.assert_not_called()"},{"line_number":125,"context_line":"            elif self.service_name in self.saved_state.keys():"},{"line_number":126,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":127,"context_line":"                self.assertNotIn(self.saved_state[self.service_name].keys()[0],"},{"line_number":128,"context_line":"                                 fixture.mock.call_args[0][0])"},{"line_number":129,"context_line":"            else:"},{"line_number":130,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":131,"context_line":"        self.assertFalse(serv.data)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_da553320","line":128,"range":{"start_line":127,"start_character":16,"end_line":128,"end_character":62},"updated":"2018-09-11 00:36:15.000000000","message":"AssertNotIn was intended because we dont want the id in saved state be be used in the delete call. The assertion was, non the less, incorrect and has been fixed to assert using the correct values. Now we are asserting that the saved state key value (id) is not present in the delete request arguments. Therefore we are not attempting to delete the resource that is in the saved state as intended.","commit_id":"edb686934521a13883cd68f09b18a49ac2a5d258"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"c43887c76f24be7d33911560499ed9e03aaaeb39","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                                 fixture.mock.call_args[0][0])"},{"line_number":129,"context_line":"            else:"},{"line_number":130,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":131,"context_line":"        self.assertFalse(serv.data)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def _test_dry_run_true(self, mocked_fixture_tuple_list):"},{"line_number":134,"context_line":"        serv \u003d self._create_cmd_service(self.service_class, is_dry_run\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_fa526f35","line":131,"range":{"start_line":131,"start_character":8,"end_line":131,"end_character":35},"updated":"2018-09-11 00:36:15.000000000","message":"there is no assertEmpty, but assertFalse does the same thing.","commit_id":"edb686934521a13883cd68f09b18a49ac2a5d258"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"c43887c76f24be7d33911560499ed9e03aaaeb39","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            elif self.service_name in self.saved_state.keys():"},{"line_number":143,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":144,"context_line":"                self.assertNotIn(self.saved_state[self.service_name].keys()[0],"},{"line_number":145,"context_line":"                                 fixture.mock.call_args[0][0])"},{"line_number":146,"context_line":"            else:"},{"line_number":147,"context_line":"                fixture.mock.assert_called_once()"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_5a37e3ff","line":145,"range":{"start_line":145,"start_character":34,"end_line":145,"end_character":44},"updated":"2018-09-11 00:36:15.000000000","message":"ditto above","commit_id":"edb686934521a13883cd68f09b18a49ac2a5d258"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"c43887c76f24be7d33911560499ed9e03aaaeb39","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.assertIn(resp[0], self.response[self.service_name])"},{"line_number":170,"context_line":"        for rsp in resp:"},{"line_number":171,"context_line":"            self.assertNotIn(rsp[\u0027id\u0027], self.conf_values.values())"},{"line_number":172,"context_line":"            self.assertNotIn(rsp[\u0027name\u0027], self.conf_values.values())"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"class TestDomainService(BaseCmdServiceTests):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f79a3b5_1a0acb26","line":172,"range":{"start_line":172,"start_character":17,"end_line":172,"end_character":28},"updated":"2018-09-11 00:36:15.000000000","message":"originally hard-coded service names because images and flavors store ids while projects and users store names in the conf. Asserting neither are present has the same result, so I have updated the assertion.","commit_id":"edb686934521a13883cd68f09b18a49ac2a5d258"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"78f62c68da76f5018bff7fab4aab284790849e45","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.assertIn(resp[0], self.response[self.service_name])"},{"line_number":170,"context_line":"        for rsp in resp:"},{"line_number":171,"context_line":"            self.assertNotIn(rsp[\u0027id\u0027], self.conf_values.values())"},{"line_number":172,"context_line":"            self.assertNotIn(rsp[\u0027name\u0027], self.conf_values.values())"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"class TestDomainService(BaseCmdServiceTests):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_58c27688","line":172,"updated":"2018-09-11 21:53:00.000000000","message":"it looks like we can assert for saved_state as well\n\nself.assertNotIn(rsp[\u0027id\u0027], self.saved_state.values())\nself.assertNotIn(rsp[\u0027name\u0027], self.saved_state.values())","commit_id":"70a36149bdbed1d8a3bed674b6c5353d23ca636a"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"47ebec171fd2513ac4115426a5d1c47bf6ea44c3","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.assertIn(resp[0], self.response[self.service_name])"},{"line_number":170,"context_line":"        for rsp in resp:"},{"line_number":171,"context_line":"            self.assertNotIn(rsp[\u0027id\u0027], self.conf_values.values())"},{"line_number":172,"context_line":"            self.assertNotIn(rsp[\u0027name\u0027], self.conf_values.values())"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"class TestDomainService(BaseCmdServiceTests):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_367bf7f4","line":172,"in_reply_to":"3f79a3b5_36df770d","updated":"2018-09-12 17:36:13.000000000","message":"doesn\u0027t matter much to me, just something I noticed we could add, we can leave it as is unless someone else wants it :P","commit_id":"70a36149bdbed1d8a3bed674b6c5353d23ca636a"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"5f9637118529ef1b9f9c0200e9516a2dd6c36a42","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.assertIn(resp[0], self.response[self.service_name])"},{"line_number":170,"context_line":"        for rsp in resp:"},{"line_number":171,"context_line":"            self.assertNotIn(rsp[\u0027id\u0027], self.conf_values.values())"},{"line_number":172,"context_line":"            self.assertNotIn(rsp[\u0027name\u0027], self.conf_values.values())"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"class TestDomainService(BaseCmdServiceTests):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f79a3b5_36df770d","line":172,"in_reply_to":"3f79a3b5_58c27688","updated":"2018-09-12 17:31:17.000000000","message":"This seems like a its a little over the top to me. Especially since checking to make sure saved_state values are not present is already done in test_delete. But if you think it adds value - its an easy fix","commit_id":"70a36149bdbed1d8a3bed674b6c5353d23ca636a"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"4cf791723a220050724a250cca35ef7ac386cd6a","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    response \u003d {"},{"line_number":180,"context_line":"        \"domains\": ["},{"line_number":181,"context_line":"            {"},{"line_number":182,"context_line":"                \"description\": \"Destroy all humans\","},{"line_number":183,"context_line":"                \"enabled\": True,"},{"line_number":184,"context_line":"                \"id\": \"5a75994a3\","},{"line_number":185,"context_line":"                \"links\": {"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f79a3b5_3d028f09","line":182,"updated":"2018-10-01 08:09:05.000000000","message":"lol","commit_id":"c67bb194edb25bc86aead6a223c8e3057d924685"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"4cf791723a220050724a250cca35ef7ac386cd6a","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                \"links\": {"},{"line_number":186,"context_line":"                    \"self\": \"http://example.com/identity/v3/domains/5a75994a3\""},{"line_number":187,"context_line":"                },"},{"line_number":188,"context_line":"                \"name\": \"Sky_net\""},{"line_number":189,"context_line":"            },"},{"line_number":190,"context_line":"            {"},{"line_number":191,"context_line":"                \"description\": \"Owns users and tenants on Identity API\","}],"source_content_type":"text/x-python","patch_set":19,"id":"3f79a3b5_5d074b18","line":188,"updated":"2018-10-01 08:09:05.000000000","message":"make sense :)","commit_id":"c67bb194edb25bc86aead6a223c8e3057d924685"}],"tempest/tests/fake_config.py":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"e46781cfa7754395ef5a07a6237713fcc0bdaea1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        super(ConfigFixture, self).setUp()"},{"line_number":33,"context_line":"        self.conf.set_default(\u0027build_interval\u0027, 10, group\u003d\u0027compute\u0027)"},{"line_number":34,"context_line":"        self.conf.set_default(\u0027build_timeout\u0027, 10, group\u003d\u0027compute\u0027)"},{"line_number":35,"context_line":"        self.conf.set_default(\u0027image_ref\u0027, \u0027fake_image_id\u0027, group\u003d\u0027compute\u0027)"},{"line_number":36,"context_line":"        self.conf.set_default(\u0027disable_ssl_certificate_validation\u0027, True,"},{"line_number":37,"context_line":"                              group\u003d\u0027identity\u0027)"},{"line_number":38,"context_line":"        self.conf.set_default(\u0027uri\u0027, \u0027http://fake_uri.com/auth\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_e3ad55ea","line":35,"range":{"start_line":35,"start_character":43,"end_line":35,"end_character":58},"updated":"2018-09-05 15:06:29.000000000","message":"should this image id be in the response attribute for the TestImagesService class? If not, why is this added?","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"aa02f5a77524ad886624e2c75110ad8ee846e19a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        super(ConfigFixture, self).setUp()"},{"line_number":33,"context_line":"        self.conf.set_default(\u0027build_interval\u0027, 10, group\u003d\u0027compute\u0027)"},{"line_number":34,"context_line":"        self.conf.set_default(\u0027build_timeout\u0027, 10, group\u003d\u0027compute\u0027)"},{"line_number":35,"context_line":"        self.conf.set_default(\u0027image_ref\u0027, \u0027fake_image_id\u0027, group\u003d\u0027compute\u0027)"},{"line_number":36,"context_line":"        self.conf.set_default(\u0027disable_ssl_certificate_validation\u0027, True,"},{"line_number":37,"context_line":"                              group\u003d\u0027identity\u0027)"},{"line_number":38,"context_line":"        self.conf.set_default(\u0027uri\u0027, \u0027http://fake_uri.com/auth\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_435a09f2","line":35,"range":{"start_line":35,"start_character":43,"end_line":35,"end_character":58},"in_reply_to":"3f79a3b5_e3ad55ea","updated":"2018-09-05 15:08:15.000000000","message":"found it https://review.openstack.org/#/c/579312/16/tempest/tests/cmd/test_cleanup_services.py@326 lgtm","commit_id":"c9f7a61201ec52c73d3fcc49a14a38afec5fb9fd"}]}
