run_local_fuzz.sh 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/bin/bash
  2. set -euo pipefail
  3. # 本地一键 Fuzz(默认低内存并发,可通过环境变量覆盖)。
  4. # 用途:封装常用 fuzz 参数,避免每次手工传 FUZZ_WORKERS/FUZZ_JOBS/FUZZ_RSS_LIMIT_MB。
  5. # 默认行为:
  6. # workers/jobs 默认 2/2(可覆盖)
  7. # 默认 rss_limit_mb=2048(可覆盖)
  8. # 按轮次执行(默认 FUZZ_RUNS=10000000,不走 max_total_time)
  9. # 默认模式 nightly,默认生成覆盖率
  10. # 可覆盖参数:
  11. # FUZZ_MODE/FUZZ_SKIP_COV/FUZZ_RUNS/FUZZ_TIMEOUT/FUZZ_MAX_LEN
  12. # FUZZ_WORKERS/FUZZ_JOBS/FUZZ_RSS_LIMIT_MB/FUZZ_MALLOC_LIMIT_MB
  13. # 三个语义宏默认值(可覆盖):
  14. # RYANJSON_STRICT_OBJECT_KEY_CHECK=false
  15. # RYANJSON_DEFAULT_ADD_AT_HEAD=false
  16. # RYANJSON_SNPRINTF_SUPPORT_SCIENTIFIC=false
  17. scriptDir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  18. cd "${scriptDir}"
  19. fuzzMode="${FUZZ_MODE:-nightly}"
  20. fuzzSkipCov="${FUZZ_SKIP_COV:-0}"
  21. fuzzRuns="${FUZZ_RUNS:-10000000}"
  22. fuzzTimeout="${FUZZ_TIMEOUT:-4}"
  23. fuzzMaxLen="${FUZZ_MAX_LEN:-8192}"
  24. fuzzWorkers="${FUZZ_WORKERS:-3}"
  25. fuzzJobs="${FUZZ_JOBS:-9}"
  26. fuzzRssLimitMb="${FUZZ_RSS_LIMIT_MB:-4096}"
  27. fuzzMallocLimitMb="${FUZZ_MALLOC_LIMIT_MB:-}"
  28. export RYANJSON_STRICT_OBJECT_KEY_CHECK="${RYANJSON_STRICT_OBJECT_KEY_CHECK:-false}"
  29. export RYANJSON_DEFAULT_ADD_AT_HEAD="${RYANJSON_DEFAULT_ADD_AT_HEAD:-false}"
  30. export RYANJSON_SNPRINTF_SUPPORT_SCIENTIFIC="${RYANJSON_SNPRINTF_SUPPORT_SCIENTIFIC:-false}"
  31. echo "===================================================="
  32. echo "本地 Fuzz 启动"
  33. echo " - FUZZ_MODE=${fuzzMode}"
  34. echo " - FUZZ_SKIP_COV=${fuzzSkipCov}"
  35. echo " - FUZZ_RUNS=${fuzzRuns}"
  36. echo " - FUZZ_TIMEOUT=${fuzzTimeout}"
  37. echo " - FUZZ_MAX_LEN=${fuzzMaxLen}"
  38. echo " - FUZZ_WORKERS=${fuzzWorkers}"
  39. echo " - FUZZ_JOBS=${fuzzJobs}"
  40. if [[ -n "${fuzzRssLimitMb}" ]]; then
  41. echo " - FUZZ_RSS_LIMIT_MB=${fuzzRssLimitMb}"
  42. fi
  43. if [[ -n "${fuzzMallocLimitMb}" ]]; then
  44. echo " - FUZZ_MALLOC_LIMIT_MB=${fuzzMallocLimitMb}"
  45. fi
  46. echo " - RYANJSON_STRICT_OBJECT_KEY_CHECK=${RYANJSON_STRICT_OBJECT_KEY_CHECK}"
  47. echo " - RYANJSON_DEFAULT_ADD_AT_HEAD=${RYANJSON_DEFAULT_ADD_AT_HEAD}"
  48. echo " - RYANJSON_SNPRINTF_SUPPORT_SCIENTIFIC=${RYANJSON_SNPRINTF_SUPPORT_SCIENTIFIC}"
  49. echo "===================================================="
  50. FUZZ_MODE="${fuzzMode}" \
  51. FUZZ_SKIP_COV="${fuzzSkipCov}" \
  52. FUZZ_RUNS="${fuzzRuns}" \
  53. FUZZ_TIMEOUT="${fuzzTimeout}" \
  54. FUZZ_MAX_LEN="${fuzzMaxLen}" \
  55. FUZZ_WORKERS="${fuzzWorkers}" \
  56. FUZZ_JOBS="${fuzzJobs}" \
  57. FUZZ_RSS_LIMIT_MB="${fuzzRssLimitMb}" \
  58. FUZZ_MALLOC_LIMIT_MB="${fuzzMallocLimitMb}" \
  59. bash ./scripts/ci/runCoverage.sh