diff options
| -rw-r--r-- | meta/lib/oeqa/runtime/systemd.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/meta/lib/oeqa/runtime/systemd.py b/meta/lib/oeqa/runtime/systemd.py index d0b9b2f4b9..03c56ef9f0 100644 --- a/meta/lib/oeqa/runtime/systemd.py +++ b/meta/lib/oeqa/runtime/systemd.py | |||
| @@ -127,3 +127,50 @@ class SystemdJournalTests(SystemdTest): | |||
| 127 | def test_systemd_journal(self): | 127 | def test_systemd_journal(self): |
| 128 | (status, output) = self.target.run('journalctl') | 128 | (status, output) = self.target.run('journalctl') |
| 129 | self.assertEqual(status, 0, output) | 129 | self.assertEqual(status, 0, output) |
| 130 | |||
| 131 | @skipUnlessPassed('test_systemd_basic') | ||
| 132 | def test_systemd_boot_time(self, systemd_TimeoutStartSec=90): | ||
| 133 | """ | ||
| 134 | Get the target boot time from journalctl and log it | ||
| 135 | |||
| 136 | Arguments: | ||
| 137 | -systemd_TimeoutStartSec, an optional argument containing systemd's | ||
| 138 | unit start timeout to compare against | ||
| 139 | """ | ||
| 140 | |||
| 141 | # the expression chain that uniquely identifies the time boot message | ||
| 142 | expr_items=["Startup finished","kernel", "userspace","\.$"] | ||
| 143 | try: | ||
| 144 | output = self.journalctl(args="-o cat --reverse") | ||
| 145 | except AssertionError: | ||
| 146 | self.fail("Error occurred while calling journalctl") | ||
| 147 | if not len(output): | ||
| 148 | self.fail("Error: unable to obtain the startup time from\ | ||
| 149 | systemd journal") | ||
| 150 | |||
| 151 | # check for the regular expression items that match the startup time | ||
| 152 | for line in output.split('\n'): | ||
| 153 | check_match = "".join(re.findall(".*".join(expr_items), line)) | ||
| 154 | if check_match: break | ||
| 155 | # put the startup time in the test log | ||
| 156 | if check_match: | ||
| 157 | print "%s" % check_match | ||
| 158 | else: | ||
| 159 | self.fail("Error while obtaining the boot time from journalctl") | ||
| 160 | boot_time_sec = 0 | ||
| 161 | |||
| 162 | # get the numeric values from the string and convert them to seconds | ||
| 163 | # same data will be placed in list and string for manipulation | ||
| 164 | l_boot_time = check_match.split(" ")[-2:] | ||
| 165 | s_boot_time = " ".join(l_boot_time) | ||
| 166 | # Obtain the minutes it took to boot | ||
| 167 | if l_boot_time[0].endswith('min') and l_boot_time[0][0].isdigit(): | ||
| 168 | boot_time_min = s_boot_time.split("min")[0] | ||
| 169 | # convert to seconds and accumulate it | ||
| 170 | boot_time_sec += int(boot_time_min) * 60 | ||
| 171 | # Obtain the seconds it took to boot and accumulate | ||
| 172 | boot_time_sec += float(l_boot_time[1].split("s")[0]) | ||
| 173 | #Assert the target boot time against systemd's unit start timeout | ||
| 174 | if boot_time_sec > systemd_TimeoutStartSec: | ||
| 175 | print "Target boot time %s exceeds systemd's TimeoutStartSec %s"\ | ||
| 176 | %(boot_time_sec, systemd_TimeoutStartSec) | ||
