Changes in / [bd87a9ad:256728f]


Ignore:
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Jenkinsfile

    rbd87a9ad r256728f  
    22
    33import groovy.transform.Field
     4
     5// For skipping stages
     6import org.jenkinsci.plugins.pipeline.modeldefinition.Utils
    47
    58//===========================================================================================================
     
    8285//===========================================================================================================
    8386def clean() {
    84         build_stage('Cleanup') {
     87        build_stage('Cleanup', true) {
    8588                // clean the build by wipping the build directory
    8689                dir(BuildDir) {
     
    9295//Compilation script is done here but environnement set-up and error handling is done in main loop
    9396def checkout() {
    94         build_stage('Checkout') {
     97        build_stage('Checkout', true) {
    9598                //checkout the source code and clean the repo
    9699                final scmVars = checkout scm
     
    103106
    104107def build() {
    105         build_stage('Build') {
     108        build_stage('Build', true) {
    106109                // Build outside of the src tree to ease cleaning
    107110                dir (BuildDir) {
     
    125128
    126129def test() {
    127         build_stage('Test') {
    128 
     130        build_stage('Test: short', !Settings.RunAllTests) {
    129131                dir (BuildDir) {
    130132                        //Run the tests from the tests directory
    131                         if ( Settings.RunAllTests ) {
    132                                 sh 'make --no-print-directory -C tests timeouts="--timeout=1200" all-tests debug=yes'
    133                                 sh 'make --no-print-directory -C tests timeouts="--timeout=1200" all-tests debug=no '
    134                         }
    135                         else {
    136                                 sh 'make --no-print-directory -C tests'
    137                         }
     133                        sh 'make --no-print-directory -C tests'
     134                }
     135        }
     136
     137        build_stage('Test: full', Settings.RunAllTests) {
     138                dir (BuildDir) {
     139                        //Run the tests from the tests directory
     140                        sh 'make --no-print-directory -C tests timeouts="--timeout=600 --global-timeout=14400" all-tests debug=yes'
     141                        sh 'make --no-print-directory -C tests timeouts="--timeout=600 --global-timeout=14400" all-tests debug=no '
    138142                }
    139143        }
     
    141145
    142146def benchmark() {
    143         build_stage('Benchmark') {
    144 
    145                 if( !Settings.RunBenchmark ) return
    146 
     147        build_stage('Benchmark', Settings.RunBenchmark) {
    147148                dir (BuildDir) {
    148149                        //Append bench results
     
    153154
    154155def build_doc() {
    155         build_stage('Documentation') {
    156 
    157                 if( !Settings.BuildDocumentation ) return
    158 
     156        build_stage('Documentation', Settings.BuildDocumentation) {
    159157                dir ('doc/user') {
    160158                        make_doc()
     
    168166
    169167def publish() {
    170         build_stage('Publish') {
     168        build_stage('Publish', true) {
    171169
    172170                if( Settings.Publish && !Settings.RunBenchmark ) { echo 'No results to publish!!!' }
     
    412410}
    413411
    414 def build_stage(String name, Closure block ) {
     412def build_stage(String name, boolean run, Closure block ) {
    415413        StageName = name
    416414        echo " -------- ${StageName} -------- "
    417         stage(name, block)
     415        if(run) {
     416                stage(name, block)
     417        } else {
     418                stage(name) { Utils.markStageSkippedForConditional(STAGE_NAME) }
     419        }
    418420}
    419421
  • tests/pybin/tools.py

    rbd87a9ad r256728f  
    179179                        os.chdir(cwd)
    180180
     181def killgroup():
     182        try:
     183                os.killpg(os.getpgrp(), signal.SIGINT)
     184        except KeyboardInterrupt:
     185                pass # expected
     186        except Exception as exc:
     187                print("Unexpected exception", file=sys.stderr)
     188                print(exc, file=sys.stderr)
     189                sys.stderr.flush()
     190                sys.exit(2)
     191
    181192################################################################################
    182193#               file handling
     
    301312        self.end = time.time()
    302313        self.duration = self.end - self.start
     314
     315def timed(src, timeout):
     316        expire = time.time() + timeout
     317        i = iter(src)
     318        while True:
     319                yield i.next(max(expire - time.time(), 0))
  • tests/test.py

    rbd87a9ad r256728f  
    202202                if error :
    203203                        text = text + '\n' + error
    204                         out = sys.stderr
    205 
    206                 print(text, file = out)
    207                 sys.stdout.flush()
     204
     205                return retcode == TestResult.SUCCESS, text
     206        except KeyboardInterrupt:
     207                return False, ""
     208        except:
     209                print("Unexpected error in worker thread", file=sys.stderr)
    208210                sys.stderr.flush()
    209 
    210                 return retcode != TestResult.SUCCESS
    211         except KeyboardInterrupt:
    212                 False
     211                return False, ""
     212
    213213
    214214# run the given list of tests with the given parameters
     
    220220        pool = multiprocessing.Pool(jobs)
    221221
     222        failed = False
     223
    222224        # for each test to run
    223225        try :
    224                 results = pool.map_async(
     226                num = len(tests)
     227                fancy = sys.stdout.isatty()
     228                results = pool.imap_unordered(
    225229                        run_test_worker,
    226230                        tests,
    227231                        chunksize = 1
    228                 ).get(settings.timeout.total)
     232                )
     233
     234                for i, (succ, txt) in enumerate(timed(results, timeout = settings.timeout.total), 1) :
     235                        if not succ :
     236                                failed = True
     237
     238                        print("       " + txt)
     239
     240                        if(fancy and i != num):
     241                                print("%d/%d" % (i, num), end='\r')
     242                                sys.stdout.flush()
     243
    229244        except KeyboardInterrupt:
     245                print("Tests interrupted by user", file=sys.stderr)
    230246                pool.terminate()
    231                 print("Tests interrupted by user")
    232                 sys.exit(1)
     247                pool.join()
     248                failed = True
     249        except multiprocessing.TimeoutError:
     250                print("ERROR: Test suite timed out", file=sys.stderr)
     251                pool.terminate()
     252                pool.join()
     253                failed = True
     254                killgroup() # needed to cleanly kill all children
     255
    233256
    234257        # clean the workspace
    235258        make('clean', output=subprocess.DEVNULL, error=subprocess.DEVNULL)
    236259
    237         for failed in results:
    238                 if failed :
    239                         return 1
    240 
    241         return 0
     260        return 1 if failed else 0
    242261
    243262
Note: See TracChangeset for help on using the changeset viewer.