#!/bin/python2 import os import sys import stat import errno import libmount as mnt def usage(tss): print "\nUsage:\n\t{:s} [testoptions]\nTests:\n".format(sys.argv[0]) for i in tss: print "\t{15:-s}".format(i[0]) if i[2] != "": print " {:s}\n".format(i[2]) print("\n") return 1 def mnt_run_test(tss, argv): rc = -1 if ((len(argv) < 2) or (argv[1] == "--help") or (argv[1] == "-h")): return usage(tss) #mnt_init_debug(0) i=() for i in tss: if i[0] == argv[1]: rc = i[1](i, argv[1:]) if rc: print "FAILED [rc={:d}]".format(rc) break if ((rc < 0) and (i == ())): return usage(tss) return not not rc #because !!rc is too mainstream for python def test_mount(ts, argv): idx = 1 rc = 0 if len(argv) < 2: return -errno.EINVAL cxt = mnt.Cxt() if argv[idx] == "-o": cxt.options = argv[idx+1] idx += 2 if argv[idx] == "-t": cxt.fstype = argv[idx+1] idx += 2 if len(argv) == idx + 1: cxt.target = argv[idx] idx+=1 elif (len(argv) == idx + 2): cxt.source = argv[idx] idx += 1 cxt.target = argv[idx] idx += 1 try: cxt.mount() except Exception: print "failed to mount" return -1 print "successfully mounted" return rc def test_umount(ts, argv): idx = 1 rc = 0 if len(argv) < 2: return -errno.EINVAL cxt = mnt.Cxt() if argv[idx] == "-t": cxt.options = argv[idx+1] idx += 2 if argv[idx] == "-f": cxt.enable_force(True) if argv[idx] == "-l": cxt.enable_lazy(True) idx += 1 elif argv[idx] == "-r": cxt.enable_rdonly_umount(True) idx += 1 if len(argv) == idx + 1: cxt.target = argv[idx] idx += 1 else: return -errno.EINVAL try: cxt.umount() except Exception: print "failed to umount" return 1 print "successfully umounted" return rc def test_flags(ts, argv): idx = 1 rc = 0 opt = "" flags = 0 cxt = mnt.Cxt() if argv[idx] == "-o": cxt.options = argv[idx + 1] idx += 2 if len(argv) == idx + 1: cxt.target = argv[idx] idx += 1 try: cxt.prepare_mount() # catch ioerror here except IOError as e: print "failed to prepare mount {:s}".format(e.strerror) opt = cxt.fs.options if (opt): print "options: {:s}", opt print "flags: {08:lx}".format(cxt.mflags()) return rc def test_mountall(ts, argv): mntrc = 1 ignored = 1 idx = 1 cxt = mnt.Cxt() if len(argv) > 2: if argv[idx] == "-O": cxt.options_pattern = argv[idx+1] idx += 2 if argv[idx] == "-t": cxt.fstype_pattern = argv[idx+1] idx += 2 i = () while (cxt.next_mount()): tgt = i.target if (ignored == 1): print "{:s}: ignored: not match".format(tgt) elif (ignored == 2): print "{:s}: ignored: already mounted".format(tgt) elif (not cxt.status): if (mntrc > 0): # ?? errno = mntrc print "{:s}: mount failed".format(tgt) else: print "{:s}: mount failed".format(tgt) else: print "{:s}: successfully mounted".format(tgt) return 0 tss = ( ( "--mount", test_mount, "[-o ] [-t ] | " ), ( "--umount", test_umount, "[-t ] [-f][-l][-r] |" ), ( "--mount-all", test_mountall, "[-O ] [-t ] " ) ) os.umask(stat.S_IWGRP | stat.S_IWOTH) #to be compatible with mount(8) sys.exit(mnt_run_test(tss, sys.argv))