You might want to send this to the upstream distribution list also. <selinux@xxxxxxxxxxxxx> On 05/19/2014 09:36 PM, Rastislav Hepner wrote: > Hey guys, > > As part of my college thesis I was attempting to unit test > libselinux-2.2.2-4 on Fedora 20 via Python (used unittest framework). > I've created bunch of tests (60) for some labeling function but result > is not very good. > Decision coverage of code under test +-45%. Caused mostly by unability stub > dependencies from C source code via Python. So tests looking more like > integration/fuctional tests. > > I'm interested in your feedback if there is need for such a tests or its waste. > Thank you. > > > Add runner of testes and helper module which > contains usefull func def. > --- > tests/helper.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > tests/runtests.py | 46 +++++++++++++++++++++++++++++++++++++ > 2 files changed, 115 insertions(+) > create mode 100755 tests/helper.py > create mode 100755 tests/runtests.py > > diff --git a/tests/helper.py b/tests/helper.py > new file mode 100755 > index 0000000..8d588ff > --- /dev/null > +++ b/tests/helper.py > @@ -0,0 +1,69 @@ > +#!/usr/bin/env python > + > +#This program is free software: you can redistribute it and/or modify > +#it under the terms of the GNU General Public License as published by > +#the Free Software Foundation, either version 3 of the License, or > +#(at your option) any later version. > +#This program is distributed in the hope that it will be useful, > +#but WITHOUT ANY WARRANTY; without even the implied warranty of > +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +#GNU General Public License for more details. > +# > +#For more information see <http://www.gnu.org/licenses/> > + > + > +import selinux > +import unittest > +import subprocess > +import re > + > +def findProcess(processName): > + """Look whether process is active > + > + Check whether process is up via bash command ps. > + > + Args: > + processName: Name of the process we are interested in. > + > + Returns: > + Lines of ouput from ps command which are describing active > + instances of processName. > + """ > + ps = subprocess.Popen("ps -ef | grep " + processName + " | grep -v grep", > + shell=True, stdout=subprocess.PIPE) > + output = ps.stdout.read() > + ps.stdout.close() > + ps.wait() > + return output > + > +def contextTranslation(): > + """Check if context translation is active. > + > + It perform this by checking if daemon mcstransd is running. > + > + Returns: > + True when mcstransd is up. > + False when its not. > + """ > + processName = "mcstransd" > + output = findProcess(processName) > + if re.search(processName, output) is not None: > + return True > + else: > + return False > + > +def read_attr_file(self, filename, pid="self"): > + """Reads files from /proc/.../attr/ > + """ > + file_path = "/proc/%s/attr/%s" % (str(pid), filename) > + fo = open(file_path, "r") > + context = fo.read()[:-1] > + fo.close() > + > + if context == "": > + return None > + else: > + return context > + > +if __name__ == '__main__': > + print ("Module containing helpful definitions for testing libselinux.") > diff --git a/tests/runtests.py b/tests/runtests.py > new file mode 100755 > index 0000000..f6a9c5c > --- /dev/null > +++ b/tests/runtests.py > @@ -0,0 +1,46 @@ > +#!/usr/bin/env python > + > +#This program is free software: you can redistribute it and/or modify > +#it under the terms of the GNU General Public License as published by > +#the Free Software Foundation, either version 3 of the License, or > +#(at your option) any later version. > +#This program is distributed in the hope that it will be useful, > +#but WITHOUT ANY WARRANTY; without even the implied warranty of > +#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +#GNU General Public License for more details. > +# > +#For more information see <http://www.gnu.org/licenses/> > + > + > +import unittest > +import argparse > +import sys > +import os > + > +parser = argparse.ArgumentParser() > +parser.add_argument("-a", "--all", action="store_true", help="run all tests") > +parser.add_argument("-t", "--test", help="run single test specified > as module.testcase.test" > + ", specify module without '.py' suffix!") > +parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2], > + help="adhere verbosity of tests", default=2) > +parser.add_argument("-d", "--directory", help="choose directory with tests", > + default=os.path.dirname(__file__)) > + > +args = parser.parse_args() > + > +if args.directory and not os.path.isdir(args.directory): > + print "No such directory!\n\n" > + parser.print_help() > + sys.exit(-1) > + > +if args.all: > + suite = unittest.TestLoader().discover(args.directory) > +elif args.test: > + suite = unittest.TestLoader().loadTestsFromName(args.test, None) > +else: > + parser.print_help() > + sys.exit(0) > + > + > +unittest.TextTestRunner(verbosity=args.verbosity).run(suite) > + -- selinux mailing list selinux@xxxxxxxxxxxxxxxxxxxxxxx https://admin.fedoraproject.org/mailman/listinfo/selinux