[oe-commits] [openembedded-core] 07/07: logrotate.py: improve oeqa test implementation

git at git.openembedded.org git at git.openembedded.org
Mon Jan 27 16:50:25 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 dd2fcd5826ed81a848bb3dc34fee060a58181b65
Author: Trevor Gamblin <trevor.gamblin at windriver.com>
AuthorDate: Thu Jan 23 20:29:28 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 output from logrotate -vf is
    included in the test log to aid debugging. It has also been seen that
    in some cases, the logrotate test fails because the /var/log/wtmp file
    is not yet present. Since the objective of the test is to check the
    logrotate functionality and not the presence of certain log files,
    test_logrotate_wtmp uses the touch command to help ensure that the
    file is present before the call to logrotate is issued.
    
    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 | 62 ++++++++++++++++++++++----------
 1 file changed, 44 insertions(+), 18 deletions(-)

diff --git a/meta/lib/oeqa/runtime/cases/logrotate.py b/meta/lib/oeqa/runtime/cases/logrotate.py
index bfa57c5..3938e91 100644
--- a/meta/lib/oeqa/runtime/cases/logrotate.py
+++ b/meta/lib/oeqa/runtime/cases/logrotate.py
@@ -18,32 +18,58 @@ 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):
+
+        # /var/log/wtmp may not always exist initially, so use touch to ensure it is present
+        status, output = self.target.run('touch /var/log/wtmp')
+        msg = ('Could not create/update /var/log/wtmp with touch')
+        self.assertEqual(status, 0, msg = msg)
+
         status, output = self.target.run('mkdir $HOME/logrotate_dir')
-        msg = 'Could not create logrotate_dir. Output: %s' % output
+        msg = ('Could not create logrotate_dir. Output: %s' % output)
+        self.assertEqual(status, 0, msg = msg)
+
+        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)
+        
+        # If logrotate fails to rotate the log, view the verbose output of logrotate to see what prevented it
+        _, logrotate_output = self.target.run('logrotate -vf /tmp/logrotate-test.conf')
+        status, _ = self.target.run('find $HOME/logrotate_dir -type f | grep wtmp.1')
+        msg = ("logrotate did not successfully rotate the wtmp log. Output from logrotate -vf: \n%s" % (logrotate_output))
+        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)
 
-        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/logrotate_testfile" > /tmp/logrotate-test2.conf')
+        msg = ('Could not write to /tmp/logrotate_test2.conf')
         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')
+        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)
 
-        msg = ('logrotate service could not be reloaded. Status and output: '
-                '%s and %s' % (status, output))
+        # If logrotate fails to rotate the log, view the verbose output of logrotate instead of just listing the files in olddir
+        _, logrotate_output = self.target.run('logrotate -vf /tmp/logrotate-test2.conf')
+        status, _ = self.target.run('find $HOME/logrotate_dir -type f | grep logrotate_testfile.1')
+        msg = ('logrotate did not successfully rotate the logrotate_test log. Output from logrotate -vf: \n%s' % (logrotate_output))
         self.assertEqual(status, 0, msg = msg)
 
-        _, output = self.target.run('ls -la $HOME/logrotate_dir/ | wc -l')
-        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)
+

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list