1#!/bin/bash 2# Tests library functions and types. 3# 4# Version: 20200705 5 6EXIT_SUCCESS=0; 7EXIT_FAILURE=1; 8EXIT_IGNORE=77; 9 10LIBRARY_TESTS="chunk chunks_table error io_handle notify record record_values template_definition"; 11LIBRARY_TESTS_WITH_INPUT="file support"; 12OPTION_SETS=""; 13 14INPUT_GLOB="*"; 15 16run_test() 17{ 18 local TEST_NAME=$1; 19 20 local TEST_DESCRIPTION="Testing: ${TEST_NAME}"; 21 local TEST_EXECUTABLE="./evtx_test_${TEST_NAME}"; 22 23 if ! test -x "${TEST_EXECUTABLE}"; 24 then 25 TEST_EXECUTABLE="${TEST_EXECUTABLE}.exe"; 26 fi 27 28 # TODO: add support for TEST_PROFILE and OPTION_SETS? 29 run_test_with_arguments "${TEST_DESCRIPTION}" "${TEST_EXECUTABLE}"; 30 local RESULT=$?; 31 32 return ${RESULT}; 33} 34 35run_test_with_input() 36{ 37 local TEST_NAME=$1; 38 39 local TEST_DESCRIPTION="Testing: ${TEST_NAME}"; 40 local TEST_EXECUTABLE="./evtx_test_${TEST_NAME}"; 41 42 if ! test -x "${TEST_EXECUTABLE}"; 43 then 44 TEST_EXECUTABLE="${TEST_EXECUTABLE}.exe"; 45 fi 46 47 if ! test -d "input"; 48 then 49 echo "Test input directory not found."; 50 51 return ${EXIT_IGNORE}; 52 fi 53 local RESULT=`ls input/* | tr ' ' '\n' | wc -l`; 54 55 if test ${RESULT} -eq ${EXIT_SUCCESS}; 56 then 57 echo "No files or directories found in the test input directory"; 58 59 return ${EXIT_IGNORE}; 60 fi 61 62 local TEST_PROFILE_DIRECTORY=$(get_test_profile_directory "input" "libevtx"); 63 64 local IGNORE_LIST=$(read_ignore_list "${TEST_PROFILE_DIRECTORY}"); 65 66 RESULT=${EXIT_SUCCESS}; 67 68 for TEST_SET_INPUT_DIRECTORY in input/*; 69 do 70 if ! test -d "${TEST_SET_INPUT_DIRECTORY}"; 71 then 72 continue; 73 fi 74 if check_for_directory_in_ignore_list "${TEST_SET_INPUT_DIRECTORY}" "${IGNORE_LIST}"; 75 then 76 continue; 77 fi 78 79 local TEST_SET_DIRECTORY=$(get_test_set_directory "${TEST_PROFILE_DIRECTORY}" "${TEST_SET_INPUT_DIRECTORY}"); 80 81 local OLDIFS=${IFS}; 82 83 # IFS="\n" is not supported by all platforms. 84 IFS=" 85"; 86 87 if test -f "${TEST_SET_DIRECTORY}/files"; 88 then 89 for INPUT_FILE in `cat ${TEST_SET_DIRECTORY}/files | sed "s?^?${TEST_SET_INPUT_DIRECTORY}/?"`; 90 do 91 if test "${OSTYPE}" = "msys"; 92 then 93 # A test executable built with MinGW expects a Windows path. 94 INPUT_FILE=`echo ${INPUT_FILE} | sed 's?/?\\\\?g'`; 95 fi 96 run_test_on_input_file_with_options "${TEST_SET_DIRECTORY}" "${TEST_DESCRIPTION}" "default" "${OPTION_SETS}" "${TEST_EXECUTABLE}" "${INPUT_FILE}"; 97 RESULT=$?; 98 99 if test ${RESULT} -ne ${EXIT_SUCCESS}; 100 then 101 break; 102 fi 103 done 104 else 105 for INPUT_FILE in `ls -1d ${TEST_SET_INPUT_DIRECTORY}/${INPUT_GLOB}`; 106 do 107 if test "${OSTYPE}" = "msys"; 108 then 109 # A test executable built with MinGW expects a Windows path. 110 INPUT_FILE=`echo ${INPUT_FILE} | sed 's?/?\\\\?g'`; 111 fi 112 run_test_on_input_file_with_options "${TEST_SET_DIRECTORY}" "${TEST_DESCRIPTION}" "default" "${OPTION_SETS}" "${TEST_EXECUTABLE}" "${INPUT_FILE}"; 113 RESULT=$?; 114 115 if test ${RESULT} -ne ${EXIT_SUCCESS}; 116 then 117 break; 118 fi 119 done 120 fi 121 IFS=${OLDIFS}; 122 123 if test ${RESULT} -ne ${EXIT_SUCCESS}; 124 then 125 break; 126 fi 127 done 128 129 return ${RESULT}; 130} 131 132if test -n "${SKIP_LIBRARY_TESTS}"; 133then 134 exit ${EXIT_IGNORE}; 135fi 136 137TEST_RUNNER="tests/test_runner.sh"; 138 139if ! test -f "${TEST_RUNNER}"; 140then 141 TEST_RUNNER="./test_runner.sh"; 142fi 143 144if ! test -f "${TEST_RUNNER}"; 145then 146 echo "Missing test runner: ${TEST_RUNNER}"; 147 148 exit ${EXIT_FAILURE}; 149fi 150 151source ${TEST_RUNNER}; 152 153RESULT=${EXIT_IGNORE}; 154 155for TEST_NAME in ${LIBRARY_TESTS}; 156do 157 run_test "${TEST_NAME}"; 158 RESULT=$?; 159 160 if test ${RESULT} -ne ${EXIT_SUCCESS}; 161 then 162 break; 163 fi 164done 165 166if test ${RESULT} -ne ${EXIT_SUCCESS} && test ${RESULT} -ne ${EXIT_IGNORE}; 167then 168 exit ${RESULT}; 169fi 170 171for TEST_NAME in ${LIBRARY_TESTS_WITH_INPUT}; 172do 173 if test -d "input"; 174 then 175 run_test_with_input "${TEST_NAME}"; 176 RESULT=$?; 177 else 178 run_test "${TEST_NAME}"; 179 RESULT=$?; 180 fi 181 182 if test ${RESULT} -ne ${EXIT_SUCCESS}; 183 then 184 break; 185 fi 186done 187 188exit ${RESULT}; 189 190