class SyslogMonitorConnectTest(SyslogMonitorTestCase): @classmethod def setUpClass(cls): # clear the syslog disk logger try: os.remove("agent_syslog.log") except OSError: pass def setUp(self): self.monitor = None self.sockets = [] # capture log output scalyr_logging.set_log_destination(use_stdout=True) scalyr_logging.set_log_level(scalyr_logging.DEBUG_LEVEL_0) self.logger = logging.getLogger("scalyr_agent.builtin_monitors.syslog_monitor.syslog") self.logger.setLevel(logging.INFO) self.stream = StringIO() self.handler = logging.StreamHandler(self.stream) self.logger.addHandler(self.handler) # hide stdout self.old = sys.stdout sys.stdout = StringIO() def tearDown(self): # close any open sockets for s in self.sockets: s.close() # stop any running monitors - this might be open if an exception was thrown before a test called monitor.stop() if self.monitor != None: self.monitor.stop(wait_on_join=False) self.logger.removeHandler(self.handler) self.handler.close() # restore stdout sys.stdout.close() sys.stdout = self.old def connect(self, socket, addr, max_tries=3): connected = False tries = 0 while not connected and tries < max_tries: try: socket.connect(addr) connected = True except: time.sleep(0.1) tries += 1 return connected def test_run_tcp_server(self): config = { 'module': 'scalyr_agent.builtin_monitors.syslog_monitor', 'protocols': 'tcp:8514', } self.monitor = SyslogMonitor(config, self.logger) self.monitor.open_metric_log() self.monitor.start() time.sleep(0.05) s = socket.socket() self.sockets.append(s) expected = "TCP TestXX\n" self.connect(s, ('localhost', 8514)) s.sendall(expected) time.sleep(1) self.monitor.stop(wait_on_join=False) self.monitor = None f = open('agent_syslog.log') actual = f.read().strip() expected = expected.strip() self.assertTrue(expected in actual, "Unable to find '%s' in output:\n\t %s" % (expected, actual)) def test_run_udp_server(self): config = { 'module': 'scalyr_agent.builtin_monitors.syslog_monitor', 'protocols': 'udp:5514', } self.monitor = SyslogMonitor(config, scalyr_logging.getLogger("syslog_monitor[test]")) self.monitor.open_metric_log() self.monitor.start() time.sleep(0.1) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sockets.append(s) expected = "UDP Test %s" % (uuid.uuid4()) s.sendto(expected, ('localhost', 5514)) time.sleep(1) self.monitor.stop(wait_on_join=False) self.monitor = None f = open('agent_syslog.log') actual = f.read().strip() self.assertTrue( expected in actual, "Unable to find '%s' in output:\n\t %s" % (expected, actual) ) def test_run_multiple_servers(self): config = { 'module': 'scalyr_agent.builtin_monitors.syslog_monitor', 'protocols': 'udp:8000, tcp:8001, udp:8002, tcp:8003', } self.monitor = SyslogMonitor(config, scalyr_logging.getLogger("syslog_monitor[test]")) self.monitor.open_metric_log() self.monitor.start() time.sleep(0.05) udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sockets.append(udp) tcp1 = socket.socket() self.sockets.append(tcp1) tcp2 = socket.socket() self.sockets.append(tcp2) self.connect(tcp1, ('localhost', 8001)) self.connect(tcp2, ('localhost', 8003)) expected_udp1 = "UDP Test" udp.sendto(expected_udp1, ('localhost', 8000)) expected_udp2 = "UDP2 Test" udp.sendto(expected_udp2, ('localhost', 8002)) expected_tcp1 = "TCP Test\n" tcp1.sendall(expected_tcp1) expected_tcp2 = "TCP2 Test\n" tcp2.sendall(expected_tcp2) time.sleep(1) self.monitor.stop(wait_on_join=False) self.monitor = None f = open('agent_syslog.log') actual = f.read().strip() expected_tcp1 = expected_tcp1.strip() expected_tcp2 = expected_tcp2.strip() self.assertTrue(expected_udp1 in actual, "Unable to find '%s' in output:\n\t %s" % (expected_udp1, actual)) self.assertTrue(expected_udp2 in actual, "Unable to find '%s' in output:\n\t %s" % (expected_udp2, actual)) self.assertTrue(expected_tcp1 in actual, "Unable to find '%s' in output:\n\t %s" % (expected_tcp1, actual)) self.assertTrue(expected_tcp2 in actual, "Unable to find '%s' in output:\n\t %s" % (expected_tcp2, actual))
class SyslogMonitorConnectTest(SyslogMonitorTestCase): @classmethod def setUpClass(cls): # clear the syslog disk logger try: os.remove("agent_syslog.log") except OSError: pass def setUp(self): self.monitor = None self.sockets = [] # capture log output scalyr_logging.set_log_destination(use_stdout=True) scalyr_logging.set_log_level(scalyr_logging.DEBUG_LEVEL_0) self.logger = logging.getLogger("scalyr_agent.builtin_monitors.syslog_monitor.syslog") self.logger.setLevel(logging.INFO) self.stream = StringIO() self.handler = logging.StreamHandler(self.stream) self.logger.addHandler(self.handler) # hide stdout self.old = sys.stdout sys.stdout = StringIO() def tearDown(self): # close any open sockets for s in self.sockets: s.close() # stop any running monitors - this might be open if an exception was thrown before a test called monitor.stop() if self.monitor != None: self.monitor.stop(wait_on_join=False) self.logger.removeHandler(self.handler) self.handler.close() # restore stdout sys.stdout.close() sys.stdout = self.old def connect(self, socket, addr, max_tries=3): connected = False tries = 0 while not connected and tries < max_tries: try: socket.connect(addr) connected = True except: time.sleep(0.1) tries += 1 return connected def test_run_tcp_server(self): config = { 'module': 'scalyr_agent.builtin_monitors.syslog_monitor', 'protocols': 'tcp:8514', } self.monitor = SyslogMonitor(config, self.logger) self.monitor.open_metric_log() self.monitor.start() time.sleep(0.05) s = socket.socket() self.sockets.append(s) expected = "TCP TestXX\n" self.connect(s, ('localhost', 8514)) s.sendall(expected) time.sleep(1) self.monitor.stop(wait_on_join=False) self.monitor = None f = open('agent_syslog.log') actual = f.read().strip() expected = expected.strip() self.assertTrue(expected in actual, "Unable to find '%s' in output:\n\t %s" % (expected, actual)) def test_run_udp_server(self): config = { 'module': 'scalyr_agent.builtin_monitors.syslog_monitor', 'protocols': 'udp:5514', } self.monitor = SyslogMonitor(config, scalyr_logging.getLogger("syslog_monitor[test]")) self.monitor.open_metric_log() self.monitor.start() time.sleep(0.1) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sockets.append(s) expected = "UDP Test {}".format(uuid.uuid4()) s.sendto(expected, ('localhost', 5514)) time.sleep(1) self.monitor.stop(wait_on_join=False) self.monitor = None f = open('agent_syslog.log') actual = f.read().strip() self.assertTrue( expected in actual, "Unable to find '%s' in output:\n\t %s" % (expected, actual) ) def test_run_multiple_servers(self): config = { 'module': 'scalyr_agent.builtin_monitors.syslog_monitor', 'protocols': 'udp:8000, tcp:8001, udp:8002, tcp:8003', } self.monitor = SyslogMonitor(config, scalyr_logging.getLogger("syslog_monitor[test]")) self.monitor.open_metric_log() self.monitor.start() time.sleep(0.05) udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sockets.append(udp) tcp1 = socket.socket() self.sockets.append(tcp1) tcp2 = socket.socket() self.sockets.append(tcp2) self.connect(tcp1, ('localhost', 8001)) self.connect(tcp2, ('localhost', 8003)) expected_udp1 = "UDP Test" udp.sendto(expected_udp1, ('localhost', 8000)) expected_udp2 = "UDP2 Test" udp.sendto(expected_udp2, ('localhost', 8002)) expected_tcp1 = "TCP Test\n" tcp1.sendall(expected_tcp1) expected_tcp2 = "TCP2 Test\n" tcp2.sendall(expected_tcp2) time.sleep(1) self.monitor.stop(wait_on_join=False) self.monitor = None f = open('agent_syslog.log') actual = f.read().strip() expected_tcp1 = expected_tcp1.strip() expected_tcp2 = expected_tcp2.strip() self.assertTrue(expected_udp1 in actual, "Unable to find '%s' in output:\n\t %s" % (expected_udp1, actual)) self.assertTrue(expected_udp2 in actual, "Unable to find '%s' in output:\n\t %s" % (expected_udp2, actual)) self.assertTrue(expected_tcp1 in actual, "Unable to find '%s' in output:\n\t %s" % (expected_tcp1, actual)) self.assertTrue(expected_tcp2 in actual, "Unable to find '%s' in output:\n\t %s" % (expected_tcp2, actual))