6
from checkbox.parsers.dmidecode import DmidecodeParser
7
from checkbox.parsers.meminfo import MeminfoParser
15
def addDmiDevice(self, device):
16
form = getattr(device, "form", None)
18
if form and "IMM" in form:
20
self.total_size += int(getattr(device, "size", 0))
24
def get_installed_memory_size():
25
dmi = DmidecodeParser(os.popen('dmidecode'))
30
return result.total_size
36
def setMemory(self, memory):
37
self.memtotal = memory['total']
39
def get_visible_memory_size():
40
parser = MeminfoParser(open('/proc/meminfo'))
41
result = MeminfoResult()
44
return result.memtotal
48
print("This script must be run as root.", file=sys.stderr)
51
installed_memory = get_installed_memory_size()
52
visible_memory = get_visible_memory_size()
54
difference = installed_memory - visible_memory
56
percentage = difference / installed_memory * 100
57
except ZeroDivisionError:
59
print("\t/proc/meminfo reports:\t%s kB" % visible_memory, file=sys.stderr)
60
print("\tdmi reports:\t%s kB" % installed_memory, file=sys.stderr)
61
print("\nFAIL: Either dmi or /proc/meminfo returned a memory size of 0 kB", file=sys.stderr)
64
if percentage <= THRESHOLD:
66
print("\t/proc/meminfo reports:\t%s kB" % visible_memory)
67
print("\tdmi reports:\t%s kB" % installed_memory)
68
print("\nPASS: Meminfo reports %d bytes less than DMI, a difference of %.2f%%. This is less than the %d%% variance allowed." % (difference, percentage, THRESHOLD))
72
print("\t/proc/meminfo reports:\t%s kB" % visible_memory, file=sys.stderr)
73
print("\tdmi reports:\t%s kB" % installed_memory, file=sys.stderr)
74
print("\nFAIL: Meminfo reports %d bytes less than DMI, a difference of %.2f%%. Only a variance of %d%% in reported memory is allowed." % (difference, percentage, THRESHOLD), file=sys.stderr)
77
if __name__ == "__main__":