Home | History | Annotate | Download | only in platform_LogDupSuppression
      1 # Copyright 2014 The Chromium OS Authors. All rights reserved.  Use of
      2 # this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import syslog
      6 
      7 from autotest_lib.client.bin import test
      8 from autotest_lib.client.common_lib import error
      9 from autotest_lib.client.common_lib import utils
     10 
     11 class platform_LogDupSuppression(test.test):
     12     """Test that we suppress duplicate messages from one process to syslog"""
     13     DUP_DETECT_SIG = "spam: last message repeated"
     14     NON_SPAM_MSG = 'not spam'
     15     NUM_SPAM_MSGS = 10
     16     SPAM_LOG_PATH = '/var/log/spam.log'
     17     SPAM_MSG = 'SPAM SPAM SPAM'
     18     SYSLOG_BIN = 'rsyslogd'
     19     SYSLOG_OPTS = '-c4'  # allow version 4 commands
     20     SYSLOG_JOB = 'syslog'
     21     version = 1
     22 
     23 
     24     def run_once(self):
     25         syslog.openlog('spam')
     26         try:
     27             utils.run('stop %s' % self.SYSLOG_JOB,
     28                       ignore_status=True)  # might not have been running
     29             utils.run('truncate -s 0 %s' % self.SPAM_LOG_PATH)
     30             utils.run('chown syslog %s' % self.SPAM_LOG_PATH)
     31             utils.run('%s %s -f %s/rsyslog.test' %
     32                       (self.SYSLOG_BIN, self.SYSLOG_OPTS, self.bindir))
     33 
     34             for i in range(self.NUM_SPAM_MSGS):
     35                 syslog.syslog(self.SPAM_MSG)
     36             syslog.syslog(self.NON_SPAM_MSG)
     37 
     38             cmd_result = utils.run(
     39                 'grep "%s" %s' % (self.DUP_DETECT_SIG, self.SPAM_LOG_PATH),
     40                 ignore_status=True)
     41             if cmd_result.exit_status:
     42                 raise error.TestFail(
     43                     'duplicate suppression signature not found')
     44 
     45             spam_count = int(
     46                 utils.run('grep -c "%s" %s' %
     47                           (self.SPAM_MSG, self.SPAM_LOG_PATH)).stdout)
     48             if spam_count != 1:
     49                 raise error.TestFail(
     50                     'got %s spams, expected exactly one' % spam_count)
     51         finally:
     52             utils.run('pkill %s' % self.SYSLOG_BIN)
     53             utils.run('start %s' % self.SYSLOG_JOB)
     54