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__]))