- job:
    name: jdkX-jtreg-test
    project-type: matrix
    defaults: global
    description: |
        * Runs the jtreg tests.
    properties:
        - authorization:
            everyone-flat:
                - job-read
            openjdk-members:
                - job-read
                - job-extended-read
                - job-build
                - job-cancel
                - job-workspace
        - build-discarder:
            days-to-keep: 30
            num-to-keep: 10
            artifact-num-to-keep: 5
    parameters:
        - string:
            name: YEAR
            default: 'default'
        - string:
            name: DAY_OF_YEAR
            default: 'default'
    disabled: true
    node: j12-qrep-01
    display-name: 'DELETE ME'
    axes:
        - axis:
            type: user-defined
            name: BUILD_TYPE
            values:
                - release
        - axis:
            type: user-defined
            name: JTREG_CATEGORY
            values:
                - hotspot
                - langtools
                - jdk
        - axis:
            type: slave
            name: label
            values:
                - j12-qrep-01
    execution-strategy:
        sequential: true
    wrappers:
        - xvfb:
            auto-display-name: 'DELETE ME'
            additional-options: '-p unix'
            debug: true
        - workspace-cleanup:
            dirmatch: false
        - timestamps
        - matrix-tie-parent:
            node: j12-qrep-01
    builders:
        - shell: |
            #!/bin/bash

            echo "DISPLAY=${DISPLAY}"

            set -exu

            DEPS=$HOME/workspace/jdkX-get-deps

            source $DEPS/build-date.sh

            export JDK_VERSION=X
            IMAGE_DIR=${WORKSPACE}/jdkX-${BUILD_TYPE}
            PERSIST=$HOME/srv/openjdkX

            JCSTRESS=$DEPS/jcstress.jar

            tar xf $DEPS/jdkX.tar.gz
            tar xf ~/workspace/jdkX-build-image/BUILD_TYPE/${BUILD_TYPE}/label/${NODE_NAME}/out/jdkX-${BUILD_TYPE}.tar.gz
            tar xf $DEPS/jtreg-build-4.2.0-SNAPSHOT.tar.xz
            tar xf ~/workspace/jdkX-build-image/BUILD_TYPE/${BUILD_TYPE}/label/${NODE_NAME}/out/jdkX-${BUILD_TYPE}-support.tar.gz

            # All the output directories and general frobbing
            # output is to match the existing layout as expected
            # by the cron-based publish and reporting scripts.
            # XXX There's probably a better way.

            YEAR=XXX__YEAR__XXX
            DAY_OF_YEAR=YYY__DAY_OF_YEAR__YYY

            basedir=cron_output
            mkdir -p ${basedir}/{src,builds,reports}

            src_dir=${basedir}/src/${YEAR}/${DAY_OF_YEAR}
            work_dir=${basedir}/builds/${BUILD_TYPE}/${YEAR}/${DAY_OF_YEAR}/JTwork-${JTREG_CATEGORY}
            report_dir=${basedir}/reports/${BUILD_TYPE}/${JTREG_CATEGORY}/$(uname -m)/${YEAR}/${DAY_OF_YEAR}/JTreport

            mkdir -p out ${src_dir} ${work_dir} ${report_dir}

            mv jdkX/* ${src_dir}

            blacklist=${WORKSPACE}/excludes.txt

            # Add jtreg directory level for hotspot only.
            jdk_problem_list=${src_dir}/test/${JTREG_CATEGORY}
            if [ $JTREG_CATEGORY = "hotspot" ]; then
                jdk_problem_list=${jdk_problem_list}/jtreg/ProblemList.txt
            else
                jdk_problem_list=${jdk_problem_list}/ProblemList.txt
            fi

            if [ -e $jdk_problem_list ]; then
                cat $jdk_problem_list > ${blacklist}
            fi

            aarch64_exclude_file=${src_dir}/test/exclude_aarch64.txt

            if [ -e ${aarch64_exclude_file} ]; then
                cat ${aarch64_exclude_file} >> ${blacklist}
            fi

            touch ${blacklist}

            echo "Blacklist"
            echo "========="
            cat ${blacklist}
            echo "---------"

            export JAVA_HOME=${WORKSPACE}/jdkX-${BUILD_TYPE}
            export PATH=$JAVA_HOME/bin:${PATH}

            # For hotspot and jdk we pass a -nativepath: option to jtreg.
            # This enables the tests needing native libraries to run.
            NATIVEPATH=${WORKSPACE}/jdkX-${BUILD_TYPE}-support/support/test/${JTREG_CATEGORY}/jtreg/native/lib

            if [ $JTREG_CATEGORY = "langtools" ]; then
                # The nativepath option we pass must be a valid directory, or
                # not at all.`
                NATIVE_OPT=
            else
                # Test executables are expected to be in same directory as libraries
                mv $NATIVEPATH/../bin/* $NATIVEPATH
                NATIVE_OPT=-nativepath:$NATIVEPATH
            fi

            PATH=${WORKSPACE}/jtreg/bin:${PATH}
            which java
            java -version

            # Ignore error in jtreg final result.
            set +e

            # hotspot splits its tests into gtest jtreg tests. We just do jtreg.
            if [ $JTREG_CATEGORY == "hotspot" ]; then
                TEST_SUBDIR=test/${JTREG_CATEGORY}/jtreg:hotspot_all_no_apps
            else
                TEST_SUBDIR=test/${JTREG_CATEGORY}
            fi

            java -jar jtreg/lib/jtreg.jar \
                 -dir:${src_dir} \
                 -vmoption:-Djdk.test.lib.artifacts.jcstress-tests-all=$JCSTRESS \
                 -vmoption:-Xmx2G \
                 -testjdk:${IMAGE_DIR} \
                 -exclude:${blacklist} \
                 -conc:20 \
                 -r:${report_dir} \
                 -w:${work_dir} \
                 $NATIVE_OPT \
                 -timeout:8 \
                 -a -agentvm -ignore:quiet -v1 ${TEST_SUBDIR}| cat -n

            # Kill leftover jstatd processes.
            killall -9 jstatd
            set -e

            # We don't care for the .class files.
            find ${work_dir} -name \*.class -exec rm {} \;

            # Match the exact output of the cron-based scripts.
            dest=$PERSIST/openjdk-jtreg-nightly-tests
            sed_expr=$(echo s!${WORKSPACE}/${basedir}!$dest!g)
            find ${work_dir} -type f -exec perl -p -i -e "$sed_expr" {} \;
            find ${report_dir} -type f -exec perl -p -i -e "$sed_expr" {} \;

            mkdir -p out
            tar -C ${basedir} --show-transformed-names -acvf out/jtreg-results-${JTREG_CATEGORY}-${BUILD_TYPE}.tar.gz builds reports
    publishers:
        - archive:
            artifacts: 'out/jtreg-results-${JTREG_CATEGORY}-${BUILD_TYPE}.tar.gz'
