)]}'
{"tempest/api/compute/admin/test_create_server.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"1e8bc6a4f2e0be096c869bc333c542dd42d531ef","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        admin_pass \u003d self.image_ssh_password"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        validation_resources \u003d self.get_validation_resources(self.os_primary)"},{"line_number":72,"context_line":"        server_no_eph_disk \u003d self.create_test_server("},{"line_number":73,"context_line":"            validatable\u003dTrue,"},{"line_number":74,"context_line":"            validation_resources\u003dvalidation_resources,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f436f4f_5f44c573","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":77},"updated":"2017-08-17 05:51:45.000000000","message":"why this is needed while #line 43 already does it?","commit_id":"7b04d85d14e4df9b89e33f0cbf2311714e7bd55f"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3341ac46e303f053deaccff77c149902b73eeb04","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        admin_pass \u003d self.image_ssh_password"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        validation_resources \u003d self.get_validation_resources(self.os_primary)"},{"line_number":72,"context_line":"        server_no_eph_disk \u003d self.create_test_server("},{"line_number":73,"context_line":"            validatable\u003dTrue,"},{"line_number":74,"context_line":"            validation_resources\u003dvalidation_resources,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f436f4f_222325a9","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":77},"in_reply_to":"9f436f4f_5f44c573","updated":"2017-08-17 09:31:12.000000000","message":"yeah good catch, I forgot to remove L43.","commit_id":"7b04d85d14e4df9b89e33f0cbf2311714e7bd55f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"1e8bc6a4f2e0be096c869bc333c542dd42d531ef","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        validation_resources \u003d self.get_validation_resources(self.os_primary)"},{"line_number":72,"context_line":"        server_no_eph_disk \u003d self.create_test_server("},{"line_number":73,"context_line":"            validatable\u003dTrue,"},{"line_number":74,"context_line":"            validation_resources\u003dvalidation_resources,"},{"line_number":75,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":76,"context_line":"            adminPass\u003dadmin_pass,"},{"line_number":77,"context_line":"            flavor\u003dflavor_no_eph_disk_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f436f4f_1f107d56","line":74,"range":{"start_line":74,"start_character":12,"end_line":74,"end_character":54},"updated":"2017-08-17 05:51:45.000000000","message":"it seems troublesome for create_test_server to pass validation_resources in, so can we let create_test_server still\nuse cls.validation_resources?","commit_id":"7b04d85d14e4df9b89e33f0cbf2311714e7bd55f"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3341ac46e303f053deaccff77c149902b73eeb04","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        validation_resources \u003d self.get_validation_resources(self.os_primary)"},{"line_number":72,"context_line":"        server_no_eph_disk \u003d self.create_test_server("},{"line_number":73,"context_line":"            validatable\u003dTrue,"},{"line_number":74,"context_line":"            validation_resources\u003dvalidation_resources,"},{"line_number":75,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":76,"context_line":"            adminPass\u003dadmin_pass,"},{"line_number":77,"context_line":"            flavor\u003dflavor_no_eph_disk_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f436f4f_0297014a","line":74,"range":{"start_line":74,"start_character":12,"end_line":74,"end_character":54},"in_reply_to":"9f436f4f_1f107d56","updated":"2017-08-17 09:31:12.000000000","message":"I see your point - that\u0027s why the code was the way it was to begin with.\n\nHowever relying on class variables turned out to be not such a good idea for a few reasons:\n- it hard to know what your helper (create_test_server in this case) will do, since it depends on the state of a class, which may be that of the current test class or may be inherited from a super class N levels up in the hierarchy. This makes the code harder to read and debug\n- setting variables at class level leads to non-obvious behaviours - it can be tricky to write the code in a way that it actually does what you may expect\n\nI spent quite some time at looking at ways to drop class level fixtures in Tempest for good, but the code base relies too much on them, and alternative I found would make the code less readable and harder to debug.\n\nI think the best alternative is to try and reduce class level attribute as much as possible. When using them we should do that as part of the framework, cover it with unit tests and mask it as much as possible towards framework users.\n\nIn this piece of code in L71 you can see that validation resources are obtained for the primary used, and used for the creation of the test. There still a bit of disconnect here in the sense that create_test_server will only work with primary credentials, which is not obvious by looking at the code. \n\nThere are a few possible ways forward to fix that, I\u0027ll work to improve it as part of the effort of making test.py stable.","commit_id":"7b04d85d14e4df9b89e33f0cbf2311714e7bd55f"}],"tempest/api/compute/base.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"55f5a91573f0c434c7a967ce178771910ceeb3d9","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    @classmethod"},{"line_number":192,"context_line":"    def create_test_server(cls, validatable\u003dFalse, volume_backed\u003dFalse,"},{"line_number":193,"context_line":"                           validation_resources\u003dNone, **kwargs):"},{"line_number":194,"context_line":"        \"\"\"Wrapper utility that returns a test server."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        This wrapper utility calls the common create test server and"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_512e2b92","line":193,"range":{"start_line":193,"start_character":27,"end_line":193,"end_character":47},"updated":"2017-08-29 23:55:39.000000000","message":"why we are not using cls.get_validation_resources()","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2aeb4fe41e877c36841572b1c31c6fa84c9f6978","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    @classmethod"},{"line_number":192,"context_line":"    def create_test_server(cls, validatable\u003dFalse, volume_backed\u003dFalse,"},{"line_number":193,"context_line":"                           validation_resources\u003dNone, **kwargs):"},{"line_number":194,"context_line":"        \"\"\"Wrapper utility that returns a test server."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        This wrapper utility calls the common create test server and"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_61c3ca58","line":193,"range":{"start_line":193,"start_character":27,"end_line":193,"end_character":47},"in_reply_to":"7f287b81_3e8d07d3","updated":"2017-09-07 09:37:08.000000000","message":"In the new update, there are two ways you can get validation resources, one is at class level and one is as a fixture (test level); we cannot have create_test_server making that decision about what to do. Also if fixtures are provisioned here via a fixture, create_test_server would have to return the created fixture as well.","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b52c55487e06c201c9247bc2d413ddab4eab0e37","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    @classmethod"},{"line_number":192,"context_line":"    def create_test_server(cls, validatable\u003dFalse, volume_backed\u003dFalse,"},{"line_number":193,"context_line":"                           validation_resources\u003dNone, **kwargs):"},{"line_number":194,"context_line":"        \"\"\"Wrapper utility that returns a test server."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        This wrapper utility calls the common create test server and"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_c030ee58","line":193,"range":{"start_line":193,"start_character":27,"end_line":193,"end_character":47},"in_reply_to":"7f287b81_512e2b92","updated":"2017-08-30 17:05:22.000000000","message":"Yeah nice point, I though about that.\n\nI thought that would make the code less readable - since validation resources are one set per set of credentials, it\u0027s maybe not helpful to have that call hidden into an helper. \n\nGiving the same validation resources to another server will effectively move the floating IP away from one server to the next or so.\n\nThis is something that can be improved upon in future by adding the ability of having multiple sets of validation resources - but we didn\u0027t really run into this problem until now, so not sure it\u0027s worth removing this limitation at all.","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ac83e2e67eaa237f611eaf1d59fde0745221b058","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    @classmethod"},{"line_number":192,"context_line":"    def create_test_server(cls, validatable\u003dFalse, volume_backed\u003dFalse,"},{"line_number":193,"context_line":"                           validation_resources\u003dNone, **kwargs):"},{"line_number":194,"context_line":"        \"\"\"Wrapper utility that returns a test server."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        This wrapper utility calls the common create test server and"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_3e8d07d3","line":193,"range":{"start_line":193,"start_character":27,"end_line":193,"end_character":47},"in_reply_to":"7f287b81_c030ee58","updated":"2017-09-06 09:47:53.000000000","message":"i understand and i think ok to get the validation_resource explicitly instead of getting credentials.\n\nI feel we can merge validatable and validation_resources. presence of validation_resources can be assumed as validatable. Otherwise both param can conflict like validatable\u003dFalse \u0026 validation_resources\u003d\u0027not None\u0027  or voce versa. But this is separate change not this patch things.","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ac83e2e67eaa237f611eaf1d59fde0745221b058","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        cls.password \u003d data_utils.rand_password()"},{"line_number":338,"context_line":"        server \u003d cls.create_test_server("},{"line_number":339,"context_line":"            validatable,"},{"line_number":340,"context_line":"            validation_resources\u003dcls.get_validation_resources(cls.os_primary),"},{"line_number":341,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":342,"context_line":"            adminPass\u003dcls.password,"},{"line_number":343,"context_line":"            **kwargs)"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_1e636b1c","line":340,"range":{"start_line":340,"start_character":62,"end_line":340,"end_character":76},"updated":"2017-09-06 09:47:53.000000000","message":"This is always cls.os_primary. what if any tests wan to rebuild with admin cred or alt.\n\nI think we should take the validation_resource explicitly like create_test_server.\n\nBut then how to make sure server is being rebuild with same validation resources ? may we can leave that to tests. And if any test does rebuild with diff validation resource then test has to use the rebuild validation resource not with original server when it was created.","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8e86d8b4a9262220f4d628b2f95a56ae40599d5f","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        cls.password \u003d data_utils.rand_password()"},{"line_number":338,"context_line":"        server \u003d cls.create_test_server("},{"line_number":339,"context_line":"            validatable,"},{"line_number":340,"context_line":"            validation_resources\u003dcls.get_validation_resources(cls.os_primary),"},{"line_number":341,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":342,"context_line":"            adminPass\u003dcls.password,"},{"line_number":343,"context_line":"            **kwargs)"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_41c0f22a","line":340,"range":{"start_line":340,"start_character":62,"end_line":340,"end_character":76},"in_reply_to":"7f287b81_1e636b1c","updated":"2017-09-06 09:50:15.000000000","message":".. what if any tests wan to rebuild with admin cred or alt ...or original server was created with admin or alt cred","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"786c9fa47aa3cff1331e12e8a7673056ea3ed2e6","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        cls.password \u003d data_utils.rand_password()"},{"line_number":338,"context_line":"        server \u003d cls.create_test_server("},{"line_number":339,"context_line":"            validatable,"},{"line_number":340,"context_line":"            validation_resources\u003dcls.get_validation_resources(cls.os_primary),"},{"line_number":341,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":342,"context_line":"            adminPass\u003dcls.password,"},{"line_number":343,"context_line":"            **kwargs)"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_cc7d396f","line":340,"range":{"start_line":340,"start_character":62,"end_line":340,"end_character":76},"in_reply_to":"7f287b81_41c0f22a","updated":"2017-09-06 10:16:10.000000000","message":"create_test_server only creates VMs for os_primary at the moment.\nOf course we could change that in future, but then we would have to pass the clients to create_test_server","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2aeb4fe41e877c36841572b1c31c6fa84c9f6978","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        cls.password \u003d data_utils.rand_password()"},{"line_number":338,"context_line":"        server \u003d cls.create_test_server("},{"line_number":339,"context_line":"            validatable,"},{"line_number":340,"context_line":"            validation_resources\u003dcls.get_validation_resources(cls.os_primary),"},{"line_number":341,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":342,"context_line":"            adminPass\u003dcls.password,"},{"line_number":343,"context_line":"            **kwargs)"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_01fd266d","line":340,"range":{"start_line":340,"start_character":62,"end_line":340,"end_character":76},"in_reply_to":"7f287b81_6fd73ef0","updated":"2017-09-07 09:37:08.000000000","message":"uhm I think we would have to pass validation resources here the same way we do with the create_test_server unless we make the assumption that rebuild_servers is only used for servers provisioned at class level - which is the case at the end - so I\u0027ll add a comment in here.","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7436bdaada0768715741a4742125d8f1783271a4","unresolved":false,"context_lines":[{"line_number":337,"context_line":"        cls.password \u003d data_utils.rand_password()"},{"line_number":338,"context_line":"        server \u003d cls.create_test_server("},{"line_number":339,"context_line":"            validatable,"},{"line_number":340,"context_line":"            validation_resources\u003dcls.get_validation_resources(cls.os_primary),"},{"line_number":341,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":342,"context_line":"            adminPass\u003dcls.password,"},{"line_number":343,"context_line":"            **kwargs)"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_6fd73ef0","line":340,"range":{"start_line":340,"start_character":62,"end_line":340,"end_character":76},"in_reply_to":"7f287b81_cc7d396f","updated":"2017-09-07 01:54:08.000000000","message":"humm, ok in that case we can use os_primary validation resource here with assumption that tests will always us the os_primary validation resource to access the server after rebuild.\n\nok to make it more consistent later.","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ac83e2e67eaa237f611eaf1d59fde0745221b058","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        address for validating that a guest is up."},{"line_number":376,"context_line":"        \"\"\""},{"line_number":377,"context_line":"        if CONF.validation.connect_method \u003d\u003d \u0027floating\u0027:"},{"line_number":378,"context_line":"            validation_resources \u003d cls.get_validation_resources(cls.os_primary)"},{"line_number":379,"context_line":"            return validation_resources[\u0027floating_ip\u0027][\u0027ip\u0027]"},{"line_number":380,"context_line":"        elif CONF.validation.connect_method \u003d\u003d \u0027fixed\u0027:"},{"line_number":381,"context_line":"            addresses \u003d server[\u0027addresses\u0027][CONF.validation.network_for_ssh]"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_21bcc6da","line":378,"range":{"start_line":378,"start_character":64,"end_line":378,"end_character":79},"updated":"2017-09-06 09:47:53.000000000","message":"this too. what if test create server with alt or admin cred(and so validation resource), then get_server_ip will give different FIP","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2aeb4fe41e877c36841572b1c31c6fa84c9f6978","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        address for validating that a guest is up."},{"line_number":376,"context_line":"        \"\"\""},{"line_number":377,"context_line":"        if CONF.validation.connect_method \u003d\u003d \u0027floating\u0027:"},{"line_number":378,"context_line":"            validation_resources \u003d cls.get_validation_resources(cls.os_primary)"},{"line_number":379,"context_line":"            return validation_resources[\u0027floating_ip\u0027][\u0027ip\u0027]"},{"line_number":380,"context_line":"        elif CONF.validation.connect_method \u003d\u003d \u0027fixed\u0027:"},{"line_number":381,"context_line":"            addresses \u003d server[\u0027addresses\u0027][CONF.validation.network_for_ssh]"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_2131425b","line":378,"range":{"start_line":378,"start_character":64,"end_line":378,"end_character":79},"in_reply_to":"7f287b81_0f31da5a","updated":"2017-09-07 09:37:08.000000000","message":"yeah this needs to be fixed thanks","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7436bdaada0768715741a4742125d8f1783271a4","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        address for validating that a guest is up."},{"line_number":376,"context_line":"        \"\"\""},{"line_number":377,"context_line":"        if CONF.validation.connect_method \u003d\u003d \u0027floating\u0027:"},{"line_number":378,"context_line":"            validation_resources \u003d cls.get_validation_resources(cls.os_primary)"},{"line_number":379,"context_line":"            return validation_resources[\u0027floating_ip\u0027][\u0027ip\u0027]"},{"line_number":380,"context_line":"        elif CONF.validation.connect_method \u003d\u003d \u0027fixed\u0027:"},{"line_number":381,"context_line":"            addresses \u003d server[\u0027addresses\u0027][CONF.validation.network_for_ssh]"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_0f31da5a","line":378,"range":{"start_line":378,"start_character":64,"end_line":378,"end_character":79},"in_reply_to":"7f287b81_21bcc6da","updated":"2017-09-07 01:54:08.000000000","message":"This is still inconsistent with create_test_Server() where create method take validation resource which can be of Alt or Admin but we fetch the FIP of os_primary always.","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e038613fc9e44a036e37be28ab4ccb34fe39d380","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            server[\u0027id\u0027] for server in cls.servers))"},{"line_number":141,"context_line":"        for server in cls.servers:"},{"line_number":142,"context_line":"            try:"},{"line_number":143,"context_line":"                    test_utils.call_and_ignore_notfound_exc("},{"line_number":144,"context_line":"                        cls.servers_client.delete_server, server[\u0027id\u0027])"},{"line_number":145,"context_line":"            except Exception:"},{"line_number":146,"context_line":"                LOG.exception(\u0027Deleting server %s failed\u0027, server[\u0027id\u0027])"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"5f2577a7_6babfd88","line":144,"range":{"start_line":143,"start_character":0,"end_line":144,"end_character":71},"updated":"2017-09-12 16:30:28.000000000","message":"original indentation is correct right","commit_id":"0da876aa41110dd0680d4d6ee73b5cf44ef55e1b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ca695d8379beb1930ba0bf1a32d0b9f787c7010e","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            server[\u0027id\u0027] for server in cls.servers))"},{"line_number":141,"context_line":"        for server in cls.servers:"},{"line_number":142,"context_line":"            try:"},{"line_number":143,"context_line":"                    test_utils.call_and_ignore_notfound_exc("},{"line_number":144,"context_line":"                        cls.servers_client.delete_server, server[\u0027id\u0027])"},{"line_number":145,"context_line":"            except Exception:"},{"line_number":146,"context_line":"                LOG.exception(\u0027Deleting server %s failed\u0027, server[\u0027id\u0027])"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"5f2577a7_5a44891b","line":144,"range":{"start_line":143,"start_character":0,"end_line":144,"end_character":71},"in_reply_to":"5f2577a7_6babfd88","updated":"2017-09-12 20:20:04.000000000","message":"Done","commit_id":"0da876aa41110dd0680d4d6ee73b5cf44ef55e1b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e038613fc9e44a036e37be28ab4ccb34fe39d380","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        :param server_id: UUID of the server to be rebuilt. If None is"},{"line_number":344,"context_line":"            specified, a new server is provisioned."},{"line_number":345,"context_line":"        :param validatable: whether to the server needs to be"},{"line_number":346,"context_line":"            validatable. When True, validation resources are acquired via"},{"line_number":347,"context_line":"            the `get_validation_resources` helper."},{"line_number":348,"context_line":"        :param kwargs: extra paramaters are passed through to the"},{"line_number":349,"context_line":"            `create_test_server` call."},{"line_number":350,"context_line":"        :return: the UUID of the created server."}],"source_content_type":"text/x-python","patch_set":33,"id":"5f2577a7_ebda4d15","line":347,"range":{"start_line":346,"start_character":36,"end_line":347,"end_character":50},"updated":"2017-09-12 16:30:28.000000000","message":"but we are not accepting the validation_resource in this method. I feel we should but as discussed ok to go with os_primary VR as per current usage.","commit_id":"0da876aa41110dd0680d4d6ee73b5cf44ef55e1b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ca695d8379beb1930ba0bf1a32d0b9f787c7010e","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        :param server_id: UUID of the server to be rebuilt. If None is"},{"line_number":344,"context_line":"            specified, a new server is provisioned."},{"line_number":345,"context_line":"        :param validatable: whether to the server needs to be"},{"line_number":346,"context_line":"            validatable. When True, validation resources are acquired via"},{"line_number":347,"context_line":"            the `get_validation_resources` helper."},{"line_number":348,"context_line":"        :param kwargs: extra paramaters are passed through to the"},{"line_number":349,"context_line":"            `create_test_server` call."},{"line_number":350,"context_line":"        :return: the UUID of the created server."}],"source_content_type":"text/x-python","patch_set":33,"id":"5f2577a7_ba600da7","line":347,"range":{"start_line":346,"start_character":36,"end_line":347,"end_character":50},"in_reply_to":"5f2577a7_ebda4d15","updated":"2017-09-12 20:20:04.000000000","message":"Yeah I think we can extend this if needed in future.","commit_id":"0da876aa41110dd0680d4d6ee73b5cf44ef55e1b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e038613fc9e44a036e37be28ab4ccb34fe39d380","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        cls._delete_volume(cls.volumes_client, volume_id)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    @classmethod"},{"line_number":389,"context_line":"    def get_server_ip(cls, server, validation_resources\u003dNone):"},{"line_number":390,"context_line":"        \"\"\"Get the server fixed or floating IP."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        Based on the configuration we\u0027re in, return a correct ip"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f2577a7_abf0c568","line":389,"range":{"start_line":389,"start_character":35,"end_line":389,"end_character":55},"updated":"2017-09-12 16:30:28.000000000","message":"can you add some more explanation on this like validation_resource with which server was created. If different VR is passed then it might leads to giving the wrong IP.","commit_id":"0da876aa41110dd0680d4d6ee73b5cf44ef55e1b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ca695d8379beb1930ba0bf1a32d0b9f787c7010e","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        cls._delete_volume(cls.volumes_client, volume_id)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    @classmethod"},{"line_number":389,"context_line":"    def get_server_ip(cls, server, validation_resources\u003dNone):"},{"line_number":390,"context_line":"        \"\"\"Get the server fixed or floating IP."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        Based on the configuration we\u0027re in, return a correct ip"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f2577a7_c431bb0d","line":389,"range":{"start_line":389,"start_character":35,"end_line":389,"end_character":55},"in_reply_to":"5f2577a7_abf0c568","updated":"2017-09-12 20:20:04.000000000","message":"Done","commit_id":"0da876aa41110dd0680d4d6ee73b5cf44ef55e1b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e038613fc9e44a036e37be28ab4ccb34fe39d380","unresolved":false,"context_lines":[{"line_number":396,"context_line":"            if validation_resources:"},{"line_number":397,"context_line":"                return validation_resources[\u0027floating_ip\u0027][\u0027ip\u0027]"},{"line_number":398,"context_line":"            else:"},{"line_number":399,"context_line":"                raise exceptions.ServerUnreachable(server_id\u003dserver[\u0027id\u0027])"},{"line_number":400,"context_line":"        elif CONF.validation.connect_method \u003d\u003d \u0027fixed\u0027:"},{"line_number":401,"context_line":"            addresses \u003d server[\u0027addresses\u0027][CONF.validation.network_for_ssh]"},{"line_number":402,"context_line":"            for address in addresses:"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f2577a7_0b511963","line":399,"range":{"start_line":399,"start_character":33,"end_line":399,"end_character":50},"updated":"2017-09-12 16:30:28.000000000","message":"this seems not the right exception. This could have leads to debugging the nova logs when seeing this error.\n\nCan we use InvalidParam. \n\nhttps://github.com/openstack/tempest/blob/master/tempest/lib/exceptions.py#L281","commit_id":"0da876aa41110dd0680d4d6ee73b5cf44ef55e1b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ca695d8379beb1930ba0bf1a32d0b9f787c7010e","unresolved":false,"context_lines":[{"line_number":396,"context_line":"            if validation_resources:"},{"line_number":397,"context_line":"                return validation_resources[\u0027floating_ip\u0027][\u0027ip\u0027]"},{"line_number":398,"context_line":"            else:"},{"line_number":399,"context_line":"                raise exceptions.ServerUnreachable(server_id\u003dserver[\u0027id\u0027])"},{"line_number":400,"context_line":"        elif CONF.validation.connect_method \u003d\u003d \u0027fixed\u0027:"},{"line_number":401,"context_line":"            addresses \u003d server[\u0027addresses\u0027][CONF.validation.network_for_ssh]"},{"line_number":402,"context_line":"            for address in addresses:"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f2577a7_a4346ffc","line":399,"range":{"start_line":399,"start_character":33,"end_line":399,"end_character":50},"in_reply_to":"5f2577a7_0b511963","updated":"2017-09-12 20:20:04.000000000","message":"Done","commit_id":"0da876aa41110dd0680d4d6ee73b5cf44ef55e1b"}],"tempest/api/compute/servers/test_create_server.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"db5f2d92328682c2f03a4f43ad77cb0f347f831b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        # Verify that the number of vcpus reported by the instance matches"},{"line_number":108,"context_line":"        # the amount stated by the flavor"},{"line_number":109,"context_line":"        flavor \u003d self.flavors_client.show_flavor(self.flavor_ref)[\u0027flavor\u0027]"},{"line_number":110,"context_line":"        validation_resources \u003d self.get_validation_resources(self.os_primary)"},{"line_number":111,"context_line":"        linux_client \u003d remote_client.RemoteClient("},{"line_number":112,"context_line":"            self.get_server_ip(self.server),"},{"line_number":113,"context_line":"            self.ssh_user,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f436f4f_b5829651","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":77},"updated":"2017-08-18 03:35:01.000000000","message":"here we can directly use self.validation_resources? because we already got it in resource_setup.\nI am now ok with explicitly setting validation_resources in functions like create_test_server, \nbut we can still get validation_resources in resource_setup for further using inside the file.","commit_id":"9916c9c4d09152800279bd67a805f815ec379e04"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"004186bf10886883288d85061279af003ca6392c","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        # Verify that the number of vcpus reported by the instance matches"},{"line_number":108,"context_line":"        # the amount stated by the flavor"},{"line_number":109,"context_line":"        flavor \u003d self.flavors_client.show_flavor(self.flavor_ref)[\u0027flavor\u0027]"},{"line_number":110,"context_line":"        validation_resources \u003d self.get_validation_resources(self.os_primary)"},{"line_number":111,"context_line":"        linux_client \u003d remote_client.RemoteClient("},{"line_number":112,"context_line":"            self.get_server_ip(self.server),"},{"line_number":113,"context_line":"            self.ssh_user,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f436f4f_4e498f5e","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":77},"in_reply_to":"9f436f4f_b5829651","updated":"2017-08-18 11:33:40.000000000","message":"Heh I forgot to remove the cls. in L47, sorry.\nI\u0027d rather go towards I direction where we never set something on cls in a variable.\nFor resource creation we could provide an helper to store and get resources along with their cleanup callable, so that we ensure cleanups are always called, and we could have a central logic for handling cleanup failures.\n\nSince get_validation_resources will just lookup in a dictionary I don\u0027t think there is a significant overhead in calling it again.","commit_id":"9916c9c4d09152800279bd67a805f815ec379e04"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"db5f2d92328682c2f03a4f43ad77cb0f347f831b","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                          \u0027Instance validation tests are disabled.\u0027)"},{"line_number":124,"context_line":"    def test_host_name_is_same_as_server_name(self):"},{"line_number":125,"context_line":"        # Verify the instance host name is the same as the server name"},{"line_number":126,"context_line":"        validation_resources \u003d self.get_validation_resources(self.os_primary)"},{"line_number":127,"context_line":"        linux_client \u003d remote_client.RemoteClient("},{"line_number":128,"context_line":"            self.get_server_ip(self.server),"},{"line_number":129,"context_line":"            self.ssh_user,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f436f4f_55812a4a","line":126,"range":{"start_line":126,"start_character":8,"end_line":126,"end_character":77},"updated":"2017-08-18 03:35:01.000000000","message":"ditto","commit_id":"9916c9c4d09152800279bd67a805f815ec379e04"}],"tempest/api/compute/servers/test_device_tagging.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"335d81a6d9c75c10fdddf9b9d84bd66d2b71aab0","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    @classmethod"},{"line_number":70,"context_line":"    def resource_setup(cls):"},{"line_number":71,"context_line":"        super(DeviceTaggingTest, cls).resource_setup()"},{"line_number":72,"context_line":"        cls.validation_resources \u003d cls.get_validation_resources(cls.os_primary)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def verify_device_metadata(self, md_json):"},{"line_number":75,"context_line":"        md_dict \u003d json.loads(md_json)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f436f4f_1bca836d","line":72,"range":{"start_line":72,"start_character":1,"end_line":72,"end_character":79},"updated":"2017-08-21 02:24:37.000000000","message":"this can be removed","commit_id":"4dc6d44ea1408ab4b0b9a34b442fc7019562c7b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"efd8de1509dd1c52075c3cce057bd593deb43a7b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    @classmethod"},{"line_number":70,"context_line":"    def resource_setup(cls):"},{"line_number":71,"context_line":"        super(DeviceTaggingTest, cls).resource_setup()"},{"line_number":72,"context_line":"        cls.validation_resources \u003d cls.get_validation_resources(cls.os_primary)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def verify_device_metadata(self, md_json):"},{"line_number":75,"context_line":"        md_dict \u003d json.loads(md_json)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f436f4f_ec35b0dc","line":72,"range":{"start_line":72,"start_character":1,"end_line":72,"end_character":79},"in_reply_to":"9f436f4f_1bca836d","updated":"2017-08-21 21:24:03.000000000","message":"Done","commit_id":"4dc6d44ea1408ab4b0b9a34b442fc7019562c7b4"}],"tempest/api/compute/servers/test_server_actions.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"335d81a6d9c75c10fdddf9b9d84bd66d2b71aab0","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    @classmethod"},{"line_number":75,"context_line":"    def resource_setup(cls):"},{"line_number":76,"context_line":"        super(ServerActionsTestJSON, cls).resource_setup()"},{"line_number":77,"context_line":"        cls.validation_resources \u003d cls.get_validation_resources(cls.os_primary)"},{"line_number":78,"context_line":"        cls.server_id \u003d cls.rebuild_server(None, validatable\u003dTrue)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @decorators.idempotent_id(\u00276158df09-4b82-4ab3-af6d-29cf36af858d\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f436f4f_5badab99","line":77,"range":{"start_line":77,"start_character":0,"end_line":77,"end_character":79},"updated":"2017-08-21 02:24:37.000000000","message":"this can be removed","commit_id":"4dc6d44ea1408ab4b0b9a34b442fc7019562c7b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"efd8de1509dd1c52075c3cce057bd593deb43a7b","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    @classmethod"},{"line_number":75,"context_line":"    def resource_setup(cls):"},{"line_number":76,"context_line":"        super(ServerActionsTestJSON, cls).resource_setup()"},{"line_number":77,"context_line":"        cls.validation_resources \u003d cls.get_validation_resources(cls.os_primary)"},{"line_number":78,"context_line":"        cls.server_id \u003d cls.rebuild_server(None, validatable\u003dTrue)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @decorators.idempotent_id(\u00276158df09-4b82-4ab3-af6d-29cf36af858d\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f436f4f_cc342ce1","line":77,"range":{"start_line":77,"start_character":0,"end_line":77,"end_character":79},"in_reply_to":"9f436f4f_5badab99","updated":"2017-08-21 21:24:03.000000000","message":"Done","commit_id":"4dc6d44ea1408ab4b0b9a34b442fc7019562c7b4"}],"tempest/api/compute/servers/test_server_personality.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c8f84edf13d29908ea88fda48260504e291bd5e3","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                self.os_primary))"},{"line_number":65,"context_line":"        server \u003d self.client.show_server(created_server[\u0027id\u0027])[\u0027server\u0027]"},{"line_number":66,"context_line":"        if CONF.validation.run_validation:"},{"line_number":67,"context_line":"            validation_resources \u003d self.get_validation_resources("},{"line_number":68,"context_line":"                self.os_primary)"},{"line_number":69,"context_line":"            linux_client \u003d remote_client.RemoteClient("},{"line_number":70,"context_line":"                self.get_server_ip(server),"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f436f4f_78b46380","line":67,"range":{"start_line":67,"start_character":12,"end_line":67,"end_character":32},"updated":"2017-08-16 02:11:52.000000000","message":"nit: Could define this once and pass to L63,L72 rather than calling `get_validation_resources` twice.","commit_id":"08e6e8404499bdc8109e7a5c8e684eb4f5c55259"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6181bb36ae97ade2c2829217eefe91a94c56e8e5","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                self.os_primary))"},{"line_number":65,"context_line":"        server \u003d self.client.show_server(created_server[\u0027id\u0027])[\u0027server\u0027]"},{"line_number":66,"context_line":"        if CONF.validation.run_validation:"},{"line_number":67,"context_line":"            validation_resources \u003d self.get_validation_resources("},{"line_number":68,"context_line":"                self.os_primary)"},{"line_number":69,"context_line":"            linux_client \u003d remote_client.RemoteClient("},{"line_number":70,"context_line":"                self.get_server_ip(server),"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f436f4f_417ac7b9","line":67,"range":{"start_line":67,"start_character":12,"end_line":67,"end_character":32},"in_reply_to":"9f436f4f_78b46380","updated":"2017-08-16 09:34:21.000000000","message":"sure, I missed this one, thanks","commit_id":"08e6e8404499bdc8109e7a5c8e684eb4f5c55259"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"335d81a6d9c75c10fdddf9b9d84bd66d2b71aab0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def resource_setup(cls):"},{"line_number":38,"context_line":"        super(ServerPersonalityTestJSON, cls).resource_setup()"},{"line_number":39,"context_line":"        cls.validation_resources \u003d cls.get_validation_resources(cls.os_primary)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @classmethod"},{"line_number":42,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f436f4f_db987b76","line":39,"range":{"start_line":39,"start_character":0,"end_line":39,"end_character":79},"updated":"2017-08-21 02:24:37.000000000","message":"this can be removed","commit_id":"4dc6d44ea1408ab4b0b9a34b442fc7019562c7b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"efd8de1509dd1c52075c3cce057bd593deb43a7b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def resource_setup(cls):"},{"line_number":38,"context_line":"        super(ServerPersonalityTestJSON, cls).resource_setup()"},{"line_number":39,"context_line":"        cls.validation_resources \u003d cls.get_validation_resources(cls.os_primary)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @classmethod"},{"line_number":42,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f436f4f_2c597834","line":39,"range":{"start_line":39,"start_character":0,"end_line":39,"end_character":79},"in_reply_to":"9f436f4f_db987b76","updated":"2017-08-21 21:24:03.000000000","message":"Done","commit_id":"4dc6d44ea1408ab4b0b9a34b442fc7019562c7b4"}],"tempest/api/compute/volumes/test_attach_volume.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"335d81a6d9c75c10fdddf9b9d84bd66d2b71aab0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def resource_setup(cls):"},{"line_number":45,"context_line":"        super(AttachVolumeTestJSON, cls).resource_setup()"},{"line_number":46,"context_line":"        cls.validation_resources \u003d cls.get_validation_resources(cls.os_primary)"},{"line_number":47,"context_line":"        cls.device \u003d CONF.compute.volume_device_name"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _create_server(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f436f4f_9b8c3336","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":79},"updated":"2017-08-21 02:24:37.000000000","message":"this can be removed","commit_id":"4dc6d44ea1408ab4b0b9a34b442fc7019562c7b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"efd8de1509dd1c52075c3cce057bd593deb43a7b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def resource_setup(cls):"},{"line_number":45,"context_line":"        super(AttachVolumeTestJSON, cls).resource_setup()"},{"line_number":46,"context_line":"        cls.validation_resources \u003d cls.get_validation_resources(cls.os_primary)"},{"line_number":47,"context_line":"        cls.device \u003d CONF.compute.volume_device_name"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _create_server(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f436f4f_8c75049b","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":79},"in_reply_to":"9f436f4f_9b8c3336","updated":"2017-08-21 21:24:03.000000000","message":"Done","commit_id":"4dc6d44ea1408ab4b0b9a34b442fc7019562c7b4"}],"tempest/common/validation_resources.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e038613fc9e44a036e37be28ab4ccb34fe39d380","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        floating_ip \u003d resources[\u0027floating_ip\u0027][\u0027ip\u0027]"},{"line_number":182,"context_line":"    \"\"\""},{"line_number":183,"context_line":"    # Create and Return the validation resources required to validate a VM"},{"line_number":184,"context_line":"    LOG.debug(\u0027Requested VR keypair %s, floating IP %s, security group %s\u0027,"},{"line_number":185,"context_line":"              keypair, floating_ip, security_group)"},{"line_number":186,"context_line":"    validation_data \u003d {}"},{"line_number":187,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f2577a7_6b709da6","line":184,"range":{"start_line":184,"start_character":25,"end_line":184,"end_character":27},"updated":"2017-09-12 16:30:28.000000000","message":"ValidationResources much better","commit_id":"0da876aa41110dd0680d4d6ee73b5cf44ef55e1b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ca695d8379beb1930ba0bf1a32d0b9f787c7010e","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        floating_ip \u003d resources[\u0027floating_ip\u0027][\u0027ip\u0027]"},{"line_number":182,"context_line":"    \"\"\""},{"line_number":183,"context_line":"    # Create and Return the validation resources required to validate a VM"},{"line_number":184,"context_line":"    LOG.debug(\u0027Requested VR keypair %s, floating IP %s, security group %s\u0027,"},{"line_number":185,"context_line":"              keypair, floating_ip, security_group)"},{"line_number":186,"context_line":"    validation_data \u003d {}"},{"line_number":187,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f2577a7_47982dbf","line":184,"range":{"start_line":184,"start_character":25,"end_line":184,"end_character":27},"in_reply_to":"5f2577a7_6b709da6","updated":"2017-09-12 20:20:04.000000000","message":"Done","commit_id":"0da876aa41110dd0680d4d6ee73b5cf44ef55e1b"}],"tempest/test.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c8f84edf13d29908ea88fda48260504e291bd5e3","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        \"\"\"Provision validation resources according to configuration"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        This is a wrapper around `create_validation_resources` from"},{"line_number":545,"context_line":"        `tempest.common.validation_resources` that passes parameters that"},{"line_number":546,"context_line":"        from Tempest configuration. If resources where already provisioned"},{"line_number":547,"context_line":"        before, existing ones will be returned."},{"line_number":548,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9f436f4f_b8440b75","line":545,"range":{"start_line":545,"start_character":69,"end_line":545,"end_character":73},"updated":"2017-08-16 02:11:52.000000000","message":"that are","commit_id":"08e6e8404499bdc8109e7a5c8e684eb4f5c55259"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6181bb36ae97ade2c2829217eefe91a94c56e8e5","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        \"\"\"Provision validation resources according to configuration"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        This is a wrapper around `create_validation_resources` from"},{"line_number":545,"context_line":"        `tempest.common.validation_resources` that passes parameters that"},{"line_number":546,"context_line":"        from Tempest configuration. If resources where already provisioned"},{"line_number":547,"context_line":"        before, existing ones will be returned."},{"line_number":548,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9f436f4f_c147d776","line":545,"range":{"start_line":545,"start_character":69,"end_line":545,"end_character":73},"in_reply_to":"9f436f4f_b8440b75","updated":"2017-08-16 09:34:21.000000000","message":"Done","commit_id":"08e6e8404499bdc8109e7a5c8e684eb4f5c55259"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c8f84edf13d29908ea88fda48260504e291bd5e3","unresolved":false,"context_lines":[{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        This is a wrapper around `create_validation_resources` from"},{"line_number":545,"context_line":"        `tempest.common.validation_resources` that passes parameters that"},{"line_number":546,"context_line":"        from Tempest configuration. If resources where already provisioned"},{"line_number":547,"context_line":"        before, existing ones will be returned."},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"        Resources are returned as a dictionary. They are also stored for"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f436f4f_98470778","line":546,"range":{"start_line":546,"start_character":49,"end_line":546,"end_character":54},"updated":"2017-08-16 02:11:52.000000000","message":"were","commit_id":"08e6e8404499bdc8109e7a5c8e684eb4f5c55259"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6181bb36ae97ade2c2829217eefe91a94c56e8e5","unresolved":false,"context_lines":[{"line_number":543,"context_line":""},{"line_number":544,"context_line":"        This is a wrapper around `create_validation_resources` from"},{"line_number":545,"context_line":"        `tempest.common.validation_resources` that passes parameters that"},{"line_number":546,"context_line":"        from Tempest configuration. If resources where already provisioned"},{"line_number":547,"context_line":"        before, existing ones will be returned."},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"        Resources are returned as a dictionary. They are also stored for"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f436f4f_815d4f48","line":546,"range":{"start_line":546,"start_character":49,"end_line":546,"end_character":54},"in_reply_to":"9f436f4f_98470778","updated":"2017-08-16 09:34:21.000000000","message":"Done","commit_id":"08e6e8404499bdc8109e7a5c8e684eb4f5c55259"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"1e8bc6a4f2e0be096c869bc333c542dd42d531ef","unresolved":false,"context_lines":[{"line_number":189,"context_line":"    network_resources \u003d {}"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    # Resources required to validate a server using ssh"},{"line_number":192,"context_line":"    _validation_resources \u003d {}"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    # NOTE(sdague): log_format is defined inline here instead of using the oslo"},{"line_number":195,"context_line":"    # default because going through the config path recouples config to the"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f436f4f_5a20539b","line":192,"range":{"start_line":192,"start_character":4,"end_line":192,"end_character":25},"updated":"2017-08-17 05:51:45.000000000","message":"if we don\u0027t change it to an internal variable, then we can use cls.validation_resources in create_test_server?\n\nother changes in test.py looks fine to me.","commit_id":"7b04d85d14e4df9b89e33f0cbf2311714e7bd55f"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3341ac46e303f053deaccff77c149902b73eeb04","unresolved":false,"context_lines":[{"line_number":189,"context_line":"    network_resources \u003d {}"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    # Resources required to validate a server using ssh"},{"line_number":192,"context_line":"    _validation_resources \u003d {}"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    # NOTE(sdague): log_format is defined inline here instead of using the oslo"},{"line_number":195,"context_line":"    # default because going through the config path recouples config to the"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f436f4f_e27abd21","line":192,"range":{"start_line":192,"start_character":4,"end_line":192,"end_character":25},"in_reply_to":"9f436f4f_5a20539b","updated":"2017-08-17 09:31:12.000000000","message":"That\u0027s exactly what I did not want - see my other comment.\nIt\u0027s fine to store validation resources in the class for cleanup purposes, but I prefer users to get them via an helper method instead.","commit_id":"7b04d85d14e4df9b89e33f0cbf2311714e7bd55f"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"dcfd3bd1c78dbb827ec0a93af79a378899bc93b4","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        if hasattr(cls, \u0027_creds_provider\u0027):"},{"line_number":457,"context_line":"            cls._creds_provider.clear_creds()"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    @classmethod"},{"line_number":460,"context_line":"    def get_validation_resources(cls, clients):"},{"line_number":461,"context_line":"        \"\"\"Provision validation resources according to configuration"},{"line_number":462,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_30e5eb09","line":459,"updated":"2017-08-29 13:41:35.000000000","message":"Is there any reason this needs to be a classmethod anymore? If I remember all the callers in the previous files it\u0027s not being called by anything class level anymore. That makes me think we can remove the class level teardown and switch this to addCleanup for all the created resources; which honestly fits the new usage model a bit better.","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"4798a0a2466deb28ecbbf1b53001c580a4e15bd1","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        if hasattr(cls, \u0027_creds_provider\u0027):"},{"line_number":457,"context_line":"            cls._creds_provider.clear_creds()"},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    @classmethod"},{"line_number":460,"context_line":"    def get_validation_resources(cls, clients):"},{"line_number":461,"context_line":"        \"\"\"Provision validation resources according to configuration"},{"line_number":462,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_ab7ba125","line":459,"in_reply_to":"7f287b81_30e5eb09","updated":"2017-08-29 21:03:55.000000000","message":"One downside of having this a non class method would be that we would not be able to provision an ssh-able server with it as a class resource.\n\nhttp://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/compute/base.py#n192\n\nAnother downside would be that every test would have to re-create the ssh key, security group and floating IP for each test. Probably not a very significant slow down though.","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"55f5a91573f0c434c7a967ce178771910ceeb3d9","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        If `CONF.validation.run_validation` is False no resource will be"},{"line_number":472,"context_line":"        provisioned at all."},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        @param clients: Clients to be used to provision the resources."},{"line_number":475,"context_line":"        \"\"\""},{"line_number":476,"context_line":"        if not CONF.validation.run_validation:"},{"line_number":477,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_719ec7b9","line":474,"range":{"start_line":474,"start_character":0,"end_line":474,"end_character":70},"updated":"2017-08-29 23:55:39.000000000","message":"we can add doc string for return value also.","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b52c55487e06c201c9247bc2d413ddab4eab0e37","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        If `CONF.validation.run_validation` is False no resource will be"},{"line_number":472,"context_line":"        provisioned at all."},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        @param clients: Clients to be used to provision the resources."},{"line_number":475,"context_line":"        \"\"\""},{"line_number":476,"context_line":"        if not CONF.validation.run_validation:"},{"line_number":477,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_a00cc293","line":474,"range":{"start_line":474,"start_character":0,"end_line":474,"end_character":70},"in_reply_to":"7f287b81_719ec7b9","updated":"2017-08-30 17:05:22.000000000","message":"nice point. Can I add that as a follow-up?","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ac83e2e67eaa237f611eaf1d59fde0745221b058","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        If `CONF.validation.run_validation` is False no resource will be"},{"line_number":472,"context_line":"        provisioned at all."},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        @param clients: Clients to be used to provision the resources."},{"line_number":475,"context_line":"        \"\"\""},{"line_number":476,"context_line":"        if not CONF.validation.run_validation:"},{"line_number":477,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":25,"id":"7f287b81_de98436b","line":474,"range":{"start_line":474,"start_character":0,"end_line":474,"end_character":70},"in_reply_to":"7f287b81_a00cc293","updated":"2017-09-06 09:47:53.000000000","message":"sure.","commit_id":"d0118bcf730616abdb0ad5191b852ed28882cd39"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"448a53e15b3728124bd5033b70337bd0347eda9e","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                            cls.servers.delete_server,"},{"line_number":380,"context_line":"                            cls.shared_server2[\u0027id\u0027])"},{"line_number":381,"context_line":"        \"\"\""},{"line_number":382,"context_line":"        pass"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @classmethod"},{"line_number":385,"context_line":"    def resource_cleanup(cls):"}],"source_content_type":"text/x-python","patch_set":26,"id":"7f287b81_e7300059","line":382,"updated":"2017-09-06 18:48:50.000000000","message":"Hah, I like that this is empty now","commit_id":"305e0346dfac8d5771d215bf58bbc8f55be9e045"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e038613fc9e44a036e37be28ab4ccb34fe39d380","unresolved":false,"context_lines":[{"line_number":598,"context_line":"            floating_network_name\u003dCONF.network.floating_network_name)"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"    @classmethod"},{"line_number":601,"context_line":"    def get_validation_resources(cls, os_clients):"},{"line_number":602,"context_line":"        \"\"\"Provision validation resources according to configuration"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"        This is a wrapper around `create_validation_resources` from"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f2577a7_4bf601fc","line":601,"range":{"start_line":601,"start_character":8,"end_line":601,"end_character":32},"updated":"2017-09-12 16:30:28.000000000","message":"name conveying class level or test level VR will be much easier to understand.\n\nget_class_level_validation_resources() ?","commit_id":"0da876aa41110dd0680d4d6ee73b5cf44ef55e1b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e038613fc9e44a036e37be28ab4ccb34fe39d380","unresolved":false,"context_lines":[{"line_number":650,"context_line":"        provisioned at all."},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        @param os_clients: Clients to be used to provision the resources."},{"line_number":653,"context_line":"        \"\"\""},{"line_number":654,"context_line":""},{"line_number":655,"context_line":"        params \u003d {}"},{"line_number":656,"context_line":"        # Test will try to use the fixture, so for this to be useful"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f2577a7_8e099796","line":653,"range":{"start_line":653,"start_character":8,"end_line":653,"end_character":11},"updated":"2017-09-12 16:30:28.000000000","message":"example will be nice here.","commit_id":"0da876aa41110dd0680d4d6ee73b5cf44ef55e1b"}],"tempest/tests/test_test.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c8f84edf13d29908ea88fda48260504e291bd5e3","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        expected_vr \u003d \u0027expected_validation_resources\u0027"},{"line_number":68,"context_line":"        mock_create_vr.return_value \u003d expected_vr"},{"line_number":69,"context_line":"        obtained_vr \u003d self.test_test_class.get_validation_resources(osclients)"},{"line_number":70,"context_line":"        mock_create_vr.asssert_called_once()"},{"line_number":71,"context_line":"        self.assertIn(osclients, mock_create_vr.call_args_list[0][0])"},{"line_number":72,"context_line":"        self.assertEqual(expected_vr, obtained_vr)"},{"line_number":73,"context_line":"        self.assertIn(osclients, self.test_test_class._validation_resources)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f436f4f_7810e357","line":70,"range":{"start_line":70,"start_character":23,"end_line":70,"end_character":42},"updated":"2017-08-16 02:11:52.000000000","message":"assert_called_once\n\n(This is why autospec\u003dTrue is nice and why https://review.openstack.org/#/c/447252/ is nice too)","commit_id":"08e6e8404499bdc8109e7a5c8e684eb4f5c55259"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6181bb36ae97ade2c2829217eefe91a94c56e8e5","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        expected_vr \u003d \u0027expected_validation_resources\u0027"},{"line_number":68,"context_line":"        mock_create_vr.return_value \u003d expected_vr"},{"line_number":69,"context_line":"        obtained_vr \u003d self.test_test_class.get_validation_resources(osclients)"},{"line_number":70,"context_line":"        mock_create_vr.asssert_called_once()"},{"line_number":71,"context_line":"        self.assertIn(osclients, mock_create_vr.call_args_list[0][0])"},{"line_number":72,"context_line":"        self.assertEqual(expected_vr, obtained_vr)"},{"line_number":73,"context_line":"        self.assertIn(osclients, self.test_test_class._validation_resources)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f436f4f_211d8373","line":70,"range":{"start_line":70,"start_character":23,"end_line":70,"end_character":42},"in_reply_to":"9f436f4f_7810e357","updated":"2017-08-16 09:34:21.000000000","message":"Nice catch, thank you!\nI thought the decorator would set the autospec, but it doesn\u0027t, so I think we should fix this in a few places in Tempest!","commit_id":"08e6e8404499bdc8109e7a5c8e684eb4f5c55259"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c8f84edf13d29908ea88fda48260504e291bd5e3","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            self.test_test_class.get_validation_resources(osclients)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @mock.patch(validation_resources_module + \u0027.create_validation_resources\u0027)"},{"line_number":91,"context_line":"    def test_validation_resources_invalid_config_nova_net(self,"},{"line_number":92,"context_line":"                                                          mock_create_vr):"},{"line_number":93,"context_line":"        invalid_version \u003d 999"},{"line_number":94,"context_line":"        cfg.CONF.set_default(\u0027run_validation\u0027, True, \u0027validation\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f436f4f_032bac82","line":91,"updated":"2017-08-16 02:11:52.000000000","message":"I would imagine that since this test ends with \"_invalid_config_nova_net\" that it should be structure more like the test on L77 versus the on L62? Shouldn\u0027t this test be catch an expected exception?","commit_id":"08e6e8404499bdc8109e7a5c8e684eb4f5c55259"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6181bb36ae97ade2c2829217eefe91a94c56e8e5","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            self.test_test_class.get_validation_resources(osclients)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @mock.patch(validation_resources_module + \u0027.create_validation_resources\u0027)"},{"line_number":91,"context_line":"    def test_validation_resources_invalid_config_nova_net(self,"},{"line_number":92,"context_line":"                                                          mock_create_vr):"},{"line_number":93,"context_line":"        invalid_version \u003d 999"},{"line_number":94,"context_line":"        cfg.CONF.set_default(\u0027run_validation\u0027, True, \u0027validation\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f436f4f_6106eb22","line":91,"in_reply_to":"9f436f4f_032bac82","updated":"2017-08-16 09:34:21.000000000","message":"The logic is that if we use nova-net we don\u0027t care about having an invalid config in ip_version_for_ssh since it\u0027s not used by nova-net.\nThe test name may be misleading, but it\u0027s the best I could come up with :)","commit_id":"08e6e8404499bdc8109e7a5c8e684eb4f5c55259"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c8f84edf13d29908ea88fda48260504e291bd5e3","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        expected_vr \u003d \u0027expected_validation_resources\u0027"},{"line_number":101,"context_line":"        mock_create_vr.return_value \u003d expected_vr"},{"line_number":102,"context_line":"        obtained_vr \u003d self.test_test_class.get_validation_resources(osclients)"},{"line_number":103,"context_line":"        mock_create_vr.asssert_called_once()"},{"line_number":104,"context_line":"        self.assertIn(osclients, mock_create_vr.call_args_list[0][0])"},{"line_number":105,"context_line":"        self.assertEqual(expected_vr, obtained_vr)"},{"line_number":106,"context_line":"        self.assertIn(osclients, self.test_test_class._validation_resources)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f436f4f_1801d706","line":103,"range":{"start_line":103,"start_character":23,"end_line":103,"end_character":42},"updated":"2017-08-16 02:11:52.000000000","message":"Ditto.","commit_id":"08e6e8404499bdc8109e7a5c8e684eb4f5c55259"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6181bb36ae97ade2c2829217eefe91a94c56e8e5","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        expected_vr \u003d \u0027expected_validation_resources\u0027"},{"line_number":101,"context_line":"        mock_create_vr.return_value \u003d expected_vr"},{"line_number":102,"context_line":"        obtained_vr \u003d self.test_test_class.get_validation_resources(osclients)"},{"line_number":103,"context_line":"        mock_create_vr.asssert_called_once()"},{"line_number":104,"context_line":"        self.assertIn(osclients, mock_create_vr.call_args_list[0][0])"},{"line_number":105,"context_line":"        self.assertEqual(expected_vr, obtained_vr)"},{"line_number":106,"context_line":"        self.assertIn(osclients, self.test_test_class._validation_resources)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f436f4f_4101a705","line":103,"range":{"start_line":103,"start_character":23,"end_line":103,"end_character":42},"in_reply_to":"9f436f4f_1801d706","updated":"2017-08-16 09:34:21.000000000","message":"Done","commit_id":"08e6e8404499bdc8109e7a5c8e684eb4f5c55259"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"bf9b561ad394f95e719ec0c49399e8bc269cee68","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        expected_vr \u003d \u0027expected_validation_resources\u0027"},{"line_number":69,"context_line":"        mock_create_vr.return_value \u003d expected_vr"},{"line_number":70,"context_line":"        obtained_vr \u003d self.test_test_class.get_validation_resources(osclients)"},{"line_number":71,"context_line":"        self.assertEqual(mock_create_vr.call_count, 1)"},{"line_number":72,"context_line":"        self.assertIn(osclients, mock_create_vr.call_args_list[0][0])"},{"line_number":73,"context_line":"        self.assertEqual(expected_vr, obtained_vr)"},{"line_number":74,"context_line":"        self.assertIn(osclients, self.test_test_class._validation_resources)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f436f4f_3fe90ee5","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":54},"updated":"2017-08-16 16:33:28.000000000","message":"So the assertion you had before is \"safe\" with autospec because mock_create_vr.asssert_called_once() (3 s\u0027s) should result in an AttributeError (while mock_create_vr.assert_called_once() (2 s\u0027s) should still work), but this is equivalent so why not.","commit_id":"7b04d85d14e4df9b89e33f0cbf2311714e7bd55f"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"f46cc90b09f2e5e4a20ca547ae36fbb006cb0f47","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        expected_vr \u003d \u0027expected_validation_resources\u0027"},{"line_number":69,"context_line":"        mock_create_vr.return_value \u003d expected_vr"},{"line_number":70,"context_line":"        obtained_vr \u003d self.test_test_class.get_validation_resources(osclients)"},{"line_number":71,"context_line":"        self.assertEqual(mock_create_vr.call_count, 1)"},{"line_number":72,"context_line":"        self.assertIn(osclients, mock_create_vr.call_args_list[0][0])"},{"line_number":73,"context_line":"        self.assertEqual(expected_vr, obtained_vr)"},{"line_number":74,"context_line":"        self.assertIn(osclients, self.test_test_class._validation_resources)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f436f4f_7258edf8","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":54},"in_reply_to":"9f436f4f_3fe90ee5","updated":"2017-08-16 17:11:14.000000000","message":"well in turns out that assert_called_once is not defined for mock_create_vr ... not even with two \u0027s\u0027 only :)","commit_id":"7b04d85d14e4df9b89e33f0cbf2311714e7bd55f"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"33185ad7b1c20901b7bc4f804857dcc0384b72e2","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        expected_vr \u003d \u0027expected_validation_resources\u0027"},{"line_number":69,"context_line":"        mock_create_vr.return_value \u003d expected_vr"},{"line_number":70,"context_line":"        obtained_vr \u003d self.test_test_class.get_validation_resources(osclients)"},{"line_number":71,"context_line":"        self.assertEqual(mock_create_vr.call_count, 1)"},{"line_number":72,"context_line":"        self.assertIn(osclients, mock_create_vr.call_args_list[0][0])"},{"line_number":73,"context_line":"        self.assertEqual(expected_vr, obtained_vr)"},{"line_number":74,"context_line":"        self.assertIn(osclients, self.test_test_class._validation_resources)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f436f4f_7297cd3b","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":54},"in_reply_to":"9f436f4f_7258edf8","updated":"2017-08-16 17:18:22.000000000","message":"Hmm... never had that happen to me, no idea why that\u0027s the case.","commit_id":"7b04d85d14e4df9b89e33f0cbf2311714e7bd55f"}]}
