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