From mboxrd@z Thu Jan 1 00:00:00 1970 From: David F Barrera Subject: Re: [PATCH][XM-TEST] Fix bugzilla # 674 by changing the xm-test Console.py to wait for the command prompt. Date: Fri, 16 Jun 2006 15:35:11 -0500 Message-ID: <449315FF.6040004@us.ibm.com> References: <1150483754.7702.13.camel@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1150483754.7702.13.camel@localhost.localdomain> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Harry Butterworth Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org Harry, I tested your patch. I would like you to look at the logs as there are lots of failures. Please contact me and I will tell you where to get the logs (I tried sending them, but the file is probably too big). Harry Butterworth wrote: > Lots of xm-test tests are failing with console timeouts on some machines > at the moment. I reproduced the problem and found it was due to some > probing activity in the boot process of the -xen kernel. The behaviour > of the current xm-test code is to assume that the boot process has > finished after performing three one-second waits for input---when the > probing activity introduces more than three one-second delays the test > suite breaks. > > The patch below changes the test suite to wait for the command prompt > before attempting to submit a command. The timeout is increased from 3 > seconds to 3 minutes but the wait exits early when the prompt is found > so the test suite doesn't take any longer to run. > > DO NOT APPLY. This patch is FOR REVIEW ONLY at this stage since my > python skills are pretty lame and it really needs to get some testing > from people who have actually been experiencing problems. For me, > xm-test works the same on my machine with and without this patch. > > Signed-off-by Harry Butterworth > > ------------------------------------------------------------------------ > > diff -r ee3d10828937 -r 2dcc3cc7118e tools/xm-test/lib/XmTestLib/Console.py > --- a/tools/xm-test/lib/XmTestLib/Console.py Fri Jun 16 13:43:54 2006 > +++ b/tools/xm-test/lib/XmTestLib/Console.py Fri Jun 16 18:28:52 2006 > @@ -82,9 +82,6 @@ > > tty.setraw(self.consoleFd, termios.TCSANOW) > > - self.__chewall(self.consoleFd) > - > - > def __addToHistory(self, line): > self.historyBuffer.append(line) > self.historyLines += 1 > @@ -120,34 +117,47 @@ > output""" > self.PROMPT = prompt > > - > - def __chewall(self, fd): > + def __getprompt(self, fd): > timeout = 0 > - bytes = 0 > - > - while timeout < 3: > - i, o, e = select.select([fd], [], [], 1) > - if fd in i: > - try: > - foo = os.read(fd, 1) > - if self.debugMe: > - sys.stdout.write(foo) > - bytes += 1 > - except Exception, exn: > - raise ConsoleError(str(exn)) > - > - else: > - timeout += 1 > - > - if self.limit and bytes >= self.limit: > + bytes = 0 > + while timeout < 180: > + # eat anything while total bytes less than limit else raise RUNAWAY > + while (not self.limit) or (bytes < self.limit): > + i, o, e = select.select([fd], [], [], 1) > + if fd in i: > + try: > + foo = os.read(fd, 1) > + if self.debugMe: > + sys.stdout.write(foo) > + bytes += 1 > + except Exception, exn: > + raise ConsoleError(str(exn)) > + else: > + break > + else: > raise ConsoleError("Console run-away (exceeded %i bytes)" > % self.limit, RUNAWAY) > - > - if self.debugMe: > - print "Ignored %i bytes of miscellaneous console output" % bytes > - > - return bytes > - > + # press enter > + os.write(self.consoleFd, "\n") > + # look for prompt > + for prompt_char in "\r\n" + self.PROMPT: > + i, o, e = select.select([fd], [], [], 1) > + if fd in i: > + try: > + foo = os.read(fd, 1) > + if self.debugMe: > + sys.stdout.write(foo) > + if foo != prompt_char: > + break > + except Exception, exn: > + raise ConsoleError(str(exn)) > + else: > + timeout += 1 > + break > + else: > + break > + else: > + raise ConsoleError("Timed out waiting for console prompt") > > def __runCmd(self, command, saveHistory=True): > output = "" > @@ -155,7 +165,7 @@ > lines = 0 > bytes = 0 > > - self.__chewall(self.consoleFd) > + self.__getprompt(self.consoleFd) > > if verbose: > print "[%s] Sending `%s'" % (self.domain, command) > @@ -176,7 +186,7 @@ > "Failed to read from console (fd=%i): %s" % > (self.consoleFd, exn)) > else: > - raise ConsoleError("Timed out waiting for console") > + raise ConsoleError("Timed out waiting for console command") > > if self.limit and bytes >= self.limit: > raise ConsoleError("Console run-away (exceeded %i bytes)" > > ------------------------------------------------------------------------ > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel > -- Regards, David F Barrera Linux Technology Center Systems and Technology Group, IBM "The wisest men follow their own direction. " Euripides