diff options
author | Robbie Harwood <rharwood@redhat.com> | 2015-09-25 19:57:35 -0400 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2015-09-28 21:48:12 -0400 |
commit | 614a46cd1adb4e175eb4fa74f61e03a0f2b5610c (patch) | |
tree | 41774c483b464a3bf45b2ac4c3010945247d2bf5 | |
parent | 51af5769b1ef26ebe278a41590b1eba13cfe3fa5 (diff) | |
download | gss-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-x | proxy/tests/runtests.py | 94 |
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) |