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

Ilia K ki.stfu at gmail.com
Mon Jan 12 05:27:12 PST 2015


Hello,

One more test failed:
{code}
======================================================================
ERROR: test_lldbmi_sourceoption
(TestMiStartupOptions.MiStartupOptionsTestCase)
    Test that 'lldb-mi --interpreter' can execute a prepared file which
passed via --source option.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/IliaK/p/llvm/tools/lldb/test/lldbtest.py", line 1767, in
tearDown
    Base.tearDown(self)
  File "/Users/IliaK/p/llvm/tools/lldb/test/lldbtest.py", line 1087, in
tearDown
    self.deletePexpectChild()
  File "/Users/IliaK/p/llvm/tools/lldb/test/lldbtest.py", line 1072, in
deletePexpectChild
    self.child.sendline('settings set interpreter.prompt-on-quit false')
  File "/Users/IliaK/p/llvm/tools/lldb/test/pexpect-2.4/pexpect.py", line
966, in sendline
    n = self.send(s)
  File "/Users/IliaK/p/llvm/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
{code}

Thanks,
Ilia


On Mon, Jan 12, 2015 at 4:24 PM, Ilia K <ki.stfu at gmail.com> wrote:

> Hello Abid,
>
> Cleanup didn't help and I got the error again:
> {code}
> ======================================================================
> ERROR: test_lldbmi_eval (TestMiEvaluate.MiEvaluateTestCase)
>     Test that 'lldb-mi --interpreter' works for evaluating.
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>   File "/Users/IliaK/p/llvm/tools/lldb/test/lldbtest.py", line 1767, in
> tearDown
>     Base.tearDown(self)
>   File "/Users/IliaK/p/llvm/tools/lldb/test/lldbtest.py", line 1087, in
> tearDown
>     self.deletePexpectChild()
>   File "/Users/IliaK/p/llvm/tools/lldb/test/lldbtest.py", line 1072, in
> deletePexpectChild
>     self.child.sendline('settings set interpreter.prompt-on-quit false')
>   File "/Users/IliaK/p/llvm/tools/lldb/test/pexpect-2.4/pexpect.py", line
> 966, in sendline
>     n = self.send(s)
>   File "/Users/IliaK/p/llvm/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
> {code}
>
> Could you submit IOError patch?
>
> Thanks,
> Ilia
>
>
> On Tue, Dec 30, 2014 at 9:16 PM, Ilia K <ki.stfu at gmail.com> wrote:
>
>> Nope, it didn't help:
>>
>> {code}
>> ======================================================================
>> ERROR: test_lldbmi_pendbreakonsym (TestMiBreakpoint.MiBreakpointTestCase)
>>    Test that 'lldb-mi --interpreter' works for pending symbol breakpoints.
>> ----------------------------------------------------------------------
>> Traceback (most recent call last):
>>   File "/Users/IliaK/p/llvm/tools/lldb/test/lldbtest.py", line 1765, in
>> tearDown
>>     Base.tearDown(self)
>>   File "/Users/IliaK/p/llvm/tools/lldb/test/lldbtest.py", line 1087, in
>> tearDown
>>     self.deletePexpectChild()
>>   File "/Users/IliaK/p/llvm/tools/lldb/test/lldbtest.py", line 1072, in
>> deletePexpectChild
>>     self.child.sendline('settings set interpreter.prompt-on-quit false')
>>   File "/Users/IliaK/p/llvm/tools/lldb/test/pexpect-2.4/pexpect.py", line
>> 966, in sendline
>>     n = self.send(s)
>>   File "/Users/IliaK/p/llvm/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
>> {code}
>>
>> Thanks,
>> Ilia
>>
>>
>> On Tue, Dec 30, 2014 at 8:15 PM, Abid, Hafiz <Hafiz_Abid at mentor.com>
>> wrote:
>>
>>>  I committed the cleanup in 224990. Please have a look and let me know
>>> if you see a problem.
>>>
>>>  Regards,
>>> Abid
>>>  ------------------------------
>>> *From:* Ilia K [ki.stfu at gmail.com]
>>> *Sent:* Tuesday, December 30, 2014 4:50 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
>>>
>>>   Now I have modified breakpoint's test and IOError sometimes happens:
>>> {code}
>>>  $ *./dotest.py -v --executable $BUILDDIR/bin/lldb -f
>>> MiBreakpointTestCase.test_lldbmi_pendbreakonsym*
>>> ['./dotest.py', '-v', '--executable',
>>> '/Users/IliaK/p/llvm/build_ninja/bin/lldb', '-f',
>>> 'MiBreakpointTestCase.test_lldbmi_pendbreakonsym']
>>> LLDB library dir: /Users/IliaK/p/llvm/build_ninja/bin
>>> lldb-330.99.0
>>> lldb.pre_flight: None
>>> lldb.post_flight: None
>>>
>>>  Session logs for test failures/errors/unexpected successes will go
>>> into directory '2014-12-30-19_45_12'
>>> Command invoked: ./dotest.py -v --executable
>>> /Users/IliaK/p/llvm/build_ninja/bin/lldb -f
>>> MiBreakpointTestCase.test_lldbmi_pendbreakonsym
>>> compilers=['clang']
>>>
>>>  Configuration: arch=x86_64 compiler=clang
>>> ----------------------------------------------------------------------
>>> Collected 1 test
>>>
>>>  1: test_lldbmi_pendbreakonsym (TestMiBreakpoint.MiBreakpointTestCase)
>>>    Test that 'lldb-mi --interpreter' works for pending symbol
>>> breakpoints. ... ERROR
>>>
>>>  ======================================================================
>>> ERROR: test_lldbmi_pendbreakonsym (TestMiBreakpoint.MiBreakpointTestCase)
>>>    Test that 'lldb-mi --interpreter' works for pending symbol
>>> breakpoints.
>>> ----------------------------------------------------------------------
>>> Traceback (most recent call last):
>>>   File "/Users/IliaK/p/llvm/tools/lldb/test/lldbtest.py", line 1765, in
>>> tearDown
>>>     Base.tearDown(self)
>>>   File "/Users/IliaK/p/llvm/tools/lldb/test/lldbtest.py", line 1087, in
>>> tearDown
>>>     self.deletePexpectChild()
>>>   File "/Users/IliaK/p/llvm/tools/lldb/test/lldbtest.py", line 1072, in
>>> deletePexpectChild
>>>     self.child.sendline('settings set interpreter.prompt-on-quit false')
>>>   File "/Users/IliaK/p/llvm/tools/lldb/test/pexpect-2.4/pexpect.py",
>>> line 966, in sendline
>>>     n = self.send(s)
>>>   File "/Users/IliaK/p/llvm/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
>>> ----------------------------------------------------------------------
>>> {code}
>>>
>>>  Here are my changes:
>>> {code}
>>>  Index: test/tools/lldb-mi/TestMiBreakpoint.py
>>> ===================================================================
>>> --- test/tools/lldb-mi/TestMiBreakpoint.py      (revision 224982)
>>> +++ test/tools/lldb-mi/TestMiBreakpoint.py      (working copy)
>>> @@ -48,17 +48,13 @@
>>>                  child.expect("\^done,bkpt={number=\"1\"")
>>>
>>>                   child.sendline("-exec-run")
>>> -                child.sendline("") # FIXME: lldb-mi hangs here, so
>>> extra return is needed
>>>                  child.expect("\^running")
>>>                  child.expect("\*stopped,reason=\"breakpoint-hit\"")
>>>
>>>                   child.sendline("-exec-continue")
>>>                  child.expect("\^running")
>>>                  child.expect("\*stopped,reason=\"exited-normally\"")
>>> -                child.expect_exact(prompt)
>>>
>>>  -                child.sendline("quit")
>>> -
>>>          # Now that the necessary logging is done, restore logfile to
>>> None to
>>>          # stop further logging.
>>>          child.logfile_send = None
>>>  {code}
>>>
>>>  Thanks,
>>> Ilia
>>>
>>>
>>> On Tue, Dec 30, 2014 at 7:39 PM, Abid, Hafiz <Hafiz_Abid at mentor.com>
>>> wrote:
>>>
>>>>  I also found in the existing test cases that both ways have been
>>>> used. So I will remove that prompt and 'quit' from the lldb-mi test cases
>>>> as you have done from one of them. Then if you still get the IOError then
>>>> we can apply your 2nd patch.
>>>>
>>>>  Thanks,
>>>> Abid
>>>>  ------------------------------
>>>> *From:* Ilia K [ki.stfu at gmail.com]
>>>> *Sent:* Tuesday, December 30, 2014 4:29 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
>>>>
>>>>    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/20150112/b035e36e/attachment.html>


More information about the lldb-commits mailing list