Pathnames during `make distcheck' are remarkably long, even if the
original project path is very short. Indeed, the previous change which
added the test name into the `testroot' path is enough to push the
server's socket name over the magic 108-byte limit.
As an additional hack, arrange to refer to the home directory via a
symbolic link in `/tmp' (or wherever $TMPDIR points), which should be
much shorter. The symlink is deleted on test completion, because
otherwise we'll fill up `/tmp' with cruft, but I hope this doesn't cause
too much in the way of diagnostic trouble.
"""Utility module used by tests"""
import os,os.path,subprocess,sys,re,time,unicodedata,random,socket,traceback
"""Utility module used by tests"""
import os,os.path,subprocess,sys,re,time,unicodedata,random,socket,traceback
+import atexit,base64,errno
+
+homelink = None
def fatal(s):
"""Write an error message and exit"""
sys.stderr.write("ERROR: %s\n" % s)
sys.exit(1)
def fatal(s):
"""Write an error message and exit"""
sys.stderr.write("ERROR: %s\n" % s)
sys.exit(1)
+@atexit.register
+def cleanup():
+ if homelink is not None:
+ os.unlink(homelink)
+
# Identify the top build directory
cwd = os.getcwd()
if os.path.exists("config.h"):
# Identify the top build directory
cwd = os.getcwd()
if os.path.exists("config.h"):
def default_config(encoding="UTF-8"):
"""Write the default config"""
open("%s/config" % testroot, "w").write(
def default_config(encoding="UTF-8"):
"""Write the default config"""
open("%s/config" % testroot, "w").write(
collection fs %s %s/tracks
scratch %s/scratch.ogg
queue_pad 5
collection fs %s %s/tracks
scratch %s/scratch.ogg
queue_pad 5
broadcast 127.0.0.1 %d
broadcast_from 127.0.0.1 %d
mail_sender no.such.user.sorry@greenend.org.uk
broadcast 127.0.0.1 %d
broadcast_from 127.0.0.1 %d
mail_sender no.such.user.sorry@greenend.org.uk
-""" % (testroot, encoding, testroot, testroot, top_builddir, top_builddir,
+""" % (homelink, encoding, testroot, testroot, top_builddir, top_builddir,
port, port + 1))
def common_setup():
port, port + 1))
def common_setup():
remove_dir(testroot)
os.makedirs(testroot)
remove_dir(testroot)
os.makedirs(testroot)
+ os.makedirs("%s/home" % testroot)
+ # Establish a symlink to the home directory, to keep the socket pathnames
+ # short enough.
+ tmpdir = "/tmp"
+ for v in ["TMPDIR", "TMP"]:
+ try: tmpdir = os.environ[v]
+ except KeyError: pass
+ else: break
+ for i in xrange(1024):
+ r = base64.b64encode(os.urandom(9)).replace("/", "_")
+ f = "%s/disorder-home.%s" % (tmpdir, r)
+ try:
+ os.symlink("%s/home" % testroot, f)
+ except OSError, e:
+ if e.errno != errno.EEXIST: raise
+ else:
+ homelink = f
+ break
+ else:
+ fatal("failed to make home link")
# Choose a port
global port
port = random.randint(49152, 65530)
# Choose a port
global port
port = random.randint(49152, 65530)
time.sleep(1)
print " starting daemon"
# remove the socket if it exists
time.sleep(1)
print " starting daemon"
# remove the socket if it exists
- socket = "%s/home/socket" % testroot
+ socket = "%s/socket" % homelink
if os.path.exists(socket):
os.remove(socket)
daemon = subprocess.Popen(["disorderd",
if os.path.exists(socket):
os.remove(socket)
daemon = subprocess.Popen(["disorderd",