aboutsummaryrefslogtreecommitdiff
path: root/jdk10-jtreg-test.yaml
blob: 7a9602d98b20bfd7d05c8af9dd06d05b0ffb0758 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
- job:
    name: jdk10-jtreg-test
    project-type: matrix
    defaults: global
    description: |
        * Runs the jtreg tests.
    properties:
        - authorization:
            linaro:
                - job-read
            openjdk-members:
                - job-read
                - job-extended-read
                - job-build
                - job-cancel
        - 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: false
    node: aarch64-06
    display-name: 'OpenJDK 10 - Run jtreg tests'
    axes:
        - axis:
            type: user-defined
            name: JVM_VARIANT
            values:
                - server
                - client
        - 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:
                - aarch64-06
    execution-strategy:
        sequential: true
    wrappers:
        - xvfb:
            auto-display-name: true
            additional-options: '-p unix'
            debug: true
        - workspace-cleanup:
            dirmatch: false
        - timestamps
        - matrix-tie-parent:
            node: aarch64-06
    builders:
        - copyartifact:
            project: jtreg-build
            filter: 'jtreg-build-4.2.0-SNAPSHOT.tar.xz'
            target: incoming
            flatten: true
# copyartifact is slow and the file is local
# copy instead of going back and forth between master <-> slave
#        - copyartifact:
#            project: jdk10-build-image
#            filter: 'out/jdk10-${JVM_VARIANT}-${BUILD_TYPE}.tar.gz'
#            target: incoming
#            flatten: true
        - copyartifact:
            project: jdk10-update-src-tree
            filter: 'out/jdk10.tar.gz, out/build-date.sh'
            target: incoming
            flatten: true
        - copyartifact:
            project: jcstress-build
            filter: 'tests-all/target/jcstress.jar'
            target: incoming
            flatten: true
        - shell: |
            #!/bin/bash

            echo "DISPLAY=${DISPLAY}"

            set -exu

            source incoming/build-date.sh

            export JDK_VERSION=10
            # client variant uses server with -XX:TieredStopAtLevel=1
            # zero is a third possible value.
            REAL_VARIANT=${JVM_VARIANT/client/server}
            IMAGE_DIR=${WORKSPACE}/jdk10-${REAL_VARIANT}-${BUILD_TYPE}
            PERSIST=$HOME/srv/openjdk10

            JCSTRESS=$PWD/incoming/jcstress.jar

            # Only set =1 for debugging.
            use_subcategories=0

            if [ ${use_subcategories} -eq 1 ]; then
              case ${JTREG_CATEGORY} in
                langtools)
                    JTREG_SUBCATEGORIES=tools/javap/typeAnnotations
                    ;;
                jdk)
                    JTREG_SUBCATEGORIES=jdk/net/Sockets
                    ;;
                hotspot)
                    JTREG_SUBCATEGORIES=runtime/CommandLine
                    ;;
              esac
            fi

            : ${JTREG_SUBCATEGORIES:=.}

            tar xf incoming/jdk10.tar.gz
            tar xf ~/workspace/jdk10-build-image/BUILD_TYPE/${BUILD_TYPE}/JVM_VARIANT/${REAL_VARIANT}/label/${NODE_NAME}/out/jdk10-${REAL_VARIANT}-${BUILD_TYPE}.tar.gz
            tar xf incoming/jtreg-build-4.2.0-SNAPSHOT.tar.xz
            tar xf ~/workspace/jdk10-build-image/BUILD_TYPE/${BUILD_TYPE}/JVM_VARIANT/${REAL_VARIANT}/label/${NODE_NAME}/out/jdk10-${REAL_VARIANT}-${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/${JVM_VARIANT}-${BUILD_TYPE}/${YEAR}/${DAY_OF_YEAR}/JTwork-${JTREG_CATEGORY}
            report_dir=${basedir}/reports/${JVM_VARIANT}-${BUILD_TYPE}/${JTREG_CATEGORY}/$(uname -m)/${YEAR}/${DAY_OF_YEAR}/JTreport

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

            mv jdk10/* ${src_dir}

            # Move the applications tests to exclude them from execution.
            # JCStress adds days to the execution time.
            mv ${src_dir}/test/hotspot/jtreg/applications ${src_dir}

            blacklist=${WORKSPACE}/excludes.txt
            jdk_problem_list=${src_dir}/${JTREG_CATEGORY}/test/ProblemList.txt

            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}/jdk10-${REAL_VARIANT}-${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}/jdk10-${REAL_VARIANT}-${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=${JTREG_CATEGORY}/jtreg
            else
                TEST_SUBDIR=${JTREG_CATEGORY}
            fi

            if [ $JVM_VARIANT = "server" ]; then
                java -jar jtreg/lib/jtreg.jar \
                  -dir:${src_dir}/test/${TEST_SUBDIR} \
                  -vmoption:-Djdk.test.lib.artifacts.jcstress-tests-all=$JCSTRESS \
                  -vmoption:-XX:-TieredCompilation \
                  -testjdk:${IMAGE_DIR} \
                  -exclude:${blacklist} \
                  -conc:auto \
                  -r:${report_dir} \
                  -w:${work_dir} \
                  $NATIVE_OPT \
                  -timeout:8 \
                  -a -agentvm -ignore:quiet -v1 ${JTREG_SUBCATEGORIES} | cat -n
            else
                java -jar jtreg/lib/jtreg.jar \
                  -dir:${src_dir}/test/${TEST_SUBDIR} \
                  -vmoption:-Djdk.test.lib.artifacts.jcstress-tests-all=$JCSTRESS \
                  -vmoption:-XX:+TieredCompilation \
                  -vmoption:-XX:TieredStopAtLevel=1 \
                  -testjdk:${IMAGE_DIR} \
                  -exclude:${blacklist} \
                  -conc:auto \
                  -r:${report_dir} \
                  -w:${work_dir} \
                  $NATIVE_OPT \
                  -timeout:8 \
                  -a -agentvm -ignore:quiet -v1 ${JTREG_SUBCATEGORIES} | cat -n
            fi

            # Move the applications tests back, for neatness.
            mv ${src_dir}/applications ${src_dir}/test/hotspot/jtreg

            # 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}-${JVM_VARIANT}-${BUILD_TYPE}.tar.gz builds reports
    publishers:
        - archive:
            artifacts: 'out/jtreg-results-${JTREG_CATEGORY}-${JVM_VARIANT}-${BUILD_TYPE}.tar.gz'