test/py: Support setting up specific timeout
PATCH 1/1 test/py: Support setting up specific timeout
Large file transfers, flash erasing and more complicated tests requires more time to finish. Provide a way to setup specific timeout directly in test.
For example description for 50s test:
timeout = 50000
with u_boot_console.temporary_timeout(timeout):
u_boot_console.run_command(...)
---
test/py/u_boot_console_base.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+)
test/py/u_boot_console_base.py +33 -0
@@ -56,6 +56,24 @@ class ConsoleDisableCheck(object): self.console.disable_check_count[self.check_type] -= 1 self.console.eval_bad_patterns() + +class ConsoleSetupTimeout(object): + """Context manager (for Python's with statement) that temporarily setup + timeout for specific comnand. This is useful when execution time is greater + then default 30s.""" + + def __init__(self, console, timeout): + self.console = console + self.console.orig_timeout = self.console.p.timeout + self.console.p.timeout = timeout + + def __enter__(self): + return self + + def __exit__(self, extype, value, traceback): + self.console.p = self.console.get_spawn() + self.console.p.timeout = self.console.orig_timeout + class ConsoleBase(object): """The interface through which test functions interact with the U-Boot console. This primarily involves executing shell commands, capturing their
@@ -391,3 +409,18 @@ class ConsoleBase(object): """ return ConsoleDisableCheck(self, check_type) + + def temporary_timeout(self, timeout): + """Temporarily setup different timeout for commands. + + Create a new context manager (for use with the "with" statement) which + temporarily change timeout. + + Args: + timeout: Time in miliseconds. + + Returns: + A context manager object. + """ + + return ConsoleSetupTimeout(self, timeout)
Signature · 1 line
1.9.1
PATCH 1/1 test/py: Support setting up specific timeout
Quoted 29 lines · Michal Simek
Large file transfers, flash erasing and more complicated tests requires more time to finish. Provide a way to setup specific timeout directly in test.
For example description for 50s test:
timeout = 50000
withu_boot_console.temporary_timeout(timeout):
u_boot_console.run_command(...)Signed-off-by Michal Simek <[email protected]>---
test/py/u_boot_console_base.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+)test/py/u_boot_console_base.py +6
-0@@ -56,6 +56,24 @@ class ConsoleDisableCheck(object): self.console.disable_check_count[self.check_type] -= 1 self.console.eval_bad_patterns() + +class ConsoleSetupTimeout(object): + """Context manager (for Python's with statement) that temporarily setup + timeout for specific comnand. This is useful when execution time is greater + then default 30s.""" +
test/py/u_boot_console_base.py class ConsoleDisableCheck(object): · line 74
Quoted 10 lines
test/py/u_boot_console_base.py +10
-0+ def __init__(self, console, timeout): + self.console = console + self.console.orig_timeout = self.console.p.timeout + self.console.p.timeout = timeout + + def __enter__(self): + return self + + def __exit__(self, extype, value, traceback): + self.console.p = self.console.get_spawn()
This line should be there. It is resetting console. I will do more testing on real hw not on qemu.
Thanks,
Michal
Quoted 25 lines
test/py/u_boot_console_base.py +17
-0+ self.console.p.timeout = self.console.orig_timeout + class ConsoleBase(object): """The interface through which test functions interact with the U-Boot console. This primarily involves executing shell commands, capturing their@@ -391,3 +409,18 @@ class ConsoleBase(object): """ return ConsoleDisableCheck(self, check_type) + + def temporary_timeout(self, timeout): + """Temporarily setup different timeout for commands. + + Create a new context manager (for use with the "with" statement) which + temporarily change timeout. + + Args: + timeout: Time in miliseconds. + + Returns: + A context manager object. + """ + + return ConsoleSetupTimeout(self, timeout)
Signature · 14 lines
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91 w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/ Maintainer of Linux kernel - Xilinx Zynq ARM architecture Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: OpenPGP digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160518/f69b853c/attachment.sig>
PATCH 1/1 test/py: Support setting up specific timeout
Quoted 44 lines · Michal Simek
Quoted 29 lines · Michal Simek
Large file transfers, flash erasing and more complicated tests requires more time to finish. Provide a way to setup specific timeout directly in test.
For example description for 50s test:
timeout = 50000
withu_boot_console.temporary_timeout(timeout):
u_boot_console.run_command(...)Signed-off-by Michal Simek <[email protected]>---
test/py/u_boot_console_base.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+)test/py/u_boot_console_base.py +6
-0@@ -56,6 +56,24 @@ class ConsoleDisableCheck(object): self.console.disable_check_count[self.check_type] -= 1 self.console.eval_bad_patterns() + +class ConsoleSetupTimeout(object): + """Context manager (for Python's with statement) that temporarily setup + timeout for specific comnand. This is useful when execution time is greater + then default 30s.""" +test/py/u_boot_console_base.py class ConsoleDisableCheck(object): · line 74
Quoted 10 lines
test/py/u_boot_console_base.py +10
-0+ def __init__(self, console, timeout): + self.console = console + self.console.orig_timeout = self.console.p.timeout + self.console.p.timeout = timeout + + def __enter__(self): + return self + + def __exit__(self, extype, value, traceback): + self.console.p = self.console.get_spawn()This line should be there. It is resetting console. I will do more testing on real hw not on qemu.
Quoted 4 lines
Thanks,
MichalQuoted 1 line
test/py/u_boot_console_base.py +1
-0+ self.console.p.timeout = self.console.orig_timeout
This is also wrong because self.console.p is closed when timeout occurs which caused exception which calls cleanup_spawn which close p.
This exit should be like this.
def __exit__(self, extype, value, traceback):
if not self.console.p:
return
self.console.p.timeout = self.orig_timeout
Thanks,
Michal
PATCH 1/1 test/py: Support setting up specific timeout
In reply to Michal SimekQuoted 10 lines · Michal Simek
Large file transfers, flash erasing and more complicated tests requires more time to finish. Provide a way to setup specific timeout directly in test.
For example description for 50s test:
timeout = 50000
withu_boot_console.temporary_timeout(timeout):u_boot_console.run_command(...)
test/py/u_boot_console_base.py class ConsoleDisableCheck(object): · line 59
Quoted 4 lines
test/py/u_boot_console_base.py +1
-0self.console.eval_bad_patterns() +
Nit: No need for two blank lines.
test/py/u_boot_console_base.py class ConsoleDisableCheck(object): · line 61
Quoted 2 lines
test/py/u_boot_console_base.py +2
-0+class ConsoleSetupTimeout(object): + """Context manager (for Python's with statement) that temporarily setup
Nit: s/set/sets up/
Quoted 1 line
+ timeout for specific comnand. This is useful when execution time is greater
Nit: s/comnand/command/
test/py/u_boot_console_base.py class ConsoleDisableCheck(object): · line 68
Quoted 6 lines
test/py/u_boot_console_base.py +6
-0+ then default 30s.""" + + def __init__(self, console, timeout): + self.console = console + self.console.orig_timeout = self.console.p.timeout + self.console.p.timeout = timeout
I'd suggest storing console.p not console. That way, even if console.p is replaced because of an issue, you still have a handle to it and don't have to make the code in __exit__ conditional:
self.p = console.p
self.orig_timeout = self.p.timeout
self.p.timeout = timeout
test/py/u_boot_console_base.py class ConsoleDisableCheck(object): · line 75
Quoted 7 lines
test/py/u_boot_console_base.py +7
-0+ + def __enter__(self): + return self + + def __exit__(self, extype, value, traceback): + self.console.p = self.console.get_spawn() + self.console.p.timeout = self.console.orig_timeout
This then doesn't need the conditionals you mentioned in your response to this patch, and can then be:
self.p.timeout = self.orig_timeout
test/py/u_boot_console_base.py class ConsoleBase(object): · line 414
Quoted 2 lines
test/py/u_boot_console_base.py +2
-0+ def temporary_timeout(self, timeout): + """Temporarily setup different timeout for commands.
Nit: s/setup/set up/
test/py/u_boot_console_base.py class ConsoleBase(object): · line 420
Quoted 2 lines
test/py/u_boot_console_base.py +2
-0+ Args: + timeout: Time in miliseconds.
Nit: s/miliseconds/milliseconds/
PATCH 1/1 test/py: Support setting up specific timeout
Quoted 61 lines · Stephen Warren
Quoted 11 lines · Michal Simek
Large file transfers, flash erasing and more complicated tests requires more time to finish. Provide a way to setup specific timeout directly in test.
For example description for 50s test:
timeout = 50000
withu_boot_console.temporary_timeout(timeout):u_boot_console.run_command(...)test/py/u_boot_console_base.py class ConsoleDisableCheck(object): · line 59
Quoted 4 lines
test/py/u_boot_console_base.py +1
-0self.console.eval_bad_patterns() +Nit: No need for two blank lines.
Quoted 3 lines
test/py/u_boot_console_base.py +2
-0+class ConsoleSetupTimeout(object): + """Context manager (for Python's with statement) that temporarilysetup
Nit: s/set/sets up/
Quoted 2 lines
+ timeout for specific comnand. This is useful when execution time
is greaterNit: s/comnand/command/
test/py/u_boot_console_base.py class ConsoleDisableCheck(object): · line 68
Quoted 6 lines
test/py/u_boot_console_base.py +6
-0+ then default 30s.""" + + def __init__(self, console, timeout): + self.console = console + self.console.orig_timeout = self.console.p.timeout + self.console.p.timeout = timeoutI'd suggest storing console.p not console. That way, even if console.p is replaced because of an issue, you still have a handle to it and don't have to make the code in
__exit__conditional:self.p = console.p
self.orig_timeout = self.p.timeout
self.p.timeout = timeouttest/py/u_boot_console_base.py class ConsoleDisableCheck(object): · line 75
Quoted 7 lines
test/py/u_boot_console_base.py +7
-0+ + def __enter__(self): + return self + + def __exit__(self, extype, value, traceback): + self.console.p = self.console.get_spawn() + self.console.p.timeout = self.console.orig_timeoutThis then doesn't need the conditionals you mentioned in your response to this patch, and can then be:
self.p.timeout = self.orig_timeout
test/py/u_boot_console_base.py class ConsoleBase(object): · line 414
Quoted 2 lines
test/py/u_boot_console_base.py +2
-0+ def temporary_timeout(self, timeout): + """Temporarily setup different timeout for commands.
Quoted 7 lines
Nit: s/setup/set up/
test/py/u_boot_console_base.py class ConsoleBase(object): · line 420
Quoted 2 lines
test/py/u_boot_console_base.py +2
-0+ Args: + timeout: Time in miliseconds.Nit: s/miliseconds/milliseconds/
I have fixed all of these comments and send v2.
Thanks,
Michal