[PATCH for f20 1/4] Add basic files for functional tests in python
Miroslav Grepl
mgrepl at redhat.com
Tue May 20 12:37:33 UTC 2014
On 05/20/2014 12:32 PM, Rastislav Hepner wrote:
> Yes, to generate doc in html you can use pydoc on the modules,
> but documentation in these tests is more focused on explaining
> how tests work not code under test.
> I would rather consider leaving this doc as it is and create proper
> documentation for selinux module. So programmer can easily
> write help(selinux) in interpreter and get docs they need.
Sure *help(selinux)* would be nice.
>
>
>
> On Tue, May 20, 2014 at 8:37 AM, Miroslav Grepl <mgrepl at redhat.com
> <mailto:mgrepl at redhat.com>> wrote:
>
> On 05/20/2014 03:36 AM, 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.
>
> Great. Going to check it.
>
> Also do you think there is a way how to generate DOC from these tests?
>
> I mean I would like to create DOC? I mean I would like to see
> something like
>
> setfilecon_raw(file, raw_con)
>
> file="/tmp/test"
> raw_con = "system_u:object_r:user_home_t:s0"
> setfilecon_raw("/tmp/test","system_u:object_r:user_home_t:s0")
>
> For each function. Basically the point is people don't know how to
> use python bindings for libselinux.
>
> But at least these tests (probably more integration/fuctional
> tests as you wrote) are great examples for them.
>
> So I will check them later this week and I don't have a problem to
> add them if it looks OK.
>
>
> 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)
> +
>
>
>
>
>
> --
> /Rastislav Hepner/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.fedoraproject.org/pipermail/selinux/attachments/20140520/4e4c0725/attachment.html>
More information about the selinux
mailing list