Skip to content

Commit

Permalink
Merge pull request #2417 from natalie-lang/asan-all-nightly
Browse files Browse the repository at this point in the history
  • Loading branch information
seven1m authored Dec 24, 2024
2 parents e2c0ca3 + e30f0a8 commit adb262b
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 6 deletions.
22 changes: 22 additions & 0 deletions .github/workflows/asan_tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Run all tests with AddressSanitizer enabled

on:
schedule:
- cron: "40 4 * * *"

jobs:
specs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: fix kernel mmap rnd bits for ASan
run: sudo sysctl vm.mmap_rnd_bits=28
- name: get commit count
run: echo "NEW_COMMIT_COUNT=$(git log --oneline --since '25 hours ago' | wc -l)" >> $GITHUB_ENV
- name: run tests
if: ${{ env.NEW_COMMIT_COUNT > 0 }}
env:
SPEC_TIMEOUT: 480
run: rake docker_test_asan
5 changes: 4 additions & 1 deletion .github/workflows/self_hosted_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,8 @@ jobs:
- uses: actions/checkout@v4
with:
submodules: true
- name: get commit count
run: echo "NEW_COMMIT_COUNT=$(git log --oneline --since '25 hours ago' | wc -l)" >> $GITHUB_ENV
- name: run tests
run: rake docker_test_self_hosted_full RUBY=ruby3.2
if: ${{ env.NEW_COMMIT_COUNT > 0 }}
run: rake docker_test_self_hosted_full
1 change: 1 addition & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,4 +104,5 @@ jobs:
- name: test with AddressSanitizer
env:
SPEC_TIMEOUT: 480
SOME_TESTS: true
run: rake docker_test_asan
2 changes: 1 addition & 1 deletion Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ end
task :docker_test_asan do
ENV['NAT_BUILD_MODE'] = 'asan'
Rake::Task['docker_build_gcc'].invoke
sh "docker run #{docker_run_flags} --rm --entrypoint rake natalie_gcc_#{ruby_version_string}_asan test_asan"
sh "docker run #{docker_run_flags} --rm --entrypoint rake -e SOME_TESTS='#{ENV['SOME_TESTS']}' natalie_gcc_#{ruby_version_string}_asan test_asan"
end

task docker_test_all_ruby_spec_nightly: :docker_build_clang do
Expand Down
46 changes: 42 additions & 4 deletions test/asan_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,52 @@
require 'minitest/autorun'
require_relative 'support/compare_rubies'

TESTS = Dir[
'test/natalie/**/*_test.rb',
'spec/language/*_spec.rb',
].to_a
TESTS = if ENV['SOME_TESTS'] == 'true'
# runs on every PR -- some tests
Dir[
'spec/language/*_spec.rb',
'test/natalie/**/*_test.rb',
].to_a
else
# runs nightly -- all tests
Dir[
'spec/**/*_spec.rb',
'test/natalie/**/*_test.rb',
].to_a
end

TESTS_TO_SKIP = [
'test/natalie/libnat_test.rb', # too slow, times out frequently
'test/natalie/thread_test.rb', # calls GC.start, but we're not ready for that
'spec/library/socket/basicsocket/do_not_reverse_lookup_spec.rb', # getaddrinfo leak
'spec/library/socket/ipsocket/getaddress_spec.rb', # getaddrinfo leak
'spec/library/socket/socket/getaddrinfo_spec.rb', # getaddrinfo leak
'spec/library/socket/tcpsocket/initialize_spec.rb', # getaddrinfo leak
'spec/library/socket/tcpserver/new_spec.rb', # getaddrinfo leak
'spec/library/socket/tcpserver/sysaccept_spec.rb', # getaddrinfo leak
'spec/library/socket/tcpsocket/setsockopt_spec.rb', # getaddrinfo leak
'spec/library/socket/ipsocket/peeraddr_spec.rb', # getaddrinfo leak
'spec/library/socket/tcpsocket/recv_nonblock_spec.rb', # getaddrinfo leak
'spec/library/socket/udpsocket/bind_spec.rb', # getaddrinfo leak
'spec/library/socket/tcpsocket/open_spec.rb', # getaddrinfo leak
'spec/library/socket/udpsocket/write_spec.rb', # getaddrinfo leak
'spec/library/socket/ipsocket/recvfrom_spec.rb', # getaddrinfo leak
'spec/library/socket/ipsocket/addr_spec.rb', # getaddrinfo leak
'spec/library/yaml/unsafe_load_spec.rb', # heap buffer overflow in Natalie::StringObject::convert_float()
'spec/library/yaml/load_spec.rb', # heap buffer overflow in Natalie::StringObject::convert_float()
'spec/library/yaml/dump_spec.rb', # heap buffer overflow in Natalie::StringObject::convert_float()
'spec/library/yaml/to_yaml_spec.rb', # heap buffer overflow in Natalie::StringObject::convert_float()
'spec/core/process/spawn_spec.rb', # leak in KernelModule::spawn
'spec/core/process/fork_spec.rb', # spec timeout
'spec/core/kernel/fork_spec.rb', # spec timeout
'spec/core/kernel/Float_spec.rb', # heap buffer overflow in Natalie::StringObject::convert_float()
'spec/core/kernel/srand_spec.rb', # leak in Natalie::RandomObject::srand
'spec/core/random/new_seed_spec.rb', # leak in Natalie::RandomObject::srand
'spec/core/random/srand_spec.rb', # leak in Natalie::RandomObject::srand
'spec/core/process/uid_spec.rb', # not sure why this breaks
'spec/core/process/euid_spec.rb', # not sure why this breaks
'spec/core/process/egid_spec.rb', # not sure why this breaks
'spec/core/string/crypt_spec.rb', # heap buffer overflow in Natalie::StringObject::crypt
].freeze

describe 'ASAN tests' do
Expand Down

0 comments on commit adb262b

Please sign in to comment.