-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathJenkinsfileAFL
134 lines (118 loc) · 4.22 KB
/
JenkinsfileAFL
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
#!/usr/bin/env groovy
@Library('ci-jenkins') import com.swiftnav.ci.*
def context = new Context(context: this)
context.setRepo('gnss-converters')
def builder = context.getBuilder()
String dockerMountArgs = '--privileged -v /mnt/efs/ccache:/home/jenkins/.ccache -v /mnt/efs/refrepo:/mnt/efs/refrepo'
pipeline {
agent any
parameters {
choice(name: 'AGENT', choices: ['docker.fast', 'docker.highmem'], description: 'Jenkins Node to run instances on')
string(name: 'FUZZ_TIMEOUT', defaultValue: '1h', description: 'Fuzz test duration (ex: "60s", "10m", "6h", "7d")')
booleanParam(name: 'SLACK_NOTIFICATION', defaultValue: true, description: 'Slack notification will be sent to #fuzz-testing')
}
environment {
AFL_USE_ASAN='1'
BRANCH_NAME=env.GIT_BRANCH.minus('origin/')
CC='/usr/bin/afl-gcc'
CXX='/usr/bin/afl-g++'
CFLAGS='-m32 -fsanitize=address'
CXXFLAGS='-m32 -fsanitize=address'
LDFLAGS='-m32 -fsanitize=address'
HANG_TIMEOUT='5000'
MEMORY_LIMIT='1500'
}
stages {
stage('AFL') {
parallel {
stage('RTCM to SBP') {
agent {
dockerfile {
filename 'Dockerfile.AFL'
label params.AGENT
args dockerMountArgs
}
}
steps {
script {
sh("echo Running on \${NODE_NAME}")
sh('echo "" | sudo tee /proc/sys/kernel/core_pattern')
gitPrep()
builder.cmake(
workDir: 'c',
cmakeAddArgs: '-DTHIRD_PARTY_INCLUDES_AS_SYSTEM=true -DI_KNOW_WHAT_I_AM_DOING_AND_HOW_DANGEROUS_IT_IS__GNSS_CONVERTERS_DISABLE_CRC_VALIDATION=true',
buildType: 'Release'
)
builder.make(
workDir: 'c/build',
target: 'rtcm3tosbp'
)
sh("timeout --preserve-status '${params.FUZZ_TIMEOUT}' ./jenkins/afl-parallel.sh -t '${env.HANG_TIMEOUT}' -m '${env.MEMORY_LIMIT}' -i c/afl/testcases/rtcm3tosbp -o afl_output c/build/rtcm3tosbp/src/rtcm3tosbp -w 1945:27750")
def crashes = findFiles(glob: 'afl_output/**/crashes/*')
def hangs = findFiles(glob: 'afl_output/**/hangs/*')
if (crashes.length > 0 || hangs.length > 0) {
error('Detected a crash and/or hang')
}
}
}
post {
always {
zip(zipFile: 'rtcm3tosbp.zip', dir: 'afl_output', archive: true)
}
cleanup {
cleanWs()
}
}
}
stage('UBX to SBP') {
agent {
dockerfile {
filename 'Dockerfile.AFL'
label params.AGENT
args dockerMountArgs
}
}
steps {
script {
sh("echo Running on \${NODE_NAME}")
sh('echo "" | sudo tee /proc/sys/kernel/core_pattern')
gitPrep()
builder.cmake(
workDir: 'c',
cmakeAddArgs: '-DTHIRD_PARTY_INCLUDES_AS_SYSTEM=true -DI_KNOW_WHAT_I_AM_DOING_AND_HOW_DANGEROUS_IT_IS__GNSS_CONVERTERS_DISABLE_CRC_VALIDATION=true',
buildType: 'Release'
)
builder.make(
workDir: 'c/build',
target: 'ubx2sbp'
)
sh("timeout --preserve-status '${params.FUZZ_TIMEOUT}' ./jenkins/afl-parallel.sh -t '${env.HANG_TIMEOUT}' -m '${env.MEMORY_LIMIT}' -i c/afl/testcases/ubx2sbp -o afl_output c/build/ubx2sbp/src/ubx2sbp -w 1945:27750")
def crashes = findFiles(glob: 'afl_output/**/crashes/*')
def hangs = findFiles(glob: 'afl_output/**/hangs/*')
if (crashes.length > 0 || hangs.length > 0) {
error('Detected a crash and/or hang')
}
}
}
post {
always {
zip(zipFile: 'ubx2sbp.zip', dir: 'afl_output', archive: true)
}
cleanup {
cleanWs()
}
}
}
}
}
}
post {
always {
script {
if (params.SLACK_NOTIFICATION) {
context.slackNotify(channel: '#fuzz-testing', branches: ['.*'])
}
}
}
}
}