)]}'
{"trove/tests/api/runners/configuration_runners.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"328b31dd0997748a3c4188576c79ac28565a2cba","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        with CollectionCheck(\"configuration_values\", result.values) as check:"},{"line_number":219,"context_line":"            # check each item has the correct type according to the rules"},{"line_number":220,"context_line":"            for (item_key, item_val) in result.values.iteritems():"},{"line_number":221,"context_line":"                print(\"item_key: %s\" % item_key)"},{"line_number":222,"context_line":"                print(\"item_val: %s\" % item_val)"},{"line_number":223,"context_line":"                param \u003d self.rd_client.configuration_parameters.get_parameter("},{"line_number":224,"context_line":"                    self.instance_info.dbaas_datastore,"},{"line_number":225,"context_line":"                    self.instance_info.dbaas_datastore_version,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_d78268c8","line":222,"range":{"start_line":221,"start_character":16,"end_line":222,"end_character":48},"updated":"2015-08-17 18:06:17.000000000","message":"print does not print anything here. Should be using self.report.log(...) instead.","commit_id":"133b607beb69d4e2af674859e3d4eefb9f20c3ce"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"63ccd43fae7f4d559cec6ee0c3b38d0c3d517c27","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        with CollectionCheck(\"configuration_values\", result.values) as check:"},{"line_number":219,"context_line":"            # check each item has the correct type according to the rules"},{"line_number":220,"context_line":"            for (item_key, item_val) in result.values.iteritems():"},{"line_number":221,"context_line":"                print(\"item_key: %s\" % item_key)"},{"line_number":222,"context_line":"                print(\"item_val: %s\" % item_val)"},{"line_number":223,"context_line":"                param \u003d self.rd_client.configuration_parameters.get_parameter("},{"line_number":224,"context_line":"                    self.instance_info.dbaas_datastore,"},{"line_number":225,"context_line":"                    self.instance_info.dbaas_datastore_version,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_d95a9650","line":222,"range":{"start_line":221,"start_character":16,"end_line":222,"end_character":48},"in_reply_to":"fa1b9901_d78268c8","updated":"2015-08-22 17:19:43.000000000","message":"Yeah - I\u0027m sure we\u0027ll have to rebase this due to a merge conflict before we\u0027re done - we can change it then","commit_id":"133b607beb69d4e2af674859e3d4eefb9f20c3ce"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"328b31dd0997748a3c4188576c79ac28565a2cba","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def assert_configuration_show(self, config_id, config_name):"},{"line_number":198,"context_line":"        result \u003d self.rd_client.configurations.get(config_id)"},{"line_number":199,"context_line":"        self.assert_equal(config_id, result.id, \"Unexpected config id\")"},{"line_number":200,"context_line":"        self.assert_equal(config_name, result.name, \"Unexpected config name\")"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # check the result field types"},{"line_number":203,"context_line":"        with TypeCheck(\"configuration\", result) as check:"},{"line_number":204,"context_line":"            check.has_field(\"id\", basestring)"},{"line_number":205,"context_line":"            check.has_field(\"name\", basestring)"},{"line_number":206,"context_line":"            check.has_field(\"description\", basestring)"},{"line_number":207,"context_line":"            check.has_field(\"values\", dict)"},{"line_number":208,"context_line":"            check.has_field(\"created\", basestring)"},{"line_number":209,"context_line":"            check.has_field(\"updated\", basestring)"},{"line_number":210,"context_line":"            check.has_field(\"instance_count\", int)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        # check for valid timestamps"},{"line_number":213,"context_line":"        asserts.assert_true(self._is_valid_timestamp(result.created),"},{"line_number":214,"context_line":"                            \u0027Created timestamp %s is invalid\u0027 % result.created)"},{"line_number":215,"context_line":"        asserts.assert_true(self._is_valid_timestamp(result.updated),"},{"line_number":216,"context_line":"                            \u0027Updated timestamp %s is invalid\u0027 % result.updated)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        with CollectionCheck(\"configuration_values\", result.values) as check:"},{"line_number":219,"context_line":"            # check each item has the correct type according to the rules"},{"line_number":220,"context_line":"            for (item_key, item_val) in result.values.iteritems():"},{"line_number":221,"context_line":"                print(\"item_key: %s\" % item_key)"},{"line_number":222,"context_line":"                print(\"item_val: %s\" % item_val)"},{"line_number":223,"context_line":"                param \u003d self.rd_client.configuration_parameters.get_parameter("},{"line_number":224,"context_line":"                    self.instance_info.dbaas_datastore,"},{"line_number":225,"context_line":"                    self.instance_info.dbaas_datastore_version,"},{"line_number":226,"context_line":"                    item_key)"},{"line_number":227,"context_line":"                if param.type \u003d\u003d \u0027integer\u0027:"},{"line_number":228,"context_line":"                    check.has_element(item_key, int)"},{"line_number":229,"context_line":"                if param.type \u003d\u003d \u0027string\u0027:"},{"line_number":230,"context_line":"                    check.has_element(item_key, basestring)"},{"line_number":231,"context_line":"                if param.type \u003d\u003d \u0027boolean\u0027:"},{"line_number":232,"context_line":"                    check.has_element(item_key, bool)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def run_dynamic_conf_get_unauthorized_user("},{"line_number":235,"context_line":"            self, expected_exception\u003dexceptions.NotFound,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_574978cf","line":232,"range":{"start_line":199,"start_character":0,"end_line":232,"end_character":53},"updated":"2015-08-17 18:06:17.000000000","message":"I wonder if we could somehow reuse this validation code in \u0027assert_create_group\u0027.","commit_id":"133b607beb69d4e2af674859e3d4eefb9f20c3ce"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"63ccd43fae7f4d559cec6ee0c3b38d0c3d517c27","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def assert_configuration_show(self, config_id, config_name):"},{"line_number":198,"context_line":"        result \u003d self.rd_client.configurations.get(config_id)"},{"line_number":199,"context_line":"        self.assert_equal(config_id, result.id, \"Unexpected config id\")"},{"line_number":200,"context_line":"        self.assert_equal(config_name, result.name, \"Unexpected config name\")"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # check the result field types"},{"line_number":203,"context_line":"        with TypeCheck(\"configuration\", result) as check:"},{"line_number":204,"context_line":"            check.has_field(\"id\", basestring)"},{"line_number":205,"context_line":"            check.has_field(\"name\", basestring)"},{"line_number":206,"context_line":"            check.has_field(\"description\", basestring)"},{"line_number":207,"context_line":"            check.has_field(\"values\", dict)"},{"line_number":208,"context_line":"            check.has_field(\"created\", basestring)"},{"line_number":209,"context_line":"            check.has_field(\"updated\", basestring)"},{"line_number":210,"context_line":"            check.has_field(\"instance_count\", int)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        # check for valid timestamps"},{"line_number":213,"context_line":"        asserts.assert_true(self._is_valid_timestamp(result.created),"},{"line_number":214,"context_line":"                            \u0027Created timestamp %s is invalid\u0027 % result.created)"},{"line_number":215,"context_line":"        asserts.assert_true(self._is_valid_timestamp(result.updated),"},{"line_number":216,"context_line":"                            \u0027Updated timestamp %s is invalid\u0027 % result.updated)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        with CollectionCheck(\"configuration_values\", result.values) as check:"},{"line_number":219,"context_line":"            # check each item has the correct type according to the rules"},{"line_number":220,"context_line":"            for (item_key, item_val) in result.values.iteritems():"},{"line_number":221,"context_line":"                print(\"item_key: %s\" % item_key)"},{"line_number":222,"context_line":"                print(\"item_val: %s\" % item_val)"},{"line_number":223,"context_line":"                param \u003d self.rd_client.configuration_parameters.get_parameter("},{"line_number":224,"context_line":"                    self.instance_info.dbaas_datastore,"},{"line_number":225,"context_line":"                    self.instance_info.dbaas_datastore_version,"},{"line_number":226,"context_line":"                    item_key)"},{"line_number":227,"context_line":"                if param.type \u003d\u003d \u0027integer\u0027:"},{"line_number":228,"context_line":"                    check.has_element(item_key, int)"},{"line_number":229,"context_line":"                if param.type \u003d\u003d \u0027string\u0027:"},{"line_number":230,"context_line":"                    check.has_element(item_key, basestring)"},{"line_number":231,"context_line":"                if param.type \u003d\u003d \u0027boolean\u0027:"},{"line_number":232,"context_line":"                    check.has_element(item_key, bool)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def run_dynamic_conf_get_unauthorized_user("},{"line_number":235,"context_line":"            self, expected_exception\u003dexceptions.NotFound,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_39307207","line":232,"range":{"start_line":199,"start_character":0,"end_line":232,"end_character":53},"in_reply_to":"fa1b9901_574978cf","updated":"2015-08-22 17:19:43.000000000","message":"yeah, we should do that","commit_id":"133b607beb69d4e2af674859e3d4eefb9f20c3ce"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"63ccd43fae7f4d559cec6ee0c3b38d0c3d517c27","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        self.assert_client_code(http_code\u003dexpected_http_code,"},{"line_number":258,"context_line":"                                client\u003dself.other_client)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def _create_other_client(self):"},{"line_number":261,"context_line":"        if not self.other_client:"},{"line_number":262,"context_line":"            requirements \u003d Requirements(is_admin\u003dFalse)"},{"line_number":263,"context_line":"            other_user \u003d CONFIG.users.find_user("},{"line_number":264,"context_line":"                requirements, black_list\u003d[self.instance_info.user.auth_user])"},{"line_number":265,"context_line":"            self.other_client \u003d create_dbaas_client(other_user)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def _is_valid_timestamp(self, time_string):"},{"line_number":268,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_792eeaa6","line":265,"range":{"start_line":260,"start_character":0,"end_line":265,"end_character":63},"updated":"2015-08-22 17:19:43.000000000","message":"This is now in the base class - we can remove when we\u0027re forced to rebase","commit_id":"133b607beb69d4e2af674859e3d4eefb9f20c3ce"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"328b31dd0997748a3c4188576c79ac28565a2cba","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                requirements, black_list\u003d[self.instance_info.user.auth_user])"},{"line_number":265,"context_line":"            self.other_client \u003d create_dbaas_client(other_user)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def _is_valid_timestamp(self, time_string):"},{"line_number":268,"context_line":"        try:"},{"line_number":269,"context_line":"            datetime.strptime(time_string, \"%Y-%m-%dT%H:%M:%S\")"},{"line_number":270,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_d7d028cc","line":267,"updated":"2015-08-17 18:06:17.000000000","message":"Seems generally useful. Maybe we should move it into the base runner.","commit_id":"133b607beb69d4e2af674859e3d4eefb9f20c3ce"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"63ccd43fae7f4d559cec6ee0c3b38d0c3d517c27","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                requirements, black_list\u003d[self.instance_info.user.auth_user])"},{"line_number":265,"context_line":"            self.other_client \u003d create_dbaas_client(other_user)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def _is_valid_timestamp(self, time_string):"},{"line_number":268,"context_line":"        try:"},{"line_number":269,"context_line":"            datetime.strptime(time_string, \"%Y-%m-%dT%H:%M:%S\")"},{"line_number":270,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_b92482c6","line":267,"in_reply_to":"fa1b9901_d7d028cc","updated":"2015-08-22 17:19:43.000000000","message":"sounds good","commit_id":"133b607beb69d4e2af674859e3d4eefb9f20c3ce"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"328b31dd0997748a3c4188576c79ac28565a2cba","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def assert_configuration_list(self, configuration_list, expected_count):"},{"line_number":275,"context_line":"        self.assert_equal(expected_count, len(configuration_list),"},{"line_number":276,"context_line":"                          \u0027Unexpected number of configurations found\u0027)"},{"line_number":277,"context_line":"        if expected_count:"},{"line_number":278,"context_line":"            configuration_names \u003d [conf.name for conf in configuration_list]"},{"line_number":279,"context_line":"            if self.dynamic_group_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_17bc606b","line":276,"range":{"start_line":276,"start_character":48,"end_line":276,"end_character":62},"updated":"2015-08-17 18:06:17.000000000","message":"* instances","commit_id":"133b607beb69d4e2af674859e3d4eefb9f20c3ce"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"63ccd43fae7f4d559cec6ee0c3b38d0c3d517c27","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def assert_configuration_list(self, configuration_list, expected_count):"},{"line_number":275,"context_line":"        self.assert_equal(expected_count, len(configuration_list),"},{"line_number":276,"context_line":"                          \u0027Unexpected number of configurations found\u0027)"},{"line_number":277,"context_line":"        if expected_count:"},{"line_number":278,"context_line":"            configuration_names \u003d [conf.name for conf in configuration_list]"},{"line_number":279,"context_line":"            if self.dynamic_group_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_1916ce55","line":276,"range":{"start_line":276,"start_character":48,"end_line":276,"end_character":62},"in_reply_to":"fa1b9901_17bc606b","updated":"2015-08-22 17:19:43.000000000","message":"we\u0027re listing the configurations here, probably an ok message (we could add \u0027groups\u0027 to the end)","commit_id":"133b607beb69d4e2af674859e3d4eefb9f20c3ce"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"328b31dd0997748a3c4188576c79ac28565a2cba","unresolved":false,"context_lines":[{"line_number":495,"context_line":"        self.assert_instance_action(self.config_inst_id, expected_states,"},{"line_number":496,"context_line":"                                    expected_http_code)"},{"line_number":497,"context_line":"        inst \u003d self.rd_client.instances.get(self.config_inst_id)"},{"line_number":498,"context_line":"        self.assert_equal(self.config_id_for_inst, inst.configuration[\u0027id\u0027])"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    def run_delete_conf_instance("},{"line_number":501,"context_line":"            self, expected_states\u003d[\u0027SHUTDOWN\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_621ab819","line":498,"updated":"2015-08-17 18:06:17.000000000","message":"Maybe we could also \u0027assert_conf_instance_list\u0027 to make sure the instance is listed for the group.","commit_id":"133b607beb69d4e2af674859e3d4eefb9f20c3ce"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"63ccd43fae7f4d559cec6ee0c3b38d0c3d517c27","unresolved":false,"context_lines":[{"line_number":495,"context_line":"        self.assert_instance_action(self.config_inst_id, expected_states,"},{"line_number":496,"context_line":"                                    expected_http_code)"},{"line_number":497,"context_line":"        inst \u003d self.rd_client.instances.get(self.config_inst_id)"},{"line_number":498,"context_line":"        self.assert_equal(self.config_id_for_inst, inst.configuration[\u0027id\u0027])"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    def run_delete_conf_instance("},{"line_number":501,"context_line":"            self, expected_states\u003d[\u0027SHUTDOWN\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_d9085630","line":498,"in_reply_to":"fa1b9901_621ab819","updated":"2015-08-22 17:19:43.000000000","message":"yep, on the respin","commit_id":"133b607beb69d4e2af674859e3d4eefb9f20c3ce"}],"trove/tests/int_tests.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c838a724fd7adf1ab537013f102dadfc9e508c03","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"# Module based groups"},{"line_number":153,"context_line":"register([\"backup\"], backup_groups)"},{"line_number":154,"context_line":"register([\"cluster\"], cluster_actions_groups)"},{"line_number":155,"context_line":"register([\"configuration\"], configuration_groups)"},{"line_number":156,"context_line":"register([\"database\"], database_actions_group)"},{"line_number":157,"context_line":"register([\"instance_actions\"], instance_actions_groups)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_1ec72c97","line":154,"updated":"2015-11-10 22:33:53.000000000","message":"I just noticed that the cluster group (the current HEAD) includes basic instance action tests. It\u0027s probably not necessary. The cluster tests do not require a standalone instance.","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"}],"trove/tests/scenario/groups/configuration_group.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ce211b0dd5833dad7679f745b78e7acf540dbee2","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @test"},{"line_number":35,"context_line":"    def create_bad_group(self):"},{"line_number":36,"context_line":"        \"\"\"Ensure a group with bad entries fails create.\"\"\""},{"line_number":37,"context_line":"        self.test_runner.run_create_bad_group()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @test"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_1fef00b2","line":36,"updated":"2015-09-23 22:12:07.000000000","message":"I was first bit confused about the difference from \u0027run_create_invalid_groups\u0027, but then realized this just creates a group with an unknown property. Maybe the comment should say it explicitly.","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ce211b0dd5833dad7679f745b78e7acf540dbee2","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                      update_dynamic_group, update_non_dynamic_group])"},{"line_number":200,"context_line":"    def create_instance_with_conf(self):"},{"line_number":201,"context_line":"        \"\"\"Test create instance with conf group.\"\"\""},{"line_number":202,"context_line":"        self.test_runner.run_create_instance_with_conf()"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    @test(depends_on\u003d[create_instance_with_conf],"},{"line_number":205,"context_line":"          runs_after\u003d[create_dynamic_group, create_non_dynamic_group,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_30b3114f","line":202,"range":{"start_line":202,"start_character":8,"end_line":202,"end_character":56},"updated":"2015-09-23 22:12:07.000000000","message":"[note] This should be eventually obtained from the patch \u0027create\u0027 int-tests patch once it merges. (by loading it dynamically in this test_group and calling that runner - see for instance https://review.openstack.org/#/c/217371/7/trove/tests/scenario/groups/user_actions_group.py,cm )","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ce211b0dd5833dad7679f745b78e7acf540dbee2","unresolved":false,"context_lines":[{"line_number":206,"context_line":"          update_dynamic_group, update_non_dynamic_group])"},{"line_number":207,"context_line":"    def wait_for_conf_instance(self):"},{"line_number":208,"context_line":"        \"\"\"Test create instance with conf group completes.\"\"\""},{"line_number":209,"context_line":"        self.test_runner.run_wait_for_conf_instance()"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    @test(depends_on\u003d[wait_for_conf_instance])"},{"line_number":212,"context_line":"    def delete_conf_instance(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_7094298a","line":209,"range":{"start_line":209,"start_character":8,"end_line":209,"end_character":53},"updated":"2015-09-23 22:12:07.000000000","message":"ditto","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ce211b0dd5833dad7679f745b78e7acf540dbee2","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    @test(depends_on\u003d[wait_for_conf_instance])"},{"line_number":212,"context_line":"    def delete_conf_instance(self):"},{"line_number":213,"context_line":"        \"\"\"Test delete instance with conf group.\"\"\""},{"line_number":214,"context_line":"        self.test_runner.run_delete_conf_instance()"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    @test(depends_on\u003d[create_dynamic_group],"},{"line_number":217,"context_line":"          runs_after\u003d[list_configuration_groups, detach_dynamic_group,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_d0e9751b","line":214,"range":{"start_line":214,"start_character":9,"end_line":214,"end_character":51},"updated":"2015-09-23 22:12:07.000000000","message":"ditto","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"}],"trove/tests/scenario/helpers/test_helper.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ce211b0dd5833dad7679f745b78e7acf540dbee2","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        \"\"\"Return a definition of a dynamic configuration group."},{"line_number":215,"context_line":"        A dynamic group should contain only properties that do not require"},{"line_number":216,"context_line":"        database restart."},{"line_number":217,"context_line":"        Return an empty dict if the datastore does not have any."},{"line_number":218,"context_line":"        \"\"\""},{"line_number":219,"context_line":"        return None"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_ff31eca2","line":217,"updated":"2015-09-23 22:12:07.000000000","message":"I think these comments should also explain the \u0027None\u0027 value.","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ce211b0dd5833dad7679f745b78e7acf540dbee2","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        \"\"\"Return a definition of a non-dynamic configuration group."},{"line_number":223,"context_line":"        A non-dynamic group has to include at least one property that requires"},{"line_number":224,"context_line":"        database restart."},{"line_number":225,"context_line":"        Return an empty dict if the datastore does not have any."},{"line_number":226,"context_line":"        \"\"\""},{"line_number":227,"context_line":"        return None"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_bf27f461","line":225,"updated":"2015-09-23 22:12:07.000000000","message":"ditto","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ce211b0dd5833dad7679f745b78e7acf540dbee2","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def get_invalid_groups(self):"},{"line_number":230,"context_line":"        \"\"\"Return a list of configuration groups with invalid values."},{"line_number":231,"context_line":"        An empty list indicates that no \u0027invalid\u0027 tests should be run."},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_5f21f84b","line":231,"updated":"2015-09-23 22:12:07.000000000","message":"ditto","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"}],"trove/tests/scenario/runners/configuration_runners.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ce211b0dd5833dad7679f745b78e7acf540dbee2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.non_dynamic_group_id \u003d None"},{"line_number":39,"context_line":"        self.non_dynamic_inst_count \u003d 0"},{"line_number":40,"context_line":"        self.initial_group_count \u003d 0"},{"line_number":41,"context_line":"        self.additional_group_count \u003d 0"},{"line_number":42,"context_line":"        self.other_client \u003d None"},{"line_number":43,"context_line":"        self.config_id_for_inst \u003d None"},{"line_number":44,"context_line":"        self.config_inst_id \u003d None"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_b0cba1a3","line":41,"range":{"start_line":41,"start_character":13,"end_line":41,"end_character":35},"updated":"2015-09-23 22:12:07.000000000","message":"\u0027created_group_count\u0027 or so may be more self-explanatory...","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ce211b0dd5833dad7679f745b78e7acf540dbee2","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def run_delete_non_existent_group("},{"line_number":81,"context_line":"            self, expected_exception\u003dexceptions.NotFound,"},{"line_number":82,"context_line":"            expected_http_code\u003d404):"},{"line_number":83,"context_line":"        self.assert_group_delete_failure("},{"line_number":84,"context_line":"            None, expected_exception, expected_http_code)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def run_delete_bad_group_id("}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_5f0d783c","line":83,"range":{"start_line":83,"start_character":13,"end_line":83,"end_character":40},"updated":"2015-09-23 22:12:07.000000000","message":"[style] The \u0027assert_group_delete_failure\u0027 method should be probably moved right after this one.","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ce211b0dd5833dad7679f745b78e7acf540dbee2","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    def run_attach_non_existent_group("},{"line_number":93,"context_line":"            self, expected_exception\u003dexceptions.NotFound,"},{"line_number":94,"context_line":"            expected_http_code\u003d404):"},{"line_number":95,"context_line":"        self.assert_instance_modify_failure("},{"line_number":96,"context_line":"            self.instance_info.id, generate_uuid(),"},{"line_number":97,"context_line":"            expected_exception, expected_http_code)"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_9ab0fefe","line":95,"range":{"start_line":95,"start_character":13,"end_line":95,"end_character":43},"updated":"2015-09-23 22:12:07.000000000","message":"[style] ditto","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ce211b0dd5833dad7679f745b78e7acf540dbee2","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                if param.type \u003d\u003d \u0027boolean\u0027:"},{"line_number":250,"context_line":"                    check.has_element(item_key, bool)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def _is_valid_timestamp(self, time_string):"},{"line_number":253,"context_line":"        try:"},{"line_number":254,"context_line":"            datetime.strptime(time_string, \"%Y-%m-%dT%H:%M:%S\")"},{"line_number":255,"context_line":"        except ValueError:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_9aef9e1c","line":252,"updated":"2015-09-23 22:12:07.000000000","message":"This may be a good candidate for a base-class method, although I cannot recall if we are using it anywhere else at the moment.","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ce211b0dd5833dad7679f745b78e7acf540dbee2","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                                               expected_exception,"},{"line_number":271,"context_line":"                                               expected_http_code)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def assert_conf_get_unauthorized_user("},{"line_number":274,"context_line":"            self, config_id, expected_exception\u003dexceptions.NotFound,"},{"line_number":275,"context_line":"            expected_http_code\u003d404):"},{"line_number":276,"context_line":"        self._create_other_client()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_9a7ebe19","line":273,"range":{"start_line":273,"start_character":8,"end_line":273,"end_character":41},"updated":"2015-09-23 22:12:07.000000000","message":"What if the group does not exists and the ID is therefore None. It may even pass, but for a wrong reason. We should probably catch it in the callers and print out a message like in the other tests.\n\nAlso, since it does not really matter in this case if the group is dynamic or not, we could merge the two tests (\u0027run_dynamic_conf_get_unauthorized_user\u0027 and \u0027run_non_dynamic_conf_get_unauthorized_user\u0027) in a way similar to what we do in \u0027assert_configuration_list\u0027","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"ce211b0dd5833dad7679f745b78e7acf540dbee2","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        # on it explicitly, instead of depending on \u0027assert_raises\u0027"},{"line_number":282,"context_line":"        self.assert_client_code(expected_http_code, client\u003dself.other_client)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def _create_other_client(self):"},{"line_number":285,"context_line":"        if not self.other_client:"},{"line_number":286,"context_line":"            requirements \u003d Requirements(is_admin\u003dFalse)"},{"line_number":287,"context_line":"            other_user \u003d CONFIG.users.find_user("}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_7ae5ea06","line":284,"updated":"2015-09-23 22:12:07.000000000","message":"This smells like another potential candidate for the base...","commit_id":"18c8dc0cd10158d929fde922ae5e7cfe33c56017"}]}
