)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"5a1a4ed700eede07b86baab0d0075b903def748d","unresolved":false,"context_lines":[{"line_number":40,"context_line":"new groups in int-tests:"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"./redstack kick-start mongodb"},{"line_number":43,"context_line":"./redstack int-tests --group\u003dinstance_actions --group\u003dcluster"},{"line_number":44,"context_line":"or"},{"line_number":45,"context_line":"./redstack int-tests --group\u003dmongodb_group"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"fa1b9901_50050912","line":43,"updated":"2015-08-21 21:38:56.000000000","message":"so if i get this right... since you kick-started mongodb the default datastore is mongo. and running those groups with int-tests will run only them for mongo?","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"c0e929b2dc71848b15658ebc5452195a7e6665de","unresolved":false,"context_lines":[{"line_number":40,"context_line":"new groups in int-tests:"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"./redstack kick-start mongodb"},{"line_number":43,"context_line":"./redstack int-tests --group\u003dinstance_actions --group\u003dcluster"},{"line_number":44,"context_line":"or"},{"line_number":45,"context_line":"./redstack int-tests --group\u003dmongodb_group"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"fa1b9901_c655dffa","line":43,"in_reply_to":"fa1b9901_50050912","updated":"2015-08-21 22:17:47.000000000","message":"Well, the tests will run for whatever datastore is set in test.conf (under the dbaas_datastore keyword).  It would make sense to have it use the default datastore in trove.conf, but that\u0027s not the way the int-tests work now and we\u0027re still using some of the old tests.  It\u0027d make sense to change that in the future though.","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"5a1a4ed700eede07b86baab0d0075b903def748d","unresolved":false,"context_lines":[{"line_number":42,"context_line":"./redstack kick-start mongodb"},{"line_number":43,"context_line":"./redstack int-tests --group\u003dinstance_actions --group\u003dcluster"},{"line_number":44,"context_line":"or"},{"line_number":45,"context_line":"./redstack int-tests --group\u003dmongodb_group"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Additional Notes:"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"fa1b9901_ab0f562d","line":45,"updated":"2015-08-21 21:38:56.000000000","message":"on the other hand this will run all the same expected tests for the mongo datastore?","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"c0e929b2dc71848b15658ebc5452195a7e6665de","unresolved":false,"context_lines":[{"line_number":42,"context_line":"./redstack kick-start mongodb"},{"line_number":43,"context_line":"./redstack int-tests --group\u003dinstance_actions --group\u003dcluster"},{"line_number":44,"context_line":"or"},{"line_number":45,"context_line":"./redstack int-tests --group\u003dmongodb_group"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Additional Notes:"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"fa1b9901_a6feab36","line":45,"in_reply_to":"fa1b9901_ab0f562d","updated":"2015-08-21 22:17:47.000000000","message":"We\u0027ve tried to keep the groups separate from the datastores. \u003cdatastore\u003e_group is just a group containing all the test groups that the datastore supports.  Maybe we can come up with a way so that the tests are skipped if the datastore doesn\u0027t support them, then we could just use a single group for all, but for now using --group\u003dmongodb_group is the same as using \u0027--group\u003dinstance_actions --group\u003dcluster\u0027","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"5a1a4ed700eede07b86baab0d0075b903def748d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"Trove volume is less that the size of the volume."},{"line_number":53,"context_line":"It however often fails because \u0027used\u0027 \u003e \u0027size\u0027."},{"line_number":54,"context_line":"From inspection of the instance it appears that the reported"},{"line_number":55,"context_line":"\u0027used\u0027 space is from the root volume instead of the"},{"line_number":56,"context_line":"attached Trove volume. Plus it sometimes returns int instead of float."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Change-Id: I34fb974a32dc1b457026f5b9d98e20d1c7219009"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"fa1b9901_8b3932db","line":55,"range":{"start_line":55,"start_character":25,"end_line":55,"end_character":44},"updated":"2015-08-21 21:38:56.000000000","message":"wonder if this is because of the new location the volume is mounted?","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"5a1a4ed700eede07b86baab0d0075b903def748d","unresolved":false,"context_lines":[{"line_number":53,"context_line":"It however often fails because \u0027used\u0027 \u003e \u0027size\u0027."},{"line_number":54,"context_line":"From inspection of the instance it appears that the reported"},{"line_number":55,"context_line":"\u0027used\u0027 space is from the root volume instead of the"},{"line_number":56,"context_line":"attached Trove volume. Plus it sometimes returns int instead of float."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Change-Id: I34fb974a32dc1b457026f5b9d98e20d1c7219009"},{"line_number":59,"context_line":"Authored-By: Petr Malik \u003cpmalik@tesora.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"fa1b9901_eb5a2e2a","line":56,"range":{"start_line":56,"start_character":49,"end_line":56,"end_character":69},"updated":"2015-08-21 21:38:56.000000000","message":"Is this because of the math we do to convert to gbs?","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"c0e929b2dc71848b15658ebc5452195a7e6665de","unresolved":false,"context_lines":[{"line_number":53,"context_line":"It however often fails because \u0027used\u0027 \u003e \u0027size\u0027."},{"line_number":54,"context_line":"From inspection of the instance it appears that the reported"},{"line_number":55,"context_line":"\u0027used\u0027 space is from the root volume instead of the"},{"line_number":56,"context_line":"attached Trove volume. Plus it sometimes returns int instead of float."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Change-Id: I34fb974a32dc1b457026f5b9d98e20d1c7219009"},{"line_number":59,"context_line":"Authored-By: Petr Malik \u003cpmalik@tesora.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"fa1b9901_86afe72a","line":56,"range":{"start_line":56,"start_character":49,"end_line":56,"end_character":69},"in_reply_to":"fa1b9901_eb5a2e2a","updated":"2015-08-21 22:17:47.000000000","message":"I\u0027m not sure - I didn\u0027t debug into it too much","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"}],"trove/common/utils.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c41c373466583d0e7da9eef09ce12c693f9b49a3","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        return \"%s %s\" % (self._func.__name__, args_str)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"def build_polling_task(retriever, condition\u003dlambda value: value,"},{"line_number":180,"context_line":"                       sleep_time\u003d1, time_out\u003dNone):"},{"line_number":181,"context_line":"    start_time \u003d time.time()"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_f181c0fc","line":179,"updated":"2015-07-20 04:30:44.000000000","message":"would love to understand this refactoring and why this makes sense as part of this change.","commit_id":"31aefef79f8efc0644fe30ff10d820b6bdd51070"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"1fe0a48b71948a6e303389e5c9f8731624d8923b","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        return \"%s %s\" % (self._func.__name__, args_str)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"def build_polling_task(retriever, condition\u003dlambda value: value,"},{"line_number":180,"context_line":"                       sleep_time\u003d1, time_out\u003dNone):"},{"line_number":181,"context_line":"    start_time \u003d time.time()"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_8228b387","line":179,"in_reply_to":"3a50d1a3_f181c0fc","updated":"2015-07-22 04:50:29.000000000","message":"The test infrastructure can wait for statuses of multiple instances (cluster tests) in parallel. To do that it needs to construct polling loop tasks without executing wait() on them - wait blocks until the result is ready.\nThis method is used to build these tasks and reused by the poll_and_check() call.","commit_id":"31aefef79f8efc0644fe30ff10d820b6bdd51070"}],"trove/tests/api/configurations.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"5a1a4ed700eede07b86baab0d0075b903def748d","unresolved":false,"context_lines":[{"line_number":622,"context_line":"    @test(depends_on\u003d[test_instance_with_configuration_active])"},{"line_number":623,"context_line":"    @time_out(30)"},{"line_number":624,"context_line":"    def test_get_configuration_details_from_instance_validation(self):"},{"line_number":625,"context_line":"        # validate that the configuration was applied correctly to the instance"},{"line_number":626,"context_line":"        inst \u003d instance_info.dbaas.instances.get(configuration_instance.id)"},{"line_number":627,"context_line":"        configuration_id \u003d inst.configuration[\u0027id\u0027]"},{"line_number":628,"context_line":"        assert_not_equal(None, inst.configuration[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_4b61dad2","line":625,"updated":"2015-08-21 21:38:56.000000000","message":"it blows my mind sometimes how people find these small typos.","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"}],"trove/tests/api/groups/abstract_test_group.py":[{"author":{"_account_id":10440,"name":"Alex Tomic","email":"atomic777@gmail.com","username":"atomic77"},"change_message_id":"2dc7cf159ae684ef3e87ab05bfd533849018f99d","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":24,"context_line":"class AbstractTestGroup(object):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    TEST_RUNNERS_NS \u003d \u0027trove.tests.api.runners\u0027"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_67486e2e","line":24,"updated":"2015-07-24 18:35:14.000000000","message":"Just a curiosity -- why has this class been made explicitly abstract, while BaseTestRunner is not?","commit_id":"ef5871e8cc27cf686153ed331b6170e73a3ef2c1"},{"author":{"_account_id":10440,"name":"Alex Tomic","email":"atomic777@gmail.com","username":"atomic77"},"change_message_id":"5d83abda2afacab475f97cf6e3c52e9985191947","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":24,"context_line":"class AbstractTestGroup(object):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    TEST_RUNNERS_NS \u003d \u0027trove.tests.api.runners\u0027"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_912fb53d","line":24,"in_reply_to":"3a50d1a3_14742c9a","updated":"2015-07-27 16:05:18.000000000","message":"Well yes, but this is also the case for BaseTestRunner, isn\u0027t it? There seem to be no actual tests defined there so I am trying to understand why it would make sense for that class to be instantiated and not this one.","commit_id":"ef5871e8cc27cf686153ed331b6170e73a3ef2c1"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"0393070a31cf42513c075283ac5fa16e419ea6d5","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":24,"context_line":"class AbstractTestGroup(object):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    TEST_RUNNERS_NS \u003d \u0027trove.tests.api.runners\u0027"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_14742c9a","line":24,"in_reply_to":"3a50d1a3_67486e2e","updated":"2015-07-24 22:50:24.000000000","message":"Because groups define tests and the order in which they are executed. This group does not define any tests (in fact it could not even be used for that purpose as it is not properly decorated) - instantiating this class does not make any sense, hence abstract. What would be a \u0027base test\u0027 after all...","commit_id":"ef5871e8cc27cf686153ed331b6170e73a3ef2c1"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"ec3d11276a80c7cdedb50e61227d654badfe1bb2","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                if group_name:"},{"line_number":37,"context_line":"                    return group_name"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        raise RuntimeError(\"Command line test group flag (--group\u003d) \""},{"line_number":40,"context_line":"                           \"not found.\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    @classmethod"},{"line_number":43,"context_line":"    def _load_runner_class("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_92742568","line":40,"range":{"start_line":39,"start_character":0,"end_line":40,"end_character":40},"updated":"2015-07-29 15:08:52.000000000","message":"Looks like if you don\u0027t supply --group\u003d that the test will fail.  Redstack seems to always provide a group, however the default is \u0027blackbox\u0027 - we may have to handle this case, or change redstack to use mysql instead.","commit_id":"25fb780d3bb86f8682f54ff0277b77b3163a6cf5"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"ec3d11276a80c7cdedb50e61227d654badfe1bb2","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            runner_impl \u003d cls._build_class_name("},{"line_number":50,"context_line":"                runner_module_name, class_prefix, runner_base_name)"},{"line_number":51,"context_line":"            return Strategy.get_strategy(runner_impl, cls.TEST_RUNNERS_NS)"},{"line_number":52,"context_line":"        except Exception:"},{"line_number":53,"context_line":"            runner_impl \u003d cls._build_class_name("},{"line_number":54,"context_line":"                runner_module_name, \u0027\u0027, runner_base_name)"},{"line_number":55,"context_line":"            return Strategy.get_strategy(runner_impl, cls.TEST_RUNNERS_NS)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_b2c7e143","line":52,"range":{"start_line":52,"start_character":0,"end_line":52,"end_character":25},"updated":"2015-07-29 15:08:52.000000000","message":"We should only trap the right exception here - if something else happens except for the class not being found, we should still fail.","commit_id":"25fb780d3bb86f8682f54ff0277b77b3163a6cf5"}],"trove/tests/api/groups/instance_actions_group.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c8f4cb87ecb955a20bbba7691ee8e15c0cdd0497","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"@test(depends_on_groups\u003d[GROUP_START_SIMPLE], groups\u003d[GROUP],"},{"line_number":27,"context_line":"      runs_after\u003d[WaitForGuestInstallationToFinish])"},{"line_number":28,"context_line":"class InstanceActionsGroup(AbstractTestGroup):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_2e952c3f","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":16},"updated":"2015-07-31 22:13:47.000000000","message":"This group deletes the instance. We have to make sure it runs after all other groups that require the base instance - i.e. after replication.\nClustering tests are independent as they create a new cluster.","commit_id":"1095a8b7fa5d237e4ae2f9f972559aa1c622451f"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"28327c8d3873528de89390172ee69cb6a8d12f7e","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"@test(depends_on_groups\u003d[GROUP_START_SIMPLE], groups\u003d[GROUP],"},{"line_number":27,"context_line":"      runs_after\u003d[WaitForGuestInstallationToFinish])"},{"line_number":28,"context_line":"class InstanceActionsGroup(AbstractTestGroup):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_0e2724b7","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":16},"in_reply_to":"3a50d1a3_2e952c3f","updated":"2015-08-04 21:15:06.000000000","message":"Broke the delete out into its own group","commit_id":"1095a8b7fa5d237e4ae2f9f972559aa1c622451f"}],"trove/tests/api/instances.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"826b910427c33417a66230f388f700e92b380ef8","unresolved":false,"context_lines":[{"line_number":141,"context_line":"# existing."},{"line_number":142,"context_line":"instance_info \u003d InstanceTestInfo()"},{"line_number":143,"context_line":"dbaas \u003d None  # Rich client used throughout this test."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"dbaas_admin \u003d None  # Same as above, with admin privs."},{"line_number":146,"context_line":"ROOT_ON_CREATE \u003d CONFIG.get(\u0027root_on_create\u0027, False)"},{"line_number":147,"context_line":"VOLUME_SUPPORT \u003d CONFIG.get(\u0027trove_volume_support\u0027, False)"}],"source_content_type":"text/x-python","patch_set":32,"id":"da20952f_c1ace4ef","line":144,"updated":"2015-08-27 13:33:31.000000000","message":"gratuitous whitespace","commit_id":"16d91d9838cbbf7565bbcc2c8eed2ff3912da985"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"826b910427c33417a66230f388f700e92b380ef8","unresolved":false,"context_lines":[{"line_number":739,"context_line":"        instance_name \u003d \"instance-with-flavor-%s\" % flavor_id"},{"line_number":740,"context_line":"        databases \u003d []"},{"line_number":741,"context_line":"        if VOLUME_SUPPORT:"},{"line_number":742,"context_line":"            volume \u003d {\u0027size\u0027: CONFIG.get(\u0027trove_volume_size\u0027, 1)}"},{"line_number":743,"context_line":"        else:"},{"line_number":744,"context_line":"            volume \u003d None"},{"line_number":745,"context_line":"        self.result \u003d dbaas.instances.create(instance_name, flavor_id, volume,"}],"source_content_type":"text/x-python","patch_set":32,"id":"da20952f_81bb4c0e","line":742,"updated":"2015-08-27 13:33:31.000000000","message":"are these changes *required*?","commit_id":"16d91d9838cbbf7565bbcc2c8eed2ff3912da985"}],"trove/tests/api/runners/base_test_runners.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"ec3d11276a80c7cdedb50e61227d654badfe1bb2","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from trove.tests.util import create_dbaas_client"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class BaseTestRunner(object):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, sleep_time\u003d60, timeout\u003d1200):"},{"line_number":32,"context_line":"        self.def_sleep_time \u003d sleep_time"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_724719a3","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":29},"updated":"2015-07-29 15:08:52.000000000","message":"I think we need to document here how to override the different runners with datastore specific ones (since the name is now important).","commit_id":"25fb780d3bb86f8682f54ff0277b77b3163a6cf5"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c8f4cb87ecb955a20bbba7691ee8e15c0cdd0497","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                else [instance_ids], expected_states)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def assert_client_code(self, http_code\u003d202):"},{"line_number":73,"context_line":"        asserts.assert_equal(http_code, self.rd_client.last_http_code,"},{"line_number":74,"context_line":"                             \"Unexpected client status code.\")"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def assert_all_instance_states(self, instance_ids, expected_states):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_aec61c14","line":73,"updated":"2015-07-31 22:13:47.000000000","message":"Need to include the returned code in the message else it\u0027s not shown.","commit_id":"1095a8b7fa5d237e4ae2f9f972559aa1c622451f"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"28327c8d3873528de89390172ee69cb6a8d12f7e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                else [instance_ids], expected_states)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def assert_client_code(self, http_code\u003d202):"},{"line_number":73,"context_line":"        asserts.assert_equal(http_code, self.rd_client.last_http_code,"},{"line_number":74,"context_line":"                             \"Unexpected client status code.\")"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def assert_all_instance_states(self, instance_ids, expected_states):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_6e3028e9","line":73,"in_reply_to":"3a50d1a3_aec61c14","updated":"2015-08-04 21:15:06.000000000","message":"Done","commit_id":"1095a8b7fa5d237e4ae2f9f972559aa1c622451f"}],"trove/tests/api/runners/cluster_actions_runners.py":[{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"28327c8d3873528de89390172ee69cb6a8d12f7e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from troveclient.compat import exceptions"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ClusterActionsRunner(BaseTestRunner):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def run_cluster_create_test("},{"line_number":29,"context_line":"            self, num_nodes\u003d2, expected_instance_states\u003d[\u0027BUILD\u0027, \u0027ACTIVE\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_aef5d0cb","line":26,"updated":"2015-08-04 21:15:06.000000000","message":"Any thoughts if we renamed this (and other default runner classes) to:\n\n  DefaultClusterActionsRunner\n\nto distinguish it from the (potential) derived classes for each datastore.  i.e.:\n\n  MongodbClusterActionsRunner\n\nOr is it obvious enough the way it is?","commit_id":"1095a8b7fa5d237e4ae2f9f972559aa1c622451f"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"f2a5dedbabb8162c02d5838f53d022100a4476e5","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from troveclient.compat import exceptions"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ClusterActionsRunner(BaseTestRunner):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def run_cluster_create_test("},{"line_number":29,"context_line":"            self, num_nodes\u003d2, expected_instance_states\u003d[\u0027BUILD\u0027, \u0027ACTIVE\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_80f0b4ff","line":26,"in_reply_to":"1a4dcd0f_aef5d0cb","updated":"2015-08-05 15:06:10.000000000","message":"+1 for Default from me.","commit_id":"1095a8b7fa5d237e4ae2f9f972559aa1c622451f"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c8f4cb87ecb955a20bbba7691ee8e15c0cdd0497","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                asserts.assert_is_not_none(instance[\u0027id\u0027])"},{"line_number":102,"context_line":"                asserts.assert_is_not_none(instance[\u0027links\u0027])"},{"line_number":103,"context_line":"                asserts.assert_is_not_none(instance[\u0027name\u0027])"},{"line_number":104,"context_line":"        asserts.assert_equal(expected_state, cluster.task[\u0027name\u0027],"},{"line_number":105,"context_line":"                             \"Unexpected cluster task name.\")"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def _assert_cluster_gone(self, cluster_id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_0ee07095","line":104,"updated":"2015-07-31 22:13:47.000000000","message":"Need to include the returned name in the message else it\u0027s not shown.","commit_id":"1095a8b7fa5d237e4ae2f9f972559aa1c622451f"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"28327c8d3873528de89390172ee69cb6a8d12f7e","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                asserts.assert_is_not_none(instance[\u0027id\u0027])"},{"line_number":102,"context_line":"                asserts.assert_is_not_none(instance[\u0027links\u0027])"},{"line_number":103,"context_line":"                asserts.assert_is_not_none(instance[\u0027name\u0027])"},{"line_number":104,"context_line":"        asserts.assert_equal(expected_state, cluster.task[\u0027name\u0027],"},{"line_number":105,"context_line":"                             \"Unexpected cluster task name.\")"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def _assert_cluster_gone(self, cluster_id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_ce57fc00","line":104,"in_reply_to":"3a50d1a3_0ee07095","updated":"2015-08-04 21:15:06.000000000","message":"Done","commit_id":"1095a8b7fa5d237e4ae2f9f972559aa1c622451f"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c9049c66886c47fb4fe78a74eba0d824a69bb082","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            self.rd_client.clusters.get(cluster_id)"},{"line_number":111,"context_line":"            asserts.fail("},{"line_number":112,"context_line":"                \"Cluster \u0027%s\u0027 still existed after %s seconds.\""},{"line_number":113,"context_line":"                % (cluster_id, self._time_since(t0)))"},{"line_number":114,"context_line":"        except exceptions.NotFound:"},{"line_number":115,"context_line":"            self.assert_client_code(404)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa1b9901_eb5c6eef","line":112,"range":{"start_line":112,"start_character":53,"end_line":112,"end_character":60},"updated":"2015-08-17 15:18:28.000000000","message":"_time_since already returns the value with a seconds suffix.","commit_id":"25c96d0be06a6582c7213f674ce2643a07d74f5b"}],"trove/tests/api/runners/negative_cluster_actions_runners.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c9049c66886c47fb4fe78a74eba0d824a69bb082","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            self._assert_cluster_create_raises(cluster_name, instances_def,"},{"line_number":35,"context_line":"                                               expected_http_code)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        # Create a cluster with mare than \u0027max_nodes\u0027."},{"line_number":38,"context_line":"        if max_nodes:"},{"line_number":39,"context_line":"            instances_def \u003d [self.build_flavor()] * (max_nodes + 1)"},{"line_number":40,"context_line":"            self._assert_cluster_create_raises(cluster_name, instances_def,"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa1b9901_cb816afd","line":37,"range":{"start_line":37,"start_character":32,"end_line":37,"end_character":36},"updated":"2015-08-17 15:18:28.000000000","message":"* more","commit_id":"25c96d0be06a6582c7213f674ce2643a07d74f5b"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c9049c66886c47fb4fe78a74eba0d824a69bb082","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _assert_cluster_create_raises(self, cluster_name, instances_def,"},{"line_number":57,"context_line":"                                      expected_http_code):"},{"line_number":58,"context_line":"        self.assert_raises(exceptions.BadRequest, expected_http_code,"},{"line_number":59,"context_line":"                           self.rd_client.clusters.create,"},{"line_number":60,"context_line":"                           cluster_name,"},{"line_number":61,"context_line":"                           self.instance_info.dbaas_datastore,"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa1b9901_cbe64ae8","line":58,"range":{"start_line":58,"start_character":27,"end_line":58,"end_character":48},"updated":"2015-08-17 15:18:28.000000000","message":"The exception should probably be passed in as an argument, similarly to the expected HTTP code.","commit_id":"25c96d0be06a6582c7213f674ce2643a07d74f5b"}],"trove/tests/api/runners/replication_runners.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c8f4cb87ecb955a20bbba7691ee8e15c0cdd0497","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        instance \u003d self._get_instance_info(instance_id)"},{"line_number":106,"context_line":"        self.assert_client_code()"},{"line_number":107,"context_line":"        CheckInstance(instance._info).slave_of()"},{"line_number":108,"context_line":"        asserts.assert_equal(master_id, instance._info[\u0027replica_of\u0027][\u0027id\u0027])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def _assert_is_master(self, instance_id, replica_ids):"},{"line_number":111,"context_line":"        instance \u003d self._get_instance_info(instance_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_cebe0864","line":108,"updated":"2015-07-31 22:13:47.000000000","message":"I guess we should include an explanatory error message.","commit_id":"1095a8b7fa5d237e4ae2f9f972559aa1c622451f"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"28327c8d3873528de89390172ee69cb6a8d12f7e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        instance \u003d self._get_instance_info(instance_id)"},{"line_number":106,"context_line":"        self.assert_client_code()"},{"line_number":107,"context_line":"        CheckInstance(instance._info).slave_of()"},{"line_number":108,"context_line":"        asserts.assert_equal(master_id, instance._info[\u0027replica_of\u0027][\u0027id\u0027])"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def _assert_is_master(self, instance_id, replica_ids):"},{"line_number":111,"context_line":"        instance \u003d self._get_instance_info(instance_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_6e47c84b","line":108,"in_reply_to":"3a50d1a3_cebe0864","updated":"2015-08-04 21:15:06.000000000","message":"Done","commit_id":"1095a8b7fa5d237e4ae2f9f972559aa1c622451f"}],"trove/tests/api/runners/vertica_runners.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c41c373466583d0e7da9eef09ce12c693f9b49a3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright [2015] Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_719ff05f","line":1,"updated":"2015-07-20 04:30:44.000000000","message":"HP copyright eh?","commit_id":"31aefef79f8efc0644fe30ff10d820b6bdd51070"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"1fe0a48b71948a6e303389e5c9f8731624d8923b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright [2015] Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_622327a8","line":1,"in_reply_to":"3a50d1a3_719ff05f","updated":"2015-07-22 04:50:29.000000000","message":"These were taken from the original Vertical test group by HP.","commit_id":"31aefef79f8efc0644fe30ff10d820b6bdd51070"}],"trove/tests/int_tests.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"5a1a4ed700eede07b86baab0d0075b903def748d","unresolved":false,"context_lines":[{"line_number":140,"context_line":"register([\"mongodb_group\"], instance_actions_groups, cluster_actions_groups)"},{"line_number":141,"context_line":"register([\"mysql_group\"], instance_actions_groups, replication_groups)"},{"line_number":142,"context_line":"register([\"redis_group\"], instance_actions_groups)"},{"line_number":143,"context_line":"register([\"vertica_group\"], instance_actions_groups, cluster_actions_groups)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_ab78b62c","line":143,"updated":"2015-08-21 21:38:56.000000000","message":"ah i think this answers one of the questions.","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"c0e929b2dc71848b15658ebc5452195a7e6665de","unresolved":false,"context_lines":[{"line_number":140,"context_line":"register([\"mongodb_group\"], instance_actions_groups, cluster_actions_groups)"},{"line_number":141,"context_line":"register([\"mysql_group\"], instance_actions_groups, replication_groups)"},{"line_number":142,"context_line":"register([\"redis_group\"], instance_actions_groups)"},{"line_number":143,"context_line":"register([\"vertica_group\"], instance_actions_groups, cluster_actions_groups)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_06175755","line":143,"in_reply_to":"fa1b9901_ab78b62c","updated":"2015-08-21 22:17:47.000000000","message":"Maybe the name of the datastore group is wrong - maybe it should be \u0027all_mongodb\u0027 or \u0027mongodb_supported\u0027","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"}],"trove/tests/scenario/groups/cluster_actions_group.py":[{"author":{"_account_id":13355,"name":"Edmond Kotowski","email":"ekotowski@gmail.com","username":"ekotowski"},"change_message_id":"445e0299d01ab2b5a6b8b123c730e6c12787a636","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @test(depends_on\u003d[cluster_create])"},{"line_number":39,"context_line":"    def cluster_delete(self):"},{"line_number":40,"context_line":"        self.test_runner.run_cluster_delete()"}],"source_content_type":"text/x-python","patch_set":32,"id":"da20952f_a1a3f09d","line":40,"updated":"2015-08-27 00:41:20.000000000","message":"Future fix: Delete the clusters using tearDown method. Do not need this for this patch just wanted us to remember.","commit_id":"16d91d9838cbbf7565bbcc2c8eed2ff3912da985"}],"trove/tests/scenario/groups/test_group.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"5a1a4ed700eede07b86baab0d0075b903def748d","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        return CONFIG.dbaas_datastore"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @classmethod"},{"line_number":48,"context_line":"    def _load_dynamic_class("},{"line_number":49,"context_line":"            cls, module_name, class_prefix, base_name, namespace):"},{"line_number":50,"context_line":"        \"\"\"Try to load a datastore specific class if it exists; use the"},{"line_number":51,"context_line":"        default otherwise."}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_eb9c6e5f","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":27},"updated":"2015-08-21 21:38:56.000000000","message":"why are these 3 \"private\" methods denoted as @classmethod?","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"c0e929b2dc71848b15658ebc5452195a7e6665de","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        return CONFIG.dbaas_datastore"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @classmethod"},{"line_number":48,"context_line":"    def _load_dynamic_class("},{"line_number":49,"context_line":"            cls, module_name, class_prefix, base_name, namespace):"},{"line_number":50,"context_line":"        \"\"\"Try to load a datastore specific class if it exists; use the"},{"line_number":51,"context_line":"        default otherwise."}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_883055ea","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":27},"in_reply_to":"fa1b9901_eb9c6e5f","updated":"2015-08-21 22:17:47.000000000","message":"No particular reason that I\u0027m aware of.  I think just because they\u0027re more like utility methods.  I can flip them to regular methods for now and we can move them to a utility class later if it seems like they\u0027re generally useful.","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"},{"author":{"_account_id":13355,"name":"Edmond Kotowski","email":"ekotowski@gmail.com","username":"ekotowski"},"change_message_id":"0af4e8222d1ab1ec64086228a43ab4219a1365cf","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, runner_module_name, runner_base_name, *args, **kwargs):"},{"line_number":32,"context_line":"        class_prefix \u003d self._get_test_datastore()"},{"line_number":33,"context_line":"        RUNNER_CLS \u003d self._load_dynamic_class("},{"line_number":34,"context_line":"            runner_module_name, class_prefix, runner_base_name,"},{"line_number":35,"context_line":"            self.TEST_RUNNERS_NS)"},{"line_number":36,"context_line":"        self._test_runner \u003d RUNNER_CLS(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":31,"id":"da20952f_7b4b49b1","line":33,"updated":"2015-08-26 23:26:28.000000000","message":"This can be lower case because its just used in the scope of the init. Having it in all CAPS makes it appear as its a constant that is used throughout the class. Same for HELPER_CLS.","commit_id":"885ba99d07a581eef5b1f561263f0d388bc6c344"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"f12385dd112f2298d3667790bd1e1694b6d8131b","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, runner_module_name, runner_base_name, *args, **kwargs):"},{"line_number":32,"context_line":"        class_prefix \u003d self._get_test_datastore()"},{"line_number":33,"context_line":"        RUNNER_CLS \u003d self._load_dynamic_class("},{"line_number":34,"context_line":"            runner_module_name, class_prefix, runner_base_name,"},{"line_number":35,"context_line":"            self.TEST_RUNNERS_NS)"},{"line_number":36,"context_line":"        self._test_runner \u003d RUNNER_CLS(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":31,"id":"da20952f_db3a95e7","line":33,"in_reply_to":"da20952f_7b4b49b1","updated":"2015-08-26 23:35:59.000000000","message":"Done","commit_id":"885ba99d07a581eef5b1f561263f0d388bc6c344"}],"trove/tests/scenario/runners/cluster_actions_runners.py":[{"author":{"_account_id":13355,"name":"Edmond Kotowski","email":"ekotowski@gmail.com","username":"ekotowski"},"change_message_id":"7846c46ba631ed227ca2e8bbf51e4f4e25777115","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            self.assert_client_code(404)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"class MongodbClusterActionsRunner(ClusterActionsRunner):"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def run_cluster_create(self, num_nodes\u003d3,"},{"line_number":123,"context_line":"                           expected_instance_states\u003d[\u0027BUILD\u0027, \u0027ACTIVE\u0027],"}],"source_content_type":"text/x-python","patch_set":31,"id":"da20952f_6c2cf6ab","line":120,"range":{"start_line":120,"start_character":11,"end_line":120,"end_character":13},"updated":"2015-08-26 22:47:47.000000000","message":"Should this be called MongoDBClusterActionRunner? I did a quick search and noticed we had other classes capitalizing DB such as MongoDBAdmin in the guest code and MongoDBConfigParser in trove common configurations, and MongoDBApp.","commit_id":"885ba99d07a581eef5b1f561263f0d388bc6c344"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"f12385dd112f2298d3667790bd1e1694b6d8131b","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            self.assert_client_code(404)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"class MongodbClusterActionsRunner(ClusterActionsRunner):"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def run_cluster_create(self, num_nodes\u003d3,"},{"line_number":123,"context_line":"                           expected_instance_states\u003d[\u0027BUILD\u0027, \u0027ACTIVE\u0027],"}],"source_content_type":"text/x-python","patch_set":31,"id":"da20952f_b637b8e2","line":120,"in_reply_to":"da20952f_3bd87153","updated":"2015-08-26 23:35:59.000000000","message":"Right, we wanted a deterministic (and easy to remember) way of converting the datastore name, for anyone needing to override the runners.","commit_id":"885ba99d07a581eef5b1f561263f0d388bc6c344"},{"author":{"_account_id":13355,"name":"Edmond Kotowski","email":"ekotowski@gmail.com","username":"ekotowski"},"change_message_id":"8ed171b144761a51c0edeecdb7d4a21548c65cf8","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            self.assert_client_code(404)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"class MongodbClusterActionsRunner(ClusterActionsRunner):"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def run_cluster_create(self, num_nodes\u003d3,"},{"line_number":123,"context_line":"                           expected_instance_states\u003d[\u0027BUILD\u0027, \u0027ACTIVE\u0027],"}],"source_content_type":"text/x-python","patch_set":31,"id":"da20952f_3bd87153","line":120,"in_reply_to":"da20952f_6c2cf6ab","updated":"2015-08-26 23:15:10.000000000","message":"Ignore this comment Mongodb is the way we want because we use .capitalize() in test_group.py.","commit_id":"885ba99d07a581eef5b1f561263f0d388bc6c344"}],"trove/tests/scenario/runners/negative_cluster_actions_runners.py":[{"author":{"_account_id":13355,"name":"Edmond Kotowski","email":"ekotowski@gmail.com","username":"ekotowski"},"change_message_id":"7846c46ba631ed227ca2e8bbf51e4f4e25777115","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                           instances\u003dinstances_def)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class MongodbNegativeClusterActionsRunner(NegativeClusterActionsRunner):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def run_create_constrained_size_cluster(self):"},{"line_number":72,"context_line":"        super(NegativeClusterActionsRunner,"}],"source_content_type":"text/x-python","patch_set":31,"id":"da20952f_2704d913","line":69,"range":{"start_line":69,"start_character":11,"end_line":69,"end_character":13},"updated":"2015-08-26 22:47:47.000000000","message":"Same comment whether this should be DB or not?","commit_id":"885ba99d07a581eef5b1f561263f0d388bc6c344"},{"author":{"_account_id":13355,"name":"Edmond Kotowski","email":"ekotowski@gmail.com","username":"ekotowski"},"change_message_id":"8ed171b144761a51c0edeecdb7d4a21548c65cf8","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                           instances\u003dinstances_def)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class MongodbNegativeClusterActionsRunner(NegativeClusterActionsRunner):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def run_create_constrained_size_cluster(self):"},{"line_number":72,"context_line":"        super(NegativeClusterActionsRunner,"}],"source_content_type":"text/x-python","patch_set":31,"id":"da20952f_9be73d12","line":69,"in_reply_to":"da20952f_2704d913","updated":"2015-08-26 23:15:10.000000000","message":"Ignore this comment.","commit_id":"885ba99d07a581eef5b1f561263f0d388bc6c344"}],"trove/tests/scenario/runners/test_runners.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"5a1a4ed700eede07b86baab0d0075b903def748d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.report \u003d CONFIG.get_report()"},{"line_number":72,"context_line":"        self._test_helper \u003d None"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @classmethod"},{"line_number":75,"context_line":"    def fail(cls, message):"},{"line_number":76,"context_line":"        asserts.fail(message)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @classmethod"},{"line_number":79,"context_line":"    def assert_is_sublist(cls, sub_list, full_list, message\u003dNone):"},{"line_number":80,"context_line":"        return cls.assert_true(set(sub_list).issubset(full_list), message)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @classmethod"},{"line_number":83,"context_line":"    def assert_unique(cls, iterable, message\u003dNone):"},{"line_number":84,"context_line":"        \"\"\"Assert that a given iterable contains only unique elements."},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        cls.assert_equal(len(iterable), len(set(iterable)), message)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @classmethod"},{"line_number":89,"context_line":"    def assert_true(cls, condition, message\u003dNone):"},{"line_number":90,"context_line":"        asserts.assert_true(condition, message\u003dmessage)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @classmethod"},{"line_number":93,"context_line":"    def assert_false(cls, condition, message\u003dNone):"},{"line_number":94,"context_line":"        asserts.assert_false(condition, message\u003dmessage)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @classmethod"},{"line_number":97,"context_line":"    def assert_is_none(cls, value, message\u003dNone):"},{"line_number":98,"context_line":"        asserts.assert_is_none(value, message\u003dmessage)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @classmethod"},{"line_number":101,"context_line":"    def assert_is_not_none(cls, value, message\u003dNone):"},{"line_number":102,"context_line":"        asserts.assert_is_not_none(value, message\u003dmessage)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @classmethod"},{"line_number":105,"context_line":"    def assert_list_elements_equal(cls, expected, actual, message\u003dNone):"},{"line_number":106,"context_line":"        \"\"\"Assert that two lists contain same elements"},{"line_number":107,"context_line":"        (with same multiplicities) ignoring the element order."},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        return cls.assert_equal(sorted(expected), sorted(actual), message)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @classmethod"},{"line_number":112,"context_line":"    def assert_equal(cls, expected, actual, message\u003dNone):"},{"line_number":113,"context_line":"        if not message:"},{"line_number":114,"context_line":"            message \u003d \u0027Unexpected value\u0027"},{"line_number":115,"context_line":"        try:"},{"line_number":116,"context_line":"            message +\u003d \": \u0027%s\u0027 (expected \u0027%s\u0027).\" % (actual, expected)"},{"line_number":117,"context_line":"        except TypeError:"},{"line_number":118,"context_line":"            pass"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        asserts.assert_equal(expected, actual, message\u003dmessage)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @classmethod"},{"line_number":123,"context_line":"    def assert_not_equal(cls, expected, actual, message\u003dNone):"},{"line_number":124,"context_line":"        if not message:"},{"line_number":125,"context_line":"            message \u003d \u0027Expected different value than\u0027"},{"line_number":126,"context_line":"        try:"},{"line_number":127,"context_line":"            message +\u003d \": \u0027%s\u0027.\" % expected"},{"line_number":128,"context_line":"        except TypeError:"},{"line_number":129,"context_line":"            pass"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        asserts.assert_not_equal(expected, actual, message\u003dmessage)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @property"},{"line_number":134,"context_line":"    def test_helper(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_0bed228e","line":131,"range":{"start_line":74,"start_character":4,"end_line":131,"end_character":67},"updated":"2015-08-21 21:38:56.000000000","message":"does not look like these need to be @classmethod? I looked it over and it looks like they are all called as a helper method i.e. self.assert(...) Am i missing something?","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"c0e929b2dc71848b15658ebc5452195a7e6665de","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.report \u003d CONFIG.get_report()"},{"line_number":72,"context_line":"        self._test_helper \u003d None"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @classmethod"},{"line_number":75,"context_line":"    def fail(cls, message):"},{"line_number":76,"context_line":"        asserts.fail(message)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @classmethod"},{"line_number":79,"context_line":"    def assert_is_sublist(cls, sub_list, full_list, message\u003dNone):"},{"line_number":80,"context_line":"        return cls.assert_true(set(sub_list).issubset(full_list), message)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @classmethod"},{"line_number":83,"context_line":"    def assert_unique(cls, iterable, message\u003dNone):"},{"line_number":84,"context_line":"        \"\"\"Assert that a given iterable contains only unique elements."},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        cls.assert_equal(len(iterable), len(set(iterable)), message)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @classmethod"},{"line_number":89,"context_line":"    def assert_true(cls, condition, message\u003dNone):"},{"line_number":90,"context_line":"        asserts.assert_true(condition, message\u003dmessage)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @classmethod"},{"line_number":93,"context_line":"    def assert_false(cls, condition, message\u003dNone):"},{"line_number":94,"context_line":"        asserts.assert_false(condition, message\u003dmessage)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @classmethod"},{"line_number":97,"context_line":"    def assert_is_none(cls, value, message\u003dNone):"},{"line_number":98,"context_line":"        asserts.assert_is_none(value, message\u003dmessage)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @classmethod"},{"line_number":101,"context_line":"    def assert_is_not_none(cls, value, message\u003dNone):"},{"line_number":102,"context_line":"        asserts.assert_is_not_none(value, message\u003dmessage)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @classmethod"},{"line_number":105,"context_line":"    def assert_list_elements_equal(cls, expected, actual, message\u003dNone):"},{"line_number":106,"context_line":"        \"\"\"Assert that two lists contain same elements"},{"line_number":107,"context_line":"        (with same multiplicities) ignoring the element order."},{"line_number":108,"context_line":"        \"\"\""},{"line_number":109,"context_line":"        return cls.assert_equal(sorted(expected), sorted(actual), message)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @classmethod"},{"line_number":112,"context_line":"    def assert_equal(cls, expected, actual, message\u003dNone):"},{"line_number":113,"context_line":"        if not message:"},{"line_number":114,"context_line":"            message \u003d \u0027Unexpected value\u0027"},{"line_number":115,"context_line":"        try:"},{"line_number":116,"context_line":"            message +\u003d \": \u0027%s\u0027 (expected \u0027%s\u0027).\" % (actual, expected)"},{"line_number":117,"context_line":"        except TypeError:"},{"line_number":118,"context_line":"            pass"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        asserts.assert_equal(expected, actual, message\u003dmessage)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @classmethod"},{"line_number":123,"context_line":"    def assert_not_equal(cls, expected, actual, message\u003dNone):"},{"line_number":124,"context_line":"        if not message:"},{"line_number":125,"context_line":"            message \u003d \u0027Expected different value than\u0027"},{"line_number":126,"context_line":"        try:"},{"line_number":127,"context_line":"            message +\u003d \": \u0027%s\u0027.\" % expected"},{"line_number":128,"context_line":"        except TypeError:"},{"line_number":129,"context_line":"            pass"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        asserts.assert_not_equal(expected, actual, message\u003dmessage)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @property"},{"line_number":134,"context_line":"    def test_helper(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa1b9901_48ed5d24","line":131,"range":{"start_line":74,"start_character":4,"end_line":131,"end_character":67},"in_reply_to":"fa1b9901_0bed228e","updated":"2015-08-21 22:17:47.000000000","message":"I needed to call one from RedisHelper: https://review.openstack.org/#/c/203274/23/trove/tests/scenario/helpers/redis_helper.py,cm","commit_id":"3beaaba1f8fd34b3ad8e61fb3c01e5bbe4ff6c60"}]}
