)]}'
{"tempest/api/compute/servers/test_metadata_injection.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"c641bfc8a876dada1d643d32d4ea0b9b4dfed9c2","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class TestMetadataInjection(manager.ScenarioTest):"},{"line_number":30,"context_line":"    \"\"\"Verifying functionality of metadata injection into instance"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    The following is the scenario outline:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_67dc0c75","line":29,"range":{"start_line":29,"start_character":36,"end_line":29,"end_character":48},"updated":"2015-06-11 14:07:20.000000000","message":"You should not inherit from ScenarioTest but more likely from base.BaseV2ComputeTest","commit_id":"8846611916cab5f7eaca38abc18db81b3865a6f9"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"78cf2c103e73eac175d4da14fed23a2cec0da1a0","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        server \u003d self.create_server(image\u003dCONF.compute.image_ref,"},{"line_number":54,"context_line":"                                    create_kwargs\u003dcreate_kwargs)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # create and floating IP to instance"},{"line_number":57,"context_line":"        if CONF.compute.use_floatingip_for_ssh:"},{"line_number":58,"context_line":"            server_ip \u003d self.create_floating_ip(server)[\u0027ip\u0027]"},{"line_number":59,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_bd70ec0b","line":56,"updated":"2015-06-11 02:24:57.000000000","message":"I think this was meant to say \"create and add floating...\"","commit_id":"8846611916cab5f7eaca38abc18db81b3865a6f9"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"78cf2c103e73eac175d4da14fed23a2cec0da1a0","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            server_ip \u003d self.create_floating_ip(server)[\u0027ip\u0027]"},{"line_number":59,"context_line":"        else:"},{"line_number":60,"context_line":"            network_name_for_ssh \u003d server[\u0027addresses\u0027].keys()[0]"},{"line_number":61,"context_line":"            server_ip \u003d server[\u0027addresses\u0027][network_name_for_ssh][0][\u0027addr\u0027]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # check metadata"},{"line_number":64,"context_line":"        ssh_client \u003d self.get_remote_client(server_ip)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_9d24100d","line":61,"updated":"2015-06-11 02:24:57.000000000","message":"This selects the first IP address for the network instead of respecting the configured ip_version_for_ssh (this can be problematic if this happens to pick an IPv6 address and your tests are being run from a network without IPv6 routing). Was this intentional?","commit_id":"8846611916cab5f7eaca38abc18db81b3865a6f9"}],"tempest/api/compute/servers/test_server_metadata.py":[{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"e74d3797c66646c58051124d9c97e1f6097d56f0","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        self.assertEqual(expected, resp_metadata)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class ServerMetadataInsideTestJSON(base.BaseV2ComputeTest):"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @classmethod"},{"line_number":122,"context_line":"    def setup_credentials(cls):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_65e987e5","line":119,"updated":"2015-08-13 14:16:15.000000000","message":"What about ServerMetadataInsideTestJSON - \u003e ServerMetadataInjectionTestJSON?","commit_id":"75c5052fd04629c15aa92d7546c01a433b5fbba0"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"084b59fa024c3175acfa4ec18ebb9e1034c7c9bb","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        self.assertEqual(expected, resp_metadata)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class ServerMetadataInsideTestJSON(base.BaseV2ComputeTest):"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @classmethod"},{"line_number":122,"context_line":"    def setup_credentials(cls):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_384722a4","line":119,"in_reply_to":"1a4dcd0f_65e987e5","updated":"2015-08-13 14:39:37.000000000","message":"Please, look at the comment by Jordan Pittier","commit_id":"75c5052fd04629c15aa92d7546c01a433b5fbba0"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"e74d3797c66646c58051124d9c97e1f6097d56f0","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        self.server \u003d self.create_test_server("},{"line_number":138,"context_line":"            validatable\u003dTrue,"},{"line_number":139,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":140,"context_line":"            adminPass\u003dadmin_pass,"},{"line_number":141,"context_line":"            meta\u003dmetadata"},{"line_number":142,"context_line":"        )"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_25d93f22","line":140,"updated":"2015-08-13 14:16:15.000000000","message":"Is admin_pass really needed here?","commit_id":"75c5052fd04629c15aa92d7546c01a433b5fbba0"},{"author":{"_account_id":13454,"name":"Alexander Gubanov","email":"ogubanov@mirantis.com","username":"hop"},"change_message_id":"084b59fa024c3175acfa4ec18ebb9e1034c7c9bb","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        self.server \u003d self.create_test_server("},{"line_number":138,"context_line":"            validatable\u003dTrue,"},{"line_number":139,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":140,"context_line":"            adminPass\u003dadmin_pass,"},{"line_number":141,"context_line":"            meta\u003dmetadata"},{"line_number":142,"context_line":"        )"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_b8e8127c","line":140,"in_reply_to":"1a4dcd0f_25d93f22","updated":"2015-08-13 14:39:37.000000000","message":"yes, without you will get an error\nERROR tempest_lib.common.ssh AuthenticationException: Authentication failed.","commit_id":"75c5052fd04629c15aa92d7546c01a433b5fbba0"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"e900e1fbbb9e9f79693eed94d68a4e39e72e61a2","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        cmd \u003d \u0027curl http://169.254.169.254/openstack/latest/meta_data.json\u0027"},{"line_number":151,"context_line":"        got_metadata \u003d ssh_client.exec_command(cmd)"},{"line_number":152,"context_line":"        self.assertEqual(ast.literal_eval(got_metadata)[\u0027meta\u0027], metadata)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_bf0a06d1","line":152,"updated":"2015-08-18 12:06:25.000000000","message":"Wrong order of arguments.\n\n    self.assertEqual(expected, actual)\n    self.assertEqual(metadata, ast.literal_eval(got_metadata)[\u0027meta\u0027])","commit_id":"75c5052fd04629c15aa92d7546c01a433b5fbba0"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"035bc8de2e70a1a4b5255a29c2fb249034ac79a0","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import ast"},{"line_number":17,"context_line":"import testtools"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from tempest.api.compute import base"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_efee57b3","line":16,"updated":"2015-08-19 10:26:08.000000000","message":"It looks like we should keep a blank line between ast and testtools because ast is a Python standard library.","commit_id":"65116191174d225428fbfa80f5833f92b6b45231"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"035bc8de2e70a1a4b5255a29c2fb249034ac79a0","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        cmd \u003d \u0027curl http://169.254.169.254/openstack/latest/meta_data.json\u0027"},{"line_number":151,"context_line":"        got_metadata \u003d ssh_client.exec_command(cmd)"},{"line_number":152,"context_line":"        self.assertEqual(metadata, ast.literal_eval(got_metadata)[\u0027meta\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_2fe44f0b","line":152,"updated":"2015-08-19 10:26:08.000000000","message":"I think a small message while failing this assertEqual would be helpful.","commit_id":"65116191174d225428fbfa80f5833f92b6b45231"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"96d4a7c69dc32c83488430839deec2fbcca98629","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        cmd \u003d \u0027curl http://169.254.169.254/openstack/latest/meta_data.json\u0027"},{"line_number":152,"context_line":"        result \u003d ssh_client.exec_command(cmd)"},{"line_number":153,"context_line":"        if result:"},{"line_number":154,"context_line":"            msg \u003d (\u0027Failed while verifying metadata on server. Result \u0027"},{"line_number":155,"context_line":"                   \u0027of command \"%s\" is NOT \"%s\".\u0027 % (cmd, metadata))"},{"line_number":156,"context_line":"            self.assertEqual(metadata, ast.literal_eval(result)[\u0027meta\u0027], msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_968f9929","line":153,"updated":"2015-08-19 19:47:04.000000000","message":"if result equals \u0027\u0027 (blank line), this test will have success and this is wrong. I am not sure that we need this \"if\" at all.","commit_id":"57876fc5bbe32bd95e5948b66155922879bc9fb4"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"d70949da34356e758183336023ddd8cd41a9caea","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        cmd \u003d \u0027curl http://169.254.169.254/openstack/latest/meta_data.json\u0027"},{"line_number":152,"context_line":"        result \u003d ssh_client.exec_command(cmd)"},{"line_number":153,"context_line":"        if result:"},{"line_number":154,"context_line":"            msg \u003d (\u0027Failed while verifying metadata on server. Result \u0027"},{"line_number":155,"context_line":"                   \u0027of command \"%s\" is NOT \"%s\".\u0027 % (cmd, metadata))"},{"line_number":156,"context_line":"            self.assertEqual(metadata, ast.literal_eval(result)[\u0027meta\u0027], msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_78b3d3e9","line":153,"in_reply_to":"fa1b9901_968f9929","updated":"2015-08-19 20:05:10.000000000","message":"The literal_eval function call will raise an exception if result is None or \u0027\u0027, so I\u0027m guessing that\u0027s why this is here. So the test doesn\u0027t pass in this case, an \u0027else\u0027 branch with a \u0027self.fail\u0027 stating that no output was returned from the exec_command call would make sense","commit_id":"57876fc5bbe32bd95e5948b66155922879bc9fb4"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"56b5d1f7a1d0fdb6ce55087f926529c49cc3fb07","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        super(ServerMetadataInsideTestJSON, cls).resource_setup()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    @test.idempotent_id(\u0027a81dcc5a-c68d-49e7-ab0a-a1af51300de7\u0027)"},{"line_number":133,"context_line":"    @testtools.skipUnless(CONF.validation.run_validation,"},{"line_number":134,"context_line":"                          \u0027SSH required for this test\u0027)"},{"line_number":135,"context_line":"    def test_metadata_inside(self):"},{"line_number":136,"context_line":"        admin_pass \u003d self.image_ssh_password"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_c354d122","line":133,"updated":"2015-09-02 09:20:16.000000000","message":"CONF.compute_feature_enabled.metadata_service also needs to be checked.","commit_id":"a31ded9744ed40866cd179387259230a8746480a"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"42833a13971ed451267c354870f0cbcf77c8fe92","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                   \u0027of command \"%s\" is NOT \"%s\".\u0027 % (cmd, metadata))"},{"line_number":156,"context_line":"            self.assertEqual(metadata, ast.literal_eval(result)[\u0027meta\u0027], msg)"},{"line_number":157,"context_line":"        else:"},{"line_number":158,"context_line":"            raise ValueError(\u0027Result of command %s is empty.\u0027 % cmd)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_c35967fe","line":158,"updated":"2015-08-21 13:33:36.000000000","message":"I am not sure, but I think this exception is not suitable. Maybe I am wrong. Perhaps we should add one more SSH exception to tempest-lib and raise it here.\n\nSomething like SSHCommandResultEmpty.\n\nAnyway, I would like to hear opinions of other reviewers.","commit_id":"a31ded9744ed40866cd179387259230a8746480a"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"9b111ea5215e079bed68096ee578d6691dfb622c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                   \u0027of command \"%s\" is NOT \"%s\".\u0027 % (cmd, metadata))"},{"line_number":156,"context_line":"            self.assertEqual(metadata, ast.literal_eval(result)[\u0027meta\u0027], msg)"},{"line_number":157,"context_line":"        else:"},{"line_number":158,"context_line":"            raise ValueError(\u0027Result of command %s is empty.\u0027 % cmd)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_5bc97cab","line":158,"in_reply_to":"da20952f_03be48ff","updated":"2015-09-08 14:41:29.000000000","message":"Yes, I guess we can use here\n\n    self.assertNotEmpty(result)\n    msg \u003d ...\n    self.assertEqual(metadata, ast.literal_eval(result)[\u0027meta\u0027], msg)","commit_id":"a31ded9744ed40866cd179387259230a8746480a"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"56b5d1f7a1d0fdb6ce55087f926529c49cc3fb07","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                   \u0027of command \"%s\" is NOT \"%s\".\u0027 % (cmd, metadata))"},{"line_number":156,"context_line":"            self.assertEqual(metadata, ast.literal_eval(result)[\u0027meta\u0027], msg)"},{"line_number":157,"context_line":"        else:"},{"line_number":158,"context_line":"            raise ValueError(\u0027Result of command %s is empty.\u0027 % cmd)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_03be48ff","line":158,"in_reply_to":"da20952f_aeaf6b7c","updated":"2015-09-02 09:20:16.000000000","message":"If a test cases fails with something other than failureException/AssertionError it can be seen as an issue in the test case itself.\nIf it is not an issue, you just don\u0027t need the if: block,\nyou will get the ERROR flag :)\n\nOtherwise you should you some assert* method before literal_eval.","commit_id":"a31ded9744ed40866cd179387259230a8746480a"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"5fee70958cfbbcbafc91e899bd105596e9f3df87","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                   \u0027of command \"%s\" is NOT \"%s\".\u0027 % (cmd, metadata))"},{"line_number":156,"context_line":"            self.assertEqual(metadata, ast.literal_eval(result)[\u0027meta\u0027], msg)"},{"line_number":157,"context_line":"        else:"},{"line_number":158,"context_line":"            raise ValueError(\u0027Result of command %s is empty.\u0027 % cmd)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_70c0d850","line":158,"in_reply_to":"fa1b9901_100cfcea","updated":"2015-08-25 14:19:34.000000000","message":"(as suggested by Daryl Walleck)","commit_id":"a31ded9744ed40866cd179387259230a8746480a"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"949ee894982f14795001141a6d9e7db607f2c306","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                   \u0027of command \"%s\" is NOT \"%s\".\u0027 % (cmd, metadata))"},{"line_number":156,"context_line":"            self.assertEqual(metadata, ast.literal_eval(result)[\u0027meta\u0027], msg)"},{"line_number":157,"context_line":"        else:"},{"line_number":158,"context_line":"            raise ValueError(\u0027Result of command %s is empty.\u0027 % cmd)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_aeaf6b7c","line":158,"in_reply_to":"fa1b9901_70c0d850","updated":"2015-08-26 17:47:44.000000000","message":"Jordan, I think self.fail() is OK for unit tests, but here it seems to me we should raise some exception.","commit_id":"a31ded9744ed40866cd179387259230a8746480a"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"452b863440aa0ed3e83f380a4f9a51137e4a07cb","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                   \u0027of command \"%s\" is NOT \"%s\".\u0027 % (cmd, metadata))"},{"line_number":156,"context_line":"            self.assertEqual(metadata, ast.literal_eval(result)[\u0027meta\u0027], msg)"},{"line_number":157,"context_line":"        else:"},{"line_number":158,"context_line":"            raise ValueError(\u0027Result of command %s is empty.\u0027 % cmd)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_100cfcea","line":158,"in_reply_to":"fa1b9901_c35967fe","updated":"2015-08-25 14:18:45.000000000","message":"I am not sure about ValueError. What about self.fail(\u0027Result of command %s is empty.\u0027 % cmd) ?","commit_id":"a31ded9744ed40866cd179387259230a8746480a"}]}
