summaryrefslogtreecommitdiffstats
path: root/src/tests/t_dump.py
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2013-02-04 18:21:45 -0500
committerGreg Hudson <ghudson@mit.edu>2013-02-04 18:29:21 -0500
commita71ba2c85329f3a0573bf51cad46f0d3facd5d0e (patch)
tree2c76ef1eaf96551da7fb195872ce7d0564192dc6 /src/tests/t_dump.py
parent1c84a94d25d62e4f78c09464f5ef9bd30bbb1e3e (diff)
downloadkrb5-a71ba2c85329f3a0573bf51cad46f0d3facd5d0e.tar.gz
krb5-a71ba2c85329f3a0573bf51cad46f0d3facd5d0e.tar.xz
krb5-a71ba2c85329f3a0573bf51cad46f0d3facd5d0e.zip
Add more tests for dump and load
Move the existing dump/load tests from t_general.py to a new script t_dump.py. Add additional tests using pre-created dumpfiles, to exercise the -r18, -r13, -b7, and -ov formats. bigredbutton: whitespace
Diffstat (limited to 'src/tests/t_dump.py')
-rw-r--r--src/tests/t_dump.py101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/tests/t_dump.py b/src/tests/t_dump.py
new file mode 100644
index 0000000000..239bbcc01e
--- /dev/null
+++ b/src/tests/t_dump.py
@@ -0,0 +1,101 @@
+#!/usr/bin/python
+from k5test import *
+from filecmp import cmp
+
+# Make sure we can dump and load an ordinary database, and that
+# principals and policies survive a dump/load cycle.
+
+realm = K5Realm(start_kdc=False)
+realm.run_kadminl('addpol fred')
+
+# Create a dump file.
+dumpfile = os.path.join(realm.testdir, 'dump')
+realm.run([kdb5_util, 'dump', dumpfile])
+
+# Write an additional policy record to the dump.
+f = open('testdir/dump', 'a')
+f.write('policy barney 0 0 1 1 1 0 '
+ '0 0 0 0 0 0 - 1 '
+ '2 28 '
+ 'fd100f5064625f6372656174696f6e404b5242544553542e434f4d00')
+f.close()
+
+# Destroy and load the database; check that the policies exist.
+# Spot-check principal and policy fields.
+realm.run([kdb5_util, 'destroy', '-f'])
+realm.run([kdb5_util, 'load', dumpfile])
+out = realm.run_kadminl('getprincs')
+if realm.user_princ not in out or realm.host_princ not in out:
+ fail('Missing principal after load')
+out = realm.run_kadminl('getprinc %s' % realm.user_princ)
+if 'Expiration date: [never]' not in out or 'MKey: vno 1' not in out:
+ fail('Principal has wrong value after load')
+out = realm.run_kadminl('getpols')
+if 'fred\n' not in out or 'barney\n' not in out:
+ fail('Missing policy after load')
+out = realm.run_kadminl('getpol barney')
+if 'Number of old keys kept: 1' not in out:
+ fail('Policy has wrong value after load')
+
+# Dump/load again, and make sure everything is still there.
+realm.run([kdb5_util, 'dump', dumpfile])
+realm.run([kdb5_util, 'load', dumpfile])
+out = realm.run_kadminl('getprincs')
+if realm.user_princ not in out or realm.host_princ not in out:
+ fail('Missing principal after load')
+out = realm.run_kadminl('getpols')
+if 'fred\n' not in out or 'barney\n' not in out:
+ fail('Missing policy after second load')
+
+srcdumpdir = os.path.join(srctop, 'tests', 'dumpfiles')
+srcdump = os.path.join(srcdumpdir, 'dump')
+srcdump_r18 = os.path.join(srcdumpdir, 'dump.r18')
+srcdump_r13 = os.path.join(srcdumpdir, 'dump.r13')
+srcdump_b7 = os.path.join(srcdumpdir, 'dump.b7')
+srcdump_ov = os.path.join(srcdumpdir, 'dump.ov')
+
+# Load a dump file from the source directory.
+realm.run([kdb5_util, 'destroy', '-f'])
+realm.run([kdb5_util, 'load', srcdump])
+realm.run([kdb5_util, 'stash', '-P', 'master'])
+
+def dump_compare(realm, opt, srcfile):
+ realm.run([kdb5_util, 'dump'] + opt + [dumpfile])
+ if not cmp(srcfile, dumpfile, False):
+ fail('Dump output does not match %s' % srcfile)
+
+# Dump the resulting DB in each non-iprop format and compare with
+# expected outputs.
+dump_compare(realm, [], srcdump)
+dump_compare(realm, ['-r18'], srcdump_r18)
+dump_compare(realm, ['-r13'], srcdump_r13)
+dump_compare(realm, ['-b7'], srcdump_b7)
+dump_compare(realm, ['-ov'], srcdump_ov)
+
+def load_dump_check_compare(realm, opt, srcfile):
+ realm.run([kdb5_util, 'destroy', '-f'])
+ realm.run([kdb5_util, 'load'] + opt + [srcfile])
+ out = realm.run_kadminl('getprincs')
+ if 'user@' not in out:
+ fail('Loaded dumpfile missing user principal')
+ out = realm.run_kadminl('getpols')
+ if 'testpol' not in out:
+ fail('Loaded dumpfile missing test policy')
+ dump_compare(realm, opt, srcfile)
+
+# Load each format of dump, check it, re-dump it, and compare.
+load_dump_check_compare(realm, ['-r18'], srcdump_r18)
+load_dump_check_compare(realm, ['-r13'], srcdump_r13)
+load_dump_check_compare(realm, ['-b7'], srcdump_b7)
+
+# Loading the last (-b7 format) dump won't have loaded the
+# per-principal kadm data. Load that incrementally with -ov.
+out = realm.run_kadminl('getprinc user')
+if 'Policy: [none]' not in out:
+ fail('Loaded b7 dump unexpectedly contains user policy reference')
+realm.run([kdb5_util, 'load', '-update', '-ov', srcdump_ov])
+out = realm.run_kadminl('getprinc user')
+if 'Policy: testpol' not in out:
+ fail('Loading ov dump did not add user policy reference')
+
+success('Dump/load tests')