summaryrefslogtreecommitdiffstats
path: root/tests/features/ipctest.py
diff options
context:
space:
mode:
authorEmmanuel Dreyfus <manu@netbsd.org>2015-03-19 12:05:16 +0100
committerVijay Bellur <vbellur@redhat.com>2015-03-30 23:45:10 -0700
commitffb2e85ff574891639d899cc59fcd9f75d4ce51e (patch)
treef261ca1e87f9f96671a91c5eb3781cccb929e333 /tests/features/ipctest.py
parentd3eacb0d83834db485061d875d95b4f6af41f30a (diff)
Tests: portability fixes for ipc.t
This fixes portability problems in ipc.t so that it can run on NetBSD: 1) EOPNOTSUPP value is OS-dependent. Learn it from system headers instead of hard-coding it in the script 2) liglusterfs embbeds its own UUID implementation. The function name may be the same as in built(in implementation from libc, but with different prototype. In that case, we must make sure python will use libglusterfs's version, otherwise we will crash in libc's UUID code. Since dlopen() does not make any guarantee on what symbol will be used, me need to preload libglusterfs when loading python. This is done using LD_PRELOAD. 3) In python code we need to load with RTLD_GLOBAL global in order to have dependencies loaded 4) Python's ctypes.util.find_library does not lookup LD_LIBRARy_PATH and may therefore miss the library. On failure, retry with less portable but more reliable explicit name BUG: 1129939 Change-Id: I024cdfd03a5a42a8ec23de38a99e7349aba92ea8 Signed-off-by: Emmanuel Dreyfus <manu@netbsd.org> Reviewed-on: http://review.gluster.org/9944 Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Venky Shankar <vshankar@redhat.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'tests/features/ipctest.py')
-rwxr-xr-xtests/features/ipctest.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/tests/features/ipctest.py b/tests/features/ipctest.py
index 0592bae3bbc..857225fe0a5 100755
--- a/tests/features/ipctest.py
+++ b/tests/features/ipctest.py
@@ -3,7 +3,13 @@
import ctypes
import ctypes.util
-api = ctypes.CDLL(ctypes.util.find_library("gfapi"))
+# find_library does not lookup LD_LIBRARY_PATH and may miss the
+# function. In that case, retry with less portable but explicit name.
+libgfapi = ctypes.util.find_library("gfapi")
+if libgfapi == None:
+ libgfapi = "libgfapi.so"
+api = ctypes.CDLL(libgfapi,mode=ctypes.RTLD_GLOBAL)
+
api.glfs_ipc.argtypes = [ ctypes.c_void_p, ctypes.c_int ]
api.glfs_ipc.restype = ctypes.c_int