diff options
author | Nima Talebi <nima@autonomy.net.au> | 2009-05-23 18:39:30 +1000 |
---|---|---|
committer | Nima Talebi <nima@autonomy.net.au> | 2009-05-23 18:39:30 +1000 |
commit | 717ff3b75bca054a7f14de43a6ef6fc0535d3953 (patch) | |
tree | 0cf51391297472399778b8818e3a983f83a636d5 /unit-tests/unit | |
parent | cc76255fecfc9a4168debf1baccd68097d8f7c71 (diff) | |
download | python-dmidecode-717ff3b75bca054a7f14de43a6ef6fc0535d3953.tar.gz python-dmidecode-717ff3b75bca054a7f14de43a6ef6fc0535d3953.tar.xz python-dmidecode-717ff3b75bca054a7f14de43a6ef6fc0535d3953.zip |
Expanding the test case to include the POC demo
The POC demo does not actually do much testing yet, other than just
working or not working - but it's in place now for future
enhancements.
Diffstat (limited to 'unit-tests/unit')
-rwxr-xr-x | unit-tests/unit | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/unit-tests/unit b/unit-tests/unit new file mode 100755 index 0000000..160641a --- /dev/null +++ b/unit-tests/unit @@ -0,0 +1,193 @@ +#!/usr/bin/env python +#.awk '$0 ~ /case [0-9]+: .. 3/ { sys.stdout.write($2 }' src/dmidecode.c|tr ':\n' ', ' + +from pprint import pprint +import os, sys, random, tempfile, time +import commands +import libxml2 +from POCDemo import POCDemo + +DUMPS_D = "private" + +def ascii(s, i): return "\033[%d;1m%s\033[0m"%(30+i, str(s)) +def black(s): return "\033[30;1m%s\033[0m"%(str(s)) +def red(s): return "\033[31;1m%s\033[0m"%(str(s)) +def green(s): return "\033[32;1m%s\033[0m"%(str(s)) +def yellow(s): return "\033[33;1m%s\033[0m"%(str(s)) +def blue(s): return "\033[34;1m%s\033[0m"%(str(s)) +def magenta(s): return "\033[35;1m%s\033[0m"%(str(s)) +def cyan(s): return "\033[36;1m%s\033[0m"%(str(s)) +def white(s): return "\033[37;1m%s\033[0m"%(str(s)) + +DISPATCH = { + 1 : red, + 2 : green, + 3 : yellow, + 4 : blue, + 5 : magenta, + 6 : cyan, + 7 : white, +} + +LINE = "%s\n"%(magenta("="*80)) + +score = { + "total" : 0, + "skipped" : 0, + "passed" : 0, + "failed" : 0, +} + +def passed(msg=None, indent=1): + global score + score["total"] += 1 + score["passed"] += 1 + sys.stdout.write("%s\n"%green("PASS")) + if msg: sys.stdout.write("%s %s %s\n"%(" "*indent, green("P"), msg)) +def skipped(msg=None, indent=1): + global score + score["total"] += 1 + score["skipped"] += 1 + sys.stdout.write("%s\n"%yellow("SKIP")) + if msg: sys.stdout.write("%s %s %s\n"%(" "*indent, yellow("S"), msg)) +def failed(msg=None, indent=1): + global score + score["total"] += 1 + score["failed"] += 1 + sys.stdout.write("%s\n"%red("FAIL")) + if msg: sys.stdout.write("%s %s %s\n"%(" "*indent, red("F"), msg)) +def test(r, msg=None, indent=1): + if r: + passed(msg, indent) + return True + else: + failed(msg, indent) + return False + +sys.stdout.write(LINE) +sys.stdout.write(" * Testing for dmidecode (upstream)...") +d = True in [os.path.exists(os.path.join(_, "dmidecode")) for _ in os.getenv("PATH").split(':')] +test(d) + +sys.stdout.write(" * Creation of temporary files...") +try: + FH, DUMP = tempfile.mkstemp() + os.unlink(DUMP) + os.close(FH) + passed() +except: + failed() + +sys.stdout.write(LINE) +sys.stdout.write(" * Importing module...") +try: + import dmidecode + passed() + sys.stdout.write(" * Version: %s\n"%blue(dmidecode.version)) + sys.stdout.write(" * DMI Version String: %s\n"%blue(dmidecode.dmi)) + + sys.stdout.write(" * Testing that default device is /dev/mem...") + test(dmidecode.get_dev() == "/dev/mem") + + sys.stdout.write(" * Testing that write-lock will not break on dump()...") + test(not dmidecode.dump()) + + sys.stdout.write(" * Testing ability to change device to %s..."%DUMP) + test(dmidecode.set_dev(DUMP)) + + sys.stdout.write(" * Testing that device has changed to %s..."%DUMP) + test(dmidecode.get_dev() == DUMP) + + sys.stdout.write(" * Testing that write on new file is ok...") + test(dmidecode.dump()) + + sys.stdout.write(" * Testing that file was actually written...") + time.sleep(0.1) + if test(os.path.exists(DUMP)): + os.unlink(DUMP) + + types = range(0, 42)+range(126, 128) + bad_types = [-1, -1000, 256] + sections = ["bios", "system", "baseboard", "chassis", "processor", "memory", "cache", "connector", "slot"] + devices = [] + if os.path.exists(DUMPS_D): + devices.extend([os.path.join(DUMPS_D, _) for _ in os.listdir(DUMPS_D)]) + else: + sys.stdout.write(" * If you have memory dumps to test, create a directory called `%s' and drop them in there.\n"%(DUMPS_D)) + devices.append("/dev/mem") + random.shuffle(types) + random.shuffle(devices) + random.shuffle(sections) + + for dev in devices: + sys.stdout.write(LINE) + sys.stdout.write(" * Testing %s..."%yellow(dev)); sys.stdout.flush() + try: + fH = open(dev, 'r') + fH.close() + passed() + sys.stdout.write(" * Testing set_dev/get_dev on %s..."%(yellow(dev))); sys.stdout.flush() + if test(dmidecode.set_dev(dev) and dmidecode.get_dev() == dev): + i = 0 + for section in sections: + i += 1 + sys.stdout.write(" * Testing %s (%d/%d)..."%(cyan(section), i, len(sections))); sys.stdout.flush() + try: + output = getattr(dmidecode, section)() + test(output is not False) + if output: + sys.stdout.write(" * %s\n"%black(output.keys())) + except LookupError, e: + failed(e, 2) + + for i in bad_types: + sys.stdout.write(" * Testing bad type %s..."%red(i)); sys.stdout.flush() + try: + output = dmidecode.type(i) + test(output is False) + except SystemError: + failed() + + for i in types: + sys.stdout.write(" * Testing type %s..."%red(i)); sys.stdout.flush() + try: + output = dmidecode.type(i) + if dmidecode: + _output = commands.getoutput("dmidecode -t %d"%i).strip().split('\n') + test(len(_output) == 1 and len(output) == 0 or True) + else: + test(output is not False) + if output: + sys.stdout.write(" * %s\n"%output.keys()) + except IOError, e: + failed(e, 2) + except IOError: + skipped() + +except ImportError: + failed() + + + +test = POCDemo() +print "Please note the dmixml_demo/@entrypoint attribute in the root node" +print +print "-------- xmlDoc ---------------" +xmldoc = test.GetXMLdoc() +xmldoc.saveFormatFileEnc("-", "UTF-8", 1) + +print +print "-------- xmlNode ---------------" +xmldoc2 = libxml2.newDoc("1.0") +xmlnode = test.GetXMLnode() +xmldoc2.setRootElement(xmlnode) +xmldoc2.saveFormatFileEnc("-", "UTF-8", 1) + + + +sys.stdout.write(LINE) +sys.stdout.write("Devices : %s\n"%cyan(len(devices))) +sys.stdout.write("Total : %s\n"%blue(score["total"])) +sys.stdout.write("Skipped : %s\n"%yellow(score["skipped"])) +sys.stdout.write("Passed : %s\n"%green(score["passed"])) +sys.stdout.write("Failed : %s\n"%red(score["failed"])) |