superlint/test/lib/buildFileListTest.sh
Marco Ferrari d2d73347d3
chore: split validation logic in smaller functions (#5892)
- Move USE_FIND_ALGORITHM and VALIDATE_ALL_CODEBASE validation in a
  dedicated function (ValidateFindMode).
- Move ANSIBLE_DIRECTORY validation to a dedicated function
  (ValidateAnsibleDirectory).
- Move VALIDATE_xxxx variables validation to a dedicated function
  (ValidateValidationVariables).
- Mark ANY_SET, ANY_TRUE, ANY_FALSE as local because we don't need to
  reference them anywhere outside ValidateValidationVariables.
- Add some debug statements in validation functions.
- Merge the loops to initialize VALIDATE_xxx variables and to print
  enable/disable language debug messages.
- Add tests for these validation functions.
- Add test start message for all tests.
2024-07-16 08:22:45 +00:00

173 lines
5.2 KiB
Bash
Executable file

#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
# shellcheck disable=SC2034
CREATE_LOG_FILE=false
# Default log level
# shellcheck disable=SC2034
LOG_LEVEL="DEBUG"
# shellcheck source=/dev/null
source "lib/functions/log.sh"
DEFAULT_BRANCH=main
git config --global init.defaultBranch "${DEFAULT_BRANCH}"
git config --global user.email "super-linter@example.com"
git config --global user.name "Super-linter"
function InitGitRepositoryAndCommitFiles() {
local REPOSITORY_PATH="${1}" && shift
local FILES_TO_COMMIT="${1}" && shift
local COMMIT_FILE_INITIAL_COMMIT="${1}"
git -C "${REPOSITORY_PATH}" init
if [[ "${COMMIT_FILE_INITIAL_COMMIT}" == "true" ]]; then
touch "${REPOSITORY_PATH}/test-initial-commit.txt"
git -C "${REPOSITORY_PATH}" add .
fi
git -C "${REPOSITORY_PATH}" commit --allow-empty -m "Initial commit"
GITHUB_BEFORE_SHA=$(git -C "${REPOSITORY_PATH}" rev-parse HEAD)
debug "GITHUB_BEFORE_SHA: ${GITHUB_BEFORE_SHA}"
GIT_ROOT_COMMIT_SHA="${GITHUB_BEFORE_SHA}"
debug "GIT_ROOT_COMMIT_SHA: ${GIT_ROOT_COMMIT_SHA}"
git -C "${REPOSITORY_PATH}" checkout -b test-branch
for ((i = 1; i <= FILES_TO_COMMIT; i++)); do
local TEST_FILE_PATH="${REPOSITORY_PATH}/test${i}.txt"
touch "${TEST_FILE_PATH}"
git -C "${REPOSITORY_PATH}" add .
git -C "${REPOSITORY_PATH}" commit -m "Add ${TEST_FILE_PATH}"
done
GITHUB_SHA=$(git -C "${REPOSITORY_PATH}" rev-parse HEAD)
debug "GITHUB_SHA: ${GITHUB_SHA}"
git -C "${REPOSITORY_PATH}" log --oneline "${DEFAULT_BRANCH}...${GITHUB_SHA}"
}
function GenerateFileDiffOneFileTest() {
local GITHUB_WORKSPACE
GITHUB_WORKSPACE="$(mktemp -d)"
# shellcheck disable=SC2064 # Once the path is set, we don't expect it to change
trap "rm -fr '${GITHUB_WORKSPACE}'" EXIT
echo "GITHUB_WORKSPACE: ${GITHUB_WORKSPACE}"
local FILES_TO_COMMIT="${FILES_TO_COMMIT:-1}"
local COMMIT_FILE_INITIAL_COMMIT="${COMMIT_FILE_INITIAL_COMMIT:-"false"}"
InitGitRepositoryAndCommitFiles "${GITHUB_WORKSPACE}" "${FILES_TO_COMMIT}" "${COMMIT_FILE_INITIAL_COMMIT}"
# shellcheck source=/dev/null
source "lib/functions/buildFileList.sh"
GenerateFileDiff
RAW_FILE_ARRAY_SIZE=${#RAW_FILE_ARRAY[@]}
if [ "${RAW_FILE_ARRAY_SIZE}" -ne 1 ]; then
fatal "RAW_FILE_ARRAY does not have exactly one element: ${RAW_FILE_ARRAY_SIZE}"
fi
local FUNCTION_NAME
FUNCTION_NAME="${1:-${FUNCNAME[0]}}"
notice "${FUNCTION_NAME} PASS"
}
function GenerateFileDiffOneFilePushEventTest() {
# shellcheck disable=SC2034
local GITHUB_EVENT_NAME="push"
local FILES_TO_COMMIT=1
local COMMIT_FILE_INITIAL_COMMIT="false"
GenerateFileDiffOneFileTest "${FUNCNAME[0]}"
}
function GenerateFileDiffInitialCommitPushEventTest() {
# shellcheck disable=SC2034
local GITHUB_EVENT_NAME="push"
local FILES_TO_COMMIT=0
local COMMIT_FILE_INITIAL_COMMIT="true"
GenerateFileDiffOneFileTest "${FUNCNAME[0]}"
}
function GenerateFileDiffTwoFilesTest() {
local GITHUB_WORKSPACE
GITHUB_WORKSPACE="$(mktemp -d)"
# shellcheck disable=SC2064 # Once the path is set, we don't expect it to change
trap "rm -fr '${GITHUB_WORKSPACE}'" EXIT
debug "GITHUB_WORKSPACE: ${GITHUB_WORKSPACE}"
local FILES_TO_COMMIT=2
InitGitRepositoryAndCommitFiles "${GITHUB_WORKSPACE}" ${FILES_TO_COMMIT} "false"
# shellcheck source=/dev/null
source "lib/functions/buildFileList.sh"
GenerateFileDiff
RAW_FILE_ARRAY_SIZE=${#RAW_FILE_ARRAY[@]}
if [ "${RAW_FILE_ARRAY_SIZE}" -ne 2 ]; then
fatal "RAW_FILE_ARRAY does not have exactly ${FILES_TO_COMMIT} elements: ${RAW_FILE_ARRAY_SIZE}"
fi
local FUNCTION_NAME
FUNCTION_NAME="${1:-${FUNCNAME[0]}}"
notice "${FUNCTION_NAME} PASS"
}
function GenerateFileDiffTwoFilesPushEventTest() {
# shellcheck disable=SC2034
local GITHUB_EVENT_NAME="push"
GenerateFileDiffTwoFilesTest "${FUNCNAME[0]}"
}
function BuildFileArraysAnsibleGitHubWorkspaceTest() {
local FUNCTION_NAME
FUNCTION_NAME="${FUNCNAME[0]}"
info "${FUNCTION_NAME} start"
# shellcheck source=/dev/null
source /action/lib/functions/detectFiles.sh
# shellcheck source=/dev/null
source /action/lib/functions/validation.sh
# shellcheck disable=SC2034
local FILTER_REGEX_INCLUDE=""
# shellcheck disable=SC2034
local FILTER_REGEX_EXCLUDE=""
# shellcheck disable=SC2034
local TEST_CASE_RUN=false
# shellcheck disable=SC2034
local IGNORE_GENERATED_FILES=false
local FILE_ARRAYS_DIRECTORY_PATH="/tmp/super-linter-output/super-linter-file-arrays"
mkdir -p "${FILE_ARRAYS_DIRECTORY_PATH}"
# shellcheck disable=SC2034
CHECKOV_LINTER_RULES="$(mktemp)"
GITHUB_WORKSPACE="/tmp/lint"
# shellcheck disable=SC2034
ANSIBLE_DIRECTORY="${GITHUB_WORKSPACE}"
BuildFileArrays "${GITHUB_WORKSPACE}"
local FILE_ARRAY_ANSIBLE_PATH="${FILE_ARRAYS_DIRECTORY_PATH}/file-array-ANSIBLE"
if [[ ! -e "${FILE_ARRAY_ANSIBLE_PATH}" ]]; then
fatal "${FILE_ARRAY_ANSIBLE_PATH} doesn't exist"
fi
if ! grep -qxF "${ANSIBLE_DIRECTORY}" "${FILE_ARRAY_ANSIBLE_PATH}"; then
fatal "${FILE_ARRAY_ANSIBLE_PATH} doesn't contain ${ANSIBLE_DIRECTORY}"
fi
notice "${FUNCTION_NAME} PASS"
}
GenerateFileDiffOneFileTest
GenerateFileDiffOneFilePushEventTest
GenerateFileDiffTwoFilesTest
GenerateFileDiffTwoFilesPushEventTest
GenerateFileDiffInitialCommitPushEventTest
BuildFileArraysAnsibleGitHubWorkspaceTest