xref: /aosp_15_r20/external/mbedtls/tests/scripts/generate-afl-tests.sh (revision 62c56f9862f102b96d72393aff6076c951fb8148)
1*62c56f98SSadaf Ebrahimi#!/bin/sh
2*62c56f98SSadaf Ebrahimi
3*62c56f98SSadaf Ebrahimi# This script splits the data test files containing the test cases into
4*62c56f98SSadaf Ebrahimi# individual files (one test case per file) suitable for use with afl
5*62c56f98SSadaf Ebrahimi# (American Fuzzy Lop). http://lcamtuf.coredump.cx/afl/
6*62c56f98SSadaf Ebrahimi#
7*62c56f98SSadaf Ebrahimi# Usage: generate-afl-tests.sh <test data file path>
8*62c56f98SSadaf Ebrahimi#  <test data file path> - should be the path to one of the test suite files
9*62c56f98SSadaf Ebrahimi#                          such as 'test_suite_rsa.data'
10*62c56f98SSadaf Ebrahimi#
11*62c56f98SSadaf Ebrahimi# Copyright The Mbed TLS Contributors
12*62c56f98SSadaf Ebrahimi# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
13*62c56f98SSadaf Ebrahimi
14*62c56f98SSadaf Ebrahimi# Abort on errors
15*62c56f98SSadaf Ebrahimiset -e
16*62c56f98SSadaf Ebrahimi
17*62c56f98SSadaf Ebrahimiif [ -z $1 ]
18*62c56f98SSadaf Ebrahimithen
19*62c56f98SSadaf Ebrahimi    echo " [!] No test file specified" >&2
20*62c56f98SSadaf Ebrahimi    echo "Usage: $0 <test data file>" >&2
21*62c56f98SSadaf Ebrahimi    exit 1
22*62c56f98SSadaf Ebrahimifi
23*62c56f98SSadaf Ebrahimi
24*62c56f98SSadaf EbrahimiSRC_FILEPATH=$(dirname $1)/$(basename $1)
25*62c56f98SSadaf EbrahimiTESTSUITE=$(basename $1 .data)
26*62c56f98SSadaf Ebrahimi
27*62c56f98SSadaf EbrahimiTHIS_DIR=$(basename $PWD)
28*62c56f98SSadaf Ebrahimi
29*62c56f98SSadaf Ebrahimiif [ -d ../library -a -d ../include -a -d ../tests -a $THIS_DIR == "tests" ];
30*62c56f98SSadaf Ebrahimithen :;
31*62c56f98SSadaf Ebrahimielse
32*62c56f98SSadaf Ebrahimi    echo " [!] Must be run from Mbed TLS tests directory" >&2
33*62c56f98SSadaf Ebrahimi    exit 1
34*62c56f98SSadaf Ebrahimifi
35*62c56f98SSadaf Ebrahimi
36*62c56f98SSadaf EbrahimiDEST_TESTCASE_DIR=$TESTSUITE-afl-tests
37*62c56f98SSadaf EbrahimiDEST_OUTPUT_DIR=$TESTSUITE-afl-out
38*62c56f98SSadaf Ebrahimi
39*62c56f98SSadaf Ebrahimiecho " [+] Creating output directories" >&2
40*62c56f98SSadaf Ebrahimi
41*62c56f98SSadaf Ebrahimiif [ -e $DEST_OUTPUT_DIR/* ];
42*62c56f98SSadaf Ebrahimithen :
43*62c56f98SSadaf Ebrahimi    echo " [!] Test output files already exist." >&2
44*62c56f98SSadaf Ebrahimi    exit 1
45*62c56f98SSadaf Ebrahimielse
46*62c56f98SSadaf Ebrahimi    mkdir -p $DEST_OUTPUT_DIR
47*62c56f98SSadaf Ebrahimifi
48*62c56f98SSadaf Ebrahimi
49*62c56f98SSadaf Ebrahimiif [ -e $DEST_TESTCASE_DIR/* ];
50*62c56f98SSadaf Ebrahimithen :
51*62c56f98SSadaf Ebrahimi    echo " [!] Test output files already exist." >&2
52*62c56f98SSadaf Ebrahimielse
53*62c56f98SSadaf Ebrahimi    mkdir -p $DEST_TESTCASE_DIR
54*62c56f98SSadaf Ebrahimifi
55*62c56f98SSadaf Ebrahimi
56*62c56f98SSadaf Ebrahimiecho " [+] Creating test cases" >&2
57*62c56f98SSadaf Ebrahimicd $DEST_TESTCASE_DIR
58*62c56f98SSadaf Ebrahimi
59*62c56f98SSadaf Ebrahimisplit -p '^\s*$' ../$SRC_FILEPATH
60*62c56f98SSadaf Ebrahimi
61*62c56f98SSadaf Ebrahimifor f in *;
62*62c56f98SSadaf Ebrahimido
63*62c56f98SSadaf Ebrahimi    # Strip out any blank lines (no trim on OS X)
64*62c56f98SSadaf Ebrahimi    sed '/^\s*$/d' $f >testcase_$f
65*62c56f98SSadaf Ebrahimi    rm $f
66*62c56f98SSadaf Ebrahimidone
67*62c56f98SSadaf Ebrahimi
68*62c56f98SSadaf Ebrahimicd ..
69*62c56f98SSadaf Ebrahimi
70*62c56f98SSadaf Ebrahimiecho " [+] Test cases in $DEST_TESTCASE_DIR" >&2
71*62c56f98SSadaf Ebrahimi
72