Univention Bugzilla – Attachment 6787 Details for
Bug 38143
logrotate does not trigger UMC components to reopen their logfiles - 60_umc.08_logrotate.test fails
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Fix 60_umc.08_logrotate.test
37317_test-logrotate.diff (text/plain), 4.47 KB, created by
Philipp Hahn
on 2015-03-27 12:49:03 CET
(
hide
)
Description:
Fix 60_umc.08_logrotate.test
Filename:
MIME Type:
Creator:
Philipp Hahn
Created:
2015-03-27 12:49:03 CET
Size:
4.47 KB
patch
obsolete
>diff --git a/branches/ucs-4.0/ucs-4.0-1/test/ucs-test/tests/60_umc/08_logrotate b/branches/ucs-4.0/ucs-4.0-1/test/ucs-test/tests/60_umc/08_logrotate >index 721cabd..1f3e3fd 100755 >--- a/branches/ucs-4.0/ucs-4.0-1/test/ucs-test/tests/60_umc/08_logrotate >+++ b/branches/ucs-4.0/ucs-4.0-1/test/ucs-test/tests/60_umc/08_logrotate >@@ -1,7 +1,5 @@ > #!/usr/share/ucs-test/runner python > ## desc: Logrotation should trigger UMC components to reopen their logfiles >-## roles: >-## - domaincontroller_master > ## packages: > ## - univention-management-console > ## - univention-management-console-frontend >@@ -14,6 +12,7 @@ from subprocess import call, Popen, PIPE > > from univention.testing.utils import fail > >+ > class LogrotateError(Exception): > pass > >@@ -22,12 +21,12 @@ class LogrotateService(object): > def __init__(self, service, logfile_pattern): > self.service = service > self.logfile_pattern = logfile_pattern >+ self.old_stat = None > > @property > def pgrep_pattern(self): > return r'^/usr/bin/python.*%s.*' % (self.service,) > >- @property > def pid(self): > process = Popen(['pgrep', '-x', '-f', self.pgrep_pattern], stdout=PIPE) > stdout, stderr = process.communicate() >@@ -40,59 +39,63 @@ class LogrotateService(object): > raise LogrotateError('multiple services of %s are started: pids=%s' % (self.service, pids)) > return pids[0] > >- @property > def logfile(self): >- pid = self.pid >- logfile = None >+ pid = self.pid() > for file_ in os.listdir('/proc/%d/fd/' % (pid,)): > file_ = os.path.join('/proc/%d/fd/' % (pid,), file_) > if os.path.islink(file_) and os.readlink(file_).startswith(self.logfile_pattern): >- logfile = file_ >- break >- return logfile >+ return file_ >+ >+ def stat(self): >+ logfile = self.logfile() >+ if not logfile: >+ raise LogrotateError('No logfile for service %s found.' % (self.service,)) >+ try: >+ stat = os.stat(logfile) >+ print logfile, stat >+ except OSError: >+ raise LogrotateError('%s does not exists (service=%s)' % (logfile, self.service)) >+ return stat > > def service_restart(self): > call(['invoke-rc.d', os.path.basename(self.service), 'restart']) > sleep(1) # give time to restart > >- def logrotate(self): >- if call(['logrotate', '-f', '/etc/logrotate.d/univention-management-console']): >- raise LogrotateError('logrotate failed') >- >- def main(self): >+ def pre(self): > self.service_restart() >+ self.old_stat = self.stat() > >- logfile = self.logfile >- if not logfile: >- raise LogrotateError('No logfile for service %s found.' % (self.service,)) >- if not os.path.exists(os.readlink(logfile)): # readlink -> "/var/log/univention/management-console-server.log" >- raise LogrotateError('%s does not exists (before logrotating) (service=%s)' % (logfile, self.service)) >- >- self.logrotate() >- >- if not os.path.exists(os.readlink(logfile)): # readlink -> "/var/log/univention/management-console-server.log (deleted)" >- raise LogrotateError('Logrotate was executed, the service %s did not reopen the logfile.' % (self.service,)) >- >- >-class UmcServer(LogrotateService): >+ def post(self): >+ for i in xrange(10): >+ if i: >+ sleep(1) >+ new_stat = self.stat() >+ if not os.path.samestat(self.old_stat, new_stat): >+ return >+ raise LogrotateError('Logrotate was executed, the service %s did not reopen the logfile %s.' % ( >+ self.service, logfile)) > >- def __init__(self): >- super(UmcServer, self).__init__('/usr/sbin/univention-management-console-server', '/var/log/univention/management-console-server.log') > >- >-class UmcWebServer(LogrotateService): >- >- def __init__(self): >- super(UmcWebServer, self).__init__('/usr/sbin/univention-management-console-web-server', '/var/log/univention/management-console-web-server.log') >+def logrotate(): >+ cmd = ('logrotate', '-v', '-f', '/etc/logrotate.d/univention-management-console') >+ if call(cmd): >+ raise LogrotateError('logrotate failed: %r' % (cmd,)) > > > def main(): >- for ServiceClass in (UmcServer, UmcWebServer): >- service = ServiceClass() >- try: >- service.main() >- except LogrotateError as exc: >- fail('ERROR: %s' % (exc,)) >+ services = [ >+ LogrotateService('/usr/sbin/univention-management-console-server', '/var/log/univention/management-console-server.log'), >+ LogrotateService('/usr/sbin/univention-management-console-web-server', '/var/log/univention/management-console-web-server.log'), >+ ] >+ try: >+ for service in services: >+ service.pre() >+ logrotate() >+ for service in services: >+ service.post() >+ except LogrotateError as exc: >+ fail('ERROR: %s' % (exc,)) >+ > > if __name__ == '__main__': > main()
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 38143
: 6787