pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/.scripts/fuzz-gen.sh (about)

     1  #!/bin/bash
     2  
     3  ################################################################################
     4  
     5  NORM=0
     6  BOLD=1
     7  UNLN=4
     8  RED=31
     9  GREEN=32
    10  YELLOW=33
    11  BLUE=34
    12  MAG=35
    13  CYAN=36
    14  GREY=37
    15  DARK=90
    16  
    17  CL_NORM="\e[0m"
    18  CL_BOLD="\e[0;${BOLD};49m"
    19  CL_UNLN="\e[0;${UNLN};49m"
    20  CL_RED="\e[0;${RED};49m"
    21  CL_GREEN="\e[0;${GREEN};49m"
    22  CL_YELLOW="\e[0;${YELLOW};49m"
    23  CL_BLUE="\e[0;${BLUE};49m"
    24  CL_MAG="\e[0;${MAG};49m"
    25  CL_CYAN="\e[0;${CYAN};49m"
    26  CL_GREY="\e[0;${GREY};49m"
    27  CL_DARK="\e[0;${DARK};49m"
    28  CL_BL_RED="\e[1;${RED};49m"
    29  CL_BL_GREEN="\e[1;${GREEN};49m"
    30  CL_BL_YELLOW="\e[1;${YELLOW};49m"
    31  CL_BL_BLUE="\e[1;${BLUE};49m"
    32  CL_BL_MAG="\e[1;${MAG};49m"
    33  CL_BL_CYAN="\e[1;${CYAN};49m"
    34  CL_BL_GREY="\e[1;${GREY};49m"
    35  
    36  ################################################################################
    37  
    38  main() {
    39    if [[ ! $(type -P go-fuzz-build) ]] ; then
    40      error "This utility require go-fuzz-build" $RED
    41      exit 1
    42    fi
    43  
    44    local src src_package src_name src_path src_func output func_min
    45  
    46    show "\nBuilding archives for packages…\n"
    47  
    48    for src in $(find . -name "fuzz.go") ; do
    49      src_package=$(dirname "$src" | sed 's#\.\/##')
    50      src_path=$(echo "$src" | sed 's#\/fuzz.go##' | sed 's#\.\/##')
    51      src_name=$(echo "$src_path" | sed 's#\/#-#g')
    52  
    53      if [[ -n "$1" && "$1" != "$src_package" ]] ; then
    54        continue
    55      fi
    56  
    57      while read src_func ; do
    58        src_func=$(echo "$src_func" | cut -f2 -d " " | sed 's/(//')
    59        
    60        if [[ "$src_func" == "Fuzz" ]] ; then
    61          showm " ${CL_GREY}∙ ${CL_BOLD}${src_package}${CL_NORM}… "
    62          output="${src_name}-fuzz.zip"
    63          go-fuzz-build -o "$output" "github.com/essentialkaos/ek/${src_path}"
    64        else
    65          showm " ${CL_GREY}∙ ${CL_BOLD}${src_package}${CL_NORM} ${CL_GREY}($src_func)${CL_NORM}… "
    66          func_min=$(echo "$src_func" | sed 's/Fuzz//' | tr '[A-Z]' '[a-z]')
    67          output="${src_name}-${func_min}-fuzz.zip"
    68          go-fuzz-build -func "$src_func" -o "$output" "github.com/essentialkaos/ek/${src_path}"
    69        fi
    70  
    71        if [[ $? -eq 0 ]] ; then
    72          show "${CL_GREEN}✔  ${CL_DARK}($output)${CL_NORM}"
    73        else
    74          show "✖ " $RED
    75        fi
    76  
    77      done < <(grep -Eo '^func Fuzz.*\(' $src)
    78  
    79    done
    80  
    81    show ""
    82  }
    83  
    84  show() {
    85    if [[ -n "$2" ]] ; then
    86      echo -e "\e[${2}m${1}\e[0m"
    87    else
    88      echo -e "$*"
    89    fi
    90  }
    91  
    92  showm() {
    93    if [[ -n "$2" ]] ; then
    94      echo -e -n "\e[${2}m${1}\e[0m"
    95    else
    96      echo -e -n "$*"
    97    fi
    98  }
    99  
   100  error() {
   101    show "$@" 1>&2
   102  }
   103  
   104  
   105  ################################################################################
   106  
   107  main "$@"