)]}'
{"rally/plugins/openstack/scenarios/neutron/loadbalancer_v1.py":[{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"7cf27462396994de1da30c01ef0bbc158e53a419","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        :param pool_create_args: dict, POST /lb/pools request options"},{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        pool_create_args \u003d pool_create_args or {}"},{"line_number":37,"context_line":"        self._check_deployment_supports_extension(\"lbaas\")"},{"line_number":38,"context_line":"        networks \u003d self.context.get(\"tenant\", {}).get(\"networks\", [])"},{"line_number":39,"context_line":"        self._create_v1_pools(networks, **pool_create_args)"},{"line_number":40,"context_line":"        self._list_v1_pools()"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_4923c805","line":37,"updated":"2015-08-28 09:51:04.000000000","message":"this is not a good idea, this validation would run 500 times if operator have set times\u003d500\n\nlook at required_service which could be a good example","commit_id":"688c72b3b1abc621d29c312b062fd8e858092c20"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"9fd6b081cf00e70750937ed954a3620720e9d230","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        :param pool_create_args: dict, POST /lb/pools request options"},{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        pool_create_args \u003d pool_create_args or {}"},{"line_number":37,"context_line":"        self._check_deployment_supports_extension(\"lbaas\")"},{"line_number":38,"context_line":"        networks \u003d self.context.get(\"tenant\", {}).get(\"networks\", [])"},{"line_number":39,"context_line":"        self._create_v1_pools(networks, **pool_create_args)"},{"line_number":40,"context_line":"        self._list_v1_pools()"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_9fbb52e5","line":37,"in_reply_to":"da20952f_1c60b000","updated":"2015-08-28 10:10:26.000000000","message":"yep, LIKE the required_service :)","commit_id":"688c72b3b1abc621d29c312b062fd8e858092c20"},{"author":{"_account_id":14884,"name":"Kiran Ranganath","email":"kiran7193@gmail.com","username":"kiran"},"change_message_id":"1db86854f60d0dbe8fe243220e82cace21de2bf8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        :param pool_create_args: dict, POST /lb/pools request options"},{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        pool_create_args \u003d pool_create_args or {}"},{"line_number":37,"context_line":"        self._check_deployment_supports_extension(\"lbaas\")"},{"line_number":38,"context_line":"        networks \u003d self.context.get(\"tenant\", {}).get(\"networks\", [])"},{"line_number":39,"context_line":"        self._create_v1_pools(networks, **pool_create_args)"},{"line_number":40,"context_line":"        self._list_v1_pools()"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_1c60b000","line":37,"in_reply_to":"da20952f_1c6f502c","updated":"2015-08-28 10:03:14.000000000","message":"Ok. Now I get it. you want to implement it like required services??","commit_id":"688c72b3b1abc621d29c312b062fd8e858092c20"},{"author":{"_account_id":14884,"name":"Kiran Ranganath","email":"kiran7193@gmail.com","username":"kiran"},"change_message_id":"ead77ff780449e10a54d6848e89ce3b6098bc28f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        :param pool_create_args: dict, POST /lb/pools request options"},{"line_number":35,"context_line":"        \"\"\""},{"line_number":36,"context_line":"        pool_create_args \u003d pool_create_args or {}"},{"line_number":37,"context_line":"        self._check_deployment_supports_extension(\"lbaas\")"},{"line_number":38,"context_line":"        networks \u003d self.context.get(\"tenant\", {}).get(\"networks\", [])"},{"line_number":39,"context_line":"        self._create_v1_pools(networks, **pool_create_args)"},{"line_number":40,"context_line":"        self._list_v1_pools()"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_1c6f502c","line":37,"in_reply_to":"da20952f_4923c805","updated":"2015-08-28 09:59:35.000000000","message":"required service will check only if the service is enabled. We are checking if an extension in a service is enabled.","commit_id":"688c72b3b1abc621d29c312b062fd8e858092c20"}],"rally/task/validation.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"a7fac5f22b7c9fde0de22b06e6dbf582e6ae922a","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    :param required_extensions: list of Neutron extensions"},{"line_number":503,"context_line":"    \"\"\""},{"line_number":504,"context_line":"    admin_client \u003d osclients.Clients("},{"line_number":505,"context_line":"        objects.Endpoint(**deployment[\"admin\"])).neutron()"},{"line_number":506,"context_line":"    extensions \u003d admin_client.list_extensions().get(\"extensions\", [])"},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_2c96d494","line":504,"updated":"2015-09-02 12:37:15.000000000","message":"admin is not required http://paste.openstack.org/show/441075/","commit_id":"e6c3e445ad658b2aca9815989539dcf1305283ac"},{"author":{"_account_id":14884,"name":"Kiran Ranganath","email":"kiran7193@gmail.com","username":"kiran"},"change_message_id":"9aa34921d33cc30125a2c09d3083188291022e1f","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    :param required_extensions: list of Neutron extensions"},{"line_number":503,"context_line":"    \"\"\""},{"line_number":504,"context_line":"    admin_client \u003d osclients.Clients("},{"line_number":505,"context_line":"        objects.Endpoint(**deployment[\"admin\"])).neutron()"},{"line_number":506,"context_line":"    extensions \u003d admin_client.list_extensions().get(\"extensions\", [])"},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_0f5f420f","line":504,"in_reply_to":"da20952f_2c96d494","updated":"2015-09-02 12:52:08.000000000","message":"Done","commit_id":"e6c3e445ad658b2aca9815989539dcf1305283ac"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"56e466fb84c83e1fe356178dcd9d6a68e7dcadce","unresolved":false,"context_lines":[{"line_number":499,"context_line":"                                *required_extensions):"},{"line_number":500,"context_line":"    \"\"\"Validator checks if the specified Neutron extension is available"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    :param required_extensions: list of Neutron extensions"},{"line_number":503,"context_line":"    \"\"\""},{"line_number":504,"context_line":"    extensions \u003d clients.neutron().list_extensions().get(\"extensions\", [])"},{"line_number":505,"context_line":"    for extension in required_extensions:"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_fefa2274","line":502,"updated":"2015-09-07 08:19:58.000000000","message":"actually this is tuple type here, but it doesn\u0027t matter","commit_id":"26c153a13b7a9de0f839ef6b42d8e3a071334948"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"56e466fb84c83e1fe356178dcd9d6a68e7dcadce","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    :param required_extensions: list of Neutron extensions"},{"line_number":503,"context_line":"    \"\"\""},{"line_number":504,"context_line":"    extensions \u003d clients.neutron().list_extensions().get(\"extensions\", [])"},{"line_number":505,"context_line":"    for extension in required_extensions:"},{"line_number":506,"context_line":"        if not any(ext.get(\"alias\") \u003d\u003d extension for ext in extensions):"},{"line_number":507,"context_line":"            msg \u003d (_(\"Neutron extension %s is not configured\") % extension)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_de42beaa","line":504,"updated":"2015-09-07 08:19:58.000000000","message":"# it is more readable\n\naliases \u003d map(lambda x:x[\u0027alias\u0027], extensions)\nfor ext in required_extensions:\n    if ext not in aliases:\n    return ...","commit_id":"26c153a13b7a9de0f839ef6b42d8e3a071334948"},{"author":{"_account_id":14884,"name":"Kiran Ranganath","email":"kiran7193@gmail.com","username":"kiran"},"change_message_id":"74944a65f62d31ca0ff003143b470bdfc72a47f9","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    :param required_extensions: list of Neutron extensions"},{"line_number":503,"context_line":"    \"\"\""},{"line_number":504,"context_line":"    extensions \u003d clients.neutron().list_extensions().get(\"extensions\", [])"},{"line_number":505,"context_line":"    for extension in required_extensions:"},{"line_number":506,"context_line":"        if not any(ext.get(\"alias\") \u003d\u003d extension for ext in extensions):"},{"line_number":507,"context_line":"            msg \u003d (_(\"Neutron extension %s is not configured\") % extension)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_6760a701","line":504,"in_reply_to":"da20952f_de42beaa","updated":"2015-09-08 05:49:33.000000000","message":"Done","commit_id":"26c153a13b7a9de0f839ef6b42d8e3a071334948"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"490510943271ff69454ee3356db555e1c01d3100","unresolved":false,"context_lines":[{"line_number":505,"context_line":"    aliases \u003d map(lambda x: x[\"alias\"], extensions)"},{"line_number":506,"context_line":"    for extension in required_extensions:"},{"line_number":507,"context_line":"        if extension not in aliases:"},{"line_number":508,"context_line":"            msg \u003d (_(\"Neutron extension %s is not configured\") % extension)"},{"line_number":509,"context_line":"            return ValidationResult(False, msg)"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_62f72cd5","line":508,"updated":"2015-09-08 10:14:37.000000000","message":"Lets make a list of all not configured extensions. And print in message all of them.","commit_id":"a1dc99affe6241746e56ae9236a783192e94d948"}],"tests/unit/task/test_validation.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"05f1fac11526f62b7e5b9e8ce888f84a823414eb","unresolved":false,"context_lines":[{"line_number":789,"context_line":"        result \u003d validator({}, clients, {\"admin\": {\"foo\": \"bar\"}})"},{"line_number":790,"context_line":"        self.assertFalse(result.is_valid, result.msg)"},{"line_number":791,"context_line":""},{"line_number":792,"context_line":"    def test_required_neutron_service(self):"},{"line_number":793,"context_line":"        validator \u003d self._unwrap_validator("},{"line_number":794,"context_line":"            validation.required_neutron_extensions,"},{"line_number":795,"context_line":"            \"invalid-extension\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_f24d1cc5","line":792,"updated":"2015-09-02 11:31:10.000000000","message":"s/service/extensions/","commit_id":"6a5fc66a9cc41ddf17e384f9477d15e9546995ea"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"05f1fac11526f62b7e5b9e8ce888f84a823414eb","unresolved":false,"context_lines":[{"line_number":799,"context_line":"                return_value\u003d{\"extensions\": [{\"alias\": \"valid_extension\"}]})"},{"line_number":800,"context_line":"            client.return_value \u003d neutron_client"},{"line_number":801,"context_line":""},{"line_number":802,"context_line":"            deployment \u003d {\"admin\": {\"auth_url\": \"fake_endpoint\","},{"line_number":803,"context_line":"                                    \"username\": \"username\","},{"line_number":804,"context_line":"                                    \"password\": \"password\"}}"},{"line_number":805,"context_line":"            result \u003d validator({}, None, deployment)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_923f00d6","line":802,"updated":"2015-09-02 11:31:10.000000000","message":"It seems that you do not need detailed deployment data for this test case - empty dict should be enough","commit_id":"6a5fc66a9cc41ddf17e384f9477d15e9546995ea"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"05f1fac11526f62b7e5b9e8ce888f84a823414eb","unresolved":false,"context_lines":[{"line_number":803,"context_line":"                                    \"username\": \"username\","},{"line_number":804,"context_line":"                                    \"password\": \"password\"}}"},{"line_number":805,"context_line":"            result \u003d validator({}, None, deployment)"},{"line_number":806,"context_line":"            self.assertFalse(result.is_valid, result.msg)"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"    def test_required_cinder_services(self):"},{"line_number":809,"context_line":"        validator \u003d self._unwrap_validator("}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_92486089","line":806,"updated":"2015-09-02 11:31:10.000000000","message":"Please add a test case for valid result","commit_id":"6a5fc66a9cc41ddf17e384f9477d15e9546995ea"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"492f584629408675e822341958c26d588a1fc92b","unresolved":false,"context_lines":[{"line_number":797,"context_line":"            client.list_extensions \u003d mock.Mock("},{"line_number":798,"context_line":"                return_value\u003d{\"extensions\": [{\"alias\": \"valid_extension\"}]})"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"            deployment \u003d {\"foo\": {\"auth_url\": \"fake_endpoint\","},{"line_number":801,"context_line":"                                  \"username\": \"username\","},{"line_number":802,"context_line":"                                  \"password\": \"password\"}}"},{"line_number":803,"context_line":"            result \u003d validator({}, client, deployment)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_2577c7d5","line":800,"updated":"2015-09-02 13:46:51.000000000","message":"this variable is useless since it is not used, use empty dict or even something like \"foo_deployment\" instead:\n\n result \u003d validator({}, client, \"foo_deployment\")","commit_id":"414e6376aeb3d25661132ae5177322ba703bf7c7"},{"author":{"_account_id":14884,"name":"Kiran Ranganath","email":"kiran7193@gmail.com","username":"kiran"},"change_message_id":"f85c782aa2eed31392af47222f35097287c32ef2","unresolved":false,"context_lines":[{"line_number":797,"context_line":"            client.list_extensions \u003d mock.Mock("},{"line_number":798,"context_line":"                return_value\u003d{\"extensions\": [{\"alias\": \"valid_extension\"}]})"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"            deployment \u003d {\"foo\": {\"auth_url\": \"fake_endpoint\","},{"line_number":801,"context_line":"                                  \"username\": \"username\","},{"line_number":802,"context_line":"                                  \"password\": \"password\"}}"},{"line_number":803,"context_line":"            result \u003d validator({}, client, deployment)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_bb30d89f","line":800,"in_reply_to":"da20952f_2577c7d5","updated":"2015-09-02 14:16:32.000000000","message":"Done","commit_id":"414e6376aeb3d25661132ae5177322ba703bf7c7"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"492f584629408675e822341958c26d588a1fc92b","unresolved":false,"context_lines":[{"line_number":811,"context_line":"            client.list_extensions \u003d mock.Mock("},{"line_number":812,"context_line":"                return_value\u003d{\"extensions\": [{\"alias\": \"valid_extension\"}]})"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"            deployment \u003d {\"foo\": {\"auth_url\": \"fake_endpoint\","},{"line_number":815,"context_line":"                                  \"username\": \"username\","},{"line_number":816,"context_line":"                                  \"password\": \"password\"}}"},{"line_number":817,"context_line":"            result \u003d validator({}, client, deployment)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_a5499790","line":814,"updated":"2015-09-02 13:46:51.000000000","message":"same here, this var is not in use at all","commit_id":"414e6376aeb3d25661132ae5177322ba703bf7c7"},{"author":{"_account_id":14884,"name":"Kiran Ranganath","email":"kiran7193@gmail.com","username":"kiran"},"change_message_id":"f85c782aa2eed31392af47222f35097287c32ef2","unresolved":false,"context_lines":[{"line_number":811,"context_line":"            client.list_extensions \u003d mock.Mock("},{"line_number":812,"context_line":"                return_value\u003d{\"extensions\": [{\"alias\": \"valid_extension\"}]})"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"            deployment \u003d {\"foo\": {\"auth_url\": \"fake_endpoint\","},{"line_number":815,"context_line":"                                  \"username\": \"username\","},{"line_number":816,"context_line":"                                  \"password\": \"password\"}}"},{"line_number":817,"context_line":"            result \u003d validator({}, client, deployment)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_7b2a402e","line":814,"in_reply_to":"da20952f_a5499790","updated":"2015-09-02 14:16:32.000000000","message":"Done","commit_id":"414e6376aeb3d25661132ae5177322ba703bf7c7"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"8b713eb572ea3a69b93c1fbf761f58a1c0f9e83a","unresolved":false,"context_lines":[{"line_number":793,"context_line":"        validator \u003d self._unwrap_validator("},{"line_number":794,"context_line":"            validation.required_neutron_extensions,"},{"line_number":795,"context_line":"            \"invalid-extension\")"},{"line_number":796,"context_line":"        with mock.patch.object(rally.osclients.Clients, \"neutron\") as client:"},{"line_number":797,"context_line":"            client.list_extensions \u003d mock.Mock("},{"line_number":798,"context_line":"                return_value\u003d{\"extensions\": [{\"alias\": \"valid_extension\"}]})"},{"line_number":799,"context_line":"            result \u003d validator({}, client, {})"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_474d1a98","line":796,"updated":"2015-09-02 16:02:57.000000000","message":"1) this mock.patch is not required since we can make this much simpler (see my example below)\n\n2) mocked object is incorrect\n\nCorrect example:\n\n    def test_required_neutron_extensions(self):\n        validator \u003d self._unwrap_validator(\n            validation.required_neutron_extensions,\n            \"absent_extension\")\n        clients \u003d mock.Mock()\n        clients.neutron.return_value.list_extensions.return_value \u003d (\n            {\"extensions\": [{\"alias\": \"existing_extension\"}]})\n        result \u003d validator({}, clients, {})\n        self.assertFalse(result.is_valid, result.msg)","commit_id":"2a6071999b52344bb5f5a072d8363f2c28393650"},{"author":{"_account_id":14884,"name":"Kiran Ranganath","email":"kiran7193@gmail.com","username":"kiran"},"change_message_id":"0dfbe6516a6e3ebdafe38f31847e48562fc5877d","unresolved":false,"context_lines":[{"line_number":793,"context_line":"        validator \u003d self._unwrap_validator("},{"line_number":794,"context_line":"            validation.required_neutron_extensions,"},{"line_number":795,"context_line":"            \"invalid-extension\")"},{"line_number":796,"context_line":"        with mock.patch.object(rally.osclients.Clients, \"neutron\") as client:"},{"line_number":797,"context_line":"            client.list_extensions \u003d mock.Mock("},{"line_number":798,"context_line":"                return_value\u003d{\"extensions\": [{\"alias\": \"valid_extension\"}]})"},{"line_number":799,"context_line":"            result \u003d validator({}, client, {})"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_aa05807a","line":796,"in_reply_to":"da20952f_474d1a98","updated":"2015-09-04 11:50:14.000000000","message":"Done","commit_id":"2a6071999b52344bb5f5a072d8363f2c28393650"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"8b713eb572ea3a69b93c1fbf761f58a1c0f9e83a","unresolved":false,"context_lines":[{"line_number":799,"context_line":"            result \u003d validator({}, client, {})"},{"line_number":800,"context_line":"            self.assertFalse(result.is_valid, result.msg)"},{"line_number":801,"context_line":""},{"line_number":802,"context_line":"    def test_required_neutron_extensions_valid(self):"},{"line_number":803,"context_line":"        validator \u003d self._unwrap_validator("},{"line_number":804,"context_line":"            validation.required_neutron_extensions,"},{"line_number":805,"context_line":"            \"invalid-extension\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_ea567305","line":802,"updated":"2015-09-02 16:02:57.000000000","message":"Please rewrite this test and one above into single one with DDT\n\nUse ddt.data like that:\n({\"ext_validate\": \"existing_extension\",\n  \"ext_actually\": [\"existing_extension\"],\n  \"validation_result\": True},\n {\"ext_validate\": \"absent_extension\",\n  \"ext_actually\": [\"existing_extension\"],\n  \"validation_result\": False})","commit_id":"2a6071999b52344bb5f5a072d8363f2c28393650"},{"author":{"_account_id":14884,"name":"Kiran Ranganath","email":"kiran7193@gmail.com","username":"kiran"},"change_message_id":"0dfbe6516a6e3ebdafe38f31847e48562fc5877d","unresolved":false,"context_lines":[{"line_number":799,"context_line":"            result \u003d validator({}, client, {})"},{"line_number":800,"context_line":"            self.assertFalse(result.is_valid, result.msg)"},{"line_number":801,"context_line":""},{"line_number":802,"context_line":"    def test_required_neutron_extensions_valid(self):"},{"line_number":803,"context_line":"        validator \u003d self._unwrap_validator("},{"line_number":804,"context_line":"            validation.required_neutron_extensions,"},{"line_number":805,"context_line":"            \"invalid-extension\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_ca0a348a","line":802,"in_reply_to":"da20952f_ea567305","updated":"2015-09-04 11:50:14.000000000","message":"Done","commit_id":"2a6071999b52344bb5f5a072d8363f2c28393650"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"8b713eb572ea3a69b93c1fbf761f58a1c0f9e83a","unresolved":false,"context_lines":[{"line_number":807,"context_line":"            client.list_extensions \u003d mock.Mock("},{"line_number":808,"context_line":"                return_value\u003d{\"extensions\": [{\"alias\": \"valid_extension\"}]})"},{"line_number":809,"context_line":"            result \u003d validator({}, client, {})"},{"line_number":810,"context_line":"            self.assertTrue(result, None)"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"    def test_required_cinder_services(self):"},{"line_number":813,"context_line":"        validator \u003d self._unwrap_validator("}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_47151a99","line":810,"updated":"2015-09-02 16:02:57.000000000","message":"As you can see at L805 (we have \"invalid-extension\"), this result can not be True","commit_id":"2a6071999b52344bb5f5a072d8363f2c28393650"},{"author":{"_account_id":14884,"name":"Kiran Ranganath","email":"kiran7193@gmail.com","username":"kiran"},"change_message_id":"0dfbe6516a6e3ebdafe38f31847e48562fc5877d","unresolved":false,"context_lines":[{"line_number":807,"context_line":"            client.list_extensions \u003d mock.Mock("},{"line_number":808,"context_line":"                return_value\u003d{\"extensions\": [{\"alias\": \"valid_extension\"}]})"},{"line_number":809,"context_line":"            result \u003d validator({}, client, {})"},{"line_number":810,"context_line":"            self.assertTrue(result, None)"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"    def test_required_cinder_services(self):"},{"line_number":813,"context_line":"        validator \u003d self._unwrap_validator("}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_6afbe87b","line":810,"in_reply_to":"da20952f_47151a99","updated":"2015-09-04 11:50:14.000000000","message":"Done","commit_id":"2a6071999b52344bb5f5a072d8363f2c28393650"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"819a653fa24f3d0ee3f87e9fb2ace2b977e356d5","unresolved":false,"context_lines":[{"line_number":805,"context_line":"        clients.neutron.return_value.list_extensions.return_value \u003d ("},{"line_number":806,"context_line":"            {\"extensions\": [{\"alias\": \"existing_extension\"}]})"},{"line_number":807,"context_line":"        result \u003d validator({}, clients, {})"},{"line_number":808,"context_line":"        self.assertTrue(result, validation_result)"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"    def test_required_cinder_services(self):"},{"line_number":811,"context_line":"        validator \u003d self._unwrap_validator("}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_9cc1aee6","line":808,"updated":"2015-09-07 08:54:01.000000000","message":"s/assertTrue/assertEqual/","commit_id":"26c153a13b7a9de0f839ef6b42d8e3a071334948"},{"author":{"_account_id":14884,"name":"Kiran Ranganath","email":"kiran7193@gmail.com","username":"kiran"},"change_message_id":"74944a65f62d31ca0ff003143b470bdfc72a47f9","unresolved":false,"context_lines":[{"line_number":805,"context_line":"        clients.neutron.return_value.list_extensions.return_value \u003d ("},{"line_number":806,"context_line":"            {\"extensions\": [{\"alias\": \"existing_extension\"}]})"},{"line_number":807,"context_line":"        result \u003d validator({}, clients, {})"},{"line_number":808,"context_line":"        self.assertTrue(result, validation_result)"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"    def test_required_cinder_services(self):"},{"line_number":811,"context_line":"        validator \u003d self._unwrap_validator("}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_07368b02","line":808,"in_reply_to":"da20952f_9cc1aee6","updated":"2015-09-08 05:49:33.000000000","message":"Done","commit_id":"26c153a13b7a9de0f839ef6b42d8e3a071334948"}]}
