4
from landscape.lib.sysstats import (
5
MemoryStats, CommandError, get_logged_in_users, get_thermal_zones)
6
from landscape.tests.helpers import (
7
LandscapeTest, MakePathHelper, EnvironSaverHelper)
10
SAMPLE_MEMORY_INFO = """
28
CommitLimit: 2395740 kB
29
Committed_AS: 1566888 kB
31
VmallocTotal: 516088 kB
33
VmallocChunk: 510252 kB
37
class MemoryStatsTest(LandscapeTest):
39
helpers = [MakePathHelper]
41
def test_get_memory_info(self):
42
filename = self.make_path(SAMPLE_MEMORY_INFO)
43
memstats = MemoryStats(filename)
44
self.assertEquals(memstats.total_memory, 1510)
45
self.assertEquals(memstats.free_memory, 503)
46
self.assertEquals(memstats.used_memory, 1007)
47
self.assertEquals(memstats.total_swap, 1584)
48
self.assertEquals(memstats.free_swap, 1567)
49
self.assertEquals(memstats.used_swap, 17)
50
self.assertEquals("%.2f" % memstats.free_memory_percentage, "33.31")
51
self.assertEquals("%.2f" % memstats.free_swap_percentage, "98.93")
52
self.assertEquals("%.2f" % memstats.used_memory_percentage, "66.69")
53
self.assertEquals("%.2f" % memstats.used_swap_percentage, "1.07")
55
def test_get_memory_info_without_swap(self):
56
sample = re.subn(r"Swap(Free|Total): *\d+ kB", r"Swap\1: 0",
57
SAMPLE_MEMORY_INFO)[0]
58
filename = self.make_path(sample)
59
memstats = MemoryStats(filename)
60
self.assertEquals(memstats.total_swap, 0)
61
self.assertEquals(memstats.free_swap, 0)
62
self.assertEquals(memstats.used_swap, 0)
63
self.assertEquals(memstats.used_swap_percentage, 0)
64
self.assertEquals(memstats.free_swap_percentage, 0)
65
self.assertEquals(type(memstats.used_swap_percentage), float)
66
self.assertEquals(type(memstats.free_swap_percentage), float)
69
class FakeWhoQTest(LandscapeTest):
71
helpers = [EnvironSaverHelper]
73
def fake_who(self, users):
74
dirname = self.makeDir()
75
os.environ["PATH"] = "%s:%s" % (dirname, os.environ["PATH"])
77
self.who_path = os.path.join(dirname, "who")
78
who = open(self.who_path, "w")
79
who.write("#!/bin/sh\n")
80
who.write("test x$1 = x-q || echo missing-parameter\n")
81
who.write("echo %s\n" % users)
82
who.write("echo '# users=%d'\n" % len(users.split()))
85
os.chmod(self.who_path, 0770)
88
class LoggedInUsersTest(FakeWhoQTest):
90
def test_one_user(self):
92
result = get_logged_in_users()
93
result.addCallback(self.assertEquals, ["joe"])
96
def test_one_user_multiple_times(self):
97
self.fake_who("joe joe joe joe")
98
result = get_logged_in_users()
99
result.addCallback(self.assertEquals, ["joe"])
102
def test_many_users(self):
103
self.fake_who("joe moe boe doe")
104
result = get_logged_in_users()
105
result.addCallback(self.assertEquals, ["boe", "doe", "joe", "moe"])
108
def test_command_error(self):
110
who = open(self.who_path, "w")
111
who.write("#!/bin/sh\necho ERROR 1>&2\nexit 1\n")
113
result = get_logged_in_users()
114
def assert_failure(failure):
115
failure.trap(CommandError)
116
self.assertEquals(str(failure.value), "ERROR\n")
117
result.addErrback(assert_failure)
121
class ThermalZoneTest(LandscapeTest):
124
super(ThermalZoneTest, self).setUp()
125
self.thermal_zone_path = self.makeDir()
127
def get_thermal_zones(self):
128
return list(get_thermal_zones(self.thermal_zone_path))
130
def write_thermal_zone(self, name, temperature):
131
zone_path = os.path.join(self.thermal_zone_path, name)
132
if not os.path.isdir(zone_path):
134
file = open(os.path.join(zone_path, "temperature"), "w")
135
file.write("temperature: " + temperature)
139
class GetThermalZonesTest(ThermalZoneTest):
141
def test_non_existent_thermal_zone_directory(self):
142
thermal_zones = list(get_thermal_zones("/non-existent/thermal_zone"))
143
self.assertEquals(thermal_zones, [])
145
def test_empty_thermal_zone_directory(self):
146
self.assertEquals(self.get_thermal_zones(), [])
148
def test_one_thermal_zone(self):
149
self.write_thermal_zone("THM0", "50 C")
150
thermal_zones = self.get_thermal_zones()
151
self.assertEquals(len(thermal_zones), 1)
153
self.assertEquals(thermal_zones[0].name, "THM0")
154
self.assertEquals(thermal_zones[0].temperature, "50 C")
155
self.assertEquals(thermal_zones[0].temperature_value, 50)
156
self.assertEquals(thermal_zones[0].temperature_unit, "C")
157
self.assertEquals(thermal_zones[0].path,
158
os.path.join(self.thermal_zone_path, "THM0"))
160
def test_two_thermal_zones(self):
161
self.write_thermal_zone("THM0", "50 C")
162
self.write_thermal_zone("THM1", "51 C")
163
thermal_zones = self.get_thermal_zones()
164
self.assertEquals(len(thermal_zones), 2)
165
self.assertEquals(thermal_zones[0].temperature, "50 C")
166
self.assertEquals(thermal_zones[0].temperature_value, 50)
167
self.assertEquals(thermal_zones[0].temperature_unit, "C")
168
self.assertEquals(thermal_zones[1].temperature, "51 C")
169
self.assertEquals(thermal_zones[1].temperature_value, 51)
170
self.assertEquals(thermal_zones[1].temperature_unit, "C")
172
def test_badly_formatted_temperature(self):
173
self.write_thermal_zone("THM0", "SOMETHING BAD")
174
thermal_zones = self.get_thermal_zones()
175
self.assertEquals(len(thermal_zones), 1)
176
self.assertEquals(thermal_zones[0].temperature, "SOMETHING BAD")
177
self.assertEquals(thermal_zones[0].temperature_value, None)
178
self.assertEquals(thermal_zones[0].temperature_unit, None)
180
def test_badly_formatted_with_missing_space(self):
181
self.write_thermal_zone("THM0", "SOMETHINGBAD")
182
thermal_zones = self.get_thermal_zones()
183
self.assertEquals(len(thermal_zones), 1)
184
self.assertEquals(thermal_zones[0].temperature, "SOMETHINGBAD")
185
self.assertEquals(thermal_zones[0].temperature_value, None)
186
self.assertEquals(thermal_zones[0].temperature_unit, None)
188
def test_temperature_file_with_missing_label(self):
189
self.write_thermal_zone("THM0", "SOMETHINGBAD")
190
temperature_path = os.path.join(self.thermal_zone_path,
192
file = open(temperature_path, "w")
193
file.write("bad-label: foo bar\n")
195
thermal_zones = self.get_thermal_zones()
196
self.assertEquals(len(thermal_zones), 1)
197
self.assertEquals(thermal_zones[0].temperature, None)
198
self.assertEquals(thermal_zones[0].temperature_value, None)
199
self.assertEquals(thermal_zones[0].temperature_unit, None)