• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3"""
4Interactive python script for testing cgroups. It will try to use system
5resources such as cpu, memory and device IO. The other cgroups test
6instrumentation will inspect whether the linux box behaved as it should.
7
8@copyright: 2011 Red Hat Inc.
9@author: Lukas Doktor <ldoktor@redhat.com>
10"""
11import array, sys, time, math, os
12from tempfile import mktemp
13
14def test_smoke(args):
15    """
16    SIGSTOP the process and after SIGCONT exits.
17    """
18    print "TEST: smoke"
19    print "TEST: wait for input"
20    raw_input()
21    print "PASS: smoke"
22
23
24def test_memfill(args):
25    """
26    SIGSTOP and after SIGCONT fills the memory up to size size.
27    """
28    size = 1024
29    f = sys.stdout
30    if args:
31        size = int(args[0])
32        if len(args) > 1:
33            f = open(args[1], 'w', 0)
34    print "TEST: memfill (%dM)" % size
35    print "Redirecting to: %s" % f.name
36    f.write("TEST: memfill (%dM)\n" % size)
37    f.write("TEST: wait for input\n")
38    raw_input()
39    mem = array.array('B')
40    buf = ""
41    for i in range(1024 * 1024):
42        buf += '\x00'
43    for i in range(size):
44        mem.fromstring(buf)
45        f.write("TEST: %dM\n" % i)
46        try:
47            f.flush()
48            os.fsync(f)
49        except:
50            pass
51    f.write("PASS: memfill (%dM)\n" % size)
52
53
54def test_cpu(args):
55    """
56    Stress the CPU.
57    """
58    print "TEST: cpu"
59    print "TEST: wait for input"
60    raw_input()
61    while True:
62        for i in range (1000, 10000):
63            math.factorial(i)
64
65
66def test_devices(args):
67    if args:
68        if args[0] == "write":
69            test_devices_write()
70        else:
71            test_devices_read()
72    else:
73        test_devices_read()
74
75
76def test_devices_read():
77    """
78    Inf read from /dev/zero
79    """
80    print "TEST: devices read"
81    print "TEST: wait for input"
82    raw_input()
83
84    dev = open("/dev/zero", 'r')
85    while True:
86        print "TEST: tick"
87        dev.flush()
88        dev.read(1024*1024)
89        time.sleep(1)
90
91
92def test_devices_write():
93    """
94    Inf write into /dev/null device
95    """
96    print "TEST: devices write"
97    print "TEST: wait for input"
98    raw_input()
99
100    dev = open("/dev/null", 'w')
101    buf = ""
102    for _ in range(1024*1024):
103        buf += '\x00'
104    while True:
105        print "TEST: tick"
106        dev.write(buf)
107        dev.flush()
108        time.sleep(1)
109
110
111def main():
112    """
113    Main (infinite) loop.
114    """
115    if len(sys.argv) < 2:
116        print "FAIL: Incorrect usage (%s)" % sys.argv
117        return -1
118    args = sys.argv[2:]
119    if sys.argv[1] == "smoke":
120        test_smoke(args)
121    elif sys.argv[1] == "memfill":
122        test_memfill(args)
123    elif sys.argv[1] == "cpu":
124        test_cpu(args)
125    elif sys.argv[1] == "devices":
126        test_devices(args)
127    else:
128        print "FAIL: No test specified (%s)" % sys.argv
129
130if __name__ == "__main__":
131    main()
132