)]}'
{"tempest/scenario/test_server_basic_ops.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"5b9c08e5e8be0d214f4f572fbc35c8f23e6cec60","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            floating_ip \u003d self.floating_ip[\u0027ip\u0027]"},{"line_number":104,"context_line":"            cmd \u003d \u0027curl http://169.254.169.254/latest/meta-data/public-ipv4\u0027"},{"line_number":105,"context_line":"            start \u003d time.time()"},{"line_number":106,"context_line":"            while time.time() - start \u003c CONF.compute.build_timeout:"},{"line_number":107,"context_line":"                result \u003d self.ssh_client.exec_command(cmd)"},{"line_number":108,"context_line":"                if result:"},{"line_number":109,"context_line":"                    msg \u003d (\u0027Failed while verifying metadata on server. Result \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_45945043","line":106,"updated":"2015-08-14 14:23:04.000000000","message":"So why not just use test.call_until_true() here? This seems like basically the same thing.","commit_id":"ae0264fa5711c00ec5d8fa01669bc43fb8521a7e"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"c6fd3ffc89efceb2b4f9150f779be0874a784df7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            floating_ip \u003d self.floating_ip[\u0027ip\u0027]"},{"line_number":104,"context_line":"            cmd \u003d \u0027curl http://169.254.169.254/latest/meta-data/public-ipv4\u0027"},{"line_number":105,"context_line":"            start \u003d time.time()"},{"line_number":106,"context_line":"            while time.time() - start \u003c CONF.compute.build_timeout:"},{"line_number":107,"context_line":"                result \u003d self.ssh_client.exec_command(cmd)"},{"line_number":108,"context_line":"                if result:"},{"line_number":109,"context_line":"                    msg \u003d (\u0027Failed while verifying metadata on server. Result \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_cbc5cf0a","line":106,"in_reply_to":"1a4dcd0f_45945043","updated":"2015-08-14 14:59:41.000000000","message":"Matt,\n\n1. test.call_until_true() accepts only \"func\", \"duration\" and \"sleep_for\" parameters. But it is easy to fix by adding *args, **kwargs\n\n    def call_until_true(func, duration, sleep_for, *args, **kwargs):\n        ...\n            if func(*args, **kwargs):\n            ...\n\n2. test.call_until_true() returns True or False, but I need some output from self.ssh_client.exec_command(cmd) to invoke self.assertEqual(floating_ip, result, msg).","commit_id":"ae0264fa5711c00ec5d8fa01669bc43fb8521a7e"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"cdb2dbed37fc576f10cd53cb9013f46fb001b1ff","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            floating_ip \u003d self.floating_ip[\u0027ip\u0027]"},{"line_number":104,"context_line":"            cmd \u003d \u0027curl http://169.254.169.254/latest/meta-data/public-ipv4\u0027"},{"line_number":105,"context_line":"            start \u003d time.time()"},{"line_number":106,"context_line":"            while time.time() - start \u003c CONF.compute.build_timeout:"},{"line_number":107,"context_line":"                result \u003d self.ssh_client.exec_command(cmd)"},{"line_number":108,"context_line":"                if result:"},{"line_number":109,"context_line":"                    msg \u003d (\u0027Failed while verifying metadata on server. Result \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_a63e7ad8","line":106,"in_reply_to":"1a4dcd0f_cbc5cf0a","updated":"2015-08-14 15:14:15.000000000","message":"Ok, but looping ssh commands isn\u0027t a 1 off thing. We do it in other places as well. How are they handling it? I agree you can always expand the method, or make a separate one for this case. But, I don\u0027t think manually doing loop code in a test module is the right solution that\u0027s how we end up with a bunch of slightly different one-offwait loop implementations that behave slightly differently.\n\nFor a quick workaround you could do something like:\n\n  floating_ip \u003d self.floating_ip[\u0027ip\u0027]\n  cmd \u003d \u0027curl http://169.254.169.254/latest/meta-data/public-ipv4\u0027\n  def _ssh_wait():\n      result \u003d self.ssh_client.exec_command(cmd)\n      if result:\n          msg \u003d (\u0027Failed while verifying metadata on server. Result \u0027\n\t\t      \u0027of command \"%s\" is NOT \"%s\".\u0027 % (cmd, floating_ip))\n          self.assertEqual(floating_ip, result, msg)\n          return True\n      return False\n  if not test.call_until_true(_ssh_wait, CONF.compute.build_timeout,\n                                       CONF.compute.build_interval)\n      raise exceptions.TimeoutException()\n\nAlthough that likely won\u0027t work as typed, but I think the basic idea will.","commit_id":"ae0264fa5711c00ec5d8fa01669bc43fb8521a7e"},{"author":{"_account_id":8001,"name":"John Warren","email":"jswarren@us.ibm.com","username":"jswarren"},"change_message_id":"96101ed935ee49cf0abb9f3f4a71f2ad91d7ef26","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            def exec_cmd_and_verify_output():"},{"line_number":103,"context_line":"                floating_ip \u003d self.floating_ip[\u0027ip\u0027]"},{"line_number":104,"context_line":"                cmd \u003d (\u0027curl http://\u0027"},{"line_number":105,"context_line":"                       \u0027169.254.169.254/latest/meta-data/public-ipv4\u0027)"},{"line_number":106,"context_line":"                result \u003d self.ssh_client.exec_command(cmd)"},{"line_number":107,"context_line":"                if result:"},{"line_number":108,"context_line":"                    msg \u003d (\u0027Failed while verifying metadata on server. Result \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_5675da2f","line":105,"updated":"2015-08-14 18:38:00.000000000","message":"Maybe use variable for the URL so you\u0027re not repeating the same literal in two places.","commit_id":"00ef7b9935cc0da6b6049833804a994e6d9b81c7"},{"author":{"_account_id":8001,"name":"John Warren","email":"jswarren@us.ibm.com","username":"jswarren"},"change_message_id":"96101ed935ee49cf0abb9f3f4a71f2ad91d7ef26","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                                        CONF.compute.build_timeout,"},{"line_number":115,"context_line":"                                        CONF.compute.build_interval):"},{"line_number":116,"context_line":"                msg \u003d (\u0027Timed out while waiting to verify metadata on server.\u0027"},{"line_number":117,"context_line":"                       \u0027 http://169.254.169.254/latest/meta-data/public-ipv4 \u0027"},{"line_number":118,"context_line":"                       \u0027is empty.\u0027)"},{"line_number":119,"context_line":"                raise exceptions.TimeoutException(msg)"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_96c9225d","line":117,"updated":"2015-08-14 18:38:00.000000000","message":"See variable comment for line #105.","commit_id":"00ef7b9935cc0da6b6049833804a994e6d9b81c7"}]}
