# Copyright 2014 The Chromium OS Authors. All rights reserved. Use of # this source code is governed by a BSD-style license that can be # found in the LICENSE file. import syslog from autotest_lib.client.bin import test from autotest_lib.client.common_lib import error from autotest_lib.client.common_lib import utils class platform_LogDupSuppression(test.test): """Test that we suppress duplicate messages from one process to syslog""" DUP_DETECT_SIG = "spam: last message repeated" NON_SPAM_MSG = 'not spam' NUM_SPAM_MSGS = 10 SPAM_LOG_PATH = '/var/log/spam.log' SPAM_MSG = 'SPAM SPAM SPAM' SYSLOG_BIN = 'rsyslogd' SYSLOG_OPTS = '-c4' # allow version 4 commands SYSLOG_JOB = 'syslog' version = 1 def run_once(self): syslog.openlog('spam') try: utils.run('stop %s' % self.SYSLOG_JOB, ignore_status=True) # might not have been running utils.run('truncate -s 0 %s' % self.SPAM_LOG_PATH) utils.run('chown syslog %s' % self.SPAM_LOG_PATH) utils.run('%s %s -f %s/rsyslog.test' % (self.SYSLOG_BIN, self.SYSLOG_OPTS, self.bindir)) for i in range(self.NUM_SPAM_MSGS): syslog.syslog(self.SPAM_MSG) syslog.syslog(self.NON_SPAM_MSG) cmd_result = utils.run( 'grep "%s" %s' % (self.DUP_DETECT_SIG, self.SPAM_LOG_PATH), ignore_status=True) if cmd_result.exit_status: raise error.TestFail( 'duplicate suppression signature not found') spam_count = int( utils.run('grep -c "%s" %s' % (self.SPAM_MSG, self.SPAM_LOG_PATH)).stdout) if spam_count != 1: raise error.TestFail( 'got %s spams, expected exactly one' % spam_count) finally: utils.run('pkill %s' % self.SYSLOG_BIN) utils.run('start %s' % self.SYSLOG_JOB)