[Lldb-commits] [PATCH] test: ignore IOError in Base.deletePexpectChild and clean TestMySyntax test

Ilia K ki.stfu at gmail.com
Tue Dec 30 08:29:41 PST 2014


As I understood both of them are legal (in theory) but in practice I faced
with IOError. I think we should ignore IOError because we can't fix
isalive() method.

Thanks,
Ilia
On 30 Dec 2014 19:21, "Abid, Hafiz" <Hafiz_Abid at mentor.com> wrote:

>  Thanks for quick reply. Your patch is removing the following line from
> lldb-mi test case.
> -                child.sendline("quit")
>
>  I am wondering what is the convention of terminating the executable that
> we invoked. Do the test is supposed to kill it (using 'quit') command or it
> can be left to the other part of testing code which as you noted also use
> sendline('quit').
>
>  Regards,
> Abid
>  ------------------------------
> *From:* Ilia K [ki.stfu at gmail.com]
> *Sent:* Tuesday, December 30, 2014 4:11 PM
> *To:* Abid, Hafiz
> *Cc:* lldb-commits at cs.uiuc.edu
> *Subject:* Re: [Lldb-commits] [PATCH] test: ignore IOError in
> Base.deletePexpectChild and clean TestMySyntax test
>
>   ** it will cause a IOError because later it will try to kill process
> using 'sendline(quit)'.
>
>  Thanks,
> Ilia
>
> On Tue, Dec 30, 2014 at 7:06 PM, Ilia K <ki.stfu at gmail.com> wrote:
>
>> Hello Abid,
>>
>>  I'm glad to see you.
>>
>>  >RE: IMHO once we have removed the extra quit call from the test cases,
>> we will not need the check for OSErrror.
>> Unfortunately it's not. The deletePexpectChild() sometimes causes that
>> problem when isalive returns a false positive result.
>> {code}
>>          # This is for the case of directly spawning 'lldb' and
>> interacting with it
>>          # using pexpect.
>>         if self.child and self.child.isalive(): *<--here*
>>             import pexpect
>>             with recording(self, traceAlways) as sbuf:
>>                 print >> sbuf, "tearing down the child process...."
>>             try:
>>                 if self.child_in_script_interpreter:
>>                     self.child.sendline('quit()')
>>                     self.child.expect_exact(self.child_prompt)
>>                  self.child.sendline('settings set
>> interpreter.prompt-on-quit false')
>>                  self.child.sendline('quit')
>>                 self.child.expect(pexpect.EOF)
>>             except (ValueError, OSError, pexpect.ExceptionPexpect):
>>                  # child is already terminated
>>                 pass
>>              finally:
>>                 # Give it one final blow to make sure the child is
>> terminated.
>>                 self.child.close()
>> {code}
>> The pexpect's isalive() method is nonblocking. It checks whether process
>> was terminated or not. But the problem is that process may be terminated
>> after isalive() was called -- it will cause a IOError.
>>
>>  Thanks,
>> Ilia
>>
>>
>> On Tue, Dec 30, 2014 at 6:46 PM, Abid, Hafiz <Hafiz_Abid at mentor.com>
>> wrote:
>>
>>>  I dont see any problem with the patch that cleans up
>>> the TestMiSyntax.py. But I see that similar cleanup is needed in  other
>>> tests too. I will make the change and then commit all of them.
>>>
>>>  IMHO once we have removed the extra quit call from the test cases, we
>>> will not need the check for OSErrror.
>>>
>>>  Thanks,
>>> Abid
>>>  ------------------------------
>>> *From:* Ilia K [ki.stfu at gmail.com]
>>> *Sent:* Monday, December 22, 2014 11:54 AM
>>> *To:* Abid, Hafiz; lldb-commits at cs.uiuc.edu
>>> *Subject:* Re: [Lldb-commits] [PATCH] test: ignore IOError in
>>> Base.deletePexpectChild and clean TestMySyntax test
>>>
>>>    Hello,
>>>
>>>  My previous messages left without answer. I'm posting them again (see
>>> below) with patch files.
>>> The initial message:
>>> http://lists.cs.uiuc.edu/pipermail/lldb-commits/Week-of-Mon-20141215/014599.html
>>>
>>>  Thanks,
>>> Ilia
>>>
>>> On Tue, Dec 16, 2014 at 7:02 PM, Ilia K <ki.stfu at gmail.com> wrote:
>>>
>>>> Hello,
>>>>
>>>>  >RE: IOError may happen when child already exited but dotest has
>>>> missed this and tries to exit using 'child.sendline("quit")'
>>>> Actually it's OSError (not IOError):
>>>>
>>>>  ======================================================================
>>>> ERROR: test_lldbmi_tokens (TestMiSyntax.MiSyntaxTestCase)
>>>>    Test that 'lldb-mi --interpreter' echos command tokens.
>>>> ----------------------------------------------------------------------
>>>> Traceback (most recent call last):
>>>>   File "/Users/IliaK/p/llvm_delphi/tools/lldb/test/lldbtest.py", line
>>>> 1770, in tearDown
>>>>     Base.tearDown(self)
>>>>   File "/Users/IliaK/p/llvm_delphi/tools/lldb/test/lldbtest.py", line
>>>> 1092, in tearDown
>>>>     self.deletePexpectChild()
>>>>   File "/Users/IliaK/p/llvm_delphi/tools/lldb/test/lldbtest.py", line
>>>> 1074, in deletePexpectChild
>>>>     self.child.sendline('settings set interpreter.prompt-on-quit false')
>>>>   File
>>>> "/Users/IliaK/p/llvm_delphi/tools/lldb/test/pexpect-2.4/pexpect.py", line
>>>> 966, in sendline
>>>>     n = self.send(s)
>>>>   File
>>>> "/Users/IliaK/p/llvm_delphi/tools/lldb/test/pexpect-2.4/pexpect.py", line
>>>> 958, in send
>>>>     c = os.write(self.child_fd, s)
>>>> OSError: [Errno 5] Input/output error
>>>> Config=x86_64-clang
>>>>
>>>>  Therefore I updated lldbtest_ignore_ioerror_on_theardown.patch file.
>>>> Btw, may be better to filter only IO errors from OSError class? It'll
>>>> look like:
>>>>
>>>>  {code}
>>>> try:
>>>>     ...
>>>> except (ValueError, pexpect.ExceptionPexpect):
>>>>     # child is already terminated
>>>>     pass
>>>> except OSError, e:
>>>>     if e.errno != errno.EIO:
>>>>         # unexpected exception
>>>>         raise
>>>>      # child is already terminated
>>>>      pass
>>>> finally:
>>>>     ...
>>>> {code}
>>>>
>>>>  Thanks,
>>>> Ilia
>>>>
>>>>
>>>> On Tue, Dec 16, 2014 at 4:42 PM, Ilia K <ki.stfu at gmail.com> wrote:
>>>>>
>>>>> Hello,
>>>>>
>>>>>  I found the following:
>>>>> IOError may happen when child already exited but dotest has missed
>>>>> this and tries to exit using 'child.sendline("quit")'
>>>>>
>>>>>  Also, I clean syntax test. -exec-run no hangs more and 'quit' isn't
>>>>> needed at exit.
>>>>>
>>>>>  Thanks,
>>>>> Ilia
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20141230/ea183674/attachment.html>


More information about the lldb-commits mailing list