[PATCH v5 06/16] qemu-iotests: delay QMP socket timers

2021-06-04 Thread Emanuele Giuseppe Esposito
Attaching gdbserver implies that the qmp socket
should wait indefinitely for an answer from QEMU.

For Timeout class, create a @contextmanager that
switches Timeout with NoTimeout (empty context manager)
so that if --gdb is set, no timeout will be triggered.

Signed-off-by: Emanuele Giuseppe Esposito 
Reviewed-by: Vladimir Sementsov-Ogievskiy 
---
 tests/qemu-iotests/iotests.py | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index c86f239d81..d4bfd8f1d6 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -486,6 +486,13 @@ def __exit__(self, exc_type, value, traceback):
 def timeout(self, signum, frame):
 raise Exception(self.errmsg)
 
+@contextmanager
+def NoTimeout():
+yield
+
+if qemu_gdb:
+Timeout = NoTimeout
+
 def file_pattern(name):
 return "{0}-{1}".format(os.getpid(), name)
 
@@ -575,7 +582,7 @@ class VM(qtest.QEMUQtestMachine):
 
 def __init__(self, path_suffix=''):
 name = "qemu%s-%d" % (path_suffix, os.getpid())
-timer = 15.0
+timer = 15.0 if not qemu_gdb else None
 super().__init__(qemu_prog, qemu_opts, name=name,
  base_temp_dir=test_dir,
  socket_scm_helper=socket_scm_helper,
-- 
2.30.2




Re: [PATCH v5 06/16] qemu-iotests: delay QMP socket timers

2021-06-14 Thread Emanuele Giuseppe Esposito




On 04/06/2021 11:17, Emanuele Giuseppe Esposito wrote:

Attaching gdbserver implies that the qmp socket
should wait indefinitely for an answer from QEMU.

For Timeout class, create a @contextmanager that
switches Timeout with NoTimeout (empty context manager)
so that if --gdb is set, no timeout will be triggered.

Signed-off-by: Emanuele Giuseppe Esposito 
Reviewed-by: Vladimir Sementsov-Ogievskiy 
---
  tests/qemu-iotests/iotests.py | 9 -
  1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index c86f239d81..d4bfd8f1d6 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -486,6 +486,13 @@ def __exit__(self, exc_type, value, traceback):
  def timeout(self, signum, frame):
  raise Exception(self.errmsg)
  
+@contextmanager

+def NoTimeout():
+yield
+
+if qemu_gdb:
+Timeout = NoTimeout
+


@Vladimir or anyone expert enough in python:
This fix above works, but I just noticed that makes pylint (test 297) 
fail. My bad, I should have tried it before.


The reason for that is

+Timeout = NoTimeout


They obviously have different types.


+iotests.py:507: error: Cannot assign to a type
+iotests.py:507: error: Incompatible types in assignment (expression has type "Callable[[], 
_GeneratorContextManager[Any]]", variable has type "Type[Timeout]")
+Found 2 errors in 1 file (checked 1 source file)


Any ideas on how to fix this? Otherwise I will get rid of it.

Thank you,
Emanuele


  def file_pattern(name):
  return "{0}-{1}".format(os.getpid(), name)
  
@@ -575,7 +582,7 @@ class VM(qtest.QEMUQtestMachine):
  
  def __init__(self, path_suffix=''):

  name = "qemu%s-%d" % (path_suffix, os.getpid())
-timer = 15.0
+timer = 15.0 if not qemu_gdb else None
  super().__init__(qemu_prog, qemu_opts, name=name,
   base_temp_dir=test_dir,
   socket_scm_helper=socket_scm_helper,






Re: [PATCH v5 06/16] qemu-iotests: delay QMP socket timers

2021-06-15 Thread Vladimir Sementsov-Ogievskiy

14.06.2021 13:36, Emanuele Giuseppe Esposito wrote:



On 04/06/2021 11:17, Emanuele Giuseppe Esposito wrote:

Attaching gdbserver implies that the qmp socket
should wait indefinitely for an answer from QEMU.

For Timeout class, create a @contextmanager that
switches Timeout with NoTimeout (empty context manager)
so that if --gdb is set, no timeout will be triggered.

Signed-off-by: Emanuele Giuseppe Esposito 
Reviewed-by: Vladimir Sementsov-Ogievskiy 
---
  tests/qemu-iotests/iotests.py | 9 -
  1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index c86f239d81..d4bfd8f1d6 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -486,6 +486,13 @@ def __exit__(self, exc_type, value, traceback):
  def timeout(self, signum, frame):
  raise Exception(self.errmsg)
+@contextmanager
+def NoTimeout():
+    yield
+
+if qemu_gdb:
+    Timeout = NoTimeout
+


@Vladimir or anyone expert enough in python:
This fix above works, but I just noticed that makes pylint (test 297) fail. My 
bad, I should have tried it before.


I think, just make mypy ignore it, like:

   Timeout = NoTimeout # type: ignore




The reason for that is

+    Timeout = NoTimeout


They obviously have different types.


+iotests.py:507: error: Cannot assign to a type
+iotests.py:507: error: Incompatible types in assignment (expression has type "Callable[[], 
_GeneratorContextManager[Any]]", variable has type "Type[Timeout]")
+Found 2 errors in 1 file (checked 1 source file)


Any ideas on how to fix this? Otherwise I will get rid of it.

Thank you,
Emanuele


  def file_pattern(name):
  return "{0}-{1}".format(os.getpid(), name)
@@ -575,7 +582,7 @@ class VM(qtest.QEMUQtestMachine):
  def __init__(self, path_suffix=''):
  name = "qemu%s-%d" % (path_suffix, os.getpid())
-    timer = 15.0
+    timer = 15.0 if not qemu_gdb else None
  super().__init__(qemu_prog, qemu_opts, name=name,
   base_temp_dir=test_dir,
   socket_scm_helper=socket_scm_helper,






--
Best regards,
Vladimir



Re: [PATCH v5 06/16] qemu-iotests: delay QMP socket timers

2021-06-16 Thread Emanuele Giuseppe Esposito




On 15/06/2021 09:57, Vladimir Sementsov-Ogievskiy wrote:

14.06.2021 13:36, Emanuele Giuseppe Esposito wrote:



On 04/06/2021 11:17, Emanuele Giuseppe Esposito wrote:

Attaching gdbserver implies that the qmp socket
should wait indefinitely for an answer from QEMU.

For Timeout class, create a @contextmanager that
switches Timeout with NoTimeout (empty context manager)
so that if --gdb is set, no timeout will be triggered.

Signed-off-by: Emanuele Giuseppe Esposito 
Reviewed-by: Vladimir Sementsov-Ogievskiy 
---
  tests/qemu-iotests/iotests.py | 9 -
  1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/tests/qemu-iotests/iotests.py 
b/tests/qemu-iotests/iotests.py

index c86f239d81..d4bfd8f1d6 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -486,6 +486,13 @@ def __exit__(self, exc_type, value, traceback):
  def timeout(self, signum, frame):
  raise Exception(self.errmsg)
+@contextmanager
+def NoTimeout():
+    yield
+
+if qemu_gdb:
+    Timeout = NoTimeout
+


@Vladimir or anyone expert enough in python:
This fix above works, but I just noticed that makes pylint (test 297) 
fail. My bad, I should have tried it before.


I think, just make mypy ignore it, like:

    Timeout = NoTimeout # type: ignore




I think I am going to drop this change.
This series already has patch 2 to ignore another pylint warning, plus 
another separate patch was sent to silence a warning that pops out with 
newer versions of pylint.


So once this gets in, feel free to add a patch with this change.

Emanuele


The reason for that is

+    Timeout = NoTimeout


They obviously have different types.


+iotests.py:507: error: Cannot assign to a type
+iotests.py:507: error: Incompatible types in assignment (expression 
has type "Callable[[], _GeneratorContextManager[Any]]", variable has 
type "Type[Timeout]")

+Found 2 errors in 1 file (checked 1 source file)


Any ideas on how to fix this? Otherwise I will get rid of it.

Thank you,
Emanuele


  def file_pattern(name):
  return "{0}-{1}".format(os.getpid(), name)
@@ -575,7 +582,7 @@ class VM(qtest.QEMUQtestMachine):
  def __init__(self, path_suffix=''):
  name = "qemu%s-%d" % (path_suffix, os.getpid())
-    timer = 15.0
+    timer = 15.0 if not qemu_gdb else None
  super().__init__(qemu_prog, qemu_opts, name=name,
   base_temp_dir=test_dir,
   socket_scm_helper=socket_scm_helper,











Re: [PATCH v5 06/16] qemu-iotests: delay QMP socket timers

2021-06-16 Thread Vladimir Sementsov-Ogievskiy

16.06.2021 10:09, Emanuele Giuseppe Esposito wrote:



On 15/06/2021 09:57, Vladimir Sementsov-Ogievskiy wrote:

14.06.2021 13:36, Emanuele Giuseppe Esposito wrote:



On 04/06/2021 11:17, Emanuele Giuseppe Esposito wrote:

Attaching gdbserver implies that the qmp socket
should wait indefinitely for an answer from QEMU.

For Timeout class, create a @contextmanager that
switches Timeout with NoTimeout (empty context manager)
so that if --gdb is set, no timeout will be triggered.

Signed-off-by: Emanuele Giuseppe Esposito 
Reviewed-by: Vladimir Sementsov-Ogievskiy 
---
  tests/qemu-iotests/iotests.py | 9 -
  1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py
index c86f239d81..d4bfd8f1d6 100644
--- a/tests/qemu-iotests/iotests.py
+++ b/tests/qemu-iotests/iotests.py
@@ -486,6 +486,13 @@ def __exit__(self, exc_type, value, traceback):
  def timeout(self, signum, frame):
  raise Exception(self.errmsg)
+@contextmanager
+def NoTimeout():
+    yield
+
+if qemu_gdb:
+    Timeout = NoTimeout
+


@Vladimir or anyone expert enough in python:
This fix above works, but I just noticed that makes pylint (test 297) fail. My 
bad, I should have tried it before.


I think, just make mypy ignore it, like:

    Timeout = NoTimeout # type: ignore




I think I am going to drop this change.
This series already has patch 2 to ignore another pylint warning, plus another 
separate patch was sent to silence a warning that pops out with newer versions 
of pylint.


pylint complains should not be a reason for bad pattern. Shadowing the whole 
class is not good too, but it's at least a separate small hack, instead of 
silencing the whole logic of existing well-defined class internally with help 
of global variable.

--
Best regards,
Vladimir