summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobbie Harwood <rharwood@redhat.com>2015-09-25 19:57:35 -0400
committerSimo Sorce <simo@redhat.com>2015-09-28 21:48:12 -0400
commit614a46cd1adb4e175eb4fa74f61e03a0f2b5610c (patch)
tree41774c483b464a3bf45b2ac4c3010945247d2bf5
parent51af5769b1ef26ebe278a41590b1eba13cfe3fa5 (diff)
downloadgss-proxy-614a46cd1adb4e175eb4fa74f61e03a0f2b5610c.tar.gz
gss-proxy-614a46cd1adb4e175eb4fa74f61e03a0f2b5610c.tar.xz
gss-proxy-614a46cd1adb4e175eb4fa74f61e03a0f2b5610c.zip
Add tests for reloading on SIGHUP
Ticket: https://fedorahosted.org/gss-proxy/ticket/152 Signed-off-by: Robbie Harwood <rharwood@redhat.com> Reviewed-by: Simo Sorce <simo@redhat.com>
-rwxr-xr-xproxy/tests/runtests.py94
1 files changed, 76 insertions, 18 deletions
diff --git a/proxy/tests/runtests.py b/proxy/tests/runtests.py
index 2134642..fcc364e 100755
--- a/proxy/tests/runtests.py
+++ b/proxy/tests/runtests.py
@@ -311,27 +311,50 @@ GSSPROXY_CONF_TEMPLATE = '''
euid = ${UIDNUMBER}
'''
+# Contains a garbage service entry
+GSSPROXY_CONF_MINIMAL_TEMPLATE = '''
+[gssproxy]
-def setup_gssproxy(testdir, logfile, env):
+[service/dontuse]
+ mechs = krb5
+ cred_store = keytab:${GSSPROXY_KEYTAB}
+ cred_store = ccache:FILE:${GSSPROXY_CLIENT_CCACHE}
+ cred_store = client_keytab:${GSSPROXY_CLIENT_KEYTAB}
+ trusted = yes
+ euid = nobody
+'''
- gssproxy = os.path.join(testdir, 'gssproxy')
- if os.path.exists(gssproxy):
- shutil.rmtree(gssproxy)
- os.makedirs(gssproxy)
+GSSPROXY_CONF_SOCKET_TEMPLATE = GSSPROXY_CONF_TEMPLATE + '''
+ socket = ${SECOND_SOCKET}
+'''
- socket = os.path.join(gssproxy, 'gp.sock')
+def update_gssproxy_conf(testdir, env, template):
+ gssproxy = os.path.join(testdir, 'gssproxy')
ccache = os.path.join(gssproxy, 'gpccache')
ckeytab = os.path.join(testdir, USR_KTNAME)
-
conf = os.path.join(gssproxy, 'gp.conf')
- t = Template(GSSPROXY_CONF_TEMPLATE)
+ socket2 = os.path.join(gssproxy, 'gp.sock2')
+
+ t = Template(template)
text = t.substitute({'GSSPROXY_KEYTAB': env['KRB5_KTNAME'],
'GSSPROXY_CLIENT_CCACHE': ccache,
'GSSPROXY_CLIENT_KEYTAB': ckeytab,
- 'UIDNUMBER': os.getuid()})
+ 'UIDNUMBER': os.getuid(),
+ 'SECOND_SOCKET': socket2})
with open(conf, 'w+') as f:
f.write(text)
+def setup_gssproxy(testdir, logfile, env):
+
+ gssproxy = os.path.join(testdir, 'gssproxy')
+ if os.path.exists(gssproxy):
+ shutil.rmtree(gssproxy)
+ os.makedirs(gssproxy)
+
+ update_gssproxy_conf(testdir, env, GSSPROXY_CONF_TEMPLATE)
+
+ socket = os.path.join(gssproxy, 'gp.sock')
+ conf = os.path.join(gssproxy, 'gp.conf')
gproc = subprocess.Popen(["./gssproxy", "-i", "-d",
"-s", socket, "-c", conf],
stdout=logfile, stderr=logfile,
@@ -340,7 +363,7 @@ def setup_gssproxy(testdir, logfile, env):
return gproc, socket
-def run_basic_test(testdir, logfile, env):
+def run_basic_test(testdir, logfile, env, expected_failure=False):
print("STARTING BASIC init/Accept tests")
@@ -367,24 +390,36 @@ def run_basic_test(testdir, logfile, env):
stdin=pipe1[0], stdout=pipe0[1],
stderr=logfile, env=svcenv, preexec_fn=os.setsid)
- p1.wait()
- if p1.returncode != 0:
- print("FAILED: Init test", file=sys.stderr)
+ try:
+ p1.wait(1)
+ except subprocess.TimeoutExpired:
+ # p1.returncode is set to None here
+ pass
+ if p1.returncode != 0 and not expected_failure:
+ print("FAILED: Init test returned %s" % str(p1.returncode),
+ file=sys.stderr)
try:
os.killpg(p2.pid, signal.SIGTERM)
except OSError:
pass
else:
- print("SUCCESS: Init test", file=sys.stderr)
- p2.wait()
- if p2.returncode != 0:
- print("FAILED: Accept test", file=sys.stderr)
+ print("SUCCESS: Init test returned %s" % str(p1.returncode),
+ file=sys.stderr)
+ try:
+ p2.wait(1)
+ except subprocess.TimeoutExpired:
+ # p2.returncode is set to None here
+ pass
+ if p2.returncode != 0 and not expected_failure:
+ print("FAILED: Accept test returned %s" % str(p2.returncode),
+ file=sys.stderr)
try:
os.killpg(p1.pid, signal.SIGTERM)
except OSError:
pass
else:
- print("SUCCESS: Accept test", file=sys.stderr)
+ print("SUCCESS: Accept test returned %s" % str(p2.returncode),
+ file=sys.stderr)
if __name__ == '__main__':
@@ -419,6 +454,29 @@ if __name__ == '__main__':
gssapienv['GSSPROXY_SOCKET'] = gpsocket
run_basic_test(testdir, logfile, gssapienv)
+ print("Testing basic SIGHUP with no change", file=sys.stderr)
+ os.kill(gproc.pid, signal.SIGHUP)
+ time.sleep(1) #Let gssproxy reload everything
+ run_basic_test(testdir, logfile, gssapienv)
+
+ print("Testing SIGHUP with dropped service", file=sys.stderr)
+ update_gssproxy_conf(testdir, keysenv, GSSPROXY_CONF_MINIMAL_TEMPLATE)
+ os.kill(gproc.pid, signal.SIGHUP)
+ time.sleep(1) #Let gssproxy reload everything
+ run_basic_test(testdir, logfile, gssapienv, True)
+
+ print("Testing SIGHUP with new service", file=sys.stderr)
+ update_gssproxy_conf(testdir, keysenv, GSSPROXY_CONF_TEMPLATE)
+ os.kill(gproc.pid, signal.SIGHUP)
+ time.sleep(1) #Let gssproxy reload everything
+ run_basic_test(testdir, logfile, gssapienv)
+
+ print("Testing SIGHUP with change of socket", file=sys.stderr)
+ update_gssproxy_conf(testdir, keysenv, GSSPROXY_CONF_SOCKET_TEMPLATE)
+ gssapienv['GSSPROXY_SOCKET'] += "2"
+ os.kill(gproc.pid, signal.SIGHUP)
+ time.sleep(1) #Let gssproxy reload everything
+ run_basic_test(testdir, logfile, gssapienv)
finally:
for name in processes:
print("Killing %s" % name)