aboutsummaryrefslogtreecommitdiff
path: root/deprecated/test_gcc_dejagnu.py
diff options
context:
space:
mode:
Diffstat (limited to 'deprecated/test_gcc_dejagnu.py')
-rwxr-xr-xdeprecated/test_gcc_dejagnu.py227
1 files changed, 0 insertions, 227 deletions
diff --git a/deprecated/test_gcc_dejagnu.py b/deprecated/test_gcc_dejagnu.py
deleted file mode 100755
index 4ea0c51e..00000000
--- a/deprecated/test_gcc_dejagnu.py
+++ /dev/null
@@ -1,227 +0,0 @@
-#!/usr/bin/env python2
-#
-# Copyright 2010 Google Inc. All Rights Reserved.
-"""Script adapter used by automation client for testing dejagnu.
-
- This is not intended to be run on command line.
- To kick off a single dejagnu run, use ./dejagnu/run_dejagnu.py
-"""
-
-from __future__ import print_function
-
-__author__ = 'shenhan@google.com (Han Shen)'
-
-import argparse
-import sys
-import setup_chromeos
-import build_tc
-
-from dejagnu import run_dejagnu
-from cros_utils import command_executer
-from cros_utils import email_sender
-
-
-class DejagnuAdapter(object):
- """Dejagnu Adapter class"""
-
- # TODO(shenhan): move these to constants.py.
- _CHROMIUM_GCC_GIT = ('https://chromium.googlesource.com/'
- 'chromiumos/third_party/gcc.git')
- _CHROMIUM_GCC_BRANCH = 'gcc.gnu.org/branches/google/gcc-4_7-mobile'
-
- _cmd_exec = command_executer.GetCommandExecuter()
-
- def __init__(self, board, remote, gcc_dir, chromeos_root, runtestflags,
- cleanup):
- self._board = board
- self._remote = remote
- self._gcc_dir = gcc_dir
- self._chromeos_root = chromeos_root
- self._runtestflags = runtestflags
- self._cleanup = cleanup
-
- def SetupChromeOS(self):
- cmd = [
- setup_chromeos.__file__, '--dir=' + self._chromeos_root, '--minilayout',
- '--jobs=8'
- ]
- ret = setup_chromeos.Main(cmd)
- if ret:
- raise RuntimeError('Failed to checkout chromeos')
- ## Do cros_sdk and setup_board, otherwise build_tc in next step will fail.
- cmd = 'cd {0} && cros_sdk --download'.format(self._chromeos_root)
- ret = self._cmd_exec.RunCommand(cmd, terminated_timeout=9000)
- if ret:
- raise RuntimeError('Failed to create chroot.')
-
- def SetupBoard(self):
- cmd = 'setup_board --board=' + self._board
- ret = self._cmd_exec.ChrootRunCommand(
- self._chromeos_root, cmd, terminated_timeout=4000)
- if ret:
- raise RuntimeError('Failed to setup board.')
-
- def CheckoutGCC(self):
- cmd = 'git clone {0} {1} && cd {1} && git checkout {2}'.format(
- self._CHROMIUM_GCC_GIT, self._gcc_dir, self._CHROMIUM_GCC_BRANCH)
-
- ret = self._cmd_exec.RunCommand(cmd, terminated_timeout=300)
- if ret:
- raise RuntimeError('Failed to checkout gcc.')
- ## Handle build_tc bug.
- cmd = ('touch {0}/gcc/config/arm/arm-tune.md ' + \
- '{0}/gcc/config/arm/arm-tables.opt').format(self._gcc_dir)
- ret = self._cmd_exec.RunCommand(cmd)
-
- def BuildGCC(self):
- build_gcc_args = [
- build_tc.__file__, '--board=' + self._board,
- '--chromeos_root=' + self._chromeos_root, '--gcc_dir=' + self._gcc_dir
- ]
- ret = build_tc.Main(build_gcc_args)
- if ret:
- raise RuntimeError('Building gcc failed.')
-
- def CheckGCC(self):
- args = [
- run_dejagnu.__file__, '--board=' + self._board,
- '--chromeos_root=' + self._chromeos_root, '--mount=' + self._gcc_dir,
- '--remote=' + self._remote
- ]
- if self._cleanup:
- args.append('--cleanup=' + self._cleanup)
- if self._runtestflags:
- args.append('--flags=' + self._runtestflags)
- return run_dejagnu.Main(args)
-
-
-# Parse the output log to determine how many failures we have.
-# Return -1 if parse output log failed.
-def GetNumNewFailures(input_str):
- if not input_str:
- return 0
- start_counting = False
- n_failures = 0
- for l in input_str.splitlines():
- print(l)
- if not start_counting and 'Build results not in the manifest' in l:
- start_counting = True
- elif start_counting and l and (l.find('UNRESOLVED:') == 0 or
- l.find('FAIL:') == 0 or l.find('XFAIL:') == 0
- or l.find('XPASS:') == 0):
- n_failures = n_failures + 1
- if not start_counting:
- return -1
- return n_failures
-
-
-# Do not throw any exception in this function!
-def EmailResult(result):
- email_to = ['c-compiler-chrome@google.com']
- if len(result) == 4:
- subject = 'Job failed: dejagnu test didn\'t finish'
- email_text = 'Job failed prematurely, check exception below.\n' + \
- result[3]
- elif result[0]:
- subject = 'Job finished: dejagnu test failed'
- num_new_failures = GetNumNewFailures(result[1])
- if num_new_failures >= 0:
- summary = '{0} new fail(s), check log below.'.format(num_new_failures)
- else:
- summary = 'At least 1 new fail found, check log below.'
- email_text = summary + \
- ('\nStdout ====\n'
- '{0}\n'
- '\nStderr ===\n'
- '{1}\n').format(result[1], result[2])
- else:
- subject = 'Job finished: dejagnu test passed'
- email_text = ('Cool! No new fail found.\n'
- '\nStdout ====\n'
- '{0}\n'
- '\nStderr ====\n'
- '{1}\n').format(result[1], result[2])
-
- try:
- email_sender.EmailSender().SendEmail(email_to, subject, email_text)
- print('Email sent.')
- except Exception as e:
- # Do not propagate this email sending exception, you want to email an
- # email exception? Just log it on console.
- print('Sending email failed - {0}'
- 'Subject: {1}'
- 'Text: {2}').format(str(e), subject, email_text)
-
-
-def ProcessArguments(argv):
- """Processing script arguments."""
- parser = argparse.ArgumentParser(
- description=('This script is used by nightly client to test gcc. '
- 'DO NOT run it unless you know what you are doing.'),
- usage='test_gcc_dejagnu.py options')
- parser.add_argument(
- '-b',
- '--board',
- dest='board',
- help=('Required. Specify board type. For example '
- '\'lumpy\' and \'daisy\''))
- parser.add_argument(
- '-r',
- '--remote',
- dest='remote',
- help=('Required. Specify remote board address'))
- parser.add_argument(
- '-g',
- '--gcc_dir',
- dest='gcc_dir',
- default='gcc.live',
- help=('Optional. Specify gcc checkout directory.'))
- parser.add_argument(
- '-c',
- '--chromeos_root',
- dest='chromeos_root',
- default='chromeos.live',
- help=('Optional. Specify chromeos checkout directory.'))
- parser.add_argument(
- '--cleanup',
- dest='cleanup',
- default=None,
- help=('Optional. Do cleanup after the test.'))
- parser.add_argument(
- '--runtestflags',
- dest='runtestflags',
- default=None,
- help=('Optional. Options to RUNTESTFLAGS env var '
- 'while invoking make check. '
- '(Mainly used for testing purpose.)'))
-
- options = parser.parse_args(argv[1:])
-
- if not options.board or not options.remote:
- raise SyntaxError('--board and --remote are mandatory options.')
-
- return options
-
-
-def Main(argv):
- opt = ProcessArguments(argv)
- adapter = DejagnuAdapter(opt.board, opt.remote, opt.gcc_dir,
- opt.chromeos_root, opt.runtestflags, opt.cleanup)
- try:
- adapter.SetupChromeOS()
- adapter.SetupBoard()
- adapter.CheckoutGCC()
- adapter.BuildGCC()
- ret = adapter.CheckGCC()
- except Exception as e:
- print(e)
- ret = (1, '', '', str(e))
- finally:
- EmailResult(ret)
-
- return ret
-
-
-if __name__ == '__main__':
- retval = Main(sys.argv)
- sys.exit(retval[0])