[oe-commits] [openembedded-core] 01/03: logrotate.py: improve oeqa test implementation
git at git.openembedded.org
git at git.openembedded.org
Sat Jan 18 23:36:29 UTC 2020
This is an automated email from the git hooks/post-receive script.
rpurdie pushed a commit to branch master-next
in repository openembedded-core.
commit efccb1672cbcec24f6700310b80f69e0ce4bdec9
Author: Trevor Gamblin <trevor.gamblin at windriver.com>
AuthorDate: Thu Jan 16 15:19:33 2020 -0500
logrotate.py: improve oeqa test implementation
See bug https://bugzilla.yoctoproject.org/show_bug.cgi?id=13632
Autobuilder tests occasionally fail, reporting that a new logfile
could not be created. While this failure did occur multiple times, it
could not be manually reproduced. However, there are issues with the
implementation of the logrotate.py script that can be fixed. These
changes will help make the failures clearer, should they continue to
occur.
Previously, the test_2_logrotate test would, after running the
logrotate tool, use "ls -al $HOME/logrotate_dir | wc -l" to count
the number of files in the rotation directory and determine if the
rotation was successful. The test to see if there are at least three
files is problematic, because depending on the version of ls used, it
may report the target value of 3 even when there are only hidden files
in the directory, potentially reporting a pass for the test when it
should actually fail. An example with coreutils:
root at qemux86-64:~# ls -al emptydir/
total 2
drwxr-xr-x 2 root root 1024 Jan 14 19:50 .
drwx------ 3 root root 1024 Jan 14 19:50 ..
root at qemux86-64:~#
Where "total" is the number of blocks used. Compare with busybox ls:
root at qemux86-64:~# ls -al emptydir/
drwxr-xr-x 2 root root 1024 Jan 14 19:54 .
drwx------ 3 root root 1024 Jan 14 19:54 ..
root at qemux86-64:~#
Instead of using ls to verify that a certain number of files exists
in $HOME/logrotate_dir, the tests have been changed to rotate two
specific logs: the log for wtmp and a new logrotate_testfile created
during the second test. Both tests check that the logs are correctly
rotated into $HOME/logrotate_dir by using find and grep on the
expected filename (e.g. "wtmp" when rotated becomes "wtmp.1", so we
check to see that wtmp.1 is present in $HOME/logrotate_dir). In
addition, should the test fail, the directory listing is included in
the log to aid debugging.
Finally, note that while the autobuilder failures that this patch
addresses were only seen during core-image-full-cmdline tests, these
changes were successfully tested on core-image-minimal and
core-image-sato with the manual addition of logrotate and openssh-sshd
to the images.
Signed-off-by: Trevor Gamblin <trevor.gamblin at windriver.com>
Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
meta/lib/oeqa/runtime/cases/logrotate.py | 57 ++++++++++++++++++++++++--------
1 file changed, 44 insertions(+), 13 deletions(-)
diff --git a/meta/lib/oeqa/runtime/cases/logrotate.py b/meta/lib/oeqa/runtime/cases/logrotate.py
index bfa57c5..44e3276 100644
--- a/meta/lib/oeqa/runtime/cases/logrotate.py
+++ b/meta/lib/oeqa/runtime/cases/logrotate.py
@@ -18,32 +18,63 @@ class LogrotateTest(OERuntimeTestCase):
@classmethod
def tearDownClass(cls):
cls.tc.target.run('mv -f $HOME/wtmp.oeqabak /etc/logrotate.d/wtmp && rm -rf $HOME/logrotate_dir')
+ cls.tc.target.run('rm -rf /var/log/logrotate_testfile && rm -rf /etc/logrotate.d/logrotate_testfile')
@OETestDepends(['ssh.SSHTest.test_ssh'])
@OEHasPackage(['logrotate'])
- def test_1_logrotate_setup(self):
+ def test_logrotate_wtmp(self):
+
status, output = self.target.run('mkdir $HOME/logrotate_dir')
msg = 'Could not create logrotate_dir. Output: %s' % output
self.assertEqual(status, 0, msg = msg)
- cmd = ('sed -i "s#wtmp {#wtmp {\\n olddir $HOME/logrotate_dir#"'
- ' /etc/logrotate.d/wtmp')
- status, output = self.target.run(cmd)
- msg = ('Could not write to logrotate.d/wtmp file. Status and output: '
- ' %s and %s' % (status, output))
+ status, output = self.target.run('echo "create \n olddir $HOME/logrotate_dir \n include /etc/logrotate.d/wtmp" > /tmp/logrotate-test.conf')
+ msg = ('Could not write to /tmp/logrotate-test.conf')
+ self.assertEqual(status, 0, msg = msg)
+
+ status, output = self.target.run('echo "/var/log/logrotate_test {\\n missingok \\n monthly \\n rotate 1" > /etc/logrotate.d/logrotate_test')
+ msg = ('Could not write to /etc/logrotate.d/logrotate_test')
self.assertEqual(status, 0, msg = msg)
- @OETestDepends(['logrotate.LogrotateTest.test_1_logrotate_setup'])
- def test_2_logrotate(self):
- status, output = self.target.run('echo "create \n include /etc/logrotate.d" > /tmp/logrotate-test.conf')
status, output = self.target.run('logrotate -f /tmp/logrotate-test.conf')
-
msg = ('logrotate service could not be reloaded. Status and output: '
'%s and %s' % (status, output))
self.assertEqual(status, 0, msg = msg)
- _, output = self.target.run('ls -la $HOME/logrotate_dir/ | wc -l')
+ status, output = self.target.run('find $HOME/logrotate_dir -type f | grep wtmp.1')
msg = ('new logfile could not be created. List of files within log '
'directory: %s' % (
- self.target.run('ls -la $HOME/logrotate_dir')[1]))
- self.assertTrue(int(output)>=3, msg = msg)
+ self.target.run('ls $HOME/logrotate_dir')[1]))
+ self.assertEqual(status, 0, msg = msg)
+
+ @OETestDepends(['logrotate.LogrotateTest.test_logrotate_wtmp'])
+ def test_logrotate_newlog(self):
+
+ status, output = self.target.run('echo "oeqa logrotate test file" > /var/log/logrotate_testfile')
+ msg = ('Could not create logrotate test file in /var/log')
+ self.assertEqual(status, 0, msg = msg)
+
+ status, output = self.target.run('echo "/var/log/logrotate_testfile {\n missingok \n monthly \n rotate 1" > /etc/logrotate.d/logrotate_testfile')
+ msg = ('Could not write to /etc/logrotate.d/logrotate_testfile')
+ self.assertEqual(status, 0, msg = msg)
+
+ status, output = self.target.run('echo "create \n olddir $HOME/logrotate_dir \n include /etc/logrotate.d/logrotate_testfile" > /tmp/logrotate-test2.conf')
+ msg = ('Could not write to /tmp/logrotate_test2.conf')
+ self.assertEqual(status, 0, msg = msg)
+
+ status, output = self.target.run('find $HOME/logrotate_dir -type f | grep logrotate_testfile.1')
+ msg = ('A rotated log for logrotate_testfile is already present in logrotate_dir')
+ self.assertEqual(status, 1, msg = msg)
+
+ status, output = self.target.run('logrotate -f /tmp/logrotate-test2.conf')
+ msg = ('logrotate service could not be reloaded. Status and output: '
+ '%s and %s' % (status, output))
+ self.assertEqual(status, 0, msg = msg)
+
+ status, output = self.target.run('find $HOME/logrotate_dir -type f | grep logrotate_testfile.1')
+ msg = ('new logfile could not be created. List of files within log '
+ 'directory: %s' % (
+ self.target.run('ls $HOME/logrotate_dir')[1]))
+ self.assertEqual(status, 0, msg = msg)
+
+
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Openembedded-commits
mailing list