Skip to content

Commit 6280d2a

Browse files
authored
(v1.0.4-release) backport AQA_Test_Pipeline enhancements (#5533)
* Improve AQA_Test_Pipeline for release testing (#5512) related: #5510 fixes: #5509 fixes: eclipse-openj9/openj9#20004 Signed-off-by: Lan Xia <[email protected]> * Limit FIPS functional testing on OpenJcePlusTests and security related: backlog/issues/1494 Signed-off-by: Lan Xia <[email protected]> --------- Signed-off-by: Lan Xia <[email protected]>
1 parent 48490ac commit 6280d2a

File tree

3 files changed

+204
-32
lines changed

3 files changed

+204
-32
lines changed

buildenv/jenkins/aqaTestPipeline.groovy

+137-32
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,17 @@ def TARGETS = params.TARGETS ?: "Grinder"
66
TARGETS = TARGETS.trim().split("\\s*,\\s*")
77

88
def PARALLEL = params.PARALLEL ? params.PARALLEL : "Dynamic"
9-
def NUM_MACHINES = params.NUM_MACHINES ? params.NUM_MACHINES : 3
9+
10+
def NUM_MACHINES = ""
11+
if (params.NUM_MACHINES) {
12+
NUM_MACHINES = params.NUM_MACHINES
13+
} else if (!params.TEST_TIME && PARALLEL == "Dynamic") {
14+
// set default NUM_MACHINES to 3 if params.NUM_MACHINES and params.TEST_TIME are not set and PARALLEL is Dynamic
15+
NUM_MACHINES = 3
16+
}
1017
def SDK_RESOURCE = params.SDK_RESOURCE ? params.SDK_RESOURCE : "releases"
1118
def TIME_LIMIT = params.TIME_LIMIT ? params.TIME_LIMIT : 10
12-
def AUTO_AQA_GEN = params.AUTO_AQA_GEN ? params.AUTO_AQA_GEN : false
19+
def AUTO_AQA_GEN = params.AUTO_AQA_GEN ? params.AUTO_AQA_GEN.toBoolean() : false
1320
def TRSS_URL = params.TRSS_URL ? params.TRSS_URL : "https://trss.adoptium.net/"
1421
def TEST_FLAG = (params.TEST_FLAG) ?: ""
1522
def LIGHT_WEIGHT_CHECKOUT = params.LIGHT_WEIGHT_CHECKOUT ?: false
@@ -18,20 +25,62 @@ def LIGHT_WEIGHT_CHECKOUT = params.LIGHT_WEIGHT_CHECKOUT ?: false
1825
def DEFAULT_SUFFIX = (env.BUILD_USER_ID) ? "${env.BUILD_USER_ID} - jdk-${params.JDK_VERSIONS}" : "jdk-${params.JDK_VERSIONS}"
1926
def PIPELINE_DISPLAY_NAME = (params.PIPELINE_DISPLAY_NAME) ? "#${currentBuild.number} - ${params.PIPELINE_DISPLAY_NAME}" : "#${currentBuild.number} - ${DEFAULT_SUFFIX}"
2027

21-
def JOBS = [:]
22-
2328
// Set the AQA_TEST_PIPELINE Jenkins job displayName
2429
currentBuild.setDisplayName(PIPELINE_DISPLAY_NAME)
2530

26-
def suffix = ""
27-
if (TEST_FLAG) {
28-
suffix = "_" + TEST_FLAG.toLowerCase().trim()
29-
}
31+
def defaultTestTargets = "sanity.functional,extended.functional,special.functional,sanity.openjdk,extended.openjdk,sanity.system,extended.system,sanity.perf,extended.perf"
32+
def defaultFipsTestTargets = "extended.functional,sanity.openjdk,extended.openjdk,sanity.jck,extended.jck,special.jck"
33+
34+
JOBS = [:]
35+
fail = false
3036

31-
def fail = false
32-
int jobNum = 0
3337
JDK_VERSIONS.each { JDK_VERSION ->
34-
PLATFORMS.each { PLATFORM ->
38+
if (params.PLATFORMS == "release") {
39+
def configJson = []
40+
node("worker || (ci.role.test&&hw.arch.x86&&sw.os.linux)") {
41+
checkout scm
42+
dir (env.WORKSPACE) {
43+
def filePath = "./aqa-tests/buildenv/jenkins/config/${params.VARIANT}/"
44+
filePath = filePath + "default.json"
45+
if (fileExists(filePath + "jdk${JDK_VERSION}.json")) {
46+
filePath = filePath + "jdk${JDK_VERSION}.json"
47+
}
48+
configJson = readJSON(file: filePath)
49+
}
50+
}
51+
52+
configJson.each { item ->
53+
def releaseTestFlag = ""
54+
releaseTestFlag = item.TEST_FLAG
55+
item.PLATFORM_TARGETS.each { pt ->
56+
pt.each{ p, t ->
57+
def releasePlatform = p
58+
def releaseTargets = ""
59+
if (t.contains("defaultFipsTestTargets")) {
60+
releaseTargets = t.replace("defaultFipsTestTargets","${defaultFipsTestTargets}")
61+
} else {
62+
releaseTargets = t.replace("defaultTestTargets","${defaultTestTargets}")
63+
}
64+
String[] releasePlatformArray = releasePlatform.split("\\s*,\\s*")
65+
String[] releaseTargetsArray = releaseTargets.split("\\s*,\\s*")
66+
generateJobs(JDK_VERSION, releaseTestFlag, releasePlatformArray, releaseTargetsArray)
67+
}
68+
}
69+
}
70+
} else {
71+
generateJobs(JDK_VERSION, TEST_FLAG, PLATFORMS, TARGETS)
72+
}
73+
}
74+
parallel JOBS
75+
if (fail) {
76+
currentBuild.result = "FAILURE"
77+
}
78+
79+
def generateJobs(jobJdkVersion, jobTestFlag, jobPlatforms, jobTargets) {
80+
if (jobTestFlag == "NONE") {
81+
jobTestFlag = ""
82+
}
83+
jobPlatforms.each { PLATFORM ->
3584
String[] tokens = PLATFORM.split('_')
3685
def os = tokens[1];
3786
def arch = tokens[0];
@@ -63,30 +112,83 @@ JDK_VERSIONS.each { JDK_VERSION ->
63112
if (params.VARIANT == "openj9") {
64113
// get IBM Semeru CE
65114
sdk_resource_value = "customized"
66-
download_url="https://ibm.com/semeru-runtimes/api/v3/binary/latest/${JDK_VERSION}/ga/${os}/${arch}/jdk/openj9/normal/ibm_ce https://ibm.com/semeru-runtimes/api/v3/binary/latest/${JDK_VERSION}/ga/${os}/${arch}/testimage/openj9/normal/ibm_ce"
115+
download_url="https://ibm.com/semeru-runtimes/api/v3/binary/latest/${jobJdkVersion}/ga/${os}/${arch}/jdk/openj9/normal/ibm_ce https://ibm.com/semeru-runtimes/api/v3/binary/latest/${jobJdkVersion}/ga/${os}/${arch}/testimage/openj9/normal/ibm_ce"
67116
}
68117
}
69118
echo "download_url: ${download_url}"
70119

71-
TARGETS.each { TARGET ->
120+
jobTargets.each { TARGET ->
72121
def TEST_JOB_NAME = "Grinder"
73122
if (TARGET.contains("Grinder")) {
74123
TEST_JOB_NAME = TARGET
75124
} else {
76-
TEST_JOB_NAME = "Test_openjdk${JDK_VERSION}_${short_name}_${TARGET}_${PLATFORM}${suffix}"
125+
def suffix = ""
126+
if (jobTestFlag) {
127+
suffix = "_" + jobTestFlag.toLowerCase().trim()
128+
}
129+
TEST_JOB_NAME = "Test_openjdk${jobJdkVersion}_${short_name}_${TARGET}_${PLATFORM}${suffix}"
77130
}
78131
echo "TEST_JOB_NAME: ${TEST_JOB_NAME}"
79132

80133
def keep_reportdir = false
81-
if (TARGET.contains("jck") || TARGET.contains("openjdk") || TARGET.contains("osb")) {
134+
if (TARGET.contains("functional") || TARGET.contains("jck") || TARGET.contains("openjdk") || TARGET.contains("osb")) {
82135
keep_reportdir = true
83136
}
84-
if (TARGET.contains("functional") || TARGET.contains("perf")) {
85-
if (params.VARIANT == "temurin") {
86-
PARALLEL = "None"
137+
138+
def DYNAMIC_COMPILE = false
139+
if (!params.DYNAMIC_COMPILE) {
140+
if (("${TARGET}".contains('functional')) || ("${TARGET}".contains('external'))) {
141+
DYNAMIC_COMPILE = true
142+
} else {
143+
DYNAMIC_COMPILE = false
87144
}
145+
} else {
146+
DYNAMIC_COMPILE = params.DYNAMIC_COMPILE ? params.DYNAMIC_COMPILE.toBoolean() : false
88147
}
89148

149+
def VENDOR_TEST_REPOS = ''
150+
def VENDOR_TEST_BRANCHES = ''
151+
def VENDOR_TEST_DIRS = ''
152+
int rerunIterations = params.RERUN_ITERATIONS ? params.RERUN_ITERATIONS.toInteger() : 0
153+
def buildList = params.BUILD_LIST ?: ""
154+
if (params.VARIANT == "openj9") {
155+
// default rerunIterations is 3 for openj9
156+
rerunIterations = params.RERUN_ITERATIONS ? params.RERUN_ITERATIONS.toInteger() : 3
157+
if (TARGET.contains('external')) {
158+
PARALLEL = "None"
159+
rerunIterations = 0
160+
} else if (TARGET.contains('functional')) {
161+
if (jobTestFlag.contains("FIPS")) {
162+
if (!buildList) {
163+
buildList = "functional/OpenJcePlusTests,functional/security"
164+
}
165+
} else {
166+
VENDOR_TEST_REPOS = '[email protected]:runtimes/test.git'
167+
VENDOR_TEST_BRANCHES = params.ADOPTOPENJDK_BRANCH ?: 'master'
168+
VENDOR_TEST_DIRS = 'functional'
169+
}
170+
} else if (TARGET.contains('jck')) {
171+
VENDOR_TEST_REPOS = '[email protected]:runtimes/jck.git'
172+
VENDOR_TEST_BRANCHES = "main"
173+
VENDOR_TEST_DIRS = 'jck'
174+
} else if (TARGET.contains('openjdk')) {
175+
// only use osb repo for regular testing
176+
if (TARGET.contains('special') && jobTestFlag == "") {
177+
VENDOR_TEST_REPOS = '[email protected]:runtimes/osb-tests.git'
178+
VENDOR_TEST_BRANCHES = "ibm_tlda"
179+
VENDOR_TEST_DIRS = 'openjdk'
180+
}
181+
}
182+
183+
if (jobTestFlag.contains("FIPS") || (TARGET.contains("dev"))) {
184+
rerunIterations = 0
185+
}
186+
} else if (params.VARIANT == "temurin") {
187+
if (TARGET.contains("functional") || TARGET.contains("perf")) {
188+
PARALLEL = "None"
189+
}
190+
}
191+
echo "AUTO_AQA_GEN: ${AUTO_AQA_GEN}"
90192
// Grinder job has special settings and should be regenerated specifically, not via aqaTestPipeline
91193
if (AUTO_AQA_GEN && !TEST_JOB_NAME.contains("Grinder")) {
92194
String[] targetTokens = TARGET.split("\\.")
@@ -96,7 +198,7 @@ JDK_VERSIONS.each { JDK_VERSION ->
96198
string(name: 'TEST_JOB_NAME', value: TEST_JOB_NAME),
97199
string(name: 'LEVELS', value: level),
98200
string(name: 'GROUPS', value: group),
99-
string(name: 'JDK_VERSIONS', value: JDK_VERSION),
201+
string(name: 'JDK_VERSIONS', value: jobJdkVersion),
100202
string(name: 'ARCH_OS_LIST', value: PLATFORM),
101203
string(name: 'JDK_IMPL', value: jdk_impl),
102204
booleanParam(name: 'LIGHT_WEIGHT_CHECKOUT', value: LIGHT_WEIGHT_CHECKOUT)
@@ -124,8 +226,8 @@ JDK_VERSIONS.each { JDK_VERSION ->
124226
childParams << booleanParam(name: param.key, value: LIGHT_WEIGHT_CHECKOUT.toBoolean())
125227
} else if (param.key == "TIME_LIMIT") {
126228
childParams << string(name: param.key, value: TIME_LIMIT.toString())
127-
} else if (param.key == "TRSS_URL") {
128-
childParams << string(name: param.key, value: TRSS_URL)
229+
} else if (param.key == "TEST_FLAG") {
230+
childParams << string(name: param.key, value: jobTestFlag)
129231
} else if (param.key == "KEEP_REPORTDIR") {
130232
childParams << booleanParam(name: param.key, value: keep_reportdir.toBoolean())
131233
} else {
@@ -137,17 +239,25 @@ JDK_VERSIONS.each { JDK_VERSION ->
137239
}
138240
}
139241
}
242+
childParams << booleanParam(name: "DYNAMIC_COMPILE", value: DYNAMIC_COMPILE.toBoolean())
140243
childParams << booleanParam(name: "GENERATE_JOBS", value: AUTO_AQA_GEN.toBoolean())
141-
childParams << string(name: "JDK_VERSION", value: JDK_VERSION)
142-
childParams << string(name: "PLATFORM", value: PLATFORM)
143244
childParams << string(name: "JDK_IMPL", value: jdk_impl)
245+
childParams << string(name: "JDK_VERSION", value: jobJdkVersion)
246+
childParams << string(name: "PLATFORM", value: PLATFORM)
247+
childParams << string(name: "RERUN_ITERATIONS", value: rerunIterations.toString())
248+
childParams << string(name: "VENDOR_TEST_BRANCHES", value: VENDOR_TEST_BRANCHES)
249+
childParams << string(name: "VENDOR_TEST_DIRS", value: VENDOR_TEST_DIRS)
250+
childParams << string(name: "VENDOR_TEST_REPOS", value: VENDOR_TEST_REPOS)
251+
if (buildList) {
252+
childParams << string(name: "BUILD_LIST", value: buildList)
253+
}
144254

145-
jobNum++
255+
int jobNum = JOBS.size() + 1
146256
JOBS["${TEST_JOB_NAME}_${jobNum}"] = {
147257
def downstreamJob = build job: TEST_JOB_NAME, parameters: childParams, propagate: false, wait: true
148258
def downstreamJobResult = downstreamJob.getResult()
149-
echo " ${TEST_JOB_NAME} result is ${downstreamJobResult}"
150-
if (downstreamJob.getResult() == 'SUCCESS' || downstreamJob.getResult() == 'UNSTABLE') {
259+
echo "${TEST_JOB_NAME} result is ${downstreamJobResult}"
260+
if (downstreamJobResult == 'SUCCESS' || downstreamJobResult == 'UNSTABLE') {
151261
echo "[NODE SHIFT] MOVING INTO CONTROLLER NODE..."
152262
node("worker || (ci.role.test&&hw.arch.x86&&sw.os.linux)") {
153263
cleanWs disableDeferredWipeout: true, deleteDirs: true
@@ -185,9 +295,4 @@ JDK_VERSIONS.each { JDK_VERSION ->
185295
}
186296
}
187297
}
188-
}
189-
parallel JOBS
190-
if (fail) {
191-
currentBuild.result = "FAILURE"
192-
}
193-
298+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
[
2+
{
3+
"TEST_FLAG" : "NONE",
4+
"PLATFORM_TARGETS" : [
5+
{ "aarch64_linux" : "defaultTestTargets,dev.external" },
6+
{ "aarch64_mac" : "defaultTestTargets" },
7+
{ "ppc64_aix" : "defaultTestTargets" },
8+
{ "ppc64le_linux" : "defaultTestTargets,dev.external" },
9+
{ "s390x_linux" : "defaultTestTargets,dev.external" },
10+
{ "x86-64_linux" : "defaultTestTargets,dev.external" },
11+
{ "x86-64_mac" : "defaultTestTargets" },
12+
{ "x86-64_windows" : "defaultTestTargets" }
13+
]
14+
},
15+
{
16+
"TEST_FLAG" : "FIPS140_2",
17+
"PLATFORM_TARGETS" : [
18+
{ "ppc64le_linux" : "defaultFipsTestTargets" },
19+
{ "s390x_linux" : "defaultFipsTestTargets" },
20+
{ "x86-64_linux" : "defaultFipsTestTargets" }
21+
]
22+
},
23+
{
24+
"TEST_FLAG" : "FIPS140_3_OpenJCEPlusFIPS",
25+
"PLATFORM_TARGETS" : [
26+
{ "ppc64_aix" : "defaultFipsTestTargets" },
27+
{ "ppc64le_linux" : "defaultFipsTestTargets" },
28+
{ "s390x_linux" : "defaultFipsTestTargets" },
29+
{ "x86-64_linux" : "defaultFipsTestTargets" },
30+
{ "x86-64_windows" : "defaultFipsTestTargets" }
31+
]
32+
},
33+
{
34+
"TEST_FLAG" : "FIPS140_3_OpenJCEPlusFIPS.FIPS140-3",
35+
"PLATFORM_TARGETS" : [
36+
{ "ppc64_aix" : "defaultFipsTestTargets" },
37+
{ "ppc64le_linux" : "defaultFipsTestTargets" },
38+
{ "s390x_linux" : "defaultFipsTestTargets" },
39+
{ "x86-64_linux" : "defaultFipsTestTargets" },
40+
{ "x86-64_windows" : "defaultFipsTestTargets" }
41+
]
42+
}
43+
]
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
[
2+
{
3+
"TEST_FLAG" : "NONE",
4+
"PLATFORM_TARGETS" : [
5+
{ "aarch64_linux" : "defaultTestTargets" },
6+
{ "aarch64_mac" : "defaultTestTargets" },
7+
{ "ppc64_aix" : "defaultTestTargets" },
8+
{ "ppc64le_linux" : "defaultTestTargets" },
9+
{ "s390x_linux" : "defaultTestTargets" },
10+
{ "x86-64_linux" : "defaultTestTargets" },
11+
{ "x86-64_mac" : "defaultTestTargets" },
12+
{ "x86-64_windows" : "defaultTestTargets" },
13+
{ "x86-32_windows" : "defaultTestTargets" }
14+
]
15+
},
16+
{
17+
"TEST_FLAG" : "FIPS140_2",
18+
"PLATFORM_TARGETS" : [
19+
{ "ppc64le_linux" : "defaultFipsTestTargets" },
20+
{ "s390x_linux" : "defaultFipsTestTargets" },
21+
{ "x86-64_linux" : "defaultFipsTestTargets" }
22+
]
23+
}
24+
]

0 commit comments

Comments
 (0)