From cce6cfbe486984c2c41d6b772a692ea87ad0222a Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Mon, 9 Sep 2019 20:24:03 +0900 Subject: Make test-all and test-spec runnable on Android Calling some syscall functions such as Dir.chroot causes SIGSYS instead of EPERM on Android. This change skips all tests that stops the test-suite run. --- spec/ruby/core/dir/chroot_spec.rb | 2 +- spec/ruby/core/process/groups_spec.rb | 2 +- spec/ruby/core/process/initgroups_spec.rb | 2 +- test/fiddle/helper.rb | 7 +++++++ test/pathname/test_pathname.rb | 1 + test/ruby/test_dir.rb | 1 + test/ruby/test_file_exhaustive.rb | 1 + test/ruby/test_process.rb | 3 +++ 8 files changed, 16 insertions(+), 3 deletions(-) diff --git a/spec/ruby/core/dir/chroot_spec.rb b/spec/ruby/core/dir/chroot_spec.rb index 55392410e7..a5ca8943fc 100644 --- a/spec/ruby/core/dir/chroot_spec.rb +++ b/spec/ruby/core/dir/chroot_spec.rb @@ -9,7 +9,7 @@ platform_is_not :windows do end end - platform_is_not :cygwin do + platform_is_not :cygwin, :android do as_user do describe "Dir.chroot as regular user" do before :all do diff --git a/spec/ruby/core/process/groups_spec.rb b/spec/ruby/core/process/groups_spec.rb index 6b9175736d..cbbe4fed25 100644 --- a/spec/ruby/core/process/groups_spec.rb +++ b/spec/ruby/core/process/groups_spec.rb @@ -14,7 +14,7 @@ describe "Process.groups" do end describe "Process.groups=" do - platform_is_not :windows do + platform_is_not :windows, :android do as_superuser do it "sets the list of gids of groups in the supplemental group access list" do groups = Process.groups diff --git a/spec/ruby/core/process/initgroups_spec.rb b/spec/ruby/core/process/initgroups_spec.rb index 1dd516d8b2..ffc7f282b6 100644 --- a/spec/ruby/core/process/initgroups_spec.rb +++ b/spec/ruby/core/process/initgroups_spec.rb @@ -1,7 +1,7 @@ require_relative '../../spec_helper' describe "Process.initgroups" do - platform_is_not :windows do + platform_is_not :windows, :android do as_user do it "initializes the supplemental group access list" do name = `id -un`.strip diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb index 4aaa55ea78..d6fc44af4b 100644 --- a/test/fiddle/helper.rb +++ b/test/fiddle/helper.rb @@ -10,6 +10,13 @@ case RUBY_PLATFORM when /cygwin/ libc_so = "cygwin1.dll" libm_so = "cygwin1.dll" +when /android/ + libdir = '/system/lib' + if [0].pack('L!').size == 8 + libdir = '/system/lib64' + end + libc_so = File.join(libdir, "libc.so") + libm_so = File.join(libdir, "libm.so") when /linux/ libdir = '/lib' case [0].pack('L!').size diff --git a/test/pathname/test_pathname.rb b/test/pathname/test_pathname.rb index 076a73e50b..eaecc52475 100644 --- a/test/pathname/test_pathname.rb +++ b/test/pathname/test_pathname.rb @@ -789,6 +789,7 @@ class TestPathname < Test::Unit::TestCase end def test_birthtime + skip if RUBY_PLATFORM =~ /android/ # Check under a (probably) local filesystem. # Remote filesystems often may not support birthtime. with_tmpchdir('rubytest-pathname') do |dir| diff --git a/test/ruby/test_dir.rb b/test/ruby/test_dir.rb index 75cae71093..1bb228fd45 100644 --- a/test/ruby/test_dir.rb +++ b/test/ruby/test_dir.rb @@ -122,6 +122,7 @@ class TestDir < Test::Unit::TestCase end def test_chroot_nodir + skip if RUBY_PLATFORM =~ /android/ assert_raise(NotImplementedError, Errno::ENOENT, Errno::EPERM ) { Dir.chroot(File.join(@nodir, "")) } end diff --git a/test/ruby/test_file_exhaustive.rb b/test/ruby/test_file_exhaustive.rb index 33ed73d9fc..2a5a860cf8 100644 --- a/test/ruby/test_file_exhaustive.rb +++ b/test/ruby/test_file_exhaustive.rb @@ -642,6 +642,7 @@ class TestFileExhaustive < Test::Unit::TestCase end def test_birthtime + skip if RUBY_PLATFORM =~ /android/ [regular_file, utf8_file].each do |file| t1 = File.birthtime(file) t2 = File.open(file) {|f| f.birthtime} diff --git a/test/ruby/test_process.rb b/test/ruby/test_process.rb index 83c9c6a867..d1814a81bb 100644 --- a/test/ruby/test_process.rb +++ b/test/ruby/test_process.rb @@ -1583,6 +1583,7 @@ class TestProcess < Test::Unit::TestCase end def test_setegid + skip "root can use Process.egid on Android platform" if RUBY_PLATFORM =~ /android/ assert_nothing_raised(TypeError) {Process.egid += 0} rescue NotImplementedError end @@ -1871,6 +1872,7 @@ class TestProcess < Test::Unit::TestCase end def test_execopts_uid + skip "root can use uid option of Kernel#system on Android platform" if RUBY_PLATFORM =~ /android/ feature6975 = '[ruby-core:47414]' [30000, [Process.uid, ENV["USER"]]].each do |uid, user| @@ -1902,6 +1904,7 @@ class TestProcess < Test::Unit::TestCase def test_execopts_gid skip "Process.groups not implemented on Windows platform" if windows? + skip "root can use Process.groups on Android platform" if RUBY_PLATFORM =~ /android/ feature6975 = '[ruby-core:47414]' groups = Process.groups.map do |g| -- cgit v1.2.3