API
sysMonitor_test.cpp
Go to the documentation of this file.
1 /****
2  * Test following parsing functions
3  * int parseCPUTemperatures(std::string, std::vector<float>&);
4  * int parseCPULoads(std::string, float&);
5  * int parseDiskTemperature(std::string, float&);
6  * int parseDiskUsage(std::string, float&);
7  * int parseRamUsage(std::string, float&);
8  * To use:
9  * In ~MagAOX/tests, compile this file with:
10  * `make -f singleTest.mk testfile=../apps/sysMonitor/tests/sysMonitor_test.cpp`
11  * and run program with:
12  * `./singleTest`
13  ****/
14 
15 #include "../../../tests/catch2/catch.hpp"
16 
17 
18 #include "../sysMonitor.hpp"
19 
20 SCENARIO( "System monitor is constructed and CPU temperature results are passed in", "[sysMonitor]" )
21 {
22  GIVEN("A default constructed system monitor object and an empty vector for temperatures")
23  {
25  int rv;
26  float temps = -1;
27 
28  // Fails with whitespace in front, but is this necessary to correct for?
29 
30  WHEN("Correct line is given")
31  {
32  rv = sm.parseCPUTemperatures("Core 0: +42.0°C (high = +100.0°C, crit = +100.0°C)", temps);
33  REQUIRE(rv == 0);
34  REQUIRE(temps == 42);
35  }
36 
37  WHEN("Correct line is given")
38  {
39  rv = sm.parseCPUTemperatures("Core 1: +45.0°C (high = +100.0°C, crit = +100.0°C)", temps);
40  REQUIRE(rv == 0);
41  REQUIRE(temps == 45);
42  }
43 
44  WHEN("Correct line is given")
45  {
46  rv = sm.parseCPUTemperatures("Core 2: +91.0°C (high = +100.0°C, crit = +100.0°C)", temps);
47  REQUIRE(rv == 0);
48  REQUIRE(temps == 91);
49  }
50 
51  WHEN("Blank line is given")
52  {
53  rv = sm.parseCPUTemperatures("", temps);
54  REQUIRE(rv == -1);
55  REQUIRE(temps == -999);
56  }
57 
58  WHEN("Incorrect line is given")
59  {
60  rv = sm.parseCPUTemperatures("coretemp-isa-0000", temps);
61  REQUIRE(rv == -1);
62  REQUIRE(temps == -999);
63  }
64 
65  WHEN("Corrupted line is given")
66  {
67  rv = sm.parseCPUTemperatures("Core 3:+91.0° XXXXXXX", temps);
68  REQUIRE(rv == -1);
69  REQUIRE(temps == -999);
70  }
71 
72  WHEN("Corrupted line is given")
73  {
74  rv = sm.parseCPUTemperatures("Core2: +91.0°C(high =+100.0°C, crit= +100.0°C)", temps);
75  REQUIRE(rv == -1);
76  REQUIRE(temps == -999);
77  }
78  }
79 }
80 
81 SCENARIO( "System monitor is constructed and CPU load results are passed in", "[sysMonitor]" )
82 {
83  GIVEN("A default constructed system monitor object and an empty vector for loads")
84  {
86  int rv;
87  float loads = -1;
88 
89  // Fails with whitespace in front, but is this necessary to correct for?
90 
91  WHEN("Correct line is given")
92  {
93  rv = sm.parseCPULoads("02:35:43 PM 0 6.57 0.02 1.32 0.24 0.00 0.00 0.00 0.00 0.00 91.85", loads);
94  REQUIRE(rv == 0);
95  REQUIRE((loads - 0.0815) < 0.0005);
96  }
97 
98  WHEN("Correct line is given")
99  {
100  rv = sm.parseCPULoads("10:32:28 AM 1 6.54 0.21 2.75 24.64 0.00 0.06 0.00 0.00 0.00 65.81", loads);
101  REQUIRE(rv == 0);
102  REQUIRE((loads - 0.3419) < 0.0005);
103  }
104 
105  WHEN("Correct line is given")
106  {
107  rv = sm.parseCPULoads("10:32:28 AM 3 4.24 0.03 1.97 5.52 0.00 0.00 0.00 0.00 0.00 88.24", loads);
108  REQUIRE(rv == 0);
109  REQUIRE((loads - 0.1176) < 0.0005);
110  }
111 
112  WHEN("Blank line is given")
113  {
114  rv = sm.parseCPULoads("", loads);
115  REQUIRE(rv == -1);
116  REQUIRE(loads == -1);
117  }
118 
119  WHEN("Incorrect line is given")
120  {
121  rv = sm.parseCPULoads("02:35:43 PM CPU %%usr %%nice %%sys %%iowait %%irq %%soft %%steal %%guest %%gnice %%idle", loads);
122  REQUIRE(rv == -1);
123  REQUIRE(loads == -1);
124  }
125 
126  WHEN("Corrupted line is given")
127  {
128  rv = sm.parseCPULoads("10:32:28AM 2 5.24 0.14 2.70_1.41 0.00 0.00 0.00 0.00 0.00 80.50 ncawd vexing", loads);
129  REQUIRE(rv == -1);
130  REQUIRE(loads == -1);
131  }
132  }
133 }
134 
135 SCENARIO( "System monitor is constructed and disk temperature result is passed in", "[sysMonitor]" )
136 {
137  GIVEN("A default constructed system monitor object and an empty float for temperature")
138  {
140  int rv;
141  float hdd_temp = -1;
142  std::string dname;
143 
144  // Fails with whitespace in front, but is this necessary to correct for?
145 
146  WHEN("Correct line is given for hard drive")
147  {
148  rv = sm.parseDiskTemperature(dname, hdd_temp, "/dev/sda: ST1000LM024 HN-M101MBB: 31°C");
149  REQUIRE(rv == 0);
150  REQUIRE(dname == "sda");
151  REQUIRE(hdd_temp == 31);
152  }
153 
154  WHEN("Correct line is given for ssd")
155  {
156  rv = sm.parseDiskTemperature(dname, hdd_temp, "/dev/sda: Samsung SSD 860 EVO 500GB: 27°C");
157  REQUIRE(rv == 0);
158  REQUIRE(dname == "sda");
159  REQUIRE(hdd_temp == 27);
160  }
161 
162  WHEN("Correct line is given for ssd")
163  {
164  rv = sm.parseDiskTemperature(dname, hdd_temp, "/dev/sdd: Samsung SSD 860 EVO 1TB: 100°C");
165  REQUIRE(rv == 0);
166  REQUIRE(dname == "sdd");
167  REQUIRE(hdd_temp == 100);
168  }
169 
170  WHEN("Blank line is given")
171  {
172  rv = sm.parseDiskTemperature(dname, hdd_temp,"");
173  REQUIRE(rv == -1);
174  REQUIRE(dname == "");
175  REQUIRE(hdd_temp == -999);
176  }
177 
178  WHEN("Incorrect line is given")
179  {
180  rv = sm.parseDiskTemperature(dname, hdd_temp,"/dev/sda: ST1000LM024_HN-M101MBB: 999999");
181  REQUIRE(rv == -1);
182  REQUIRE(dname == "");
183  REQUIRE(hdd_temp == -999);
184  }
185 
186  WHEN("Corrupted line is given")
187  {
188  rv = sm.parseDiskTemperature(dname, hdd_temp, "/dev/sdaT10 00L M0 24N-M101 MBB:31°CMBB");
189  REQUIRE(rv == -1);
190  REQUIRE(dname == "");
191  REQUIRE(hdd_temp == -999);
192  }
193  }
194 }
195 
196 SCENARIO( "System monitor is constructed and disk usage result is passed in", "[sysMonitor]" )
197 {
198  GIVEN("A default constructed system monitor object and an empty float for usage")
199  {
201  int rv;
202  float rootUsage = -1;
203  float dataUsage = -1;
204  float bootUsage = -1;
205 
206  // Fails with whitespace in front, but is this necessary to correct for?
207 
208  WHEN("Correct line is given for root")
209  {
210  rv = sm.parseDiskUsage("/dev/mapper/cl-root 52403200 12321848 40081352 24% /", rootUsage, dataUsage, bootUsage);
211  REQUIRE(rv == 0);
212  REQUIRE((rootUsage - 0.24f) < 0.0005);
213  }
214 
215  WHEN("Correct line for /data is given")
216  {
217  rv = sm.parseDiskUsage("/dev/md124 1952297568 81552 1952216016 1% /data", rootUsage, dataUsage, bootUsage);
218  REQUIRE(rv == 0);
219  REQUIRE((dataUsage - 0.01f) < 0.0005);
220  }
221 
222  WHEN("Correct line for /boot is given")
223  {
224  rv = sm.parseDiskUsage("/dev/md126 484004 289264 194740 60% /boot", rootUsage, dataUsage, bootUsage);
225  REQUIRE(rv == 0);
226  REQUIRE((bootUsage - 0.6f) < 0.0005);
227  }
228 
229  WHEN("Blank line is given")
230  {
231  rv = sm.parseDiskUsage("", rootUsage, dataUsage, bootUsage);
232  REQUIRE(rv == -1);
233  REQUIRE(rootUsage == -1);
234  REQUIRE(dataUsage == -1);
235  REQUIRE(bootUsage == -1);
236  }
237 
238  WHEN("Incorrect line is given")
239  {
240  rv = sm.parseDiskUsage("/dev/mapper/cl-root2403200 12321848 40081352 24% / 23e32 dwwe", rootUsage, dataUsage, bootUsage);
241  REQUIRE(rv == -1);
242  REQUIRE(rootUsage == -1);
243  REQUIRE(dataUsage == -1);
244  REQUIRE(bootUsage == -1);
245  }
246 
247  WHEN("Corrupted line is given")
248  {
249  rv = sm.parseDiskUsage("/dev/mapper/cl-root 52403200 12321848 40081352 aa% /", rootUsage, dataUsage, bootUsage);
250  REQUIRE(rv == -1);
251  REQUIRE(rootUsage == -1);
252  REQUIRE(dataUsage == -1);
253  REQUIRE(bootUsage == -1);
254  }
255  }
256 }
257 
258 SCENARIO( "System monitor is constructed and ram usage result is passed in", "[sysMonitor]" )
259 {
260  GIVEN("A default constructed system monitor object and an float for usage")
261  {
263  int rv;
264  float ramUsage = -1;
265 
266  // Fails with whitespace in front, but is this necessary to correct for?
267 
268  WHEN("Correct line is given")
269  {
270  rv = sm.parseRamUsage("Mem: 7714 1308 4550 288 1855 5807", ramUsage);
271  REQUIRE(rv == 0);
272  REQUIRE(ramUsage == (float) 1308/7714);
273  }
274 
275  WHEN("Correct line is given")
276  {
277  rv = sm.parseRamUsage("Mem: 7777 7700 4550 288 1855 5807", ramUsage);
278  REQUIRE(rv == 0);
279  REQUIRE(ramUsage == (float)7700/7777);
280  }
281 
282  WHEN("Blank line is given")
283  {
284  rv = sm.parseRamUsage("", ramUsage);
285  REQUIRE(rv == -1);
286  REQUIRE(ramUsage == -1);
287  }
288 
289  WHEN("Incorrect line is given")
290  {
291  rv = sm.parseRamUsage("Swap: 7935 0 7935", ramUsage);
292  REQUIRE(rv == -1);
293  REQUIRE(ramUsage == -1);
294  }
295 
296 
297  WHEN("Corrupted line is given")
298  {
299  rv = sm.parseRamUsage("Mem: 1308 7714 4550 288 1855 5807", ramUsage);
300  REQUIRE(rv == -1);
301  REQUIRE(ramUsage == -1);
302  }
303  }
304 }
#define GIVEN(desc)
Definition: catch.hpp:17763
#define WHEN(desc)
Definition: catch.hpp:17765
#define REQUIRE(...)
Definition: catch.hpp:17676
int parseCPULoads(std::string, float &)
Parses string from system call to find CPU usage loads.
Definition: sysMonitor.hpp:738
int parseDiskTemperature(std::string &driveName, float &temp, const std::string &line)
Parses string from system call to find drive temperatures.
Definition: sysMonitor.hpp:811
int parseCPUTemperatures(std::string, float &)
Parses string from system call to find CPU temperatures.
Definition: sysMonitor.hpp:578
int parseDiskUsage(std::string, float &, float &, float &)
Parses string from system call to find drive usage space.
Definition: sysMonitor.hpp:929
int parseRamUsage(std::string, float &)
Parses string from system call to find RAM usage.
SCENARIO("System monitor is constructed and CPU temperature results are passed in", "[sysMonitor]")