From 57599f075c1f1bfdd2e75eab6466595d16ec2c22 Mon Sep 17 00:00:00 2001 From: ijrsvt Date: Sun, 29 Mar 2020 16:15:24 -0700 Subject: [PATCH] Pyarrow Segfault Regression Test (#7568) --- python/ray/tests/BUILD | 8 ++++++ python/ray/tests/test_symbol_collisions.py | 29 ++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 python/ray/tests/test_symbol_collisions.py diff --git a/python/ray/tests/BUILD b/python/ray/tests/BUILD index 3cfa7a18b..0aa1c77ed 100644 --- a/python/ray/tests/BUILD +++ b/python/ray/tests/BUILD @@ -407,3 +407,11 @@ py_test( tags = ["exclusive"], deps = ["//:ray_lib"], ) + +py_test( + name = "test_symbol_collisions", + size = "small", + srcs = ["test_symbol_collisions.py"], + tags = ["exclusive"], + deps = ["//:ray_lib"], +) diff --git a/python/ray/tests/test_symbol_collisions.py b/python/ray/tests/test_symbol_collisions.py new file mode 100644 index 000000000..fdd684cc4 --- /dev/null +++ b/python/ray/tests/test_symbol_collisions.py @@ -0,0 +1,29 @@ +""" +This script ensures that various libraries do not conflict with ray by +trying to import both libraries in both orders. +A specific example is that importing ray after pyarrow causes a Segfault. +""" +import subprocess + +TESTED_LIBRARIES = ["pyarrow"] + + +def test_imports(): + def try_imports(library1, library2): + return_info = subprocess.run([ + "python", "-c", "import {}; import {}".format(library1, library2) + ]) + if return_info.returncode != 0: + return "Importing {} before {} caused an error".format( + library1, library2) + return "" + + for library in TESTED_LIBRARIES: + assert try_imports("ray", library) == "" + assert try_imports(library, "ray") == "" + + +if __name__ == "__main__": + import sys + import pytest + sys.exit(pytest.main(["-v", __file__]))